diff --git a/espresso/environment/enclave_helpers.go b/espresso/environment/enclave_helpers.go index e8dfd756529..52baf9bb228 100644 --- a/espresso/environment/enclave_helpers.go +++ b/espresso/environment/enclave_helpers.go @@ -288,7 +288,9 @@ func RegisterEnclaveHash(ctx context.Context, sys *e2esys.System, pcr0Bytes []by if err != nil { return fmt.Errorf("failed to create transactor: %w", err) } - registrationTx, err := nitroVerifier.SetEnclaveHash(opts, crypto.Keccak256Hash(pcr0Bytes), true) + // ServiceType: 0 = BatchPoster, 1 = CaffNode + const serviceTypeBatchPoster uint8 = 0 + registrationTx, err := nitroVerifier.SetEnclaveHash(opts, crypto.Keccak256Hash(pcr0Bytes), true, serviceTypeBatchPoster) if err != nil { return fmt.Errorf("failed to create registration transaction: %w", err) } diff --git a/justfile b/justfile index d7ed4ce0276..ce5d5ecf1d4 100644 --- a/justfile +++ b/justfile @@ -69,9 +69,11 @@ forge_artifacts_dir:="packages/contracts-bedrock/forge-artifacts" bindings_dir:="op-batcher/bindings" gen_bindings_cmd:="./espresso/scripts/gen_bindings.sh" gen-bindings: - {{gen_bindings_cmd}} {{forge_artifacts_dir}}/BatchInbox.sol/BatchInbox.json > ./{{bindings_dir}}/batch_inbox.go - {{gen_bindings_cmd}} {{forge_artifacts_dir}}/BatchAuthenticator.sol/BatchAuthenticator.json > ./{{bindings_dir}}/batch_authenticator.go - {{gen_bindings_cmd}} {{forge_artifacts_dir}}/OPSuccinctFaultDisputeGame.sol/OPSuccinctFaultDisputeGame.json > ./{{bindings_dir}}/opsuccinct_fault_dispute_game.go + {{ gen_bindings_cmd }} {{ forge_artifacts_dir }}/BatchInbox.sol/BatchInbox.json > ./{{ bindings_dir }}/batch_inbox.go + {{ gen_bindings_cmd }} {{ forge_artifacts_dir }}/BatchAuthenticator.sol/BatchAuthenticator.json > ./{{ bindings_dir }}/batch_authenticator.go + {{ gen_bindings_cmd }} {{ forge_artifacts_dir }}/EspressoNitroTEEVerifier.sol/EspressoNitroTEEVerifier.json > ./{{ bindings_dir }}/espresso_nitro_tee_verifier.go + {{ gen_bindings_cmd }} {{ forge_artifacts_dir }}/EspressoTEEVerifier.sol/EspressoTEEVerifier.json > ./{{ bindings_dir }}/espresso_tee_verifier.go + {{ gen_bindings_cmd }} {{ forge_artifacts_dir }}/OPSuccinctFaultDisputeGame.sol/OPSuccinctFaultDisputeGame.json > ./{{ bindings_dir }}/opsuccinct_fault_dispute_game.go smoke-tests: compile-contracts go test -run ^TestEspressoDockerDevNodeSmokeTest$ ./espresso/environment -v diff --git a/op-batcher/bindings/batch_authenticator.go b/op-batcher/bindings/batch_authenticator.go index 62196dab21d..aee045995e0 100644 --- a/op-batcher/bindings/batch_authenticator.go +++ b/op-batcher/bindings/batch_authenticator.go @@ -31,8 +31,8 @@ var ( // BatchAuthenticatorMetaData contains all meta data concerning the BatchAuthenticator contract. var BatchAuthenticatorMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_espressoTEEVerifier\",\"type\":\"address\",\"internalType\":\"contractIEspressoTEEVerifier\"},{\"name\":\"_teeBatcher\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_nonTeeBatcher\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_owner\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"activeIsTee\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"authenticateBatchInfo\",\"inputs\":[{\"name\":\"commitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"espressoTEEVerifier\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIEspressoTEEVerifier\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"nonTeeBatcher\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registerSigner\",\"inputs\":[{\"name\":\"attestationTbs\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"switchBatcher\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"teeBatcher\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"validBatchInfo\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"BatchInfoAuthenticated\",\"inputs\":[{\"name\":\"commitment\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"signer\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SignerRegistrationInitiated\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false}]", - Bin: "0x60e060405234801561000f575f5ffd5b50604051611c58380380611c5883398181016040528101906100319190610358565b61004d6100426101f760201b60201c565b6101fe60201b60201c565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036100bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100b29061043c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610129576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610120906104ca565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff16815250508273ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508173ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050600160025f6101000a81548160ff0219169083151502179055506101ee816101fe60201b60201c565b505050506104e8565b5f33905090565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6102ec826102c3565b9050919050565b5f6102fd826102e2565b9050919050565b61030d816102f3565b8114610317575f5ffd5b50565b5f8151905061032881610304565b92915050565b610337816102e2565b8114610341575f5ffd5b50565b5f815190506103528161032e565b92915050565b5f5f5f5f608085870312156103705761036f6102bf565b5b5f61037d8782880161031a565b945050602061038e87828801610344565b935050604061039f87828801610344565b92505060606103b087828801610344565b91505092959194509250565b5f82825260208201905092915050565b7f426174636841757468656e74696361746f723a207a65726f20746565206261745f8201527f6368657200000000000000000000000000000000000000000000000000000000602082015250565b5f6104266024836103bc565b9150610431826103cc565b604082019050919050565b5f6020820190508181035f8301526104538161041a565b9050919050565b7f426174636841757468656e74696361746f723a207a65726f206e6f6e2d7465655f8201527f2062617463686572000000000000000000000000000000000000000000000000602082015250565b5f6104b46028836103bc565b91506104bf8261045a565b604082019050919050565b5f6020820190508181035f8301526104e1816104a8565b9050919050565b60805160a05160c0516117316105275f395f81816102ad0152818161047a015261063801525f61028901525f81816103b7015261074401526117315ff3fe608060405234801561000f575f5ffd5b50600436106100b2575f3560e01c8063bc347f471161006f578063bc347f4714610154578063d909ba7c1461015e578063f2fde38b1461017c578063f81f208314610198578063fa14fe6d146101c8578063fc619e41146101e6576100b2565b806354fd4d50146100b6578063715018a6146100d45780637877a9ed146100de5780638da5cb5b146100fc578063b1bd42851461011a578063ba58e82a14610138575b5f5ffd5b6100be610202565b6040516100cb9190610d3a565b60405180910390f35b6100dc61023b565b005b6100e661024e565b6040516100f39190610d74565b60405180910390f35b610104610260565b6040516101119190610dcc565b60405180910390f35b610122610287565b60405161012f9190610dcc565b60405180910390f35b610152600480360381019061014d9190610e4e565b6102ab565b005b61015c610383565b005b6101666103b5565b6040516101739190610dcc565b60405180910390f35b61019660048036038101906101919190610ef6565b6103d9565b005b6101b260048036038101906101ad9190610f54565b61045b565b6040516101bf9190610d74565b60405180910390f35b6101d0610478565b6040516101dd9190610fda565b60405180910390f35b61020060048036038101906101fb9190610ff3565b61049c565b005b6040518060400160405280600581526020017f312e302e3000000000000000000000000000000000000000000000000000000081525081565b610243610847565b61024c5f6108c5565b565b60025f9054906101000a900460ff1681565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166335ecb4c18585858560016040518663ffffffff1660e01b815260040161030d95949392919061110d565b5f604051808303815f87803b158015610324575f5ffd5b505af1158015610336573d5f5f3e3d5ffd5b505050503373ffffffffffffffffffffffffffffffffffffffff167f665b016a0ac50d1280744eaaff1cf21254d0fd30e4c3987d291913c32163416c60405160405180910390a250505050565b61038b610847565b60025f9054906101000a900460ff161560025f6101000a81548160ff021916908315150217905550565b7f000000000000000000000000000000000000000000000000000000000000000081565b6103e1610847565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361044f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610446906111c4565b60405180910390fd5b610458816108c5565b50565b6001602052805f5260405f205f915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f82828080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f8201169050808301925050505050505090506041815114610527576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161051e9061122c565b60405180910390fd5b5f8160408151811061053c5761053b61124a565b5b602001015160f81c60f81b60f81c90505f8160ff161480610560575060018160ff16145b156105bb57601b8161057291906112b0565b90508060f81b8260408151811061058c5761058b61124a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505b5f6105c68684610986565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610636576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062d9061132e565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d80a4c286040518163ffffffff1660e01b8152600401602060405180830381865afa15801561069f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106c39190611387565b73ffffffffffffffffffffffffffffffffffffffff16630123d0c1826040518263ffffffff1660e01b81526004016106fb9190610dcc565b602060405180830381865afa158015610716573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061073a91906113dc565b15801561079357507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b156107d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca90611451565b60405180910390fd5b6001805f8881526020019081526020015f205f6101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff16867f731978a77d438b0ea35a9034fb28d9cf9372e1649f18c213110adcfab65c5c5c60405160405180910390a3505050505050565b61084f6109ab565b73ffffffffffffffffffffffffffffffffffffffff1661086d610260565b73ffffffffffffffffffffffffffffffffffffffff16146108c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ba906114b9565b60405180910390fd5b565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f5f5f61099385856109b2565b915091506109a0816109fe565b819250505092915050565b5f33905090565b5f5f60418351036109ef575f5f5f602086015192506040860151915060608601515f1a90506109e387828585610bc9565b945094505050506109f7565b5f6002915091505b9250929050565b5f6004811115610a1157610a1061109a565b5b816004811115610a2457610a2361109a565b5b0315610bc65760016004811115610a3e57610a3d61109a565b5b816004811115610a5157610a5061109a565b5b03610a91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8890611521565b60405180910390fd5b60026004811115610aa557610aa461109a565b5b816004811115610ab857610ab761109a565b5b03610af8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aef90611589565b60405180910390fd5b60036004811115610b0c57610b0b61109a565b5b816004811115610b1f57610b1e61109a565b5b03610b5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5690611617565b60405180910390fd5b600480811115610b7257610b7161109a565b5b816004811115610b8557610b8461109a565b5b03610bc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbc906116a5565b60405180910390fd5b5b50565b5f5f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0835f1c1115610c01575f600391509150610cc1565b601b8560ff1614158015610c195750601c8560ff1614155b15610c2a575f600491509150610cc1565b5f6001878787876040515f8152602001604052604051610c4d94939291906116e1565b6020604051602081039080840390855afa158015610c6d573d5f5f3e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610cb9575f60019250925050610cc1565b805f92509250505b94509492505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f610d0c82610cca565b610d168185610cd4565b9350610d26818560208601610ce4565b610d2f81610cf2565b840191505092915050565b5f6020820190508181035f830152610d528184610d02565b905092915050565b5f8115159050919050565b610d6e81610d5a565b82525050565b5f602082019050610d875f830184610d65565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610db682610d8d565b9050919050565b610dc681610dac565b82525050565b5f602082019050610ddf5f830184610dbd565b92915050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f840112610e0e57610e0d610ded565b5b8235905067ffffffffffffffff811115610e2b57610e2a610df1565b5b602083019150836001820283011115610e4757610e46610df5565b5b9250929050565b5f5f5f5f60408587031215610e6657610e65610de5565b5b5f85013567ffffffffffffffff811115610e8357610e82610de9565b5b610e8f87828801610df9565b9450945050602085013567ffffffffffffffff811115610eb257610eb1610de9565b5b610ebe87828801610df9565b925092505092959194509250565b610ed581610dac565b8114610edf575f5ffd5b50565b5f81359050610ef081610ecc565b92915050565b5f60208284031215610f0b57610f0a610de5565b5b5f610f1884828501610ee2565b91505092915050565b5f819050919050565b610f3381610f21565b8114610f3d575f5ffd5b50565b5f81359050610f4e81610f2a565b92915050565b5f60208284031215610f6957610f68610de5565b5b5f610f7684828501610f40565b91505092915050565b5f819050919050565b5f610fa2610f9d610f9884610d8d565b610f7f565b610d8d565b9050919050565b5f610fb382610f88565b9050919050565b5f610fc482610fa9565b9050919050565b610fd481610fba565b82525050565b5f602082019050610fed5f830184610fcb565b92915050565b5f5f5f6040848603121561100a57611009610de5565b5b5f61101786828701610f40565b935050602084013567ffffffffffffffff81111561103857611037610de9565b5b61104486828701610df9565b92509250509250925092565b5f82825260208201905092915050565b828183375f83830152505050565b5f6110798385611050565b9350611086838584611060565b61108f83610cf2565b840190509392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b600281106110d8576110d761109a565b5b50565b5f8190506110e8826110c7565b919050565b5f6110f7826110db565b9050919050565b611107816110ed565b82525050565b5f6060820190508181035f83015261112681878961106e565b9050818103602083015261113b81858761106e565b905061114a60408301846110fe565b9695505050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6111ae602683610cd4565b91506111b982611154565b604082019050919050565b5f6020820190508181035f8301526111db816111a2565b9050919050565b7f496e76616c6964207369676e6174757265206c656e67746800000000000000005f82015250565b5f611216601883610cd4565b9150611221826111e2565b602082019050919050565b5f6020820190508181035f8301526112438161120a565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f60ff82169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6112ba82611277565b91506112c583611277565b9250828201905060ff8111156112de576112dd611283565b5b92915050565b7f496e76616c6964207369676e61747572650000000000000000000000000000005f82015250565b5f611318601183610cd4565b9150611323826112e4565b602082019050919050565b5f6020820190508181035f8301526113458161130c565b9050919050565b5f61135682610dac565b9050919050565b6113668161134c565b8114611370575f5ffd5b50565b5f815190506113818161135d565b92915050565b5f6020828403121561139c5761139b610de5565b5b5f6113a984828501611373565b91505092915050565b6113bb81610d5a565b81146113c5575f5ffd5b50565b5f815190506113d6816113b2565b92915050565b5f602082840312156113f1576113f0610de5565b5b5f6113fe848285016113c8565b91505092915050565b7f496e76616c6964207369676e65720000000000000000000000000000000000005f82015250565b5f61143b600e83610cd4565b915061144682611407565b602082019050919050565b5f6020820190508181035f8301526114688161142f565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6114a3602083610cd4565b91506114ae8261146f565b602082019050919050565b5f6020820190508181035f8301526114d081611497565b9050919050565b7f45434453413a20696e76616c6964207369676e617475726500000000000000005f82015250565b5f61150b601883610cd4565b9150611516826114d7565b602082019050919050565b5f6020820190508181035f830152611538816114ff565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e677468005f82015250565b5f611573601f83610cd4565b915061157e8261153f565b602082019050919050565b5f6020820190508181035f8301526115a081611567565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c5f8201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b5f611601602283610cd4565b915061160c826115a7565b604082019050919050565b5f6020820190508181035f83015261162e816115f5565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c5f8201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b5f61168f602283610cd4565b915061169a82611635565b604082019050919050565b5f6020820190508181035f8301526116bc81611683565b9050919050565b6116cc81610f21565b82525050565b6116db81611277565b82525050565b5f6080820190506116f45f8301876116c3565b61170160208301866116d2565b61170e60408301856116c3565b61171b60608301846116c3565b9594505050505056fea164736f6c634300081c000a", + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"GUARDIAN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"acceptOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"activeIsTee\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"addGuardian\",\"inputs\":[{\"name\":\"guardian\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"authenticateBatchInfo\",\"inputs\":[{\"name\":\"commitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"espressoTEEVerifier\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIEspressoTEEVerifier\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getGuardians\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleMember\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleMemberCount\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleMembers\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"guardianCount\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_espressoTEEVerifier\",\"type\":\"address\",\"internalType\":\"contractIEspressoTEEVerifier\"},{\"name\":\"_teeBatcher\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_nonTeeBatcher\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_owner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isGuardian\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"nonTeeBatcher\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pendingOwner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registerSigner\",\"inputs\":[{\"name\":\"attestationTbs\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeGuardian\",\"inputs\":[{\"name\":\"guardian\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"switchBatcher\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"teeBatcher\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"validBatchInfo\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validateBatch\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"BatchInfoAuthenticated\",\"inputs\":[{\"name\":\"commitment\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"signer\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"GuardianAdded\",\"inputs\":[{\"name\":\"guardian\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"GuardianRemoved\",\"inputs\":[{\"name\":\"guardian\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferStarted\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SignerRegistrationInitiated\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidGuardianAddress\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotGuardian\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"NotGuardianOrOwner\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OwnableInvalidOwner\",\"inputs\":[{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"OwnableUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]}]", + Bin: "0x60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff16815250348015610042575f5ffd5b5061005161005660201b60201c565b6101d1565b5f61006561015460201b60201c565b9050805f0160089054906101000a900460ff16156100af576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff8016815f015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff16146101515767ffffffffffffffff815f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d267ffffffffffffffff60405161014891906101b8565b60405180910390a15b50565b5f5f61016461016d60201b60201c565b90508091505090565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005f1b905090565b5f67ffffffffffffffff82169050919050565b6101b281610196565b82525050565b5f6020820190506101cb5f8301846101a9565b92915050565b60805161493b6101f75f395f8181611a4101528181611a960152611c50015261493b5ff3fe608060405260043610610203575f3560e01c806391a1a35d11610117578063ca15c8731161009f578063f2fde38b1161006e578063f2fde38b14610719578063f81f208314610741578063f8c8765e1461077d578063fa14fe6d146107a5578063fc619e41146107cf57610203565b8063ca15c87314610661578063d547741f1461069d578063d909ba7c146106c5578063e30c3978146106ef57610203565b8063a526d83b116100e6578063a526d83b146105a7578063ad3cb1cc146105cf578063b1bd4285146105f9578063ba58e82a14610623578063bc347f471461064b57610203565b806391a1a35d146104dd57806391d1485414610505578063a217fddf14610541578063a3246ad31461056b57610203565b806352d1902d1161019a578063715018a611610169578063715018a6146104215780637877a9ed1461043757806379ba5097146104615780638da5cb5b146104775780639010d07c146104a157610203565b806352d1902d1461037b57806354387ad7146103a557806354fd4d50146103cf57806371404156146103f957610203565b806324ea54f4116101d657806324ea54f4146102e55780632f2ff15d1461030f57806336568abe146103375780634f1ef2861461035f57610203565b806301ffc9a7146102075780630665f04b146102435780630c68ba211461026d578063248a9ca3146102a9575b5f5ffd5b348015610212575f5ffd5b5061022d6004803603810190610228919061336b565b6107f7565b60405161023a91906133b0565b60405180910390f35b34801561024e575f5ffd5b50610257610870565b60405161026491906134b0565b60405180910390f35b348015610278575f5ffd5b50610293600480360381019061028e91906134fa565b610984565b6040516102a091906133b0565b60405180910390f35b3480156102b4575f5ffd5b506102cf60048036038101906102ca9190613558565b6109b6565b6040516102dc9190613592565b60405180910390f35b3480156102f0575f5ffd5b506102f96109e0565b6040516103069190613592565b60405180910390f35b34801561031a575f5ffd5b50610335600480360381019061033091906135ab565b610a04565b005b348015610342575f5ffd5b5061035d600480360381019061035891906135ab565b610a26565b005b61037960048036038101906103749190613725565b610aa1565b005b348015610386575f5ffd5b5061038f610ac0565b60405161039c9190613592565b60405180910390f35b3480156103b0575f5ffd5b506103b9610af1565b6040516103c69190613797565b60405180910390f35b3480156103da575f5ffd5b506103e3610b20565b6040516103f09190613810565b60405180910390f35b348015610404575f5ffd5b5061041f600480360381019061041a91906134fa565b610b59565b005b34801561042c575f5ffd5b50610435610c01565b005b348015610442575f5ffd5b5061044b610c14565b60405161045891906133b0565b60405180910390f35b34801561046c575f5ffd5b50610475610c27565b005b348015610482575f5ffd5b5061048b610cb5565b604051610498919061383f565b60405180910390f35b3480156104ac575f5ffd5b506104c760048036038101906104c29190613882565b610cea565b6040516104d4919061383f565b60405180910390f35b3480156104e8575f5ffd5b5061050360048036038101906104fe919061391d565b610d23565b005b348015610510575f5ffd5b5061052b600480360381019061052691906135ab565b610d57565b60405161053891906133b0565b60405180910390f35b34801561054c575f5ffd5b50610555610dc8565b6040516105629190613592565b60405180910390f35b348015610576575f5ffd5b50610591600480360381019061058c9190613558565b610dce565b60405161059e91906134b0565b60405180910390f35b3480156105b2575f5ffd5b506105cd60048036038101906105c891906134fa565b610dfd565b005b3480156105da575f5ffd5b506105e3610f09565b6040516105f09190613810565b60405180910390f35b348015610604575f5ffd5b5061060d610f42565b60405161061a919061383f565b60405180910390f35b34801561062e575f5ffd5b506106496004803603810190610644919061397a565b610f67565b005b348015610656575f5ffd5b5061065f611042565b005b34801561066c575f5ffd5b5061068760048036038101906106829190613558565b61111a565b6040516106949190613797565b60405180910390f35b3480156106a8575f5ffd5b506106c360048036038101906106be91906135ab565b611148565b005b3480156106d0575f5ffd5b506106d961116a565b6040516106e6919061383f565b60405180910390f35b3480156106fa575f5ffd5b5061070361118f565b604051610710919061383f565b60405180910390f35b348015610724575f5ffd5b5061073f600480360381019061073a91906134fa565b6111c4565b005b34801561074c575f5ffd5b5061076760048036038101906107629190613558565b61127d565b60405161077491906133b0565b60405180910390f35b348015610788575f5ffd5b506107a3600480360381019061079e9190613a33565b611299565b005b3480156107b0575f5ffd5b506107b96115d4565b6040516107c69190613af2565b60405180910390f35b3480156107da575f5ffd5b506107f560048036038101906107f09190613b0b565b6115f9565b005b5f7f5a05180f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108695750610868826118e4565b5b9050919050565b60605f61089c7f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a504161111a565b90505f8167ffffffffffffffff8111156108b9576108b8613601565b5b6040519080825280602002602001820160405280156108e75781602001602082028036833780820191505090505b5090505f5f90505b8281101561097b576109217f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a504182610cea565b82828151811061093457610933613b68565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505080806001019150506108ef565b50809250505090565b5f6109af7f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a504183610d57565b9050919050565b5f5f6109c061195d565b9050805f015f8481526020019081526020015f2060010154915050919050565b7f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a504181565b610a0d826109b6565b610a1681611984565b610a208383611998565b50505050565b610a2e6119e8565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610a92576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a9c82826119ef565b505050565b610aa9611a3f565b610ab282611b25565b610abc8282611b30565b5050565b5f610ac9611c4e565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b905090565b5f610b1b7f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a504161111a565b905090565b6040518060400160405280600581526020017f312e302e3000000000000000000000000000000000000000000000000000000081525081565b610b61611cd5565b610b8b7f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a504182610d57565b15610bfe57610bba7f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a504182611148565b8073ffffffffffffffffffffffffffffffffffffffff167fb8107d0c6b40be480ce3172ee66ba6d64b71f6b1685a851340036e6e2e3e3c5260405160405180910390a25b50565b610c09611cd5565b610c125f611d5c565b565b600360149054906101000a900460ff1681565b5f610c306119e8565b90508073ffffffffffffffffffffffffffffffffffffffff16610c5161118f565b73ffffffffffffffffffffffffffffffffffffffff1614610ca957806040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610ca0919061383f565b60405180910390fd5b610cb281611d5c565b50565b5f5f610cbf611dc2565b9050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691505090565b5f5f610cf4611de9565b9050610d1a83825f015f8781526020019081526020015f20611e1090919063ffffffff16565b91505092915050565b600360149054906101000a900460ff1615610d4857610d43838383611e27565b610d52565b610d51836120c8565b5b505050565b5f5f610d6161195d565b9050805f015f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1691505092915050565b5f5f1b81565b60605f610dd9611de9565b9050610df5815f015f8581526020019081526020015f206121e0565b915050919050565b610e05611cd5565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e6a576040517f1b08105400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e947f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a504182610d57565b610f0657610ec27f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a504182610a04565b8073ffffffffffffffffffffffffffffffffffffffff167f038596bb31e2e7d3d9f184d4c98b310103f6d7f5830e5eec32bffe6f1728f96960405160405180910390a25b50565b6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637f82ea6c8585858560015f6040518763ffffffff1660e01b8152600401610fcc96959493929190613c8a565b5f604051808303815f87803b158015610fe3575f5ffd5b505af1158015610ff5573d5f5f3e3d5ffd5b505050503373ffffffffffffffffffffffffffffffffffffffff167f665b016a0ac50d1280744eaaff1cf21254d0fd30e4c3987d291913c32163416c60405160405180910390a250505050565b61106c7f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a504133610d57565b1580156110ac575061107c610cb5565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b156110ee57336040517fd53780c40000000000000000000000000000000000000000000000000000000081526004016110e5919061383f565b60405180910390fd5b600360149054906101000a900460ff1615600360146101000a81548160ff021916908315150217905550565b5f5f611124611de9565b9050611140815f015f8581526020019081526020015f206121ff565b915050919050565b611151826109b6565b61115a81611984565b61116483836119ef565b50505050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f5f611199612212565b9050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691505090565b6111cc611cd5565b5f6111d5612212565b905081815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff16611237610cb5565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b5f602052805f5260405f205f915054906101000a900460ff1681565b5f6112a2612239565b90505f815f0160089054906101000a900460ff161590505f825f015f9054906101000a900467ffffffffffffffff1690505f5f8267ffffffffffffffff161480156112ea5750825b90505f60018367ffffffffffffffff1614801561131d57505f3073ffffffffffffffffffffffffffffffffffffffff163b145b90508115801561132b575080155b15611362576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001855f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083156113af576001855f0160086101000a81548160ff0219169083151502179055505b5f73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff160361141d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141490613d4f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff160361148b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148290613ddd565b60405180910390fd5b6114948661224c565b8860035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508760015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508660025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600360146101000a81548160ff02191690831515021790555083156115c9575f855f0160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d260016040516115c09190613e47565b60405180910390a15b505050505050505050565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f82828080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f8201169050808301925050505050505090506041815114611684576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167b90613eaa565b60405180910390fd5b5f8160408151811061169957611698613b68565b5b602001015160f81c60f81b60f81c90505f8160ff1614806116bd575060018160ff16145b1561171857601b816116cf9190613f01565b90508060f81b826040815181106116e9576116e8613b68565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505b5f6117238684612281565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611793576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178a90613fa5565b60405180910390fd5b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663862e23458260015f6040518463ffffffff1660e01b81526004016117f293929190613fc3565b602060405180830381865afa15801561180d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118319190614022565b611870576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611867906140bd565b60405180910390fd5b60015f5f8881526020019081526020015f205f6101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff16867f731978a77d438b0ea35a9034fb28d9cf9372e1649f18c213110adcfab65c5c5c60405160405180910390a3505050505050565b5f7f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806119565750611955826122a6565b5b9050919050565b5f7f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800905090565b611995816119906119e8565b61230f565b50565b5f5f6119a2611de9565b90505f6119af8585612360565b905080156119dd576119db84835f015f8881526020019081526020015f2061245890919063ffffffff16565b505b809250505092915050565b5f33905090565b5f5f6119f9611de9565b90505f611a068585612485565b90508015611a3457611a3284835f015f8881526020019081526020015f2061257d90919063ffffffff16565b505b809250505092915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161480611aec57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16611ad36125aa565b73ffffffffffffffffffffffffffffffffffffffff1614155b15611b23576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b611b2d611cd5565b50565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611b9857506040513d601f19601f82011682018060405250810190611b9591906140ef565b60015b611bd957816040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401611bd0919061383f565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b8114611c3f57806040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600401611c369190613592565b60405180910390fd5b611c4983836125fd565b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614611cd3576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b611cdd6119e8565b73ffffffffffffffffffffffffffffffffffffffff16611cfb610cb5565b73ffffffffffffffffffffffffffffffffffffffff1614611d5a57611d1e6119e8565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401611d51919061383f565b60405180910390fd5b565b5f611d65610cb5565b9050611d708261266f565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611db157611daf5f5f1b826119ef565b505b611dbd5f5f1b83611998565b505050565b5f7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300905090565b5f7fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000905090565b5f611e1d835f01836126ac565b5f1c905092915050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611eb960015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660146126d3565b611eda8573ffffffffffffffffffffffffffffffffffffffff1660146126d3565b604051602001611eeb929190614234565b60405160208183030381529060405290611f3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f329190613810565b60405180910390fd5b505f5f5f1b5f491461204b575f5f67ffffffffffffffff811115611f6257611f61613601565b5b6040519080825280601f01601f191660200182016040528015611f945781602001600182028036833780820191505090505b5090505f5f90505b5f5f1b814914611fde57818149604051602001611fba9291906142d1565b60405160208183030381529060405291508080611fd6906142f8565b915050611f9c565b818051906020012092505f5f8481526020019081526020015f205f9054906101000a900460ff16612044576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203b906143af565b60405180910390fd5b50506120c2565b828260405161205b9291906143f1565b604051809103902090505f5f8281526020019081526020015f205f9054906101000a900460ff166120c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b890614479565b60405180910390fd5b5b50505050565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461215a60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660146126d3565b61217b8373ffffffffffffffffffffffffffffffffffffffff1660146126d3565b60405160200161218c92919061452d565b604051602081830303815290604052906121dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d39190613810565b60405180910390fd5b5050565b60605f6121ee835f01612908565b905060608190508092505050919050565b5f61220b825f01612961565b9050919050565b5f7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00905090565b5f5f612243612970565b90508091505090565b612254612999565b61225d816129d9565b6122656129ed565b61226d6129f7565b612275612a01565b61227e81612a0b565b50565b5f5f5f61228e8585612a4f565b9150915061229b81612a9b565b819250505092915050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6123198282610d57565b61235c5780826040517fe2517d3f000000000000000000000000000000000000000000000000000000008152600401612353929190614566565b60405180910390fd5b5050565b5f5f61236a61195d565b90506123768484610d57565b61244d576001815f015f8681526020019081526020015f205f015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506123e96119e8565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050612452565b5f9150505b92915050565b5f61247d835f018373ffffffffffffffffffffffffffffffffffffffff165f1b612c66565b905092915050565b5f5f61248f61195d565b905061249b8484610d57565b15612572575f815f015f8681526020019081526020015f205f015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555061250e6119e8565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16857ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a46001915050612577565b5f9150505b92915050565b5f6125a2835f018373ffffffffffffffffffffffffffffffffffffffff165f1b612ccd565b905092915050565b5f6125d67f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b612dc9565b5f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61260682612dd2565b8173ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a25f815111156126625761265c8282612e9b565b5061266b565b61266a612f8c565b5b5050565b5f612678612212565b9050805f015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556126a882612fc8565b5050565b5f825f0182815481106126c2576126c1613b68565b5b905f5260205f200154905092915050565b60605f60028360026126e5919061458d565b6126ef91906145ce565b67ffffffffffffffff81111561270857612707613601565b5b6040519080825280601f01601f19166020018201604052801561273a5781602001600182028036833780820191505090505b5090507f3000000000000000000000000000000000000000000000000000000000000000815f8151811061277157612770613b68565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106127d4576127d3613b68565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f6001846002612812919061458d565b61281c91906145ce565b90505b60018111156128bb577f3031323334353637383961626364656600000000000000000000000000000000600f86166010811061285e5761285d613b68565b5b1a60f81b82828151811061287557612874613b68565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600485901c9450806128b490614601565b905061281f565b505f84146128fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f590614672565b60405180910390fd5b8091505092915050565b6060815f0180548060200260200160405190810160405280929190818152602001828054801561295557602002820191905f5260205f20905b815481526020019060010190808311612941575b50505050509050919050565b5f815f01805490509050919050565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005f1b905090565b6129a1613099565b6129d7576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6129e1612999565b6129ea816130b7565b50565b6129f5612999565b565b6129ff612999565b565b612a09612999565b565b612a13612999565b612a1f5f5f1b82611998565b50612a4c7f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a50415f5f1b61313b565b50565b5f5f6041835103612a8c575f5f5f602086015192506040860151915060608601515f1a9050612a80878285856131a1565b94509450505050612a94565b5f6002915091505b9250929050565b5f6004811115612aae57612aad613bd1565b5b816004811115612ac157612ac0613bd1565b5b0315612c635760016004811115612adb57612ada613bd1565b5b816004811115612aee57612aed613bd1565b5b03612b2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b25906146da565b60405180910390fd5b60026004811115612b4257612b41613bd1565b5b816004811115612b5557612b54613bd1565b5b03612b95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8c90614742565b60405180910390fd5b60036004811115612ba957612ba8613bd1565b5b816004811115612bbc57612bbb613bd1565b5b03612bfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf3906147d0565b60405180910390fd5b600480811115612c0f57612c0e613bd1565b5b816004811115612c2257612c21613bd1565b5b03612c62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c599061485e565b60405180910390fd5b5b50565b5f612c7183836132a2565b612cc357825f0182908060018154018082558091505060019003905f5260205f20015f9091909190915055825f0180549050836001015f8481526020019081526020015f208190555060019050612cc7565b5f90505b92915050565b5f5f836001015f8481526020019081526020015f205490505f8114612dbe575f600182612cfa919061487c565b90505f6001865f0180549050612d10919061487c565b9050808214612d76575f865f018281548110612d2f57612d2e613b68565b5b905f5260205f200154905080875f018481548110612d5057612d4f613b68565b5b905f5260205f20018190555083876001015f8381526020019081526020015f2081905550505b855f01805480612d8957612d886148af565b5b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050612dc3565b5f9150505b92915050565b5f819050919050565b5f8173ffffffffffffffffffffffffffffffffffffffff163b03612e2d57806040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401612e24919061383f565b60405180910390fd5b80612e597f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b612dc9565b5f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60605f612ea884846132c2565b9050808015612ede57505f612ebb6132d6565b1180612edd57505f8473ffffffffffffffffffffffffffffffffffffffff163b115b5b15612ef357612eeb6132dd565b915050612f86565b8015612f3657836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401612f2d919061383f565b60405180910390fd5b5f612f3f6132d6565b1115612f5257612f4d6132fa565b612f84565b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b92915050565b5f341115612fc6576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f612fd1611dc2565b90505f815f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082825f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505050565b5f6130a2612239565b5f0160089054906101000a900460ff16905090565b6130bf612999565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361312f575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401613126919061383f565b60405180910390fd5b61313881611d5c565b50565b5f61314461195d565b90505f613150846109b6565b905082825f015f8681526020019081526020015f20600101819055508281857fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff60405160405180910390a450505050565b5f5f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0835f1c11156131d9575f600391509150613299565b601b8560ff16141580156131f15750601c8560ff1614155b15613202575f600491509150613299565b5f6001878787876040515f815260200160405260405161322594939291906148eb565b6020604051602081039080840390855afa158015613245573d5f5f3e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613291575f60019250925050613299565b805f92509250505b94509492505050565b5f5f836001015f8481526020019081526020015f20541415905092915050565b5f5f5f835160208501865af4905092915050565b5f3d905090565b606060405190503d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b5f604051905090565b5f5ffd5b5f5ffd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61334a81613316565b8114613354575f5ffd5b50565b5f8135905061336581613341565b92915050565b5f602082840312156133805761337f61330e565b5b5f61338d84828501613357565b91505092915050565b5f8115159050919050565b6133aa81613396565b82525050565b5f6020820190506133c35f8301846133a1565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61341b826133f2565b9050919050565b61342b81613411565b82525050565b5f61343c8383613422565b60208301905092915050565b5f602082019050919050565b5f61345e826133c9565b61346881856133d3565b9350613473836133e3565b805f5b838110156134a357815161348a8882613431565b975061349583613448565b925050600181019050613476565b5085935050505092915050565b5f6020820190508181035f8301526134c88184613454565b905092915050565b6134d981613411565b81146134e3575f5ffd5b50565b5f813590506134f4816134d0565b92915050565b5f6020828403121561350f5761350e61330e565b5b5f61351c848285016134e6565b91505092915050565b5f819050919050565b61353781613525565b8114613541575f5ffd5b50565b5f813590506135528161352e565b92915050565b5f6020828403121561356d5761356c61330e565b5b5f61357a84828501613544565b91505092915050565b61358c81613525565b82525050565b5f6020820190506135a55f830184613583565b92915050565b5f5f604083850312156135c1576135c061330e565b5b5f6135ce85828601613544565b92505060206135df858286016134e6565b9150509250929050565b5f5ffd5b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b613637826135f1565b810181811067ffffffffffffffff8211171561365657613655613601565b5b80604052505050565b5f613668613305565b9050613674828261362e565b919050565b5f67ffffffffffffffff82111561369357613692613601565b5b61369c826135f1565b9050602081019050919050565b828183375f83830152505050565b5f6136c96136c484613679565b61365f565b9050828152602081018484840111156136e5576136e46135ed565b5b6136f08482856136a9565b509392505050565b5f82601f83011261370c5761370b6135e9565b5b813561371c8482602086016136b7565b91505092915050565b5f5f6040838503121561373b5761373a61330e565b5b5f613748858286016134e6565b925050602083013567ffffffffffffffff81111561376957613768613312565b5b613775858286016136f8565b9150509250929050565b5f819050919050565b6137918161377f565b82525050565b5f6020820190506137aa5f830184613788565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f6137e2826137b0565b6137ec81856137ba565b93506137fc8185602086016137ca565b613805816135f1565b840191505092915050565b5f6020820190508181035f83015261382881846137d8565b905092915050565b61383981613411565b82525050565b5f6020820190506138525f830184613830565b92915050565b6138618161377f565b811461386b575f5ffd5b50565b5f8135905061387c81613858565b92915050565b5f5f604083850312156138985761389761330e565b5b5f6138a585828601613544565b92505060206138b68582860161386e565b9150509250929050565b5f5ffd5b5f5ffd5b5f5f83601f8401126138dd576138dc6135e9565b5b8235905067ffffffffffffffff8111156138fa576138f96138c0565b5b602083019150836001820283011115613916576139156138c4565b5b9250929050565b5f5f5f604084860312156139345761393361330e565b5b5f613941868287016134e6565b935050602084013567ffffffffffffffff81111561396257613961613312565b5b61396e868287016138c8565b92509250509250925092565b5f5f5f5f604085870312156139925761399161330e565b5b5f85013567ffffffffffffffff8111156139af576139ae613312565b5b6139bb878288016138c8565b9450945050602085013567ffffffffffffffff8111156139de576139dd613312565b5b6139ea878288016138c8565b925092505092959194509250565b5f613a0282613411565b9050919050565b613a12816139f8565b8114613a1c575f5ffd5b50565b5f81359050613a2d81613a09565b92915050565b5f5f5f5f60808587031215613a4b57613a4a61330e565b5b5f613a5887828801613a1f565b9450506020613a69878288016134e6565b9350506040613a7a878288016134e6565b9250506060613a8b878288016134e6565b91505092959194509250565b5f819050919050565b5f613aba613ab5613ab0846133f2565b613a97565b6133f2565b9050919050565b5f613acb82613aa0565b9050919050565b5f613adc82613ac1565b9050919050565b613aec81613ad2565b82525050565b5f602082019050613b055f830184613ae3565b92915050565b5f5f5f60408486031215613b2257613b2161330e565b5b5f613b2f86828701613544565b935050602084013567ffffffffffffffff811115613b5057613b4f613312565b5b613b5c868287016138c8565b92509250509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82825260208201905092915050565b5f613bb08385613b95565b9350613bbd8385846136a9565b613bc6836135f1565b840190509392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60028110613c0f57613c0e613bd1565b5b50565b5f819050613c1f82613bfe565b919050565b5f613c2e82613c12565b9050919050565b613c3e81613c24565b82525050565b60028110613c5557613c54613bd1565b5b50565b5f819050613c6582613c44565b919050565b5f613c7482613c58565b9050919050565b613c8481613c6a565b82525050565b5f6080820190508181035f830152613ca381888a613ba5565b90508181036020830152613cb8818688613ba5565b9050613cc76040830185613c35565b613cd46060830184613c7b565b979650505050505050565b7f426174636841757468656e74696361746f723a207a65726f20746565206261745f8201527f6368657200000000000000000000000000000000000000000000000000000000602082015250565b5f613d396024836137ba565b9150613d4482613cdf565b604082019050919050565b5f6020820190508181035f830152613d6681613d2d565b9050919050565b7f426174636841757468656e74696361746f723a207a65726f206e6f6e2d7465655f8201527f2062617463686572000000000000000000000000000000000000000000000000602082015250565b5f613dc76028836137ba565b9150613dd282613d6d565b604082019050919050565b5f6020820190508181035f830152613df481613dbb565b9050919050565b5f819050919050565b5f67ffffffffffffffff82169050919050565b5f613e31613e2c613e2784613dfb565b613a97565b613e04565b9050919050565b613e4181613e17565b82525050565b5f602082019050613e5a5f830184613e38565b92915050565b7f496e76616c6964207369676e6174757265206c656e67746800000000000000005f82015250565b5f613e946018836137ba565b9150613e9f82613e60565b602082019050919050565b5f6020820190508181035f830152613ec181613e88565b9050919050565b5f60ff82169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613f0b82613ec8565b9150613f1683613ec8565b9250828201905060ff811115613f2f57613f2e613ed4565b5b92915050565b7f426174636841757468656e74696361746f723a20696e76616c6964207369676e5f8201527f6174757265000000000000000000000000000000000000000000000000000000602082015250565b5f613f8f6025836137ba565b9150613f9a82613f35565b604082019050919050565b5f6020820190508181035f830152613fbc81613f83565b9050919050565b5f606082019050613fd65f830186613830565b613fe36020830185613c35565b613ff06040830184613c7b565b949350505050565b61400181613396565b811461400b575f5ffd5b50565b5f8151905061401c81613ff8565b92915050565b5f602082840312156140375761403661330e565b5b5f6140448482850161400e565b91505092915050565b7f426174636841757468656e74696361746f723a20696e76616c6964207369676e5f8201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b5f6140a76022836137ba565b91506140b28261404d565b604082019050919050565b5f6020820190508181035f8301526140d48161409b565b9050919050565b5f815190506140e98161352e565b92915050565b5f602082840312156141045761410361330e565b5b5f614111848285016140db565b91505092915050565b5f81905092915050565b7f426174636841757468656e74696361746f723a2062617463686572206e6f74205f8201527f617574686f72697a656420746f20706f737420696e20544545206d6f64652e2060208201527f45787065637465643a2000000000000000000000000000000000000000000000604082015250565b5f6141a4604a8361411a565b91506141af82614124565b604a82019050919050565b5f6141c4826137b0565b6141ce818561411a565b93506141de8185602086016137ca565b80840191505092915050565b7f2c2041637475616c3a20000000000000000000000000000000000000000000005f82015250565b5f61421e600a8361411a565b9150614229826141ea565b600a82019050919050565b5f61423e82614198565b915061424a82856141ba565b915061425582614212565b915061426182846141ba565b91508190509392505050565b5f81519050919050565b5f81905092915050565b5f61428b8261426d565b6142958185614277565b93506142a58185602086016137ca565b80840191505092915050565b5f819050919050565b6142cb6142c682613525565b6142b1565b82525050565b5f6142dc8285614281565b91506142e882846142ba565b6020820191508190509392505050565b5f6143028261377f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361433457614333613ed4565b5b600182019050919050565b7f426174636841757468656e74696361746f723a20696e76616c696420626c6f625f8201527f2062617463680000000000000000000000000000000000000000000000000000602082015250565b5f6143996026836137ba565b91506143a48261433f565b604082019050919050565b5f6020820190508181035f8301526143c68161438d565b9050919050565b5f6143d88385614277565b93506143e58385846136a9565b82840190509392505050565b5f6143fd8284866143cd565b91508190509392505050565b7f426174636841757468656e74696361746f723a20696e76616c69642063616c6c5f8201527f6461746120626174636800000000000000000000000000000000000000000000602082015250565b5f614463602a836137ba565b915061446e82614409565b604082019050919050565b5f6020820190508181035f83015261449081614457565b9050919050565b7f426174636841757468656e74696361746f723a2062617463686572206e6f74205f8201527f617574686f72697a656420746f20706f737420696e2066616c6c6261636b206d60208201527f6f64652e2045787065637465643a200000000000000000000000000000000000604082015250565b5f614517604f8361411a565b915061452282614497565b604f82019050919050565b5f6145378261450b565b915061454382856141ba565b915061454e82614212565b915061455a82846141ba565b91508190509392505050565b5f6040820190506145795f830185613830565b6145866020830184613583565b9392505050565b5f6145978261377f565b91506145a28361377f565b92508282026145b08161377f565b915082820484148315176145c7576145c6613ed4565b5b5092915050565b5f6145d88261377f565b91506145e38361377f565b92508282019050808211156145fb576145fa613ed4565b5b92915050565b5f61460b8261377f565b91505f820361461d5761461c613ed4565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e745f82015250565b5f61465c6020836137ba565b915061466782614628565b602082019050919050565b5f6020820190508181035f83015261468981614650565b9050919050565b7f45434453413a20696e76616c6964207369676e617475726500000000000000005f82015250565b5f6146c46018836137ba565b91506146cf82614690565b602082019050919050565b5f6020820190508181035f8301526146f1816146b8565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e677468005f82015250565b5f61472c601f836137ba565b9150614737826146f8565b602082019050919050565b5f6020820190508181035f83015261475981614720565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c5f8201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b5f6147ba6022836137ba565b91506147c582614760565b604082019050919050565b5f6020820190508181035f8301526147e7816147ae565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c5f8201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b5f6148486022836137ba565b9150614853826147ee565b604082019050919050565b5f6020820190508181035f8301526148758161483c565b9050919050565b5f6148868261377f565b91506148918361377f565b92508282039050818111156148a9576148a8613ed4565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b6148e581613ec8565b82525050565b5f6080820190506148fe5f830187613583565b61490b60208301866148dc565b6149186040830185613583565b6149256060830184613583565b9594505050505056fea164736f6c634300081c000a", } // BatchAuthenticatorABI is the input ABI used to generate the binding from. @@ -44,7 +44,7 @@ var BatchAuthenticatorABI = BatchAuthenticatorMetaData.ABI var BatchAuthenticatorBin = BatchAuthenticatorMetaData.Bin // DeployBatchAuthenticator deploys a new Ethereum contract, binding an instance of BatchAuthenticator to it. -func DeployBatchAuthenticator(auth *bind.TransactOpts, backend bind.ContractBackend, _espressoTEEVerifier common.Address, _teeBatcher common.Address, _nonTeeBatcher common.Address, _owner common.Address) (common.Address, *types.Transaction, *BatchAuthenticator, error) { +func DeployBatchAuthenticator(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *BatchAuthenticator, error) { parsed, err := BatchAuthenticatorMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -53,7 +53,7 @@ func DeployBatchAuthenticator(auth *bind.TransactOpts, backend bind.ContractBack return common.Address{}, nil, nil, errors.New("GetABI returned nil") } - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(BatchAuthenticatorBin), backend, _espressoTEEVerifier, _teeBatcher, _nonTeeBatcher, _owner) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(BatchAuthenticatorBin), backend) if err != nil { return common.Address{}, nil, nil, err } @@ -202,6 +202,99 @@ func (_BatchAuthenticator *BatchAuthenticatorTransactorRaw) Transact(opts *bind. return _BatchAuthenticator.Contract.contract.Transact(opts, method, params...) } +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_BatchAuthenticator *BatchAuthenticatorCaller) DEFAULTADMINROLE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _BatchAuthenticator.contract.Call(opts, &out, "DEFAULT_ADMIN_ROLE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_BatchAuthenticator *BatchAuthenticatorSession) DEFAULTADMINROLE() ([32]byte, error) { + return _BatchAuthenticator.Contract.DEFAULTADMINROLE(&_BatchAuthenticator.CallOpts) +} + +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_BatchAuthenticator *BatchAuthenticatorCallerSession) DEFAULTADMINROLE() ([32]byte, error) { + return _BatchAuthenticator.Contract.DEFAULTADMINROLE(&_BatchAuthenticator.CallOpts) +} + +// GUARDIANROLE is a free data retrieval call binding the contract method 0x24ea54f4. +// +// Solidity: function GUARDIAN_ROLE() view returns(bytes32) +func (_BatchAuthenticator *BatchAuthenticatorCaller) GUARDIANROLE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _BatchAuthenticator.contract.Call(opts, &out, "GUARDIAN_ROLE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// GUARDIANROLE is a free data retrieval call binding the contract method 0x24ea54f4. +// +// Solidity: function GUARDIAN_ROLE() view returns(bytes32) +func (_BatchAuthenticator *BatchAuthenticatorSession) GUARDIANROLE() ([32]byte, error) { + return _BatchAuthenticator.Contract.GUARDIANROLE(&_BatchAuthenticator.CallOpts) +} + +// GUARDIANROLE is a free data retrieval call binding the contract method 0x24ea54f4. +// +// Solidity: function GUARDIAN_ROLE() view returns(bytes32) +func (_BatchAuthenticator *BatchAuthenticatorCallerSession) GUARDIANROLE() ([32]byte, error) { + return _BatchAuthenticator.Contract.GUARDIANROLE(&_BatchAuthenticator.CallOpts) +} + +// UPGRADEINTERFACEVERSION is a free data retrieval call binding the contract method 0xad3cb1cc. +// +// Solidity: function UPGRADE_INTERFACE_VERSION() view returns(string) +func (_BatchAuthenticator *BatchAuthenticatorCaller) UPGRADEINTERFACEVERSION(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _BatchAuthenticator.contract.Call(opts, &out, "UPGRADE_INTERFACE_VERSION") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// UPGRADEINTERFACEVERSION is a free data retrieval call binding the contract method 0xad3cb1cc. +// +// Solidity: function UPGRADE_INTERFACE_VERSION() view returns(string) +func (_BatchAuthenticator *BatchAuthenticatorSession) UPGRADEINTERFACEVERSION() (string, error) { + return _BatchAuthenticator.Contract.UPGRADEINTERFACEVERSION(&_BatchAuthenticator.CallOpts) +} + +// UPGRADEINTERFACEVERSION is a free data retrieval call binding the contract method 0xad3cb1cc. +// +// Solidity: function UPGRADE_INTERFACE_VERSION() view returns(string) +func (_BatchAuthenticator *BatchAuthenticatorCallerSession) UPGRADEINTERFACEVERSION() (string, error) { + return _BatchAuthenticator.Contract.UPGRADEINTERFACEVERSION(&_BatchAuthenticator.CallOpts) +} + // ActiveIsTee is a free data retrieval call binding the contract method 0x7877a9ed. // // Solidity: function activeIsTee() view returns(bool) @@ -264,6 +357,254 @@ func (_BatchAuthenticator *BatchAuthenticatorCallerSession) EspressoTEEVerifier( return _BatchAuthenticator.Contract.EspressoTEEVerifier(&_BatchAuthenticator.CallOpts) } +// GetGuardians is a free data retrieval call binding the contract method 0x0665f04b. +// +// Solidity: function getGuardians() view returns(address[]) +func (_BatchAuthenticator *BatchAuthenticatorCaller) GetGuardians(opts *bind.CallOpts) ([]common.Address, error) { + var out []interface{} + err := _BatchAuthenticator.contract.Call(opts, &out, "getGuardians") + + if err != nil { + return *new([]common.Address), err + } + + out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) + + return out0, err + +} + +// GetGuardians is a free data retrieval call binding the contract method 0x0665f04b. +// +// Solidity: function getGuardians() view returns(address[]) +func (_BatchAuthenticator *BatchAuthenticatorSession) GetGuardians() ([]common.Address, error) { + return _BatchAuthenticator.Contract.GetGuardians(&_BatchAuthenticator.CallOpts) +} + +// GetGuardians is a free data retrieval call binding the contract method 0x0665f04b. +// +// Solidity: function getGuardians() view returns(address[]) +func (_BatchAuthenticator *BatchAuthenticatorCallerSession) GetGuardians() ([]common.Address, error) { + return _BatchAuthenticator.Contract.GetGuardians(&_BatchAuthenticator.CallOpts) +} + +// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. +// +// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) +func (_BatchAuthenticator *BatchAuthenticatorCaller) GetRoleAdmin(opts *bind.CallOpts, role [32]byte) ([32]byte, error) { + var out []interface{} + err := _BatchAuthenticator.contract.Call(opts, &out, "getRoleAdmin", role) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. +// +// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) +func (_BatchAuthenticator *BatchAuthenticatorSession) GetRoleAdmin(role [32]byte) ([32]byte, error) { + return _BatchAuthenticator.Contract.GetRoleAdmin(&_BatchAuthenticator.CallOpts, role) +} + +// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. +// +// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) +func (_BatchAuthenticator *BatchAuthenticatorCallerSession) GetRoleAdmin(role [32]byte) ([32]byte, error) { + return _BatchAuthenticator.Contract.GetRoleAdmin(&_BatchAuthenticator.CallOpts, role) +} + +// GetRoleMember is a free data retrieval call binding the contract method 0x9010d07c. +// +// Solidity: function getRoleMember(bytes32 role, uint256 index) view returns(address) +func (_BatchAuthenticator *BatchAuthenticatorCaller) GetRoleMember(opts *bind.CallOpts, role [32]byte, index *big.Int) (common.Address, error) { + var out []interface{} + err := _BatchAuthenticator.contract.Call(opts, &out, "getRoleMember", role, index) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetRoleMember is a free data retrieval call binding the contract method 0x9010d07c. +// +// Solidity: function getRoleMember(bytes32 role, uint256 index) view returns(address) +func (_BatchAuthenticator *BatchAuthenticatorSession) GetRoleMember(role [32]byte, index *big.Int) (common.Address, error) { + return _BatchAuthenticator.Contract.GetRoleMember(&_BatchAuthenticator.CallOpts, role, index) +} + +// GetRoleMember is a free data retrieval call binding the contract method 0x9010d07c. +// +// Solidity: function getRoleMember(bytes32 role, uint256 index) view returns(address) +func (_BatchAuthenticator *BatchAuthenticatorCallerSession) GetRoleMember(role [32]byte, index *big.Int) (common.Address, error) { + return _BatchAuthenticator.Contract.GetRoleMember(&_BatchAuthenticator.CallOpts, role, index) +} + +// GetRoleMemberCount is a free data retrieval call binding the contract method 0xca15c873. +// +// Solidity: function getRoleMemberCount(bytes32 role) view returns(uint256) +func (_BatchAuthenticator *BatchAuthenticatorCaller) GetRoleMemberCount(opts *bind.CallOpts, role [32]byte) (*big.Int, error) { + var out []interface{} + err := _BatchAuthenticator.contract.Call(opts, &out, "getRoleMemberCount", role) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetRoleMemberCount is a free data retrieval call binding the contract method 0xca15c873. +// +// Solidity: function getRoleMemberCount(bytes32 role) view returns(uint256) +func (_BatchAuthenticator *BatchAuthenticatorSession) GetRoleMemberCount(role [32]byte) (*big.Int, error) { + return _BatchAuthenticator.Contract.GetRoleMemberCount(&_BatchAuthenticator.CallOpts, role) +} + +// GetRoleMemberCount is a free data retrieval call binding the contract method 0xca15c873. +// +// Solidity: function getRoleMemberCount(bytes32 role) view returns(uint256) +func (_BatchAuthenticator *BatchAuthenticatorCallerSession) GetRoleMemberCount(role [32]byte) (*big.Int, error) { + return _BatchAuthenticator.Contract.GetRoleMemberCount(&_BatchAuthenticator.CallOpts, role) +} + +// GetRoleMembers is a free data retrieval call binding the contract method 0xa3246ad3. +// +// Solidity: function getRoleMembers(bytes32 role) view returns(address[]) +func (_BatchAuthenticator *BatchAuthenticatorCaller) GetRoleMembers(opts *bind.CallOpts, role [32]byte) ([]common.Address, error) { + var out []interface{} + err := _BatchAuthenticator.contract.Call(opts, &out, "getRoleMembers", role) + + if err != nil { + return *new([]common.Address), err + } + + out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) + + return out0, err + +} + +// GetRoleMembers is a free data retrieval call binding the contract method 0xa3246ad3. +// +// Solidity: function getRoleMembers(bytes32 role) view returns(address[]) +func (_BatchAuthenticator *BatchAuthenticatorSession) GetRoleMembers(role [32]byte) ([]common.Address, error) { + return _BatchAuthenticator.Contract.GetRoleMembers(&_BatchAuthenticator.CallOpts, role) +} + +// GetRoleMembers is a free data retrieval call binding the contract method 0xa3246ad3. +// +// Solidity: function getRoleMembers(bytes32 role) view returns(address[]) +func (_BatchAuthenticator *BatchAuthenticatorCallerSession) GetRoleMembers(role [32]byte) ([]common.Address, error) { + return _BatchAuthenticator.Contract.GetRoleMembers(&_BatchAuthenticator.CallOpts, role) +} + +// GuardianCount is a free data retrieval call binding the contract method 0x54387ad7. +// +// Solidity: function guardianCount() view returns(uint256) +func (_BatchAuthenticator *BatchAuthenticatorCaller) GuardianCount(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _BatchAuthenticator.contract.Call(opts, &out, "guardianCount") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GuardianCount is a free data retrieval call binding the contract method 0x54387ad7. +// +// Solidity: function guardianCount() view returns(uint256) +func (_BatchAuthenticator *BatchAuthenticatorSession) GuardianCount() (*big.Int, error) { + return _BatchAuthenticator.Contract.GuardianCount(&_BatchAuthenticator.CallOpts) +} + +// GuardianCount is a free data retrieval call binding the contract method 0x54387ad7. +// +// Solidity: function guardianCount() view returns(uint256) +func (_BatchAuthenticator *BatchAuthenticatorCallerSession) GuardianCount() (*big.Int, error) { + return _BatchAuthenticator.Contract.GuardianCount(&_BatchAuthenticator.CallOpts) +} + +// HasRole is a free data retrieval call binding the contract method 0x91d14854. +// +// Solidity: function hasRole(bytes32 role, address account) view returns(bool) +func (_BatchAuthenticator *BatchAuthenticatorCaller) HasRole(opts *bind.CallOpts, role [32]byte, account common.Address) (bool, error) { + var out []interface{} + err := _BatchAuthenticator.contract.Call(opts, &out, "hasRole", role, account) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// HasRole is a free data retrieval call binding the contract method 0x91d14854. +// +// Solidity: function hasRole(bytes32 role, address account) view returns(bool) +func (_BatchAuthenticator *BatchAuthenticatorSession) HasRole(role [32]byte, account common.Address) (bool, error) { + return _BatchAuthenticator.Contract.HasRole(&_BatchAuthenticator.CallOpts, role, account) +} + +// HasRole is a free data retrieval call binding the contract method 0x91d14854. +// +// Solidity: function hasRole(bytes32 role, address account) view returns(bool) +func (_BatchAuthenticator *BatchAuthenticatorCallerSession) HasRole(role [32]byte, account common.Address) (bool, error) { + return _BatchAuthenticator.Contract.HasRole(&_BatchAuthenticator.CallOpts, role, account) +} + +// IsGuardian is a free data retrieval call binding the contract method 0x0c68ba21. +// +// Solidity: function isGuardian(address account) view returns(bool) +func (_BatchAuthenticator *BatchAuthenticatorCaller) IsGuardian(opts *bind.CallOpts, account common.Address) (bool, error) { + var out []interface{} + err := _BatchAuthenticator.contract.Call(opts, &out, "isGuardian", account) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsGuardian is a free data retrieval call binding the contract method 0x0c68ba21. +// +// Solidity: function isGuardian(address account) view returns(bool) +func (_BatchAuthenticator *BatchAuthenticatorSession) IsGuardian(account common.Address) (bool, error) { + return _BatchAuthenticator.Contract.IsGuardian(&_BatchAuthenticator.CallOpts, account) +} + +// IsGuardian is a free data retrieval call binding the contract method 0x0c68ba21. +// +// Solidity: function isGuardian(address account) view returns(bool) +func (_BatchAuthenticator *BatchAuthenticatorCallerSession) IsGuardian(account common.Address) (bool, error) { + return _BatchAuthenticator.Contract.IsGuardian(&_BatchAuthenticator.CallOpts, account) +} + // NonTeeBatcher is a free data retrieval call binding the contract method 0xb1bd4285. // // Solidity: function nonTeeBatcher() view returns(address) @@ -326,6 +667,99 @@ func (_BatchAuthenticator *BatchAuthenticatorCallerSession) Owner() (common.Addr return _BatchAuthenticator.Contract.Owner(&_BatchAuthenticator.CallOpts) } +// PendingOwner is a free data retrieval call binding the contract method 0xe30c3978. +// +// Solidity: function pendingOwner() view returns(address) +func (_BatchAuthenticator *BatchAuthenticatorCaller) PendingOwner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _BatchAuthenticator.contract.Call(opts, &out, "pendingOwner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// PendingOwner is a free data retrieval call binding the contract method 0xe30c3978. +// +// Solidity: function pendingOwner() view returns(address) +func (_BatchAuthenticator *BatchAuthenticatorSession) PendingOwner() (common.Address, error) { + return _BatchAuthenticator.Contract.PendingOwner(&_BatchAuthenticator.CallOpts) +} + +// PendingOwner is a free data retrieval call binding the contract method 0xe30c3978. +// +// Solidity: function pendingOwner() view returns(address) +func (_BatchAuthenticator *BatchAuthenticatorCallerSession) PendingOwner() (common.Address, error) { + return _BatchAuthenticator.Contract.PendingOwner(&_BatchAuthenticator.CallOpts) +} + +// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. +// +// Solidity: function proxiableUUID() view returns(bytes32) +func (_BatchAuthenticator *BatchAuthenticatorCaller) ProxiableUUID(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _BatchAuthenticator.contract.Call(opts, &out, "proxiableUUID") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. +// +// Solidity: function proxiableUUID() view returns(bytes32) +func (_BatchAuthenticator *BatchAuthenticatorSession) ProxiableUUID() ([32]byte, error) { + return _BatchAuthenticator.Contract.ProxiableUUID(&_BatchAuthenticator.CallOpts) +} + +// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. +// +// Solidity: function proxiableUUID() view returns(bytes32) +func (_BatchAuthenticator *BatchAuthenticatorCallerSession) ProxiableUUID() ([32]byte, error) { + return _BatchAuthenticator.Contract.ProxiableUUID(&_BatchAuthenticator.CallOpts) +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) +func (_BatchAuthenticator *BatchAuthenticatorCaller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) { + var out []interface{} + err := _BatchAuthenticator.contract.Call(opts, &out, "supportsInterface", interfaceId) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) +func (_BatchAuthenticator *BatchAuthenticatorSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _BatchAuthenticator.Contract.SupportsInterface(&_BatchAuthenticator.CallOpts, interfaceId) +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) +func (_BatchAuthenticator *BatchAuthenticatorCallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _BatchAuthenticator.Contract.SupportsInterface(&_BatchAuthenticator.CallOpts, interfaceId) +} + // TeeBatcher is a free data retrieval call binding the contract method 0xd909ba7c. // // Solidity: function teeBatcher() view returns(address) @@ -388,18 +822,47 @@ func (_BatchAuthenticator *BatchAuthenticatorCallerSession) ValidBatchInfo(arg0 return _BatchAuthenticator.Contract.ValidBatchInfo(&_BatchAuthenticator.CallOpts, arg0) } -// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// ValidateBatch is a free data retrieval call binding the contract method 0x91a1a35d. // -// Solidity: function version() view returns(string) -func (_BatchAuthenticator *BatchAuthenticatorCaller) Version(opts *bind.CallOpts) (string, error) { +// Solidity: function validateBatch(address sender, bytes data) view returns() +func (_BatchAuthenticator *BatchAuthenticatorCaller) ValidateBatch(opts *bind.CallOpts, sender common.Address, data []byte) error { var out []interface{} - err := _BatchAuthenticator.contract.Call(opts, &out, "version") + err := _BatchAuthenticator.contract.Call(opts, &out, "validateBatch", sender, data) if err != nil { - return *new(string), err + return err } - out0 := *abi.ConvertType(out[0], new(string)).(*string) + return err + +} + +// ValidateBatch is a free data retrieval call binding the contract method 0x91a1a35d. +// +// Solidity: function validateBatch(address sender, bytes data) view returns() +func (_BatchAuthenticator *BatchAuthenticatorSession) ValidateBatch(sender common.Address, data []byte) error { + return _BatchAuthenticator.Contract.ValidateBatch(&_BatchAuthenticator.CallOpts, sender, data) +} + +// ValidateBatch is a free data retrieval call binding the contract method 0x91a1a35d. +// +// Solidity: function validateBatch(address sender, bytes data) view returns() +func (_BatchAuthenticator *BatchAuthenticatorCallerSession) ValidateBatch(sender common.Address, data []byte) error { + return _BatchAuthenticator.Contract.ValidateBatch(&_BatchAuthenticator.CallOpts, sender, data) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_BatchAuthenticator *BatchAuthenticatorCaller) Version(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _BatchAuthenticator.contract.Call(opts, &out, "version") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) return out0, err @@ -419,6 +882,48 @@ func (_BatchAuthenticator *BatchAuthenticatorCallerSession) Version() (string, e return _BatchAuthenticator.Contract.Version(&_BatchAuthenticator.CallOpts) } +// AcceptOwnership is a paid mutator transaction binding the contract method 0x79ba5097. +// +// Solidity: function acceptOwnership() returns() +func (_BatchAuthenticator *BatchAuthenticatorTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _BatchAuthenticator.contract.Transact(opts, "acceptOwnership") +} + +// AcceptOwnership is a paid mutator transaction binding the contract method 0x79ba5097. +// +// Solidity: function acceptOwnership() returns() +func (_BatchAuthenticator *BatchAuthenticatorSession) AcceptOwnership() (*types.Transaction, error) { + return _BatchAuthenticator.Contract.AcceptOwnership(&_BatchAuthenticator.TransactOpts) +} + +// AcceptOwnership is a paid mutator transaction binding the contract method 0x79ba5097. +// +// Solidity: function acceptOwnership() returns() +func (_BatchAuthenticator *BatchAuthenticatorTransactorSession) AcceptOwnership() (*types.Transaction, error) { + return _BatchAuthenticator.Contract.AcceptOwnership(&_BatchAuthenticator.TransactOpts) +} + +// AddGuardian is a paid mutator transaction binding the contract method 0xa526d83b. +// +// Solidity: function addGuardian(address guardian) returns() +func (_BatchAuthenticator *BatchAuthenticatorTransactor) AddGuardian(opts *bind.TransactOpts, guardian common.Address) (*types.Transaction, error) { + return _BatchAuthenticator.contract.Transact(opts, "addGuardian", guardian) +} + +// AddGuardian is a paid mutator transaction binding the contract method 0xa526d83b. +// +// Solidity: function addGuardian(address guardian) returns() +func (_BatchAuthenticator *BatchAuthenticatorSession) AddGuardian(guardian common.Address) (*types.Transaction, error) { + return _BatchAuthenticator.Contract.AddGuardian(&_BatchAuthenticator.TransactOpts, guardian) +} + +// AddGuardian is a paid mutator transaction binding the contract method 0xa526d83b. +// +// Solidity: function addGuardian(address guardian) returns() +func (_BatchAuthenticator *BatchAuthenticatorTransactorSession) AddGuardian(guardian common.Address) (*types.Transaction, error) { + return _BatchAuthenticator.Contract.AddGuardian(&_BatchAuthenticator.TransactOpts, guardian) +} + // AuthenticateBatchInfo is a paid mutator transaction binding the contract method 0xfc619e41. // // Solidity: function authenticateBatchInfo(bytes32 commitment, bytes _signature) returns() @@ -440,6 +945,48 @@ func (_BatchAuthenticator *BatchAuthenticatorTransactorSession) AuthenticateBatc return _BatchAuthenticator.Contract.AuthenticateBatchInfo(&_BatchAuthenticator.TransactOpts, commitment, _signature) } +// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. +// +// Solidity: function grantRole(bytes32 role, address account) returns() +func (_BatchAuthenticator *BatchAuthenticatorTransactor) GrantRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { + return _BatchAuthenticator.contract.Transact(opts, "grantRole", role, account) +} + +// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. +// +// Solidity: function grantRole(bytes32 role, address account) returns() +func (_BatchAuthenticator *BatchAuthenticatorSession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _BatchAuthenticator.Contract.GrantRole(&_BatchAuthenticator.TransactOpts, role, account) +} + +// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. +// +// Solidity: function grantRole(bytes32 role, address account) returns() +func (_BatchAuthenticator *BatchAuthenticatorTransactorSession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _BatchAuthenticator.Contract.GrantRole(&_BatchAuthenticator.TransactOpts, role, account) +} + +// Initialize is a paid mutator transaction binding the contract method 0xf8c8765e. +// +// Solidity: function initialize(address _espressoTEEVerifier, address _teeBatcher, address _nonTeeBatcher, address _owner) returns() +func (_BatchAuthenticator *BatchAuthenticatorTransactor) Initialize(opts *bind.TransactOpts, _espressoTEEVerifier common.Address, _teeBatcher common.Address, _nonTeeBatcher common.Address, _owner common.Address) (*types.Transaction, error) { + return _BatchAuthenticator.contract.Transact(opts, "initialize", _espressoTEEVerifier, _teeBatcher, _nonTeeBatcher, _owner) +} + +// Initialize is a paid mutator transaction binding the contract method 0xf8c8765e. +// +// Solidity: function initialize(address _espressoTEEVerifier, address _teeBatcher, address _nonTeeBatcher, address _owner) returns() +func (_BatchAuthenticator *BatchAuthenticatorSession) Initialize(_espressoTEEVerifier common.Address, _teeBatcher common.Address, _nonTeeBatcher common.Address, _owner common.Address) (*types.Transaction, error) { + return _BatchAuthenticator.Contract.Initialize(&_BatchAuthenticator.TransactOpts, _espressoTEEVerifier, _teeBatcher, _nonTeeBatcher, _owner) +} + +// Initialize is a paid mutator transaction binding the contract method 0xf8c8765e. +// +// Solidity: function initialize(address _espressoTEEVerifier, address _teeBatcher, address _nonTeeBatcher, address _owner) returns() +func (_BatchAuthenticator *BatchAuthenticatorTransactorSession) Initialize(_espressoTEEVerifier common.Address, _teeBatcher common.Address, _nonTeeBatcher common.Address, _owner common.Address) (*types.Transaction, error) { + return _BatchAuthenticator.Contract.Initialize(&_BatchAuthenticator.TransactOpts, _espressoTEEVerifier, _teeBatcher, _nonTeeBatcher, _owner) +} + // RegisterSigner is a paid mutator transaction binding the contract method 0xba58e82a. // // Solidity: function registerSigner(bytes attestationTbs, bytes signature) returns() @@ -461,6 +1008,27 @@ func (_BatchAuthenticator *BatchAuthenticatorTransactorSession) RegisterSigner(a return _BatchAuthenticator.Contract.RegisterSigner(&_BatchAuthenticator.TransactOpts, attestationTbs, signature) } +// RemoveGuardian is a paid mutator transaction binding the contract method 0x71404156. +// +// Solidity: function removeGuardian(address guardian) returns() +func (_BatchAuthenticator *BatchAuthenticatorTransactor) RemoveGuardian(opts *bind.TransactOpts, guardian common.Address) (*types.Transaction, error) { + return _BatchAuthenticator.contract.Transact(opts, "removeGuardian", guardian) +} + +// RemoveGuardian is a paid mutator transaction binding the contract method 0x71404156. +// +// Solidity: function removeGuardian(address guardian) returns() +func (_BatchAuthenticator *BatchAuthenticatorSession) RemoveGuardian(guardian common.Address) (*types.Transaction, error) { + return _BatchAuthenticator.Contract.RemoveGuardian(&_BatchAuthenticator.TransactOpts, guardian) +} + +// RemoveGuardian is a paid mutator transaction binding the contract method 0x71404156. +// +// Solidity: function removeGuardian(address guardian) returns() +func (_BatchAuthenticator *BatchAuthenticatorTransactorSession) RemoveGuardian(guardian common.Address) (*types.Transaction, error) { + return _BatchAuthenticator.Contract.RemoveGuardian(&_BatchAuthenticator.TransactOpts, guardian) +} + // RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. // // Solidity: function renounceOwnership() returns() @@ -482,6 +1050,48 @@ func (_BatchAuthenticator *BatchAuthenticatorTransactorSession) RenounceOwnershi return _BatchAuthenticator.Contract.RenounceOwnership(&_BatchAuthenticator.TransactOpts) } +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address callerConfirmation) returns() +func (_BatchAuthenticator *BatchAuthenticatorTransactor) RenounceRole(opts *bind.TransactOpts, role [32]byte, callerConfirmation common.Address) (*types.Transaction, error) { + return _BatchAuthenticator.contract.Transact(opts, "renounceRole", role, callerConfirmation) +} + +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address callerConfirmation) returns() +func (_BatchAuthenticator *BatchAuthenticatorSession) RenounceRole(role [32]byte, callerConfirmation common.Address) (*types.Transaction, error) { + return _BatchAuthenticator.Contract.RenounceRole(&_BatchAuthenticator.TransactOpts, role, callerConfirmation) +} + +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address callerConfirmation) returns() +func (_BatchAuthenticator *BatchAuthenticatorTransactorSession) RenounceRole(role [32]byte, callerConfirmation common.Address) (*types.Transaction, error) { + return _BatchAuthenticator.Contract.RenounceRole(&_BatchAuthenticator.TransactOpts, role, callerConfirmation) +} + +// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. +// +// Solidity: function revokeRole(bytes32 role, address account) returns() +func (_BatchAuthenticator *BatchAuthenticatorTransactor) RevokeRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { + return _BatchAuthenticator.contract.Transact(opts, "revokeRole", role, account) +} + +// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. +// +// Solidity: function revokeRole(bytes32 role, address account) returns() +func (_BatchAuthenticator *BatchAuthenticatorSession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _BatchAuthenticator.Contract.RevokeRole(&_BatchAuthenticator.TransactOpts, role, account) +} + +// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. +// +// Solidity: function revokeRole(bytes32 role, address account) returns() +func (_BatchAuthenticator *BatchAuthenticatorTransactorSession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _BatchAuthenticator.Contract.RevokeRole(&_BatchAuthenticator.TransactOpts, role, account) +} + // SwitchBatcher is a paid mutator transaction binding the contract method 0xbc347f47. // // Solidity: function switchBatcher() returns() @@ -503,30 +1113,1094 @@ func (_BatchAuthenticator *BatchAuthenticatorTransactorSession) SwitchBatcher() return _BatchAuthenticator.Contract.SwitchBatcher(&_BatchAuthenticator.TransactOpts) } -// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_BatchAuthenticator *BatchAuthenticatorTransactor) TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) { + return _BatchAuthenticator.contract.Transact(opts, "transferOwnership", newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_BatchAuthenticator *BatchAuthenticatorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _BatchAuthenticator.Contract.TransferOwnership(&_BatchAuthenticator.TransactOpts, newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_BatchAuthenticator *BatchAuthenticatorTransactorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _BatchAuthenticator.Contract.TransferOwnership(&_BatchAuthenticator.TransactOpts, newOwner) +} + +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. +// +// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() +func (_BatchAuthenticator *BatchAuthenticatorTransactor) UpgradeToAndCall(opts *bind.TransactOpts, newImplementation common.Address, data []byte) (*types.Transaction, error) { + return _BatchAuthenticator.contract.Transact(opts, "upgradeToAndCall", newImplementation, data) +} + +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. +// +// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() +func (_BatchAuthenticator *BatchAuthenticatorSession) UpgradeToAndCall(newImplementation common.Address, data []byte) (*types.Transaction, error) { + return _BatchAuthenticator.Contract.UpgradeToAndCall(&_BatchAuthenticator.TransactOpts, newImplementation, data) +} + +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. +// +// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() +func (_BatchAuthenticator *BatchAuthenticatorTransactorSession) UpgradeToAndCall(newImplementation common.Address, data []byte) (*types.Transaction, error) { + return _BatchAuthenticator.Contract.UpgradeToAndCall(&_BatchAuthenticator.TransactOpts, newImplementation, data) +} + +// BatchAuthenticatorBatchInfoAuthenticatedIterator is returned from FilterBatchInfoAuthenticated and is used to iterate over the raw logs and unpacked data for BatchInfoAuthenticated events raised by the BatchAuthenticator contract. +type BatchAuthenticatorBatchInfoAuthenticatedIterator struct { + Event *BatchAuthenticatorBatchInfoAuthenticated // 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 *BatchAuthenticatorBatchInfoAuthenticatedIterator) 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(BatchAuthenticatorBatchInfoAuthenticated) + 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(BatchAuthenticatorBatchInfoAuthenticated) + 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 *BatchAuthenticatorBatchInfoAuthenticatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *BatchAuthenticatorBatchInfoAuthenticatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// BatchAuthenticatorBatchInfoAuthenticated represents a BatchInfoAuthenticated event raised by the BatchAuthenticator contract. +type BatchAuthenticatorBatchInfoAuthenticated struct { + Commitment [32]byte + Signer common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterBatchInfoAuthenticated is a free log retrieval operation binding the contract event 0x731978a77d438b0ea35a9034fb28d9cf9372e1649f18c213110adcfab65c5c5c. +// +// Solidity: event BatchInfoAuthenticated(bytes32 indexed commitment, address indexed signer) +func (_BatchAuthenticator *BatchAuthenticatorFilterer) FilterBatchInfoAuthenticated(opts *bind.FilterOpts, commitment [][32]byte, signer []common.Address) (*BatchAuthenticatorBatchInfoAuthenticatedIterator, error) { + + var commitmentRule []interface{} + for _, commitmentItem := range commitment { + commitmentRule = append(commitmentRule, commitmentItem) + } + var signerRule []interface{} + for _, signerItem := range signer { + signerRule = append(signerRule, signerItem) + } + + logs, sub, err := _BatchAuthenticator.contract.FilterLogs(opts, "BatchInfoAuthenticated", commitmentRule, signerRule) + if err != nil { + return nil, err + } + return &BatchAuthenticatorBatchInfoAuthenticatedIterator{contract: _BatchAuthenticator.contract, event: "BatchInfoAuthenticated", logs: logs, sub: sub}, nil +} + +// WatchBatchInfoAuthenticated is a free log subscription operation binding the contract event 0x731978a77d438b0ea35a9034fb28d9cf9372e1649f18c213110adcfab65c5c5c. +// +// Solidity: event BatchInfoAuthenticated(bytes32 indexed commitment, address indexed signer) +func (_BatchAuthenticator *BatchAuthenticatorFilterer) WatchBatchInfoAuthenticated(opts *bind.WatchOpts, sink chan<- *BatchAuthenticatorBatchInfoAuthenticated, commitment [][32]byte, signer []common.Address) (event.Subscription, error) { + + var commitmentRule []interface{} + for _, commitmentItem := range commitment { + commitmentRule = append(commitmentRule, commitmentItem) + } + var signerRule []interface{} + for _, signerItem := range signer { + signerRule = append(signerRule, signerItem) + } + + logs, sub, err := _BatchAuthenticator.contract.WatchLogs(opts, "BatchInfoAuthenticated", commitmentRule, signerRule) + 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(BatchAuthenticatorBatchInfoAuthenticated) + if err := _BatchAuthenticator.contract.UnpackLog(event, "BatchInfoAuthenticated", 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 +} + +// ParseBatchInfoAuthenticated is a log parse operation binding the contract event 0x731978a77d438b0ea35a9034fb28d9cf9372e1649f18c213110adcfab65c5c5c. +// +// Solidity: event BatchInfoAuthenticated(bytes32 indexed commitment, address indexed signer) +func (_BatchAuthenticator *BatchAuthenticatorFilterer) ParseBatchInfoAuthenticated(log types.Log) (*BatchAuthenticatorBatchInfoAuthenticated, error) { + event := new(BatchAuthenticatorBatchInfoAuthenticated) + if err := _BatchAuthenticator.contract.UnpackLog(event, "BatchInfoAuthenticated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// BatchAuthenticatorGuardianAddedIterator is returned from FilterGuardianAdded and is used to iterate over the raw logs and unpacked data for GuardianAdded events raised by the BatchAuthenticator contract. +type BatchAuthenticatorGuardianAddedIterator struct { + Event *BatchAuthenticatorGuardianAdded // 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 *BatchAuthenticatorGuardianAddedIterator) 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(BatchAuthenticatorGuardianAdded) + 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(BatchAuthenticatorGuardianAdded) + 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 *BatchAuthenticatorGuardianAddedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *BatchAuthenticatorGuardianAddedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// BatchAuthenticatorGuardianAdded represents a GuardianAdded event raised by the BatchAuthenticator contract. +type BatchAuthenticatorGuardianAdded struct { + Guardian common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterGuardianAdded is a free log retrieval operation binding the contract event 0x038596bb31e2e7d3d9f184d4c98b310103f6d7f5830e5eec32bffe6f1728f969. +// +// Solidity: event GuardianAdded(address indexed guardian) +func (_BatchAuthenticator *BatchAuthenticatorFilterer) FilterGuardianAdded(opts *bind.FilterOpts, guardian []common.Address) (*BatchAuthenticatorGuardianAddedIterator, error) { + + var guardianRule []interface{} + for _, guardianItem := range guardian { + guardianRule = append(guardianRule, guardianItem) + } + + logs, sub, err := _BatchAuthenticator.contract.FilterLogs(opts, "GuardianAdded", guardianRule) + if err != nil { + return nil, err + } + return &BatchAuthenticatorGuardianAddedIterator{contract: _BatchAuthenticator.contract, event: "GuardianAdded", logs: logs, sub: sub}, nil +} + +// WatchGuardianAdded is a free log subscription operation binding the contract event 0x038596bb31e2e7d3d9f184d4c98b310103f6d7f5830e5eec32bffe6f1728f969. +// +// Solidity: event GuardianAdded(address indexed guardian) +func (_BatchAuthenticator *BatchAuthenticatorFilterer) WatchGuardianAdded(opts *bind.WatchOpts, sink chan<- *BatchAuthenticatorGuardianAdded, guardian []common.Address) (event.Subscription, error) { + + var guardianRule []interface{} + for _, guardianItem := range guardian { + guardianRule = append(guardianRule, guardianItem) + } + + logs, sub, err := _BatchAuthenticator.contract.WatchLogs(opts, "GuardianAdded", guardianRule) + 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(BatchAuthenticatorGuardianAdded) + if err := _BatchAuthenticator.contract.UnpackLog(event, "GuardianAdded", 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 +} + +// ParseGuardianAdded is a log parse operation binding the contract event 0x038596bb31e2e7d3d9f184d4c98b310103f6d7f5830e5eec32bffe6f1728f969. +// +// Solidity: event GuardianAdded(address indexed guardian) +func (_BatchAuthenticator *BatchAuthenticatorFilterer) ParseGuardianAdded(log types.Log) (*BatchAuthenticatorGuardianAdded, error) { + event := new(BatchAuthenticatorGuardianAdded) + if err := _BatchAuthenticator.contract.UnpackLog(event, "GuardianAdded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// BatchAuthenticatorGuardianRemovedIterator is returned from FilterGuardianRemoved and is used to iterate over the raw logs and unpacked data for GuardianRemoved events raised by the BatchAuthenticator contract. +type BatchAuthenticatorGuardianRemovedIterator struct { + Event *BatchAuthenticatorGuardianRemoved // 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 *BatchAuthenticatorGuardianRemovedIterator) 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(BatchAuthenticatorGuardianRemoved) + 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(BatchAuthenticatorGuardianRemoved) + 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 *BatchAuthenticatorGuardianRemovedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *BatchAuthenticatorGuardianRemovedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// BatchAuthenticatorGuardianRemoved represents a GuardianRemoved event raised by the BatchAuthenticator contract. +type BatchAuthenticatorGuardianRemoved struct { + Guardian common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterGuardianRemoved is a free log retrieval operation binding the contract event 0xb8107d0c6b40be480ce3172ee66ba6d64b71f6b1685a851340036e6e2e3e3c52. +// +// Solidity: event GuardianRemoved(address indexed guardian) +func (_BatchAuthenticator *BatchAuthenticatorFilterer) FilterGuardianRemoved(opts *bind.FilterOpts, guardian []common.Address) (*BatchAuthenticatorGuardianRemovedIterator, error) { + + var guardianRule []interface{} + for _, guardianItem := range guardian { + guardianRule = append(guardianRule, guardianItem) + } + + logs, sub, err := _BatchAuthenticator.contract.FilterLogs(opts, "GuardianRemoved", guardianRule) + if err != nil { + return nil, err + } + return &BatchAuthenticatorGuardianRemovedIterator{contract: _BatchAuthenticator.contract, event: "GuardianRemoved", logs: logs, sub: sub}, nil +} + +// WatchGuardianRemoved is a free log subscription operation binding the contract event 0xb8107d0c6b40be480ce3172ee66ba6d64b71f6b1685a851340036e6e2e3e3c52. +// +// Solidity: event GuardianRemoved(address indexed guardian) +func (_BatchAuthenticator *BatchAuthenticatorFilterer) WatchGuardianRemoved(opts *bind.WatchOpts, sink chan<- *BatchAuthenticatorGuardianRemoved, guardian []common.Address) (event.Subscription, error) { + + var guardianRule []interface{} + for _, guardianItem := range guardian { + guardianRule = append(guardianRule, guardianItem) + } + + logs, sub, err := _BatchAuthenticator.contract.WatchLogs(opts, "GuardianRemoved", guardianRule) + 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(BatchAuthenticatorGuardianRemoved) + if err := _BatchAuthenticator.contract.UnpackLog(event, "GuardianRemoved", 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 +} + +// ParseGuardianRemoved is a log parse operation binding the contract event 0xb8107d0c6b40be480ce3172ee66ba6d64b71f6b1685a851340036e6e2e3e3c52. +// +// Solidity: event GuardianRemoved(address indexed guardian) +func (_BatchAuthenticator *BatchAuthenticatorFilterer) ParseGuardianRemoved(log types.Log) (*BatchAuthenticatorGuardianRemoved, error) { + event := new(BatchAuthenticatorGuardianRemoved) + if err := _BatchAuthenticator.contract.UnpackLog(event, "GuardianRemoved", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// BatchAuthenticatorInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the BatchAuthenticator contract. +type BatchAuthenticatorInitializedIterator struct { + Event *BatchAuthenticatorInitialized // 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 *BatchAuthenticatorInitializedIterator) 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(BatchAuthenticatorInitialized) + 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(BatchAuthenticatorInitialized) + 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 *BatchAuthenticatorInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *BatchAuthenticatorInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// BatchAuthenticatorInitialized represents a Initialized event raised by the BatchAuthenticator contract. +type BatchAuthenticatorInitialized struct { + Version uint64 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitialized is a free log retrieval operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// +// Solidity: event Initialized(uint64 version) +func (_BatchAuthenticator *BatchAuthenticatorFilterer) FilterInitialized(opts *bind.FilterOpts) (*BatchAuthenticatorInitializedIterator, error) { + + logs, sub, err := _BatchAuthenticator.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &BatchAuthenticatorInitializedIterator{contract: _BatchAuthenticator.contract, event: "Initialized", logs: logs, sub: sub}, nil +} + +// WatchInitialized is a free log subscription operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// +// Solidity: event Initialized(uint64 version) +func (_BatchAuthenticator *BatchAuthenticatorFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *BatchAuthenticatorInitialized) (event.Subscription, error) { + + logs, sub, err := _BatchAuthenticator.contract.WatchLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(BatchAuthenticatorInitialized) + if err := _BatchAuthenticator.contract.UnpackLog(event, "Initialized", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseInitialized is a log parse operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// +// Solidity: event Initialized(uint64 version) +func (_BatchAuthenticator *BatchAuthenticatorFilterer) ParseInitialized(log types.Log) (*BatchAuthenticatorInitialized, error) { + event := new(BatchAuthenticatorInitialized) + if err := _BatchAuthenticator.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// BatchAuthenticatorOwnershipTransferStartedIterator is returned from FilterOwnershipTransferStarted and is used to iterate over the raw logs and unpacked data for OwnershipTransferStarted events raised by the BatchAuthenticator contract. +type BatchAuthenticatorOwnershipTransferStartedIterator struct { + Event *BatchAuthenticatorOwnershipTransferStarted // 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 *BatchAuthenticatorOwnershipTransferStartedIterator) 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(BatchAuthenticatorOwnershipTransferStarted) + 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(BatchAuthenticatorOwnershipTransferStarted) + 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 *BatchAuthenticatorOwnershipTransferStartedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *BatchAuthenticatorOwnershipTransferStartedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// BatchAuthenticatorOwnershipTransferStarted represents a OwnershipTransferStarted event raised by the BatchAuthenticator contract. +type BatchAuthenticatorOwnershipTransferStarted struct { + PreviousOwner common.Address + NewOwner common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOwnershipTransferStarted is a free log retrieval operation binding the contract event 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700. +// +// Solidity: event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner) +func (_BatchAuthenticator *BatchAuthenticatorFilterer) FilterOwnershipTransferStarted(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*BatchAuthenticatorOwnershipTransferStartedIterator, 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 := _BatchAuthenticator.contract.FilterLogs(opts, "OwnershipTransferStarted", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return &BatchAuthenticatorOwnershipTransferStartedIterator{contract: _BatchAuthenticator.contract, event: "OwnershipTransferStarted", logs: logs, sub: sub}, nil +} + +// WatchOwnershipTransferStarted is a free log subscription operation binding the contract event 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700. +// +// Solidity: event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner) +func (_BatchAuthenticator *BatchAuthenticatorFilterer) WatchOwnershipTransferStarted(opts *bind.WatchOpts, sink chan<- *BatchAuthenticatorOwnershipTransferStarted, 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 := _BatchAuthenticator.contract.WatchLogs(opts, "OwnershipTransferStarted", 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(BatchAuthenticatorOwnershipTransferStarted) + if err := _BatchAuthenticator.contract.UnpackLog(event, "OwnershipTransferStarted", 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 +} + +// ParseOwnershipTransferStarted is a log parse operation binding the contract event 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700. +// +// Solidity: event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner) +func (_BatchAuthenticator *BatchAuthenticatorFilterer) ParseOwnershipTransferStarted(log types.Log) (*BatchAuthenticatorOwnershipTransferStarted, error) { + event := new(BatchAuthenticatorOwnershipTransferStarted) + if err := _BatchAuthenticator.contract.UnpackLog(event, "OwnershipTransferStarted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// BatchAuthenticatorOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the BatchAuthenticator contract. +type BatchAuthenticatorOwnershipTransferredIterator struct { + Event *BatchAuthenticatorOwnershipTransferred // 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 *BatchAuthenticatorOwnershipTransferredIterator) 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(BatchAuthenticatorOwnershipTransferred) + 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(BatchAuthenticatorOwnershipTransferred) + 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 *BatchAuthenticatorOwnershipTransferredIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *BatchAuthenticatorOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// BatchAuthenticatorOwnershipTransferred represents a OwnershipTransferred event raised by the BatchAuthenticator contract. +type BatchAuthenticatorOwnershipTransferred 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 (_BatchAuthenticator *BatchAuthenticatorFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*BatchAuthenticatorOwnershipTransferredIterator, 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 := _BatchAuthenticator.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return &BatchAuthenticatorOwnershipTransferredIterator{contract: _BatchAuthenticator.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 (_BatchAuthenticator *BatchAuthenticatorFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *BatchAuthenticatorOwnershipTransferred, 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 := _BatchAuthenticator.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(BatchAuthenticatorOwnershipTransferred) + if err := _BatchAuthenticator.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 (_BatchAuthenticator *BatchAuthenticatorFilterer) ParseOwnershipTransferred(log types.Log) (*BatchAuthenticatorOwnershipTransferred, error) { + event := new(BatchAuthenticatorOwnershipTransferred) + if err := _BatchAuthenticator.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// BatchAuthenticatorRoleAdminChangedIterator is returned from FilterRoleAdminChanged and is used to iterate over the raw logs and unpacked data for RoleAdminChanged events raised by the BatchAuthenticator contract. +type BatchAuthenticatorRoleAdminChangedIterator struct { + Event *BatchAuthenticatorRoleAdminChanged // 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 *BatchAuthenticatorRoleAdminChangedIterator) 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(BatchAuthenticatorRoleAdminChanged) + 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(BatchAuthenticatorRoleAdminChanged) + 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 *BatchAuthenticatorRoleAdminChangedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *BatchAuthenticatorRoleAdminChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// BatchAuthenticatorRoleAdminChanged represents a RoleAdminChanged event raised by the BatchAuthenticator contract. +type BatchAuthenticatorRoleAdminChanged struct { + Role [32]byte + PreviousAdminRole [32]byte + NewAdminRole [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRoleAdminChanged is a free log retrieval operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. // -// Solidity: function transferOwnership(address newOwner) returns() -func (_BatchAuthenticator *BatchAuthenticatorTransactor) TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) { - return _BatchAuthenticator.contract.Transact(opts, "transferOwnership", newOwner) +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_BatchAuthenticator *BatchAuthenticatorFilterer) FilterRoleAdminChanged(opts *bind.FilterOpts, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (*BatchAuthenticatorRoleAdminChangedIterator, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var previousAdminRoleRule []interface{} + for _, previousAdminRoleItem := range previousAdminRole { + previousAdminRoleRule = append(previousAdminRoleRule, previousAdminRoleItem) + } + var newAdminRoleRule []interface{} + for _, newAdminRoleItem := range newAdminRole { + newAdminRoleRule = append(newAdminRoleRule, newAdminRoleItem) + } + + logs, sub, err := _BatchAuthenticator.contract.FilterLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule) + if err != nil { + return nil, err + } + return &BatchAuthenticatorRoleAdminChangedIterator{contract: _BatchAuthenticator.contract, event: "RoleAdminChanged", logs: logs, sub: sub}, nil } -// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// WatchRoleAdminChanged is a free log subscription operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. // -// Solidity: function transferOwnership(address newOwner) returns() -func (_BatchAuthenticator *BatchAuthenticatorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { - return _BatchAuthenticator.Contract.TransferOwnership(&_BatchAuthenticator.TransactOpts, newOwner) +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_BatchAuthenticator *BatchAuthenticatorFilterer) WatchRoleAdminChanged(opts *bind.WatchOpts, sink chan<- *BatchAuthenticatorRoleAdminChanged, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (event.Subscription, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var previousAdminRoleRule []interface{} + for _, previousAdminRoleItem := range previousAdminRole { + previousAdminRoleRule = append(previousAdminRoleRule, previousAdminRoleItem) + } + var newAdminRoleRule []interface{} + for _, newAdminRoleItem := range newAdminRole { + newAdminRoleRule = append(newAdminRoleRule, newAdminRoleItem) + } + + logs, sub, err := _BatchAuthenticator.contract.WatchLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule) + 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(BatchAuthenticatorRoleAdminChanged) + if err := _BatchAuthenticator.contract.UnpackLog(event, "RoleAdminChanged", 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 } -// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// ParseRoleAdminChanged is a log parse operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. // -// Solidity: function transferOwnership(address newOwner) returns() -func (_BatchAuthenticator *BatchAuthenticatorTransactorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { - return _BatchAuthenticator.Contract.TransferOwnership(&_BatchAuthenticator.TransactOpts, newOwner) +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_BatchAuthenticator *BatchAuthenticatorFilterer) ParseRoleAdminChanged(log types.Log) (*BatchAuthenticatorRoleAdminChanged, error) { + event := new(BatchAuthenticatorRoleAdminChanged) + if err := _BatchAuthenticator.contract.UnpackLog(event, "RoleAdminChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil } -// BatchAuthenticatorBatchInfoAuthenticatedIterator is returned from FilterBatchInfoAuthenticated and is used to iterate over the raw logs and unpacked data for BatchInfoAuthenticated events raised by the BatchAuthenticator contract. -type BatchAuthenticatorBatchInfoAuthenticatedIterator struct { - Event *BatchAuthenticatorBatchInfoAuthenticated // Event containing the contract specifics and raw log +// BatchAuthenticatorRoleGrantedIterator is returned from FilterRoleGranted and is used to iterate over the raw logs and unpacked data for RoleGranted events raised by the BatchAuthenticator contract. +type BatchAuthenticatorRoleGrantedIterator struct { + Event *BatchAuthenticatorRoleGranted // 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 @@ -540,7 +2214,7 @@ type BatchAuthenticatorBatchInfoAuthenticatedIterator struct { // 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 *BatchAuthenticatorBatchInfoAuthenticatedIterator) Next() bool { +func (it *BatchAuthenticatorRoleGrantedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -549,7 +2223,7 @@ func (it *BatchAuthenticatorBatchInfoAuthenticatedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(BatchAuthenticatorBatchInfoAuthenticated) + it.Event = new(BatchAuthenticatorRoleGranted) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -564,7 +2238,7 @@ func (it *BatchAuthenticatorBatchInfoAuthenticatedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(BatchAuthenticatorBatchInfoAuthenticated) + it.Event = new(BatchAuthenticatorRoleGranted) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -580,60 +2254,69 @@ func (it *BatchAuthenticatorBatchInfoAuthenticatedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *BatchAuthenticatorBatchInfoAuthenticatedIterator) Error() error { +func (it *BatchAuthenticatorRoleGrantedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *BatchAuthenticatorBatchInfoAuthenticatedIterator) Close() error { +func (it *BatchAuthenticatorRoleGrantedIterator) Close() error { it.sub.Unsubscribe() return nil } -// BatchAuthenticatorBatchInfoAuthenticated represents a BatchInfoAuthenticated event raised by the BatchAuthenticator contract. -type BatchAuthenticatorBatchInfoAuthenticated struct { - Commitment [32]byte - Signer common.Address - Raw types.Log // Blockchain specific contextual infos +// BatchAuthenticatorRoleGranted represents a RoleGranted event raised by the BatchAuthenticator contract. +type BatchAuthenticatorRoleGranted struct { + Role [32]byte + Account common.Address + Sender common.Address + Raw types.Log // Blockchain specific contextual infos } -// FilterBatchInfoAuthenticated is a free log retrieval operation binding the contract event 0x731978a77d438b0ea35a9034fb28d9cf9372e1649f18c213110adcfab65c5c5c. +// FilterRoleGranted is a free log retrieval operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. // -// Solidity: event BatchInfoAuthenticated(bytes32 indexed commitment, address indexed signer) -func (_BatchAuthenticator *BatchAuthenticatorFilterer) FilterBatchInfoAuthenticated(opts *bind.FilterOpts, commitment [][32]byte, signer []common.Address) (*BatchAuthenticatorBatchInfoAuthenticatedIterator, error) { +// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) +func (_BatchAuthenticator *BatchAuthenticatorFilterer) FilterRoleGranted(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*BatchAuthenticatorRoleGrantedIterator, error) { - var commitmentRule []interface{} - for _, commitmentItem := range commitment { - commitmentRule = append(commitmentRule, commitmentItem) + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) } - var signerRule []interface{} - for _, signerItem := range signer { - signerRule = append(signerRule, signerItem) + 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 := _BatchAuthenticator.contract.FilterLogs(opts, "BatchInfoAuthenticated", commitmentRule, signerRule) + logs, sub, err := _BatchAuthenticator.contract.FilterLogs(opts, "RoleGranted", roleRule, accountRule, senderRule) if err != nil { return nil, err } - return &BatchAuthenticatorBatchInfoAuthenticatedIterator{contract: _BatchAuthenticator.contract, event: "BatchInfoAuthenticated", logs: logs, sub: sub}, nil + return &BatchAuthenticatorRoleGrantedIterator{contract: _BatchAuthenticator.contract, event: "RoleGranted", logs: logs, sub: sub}, nil } -// WatchBatchInfoAuthenticated is a free log subscription operation binding the contract event 0x731978a77d438b0ea35a9034fb28d9cf9372e1649f18c213110adcfab65c5c5c. +// WatchRoleGranted is a free log subscription operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. // -// Solidity: event BatchInfoAuthenticated(bytes32 indexed commitment, address indexed signer) -func (_BatchAuthenticator *BatchAuthenticatorFilterer) WatchBatchInfoAuthenticated(opts *bind.WatchOpts, sink chan<- *BatchAuthenticatorBatchInfoAuthenticated, commitment [][32]byte, signer []common.Address) (event.Subscription, error) { +// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) +func (_BatchAuthenticator *BatchAuthenticatorFilterer) WatchRoleGranted(opts *bind.WatchOpts, sink chan<- *BatchAuthenticatorRoleGranted, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) { - var commitmentRule []interface{} - for _, commitmentItem := range commitment { - commitmentRule = append(commitmentRule, commitmentItem) + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) } - var signerRule []interface{} - for _, signerItem := range signer { - signerRule = append(signerRule, signerItem) + 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 := _BatchAuthenticator.contract.WatchLogs(opts, "BatchInfoAuthenticated", commitmentRule, signerRule) + logs, sub, err := _BatchAuthenticator.contract.WatchLogs(opts, "RoleGranted", roleRule, accountRule, senderRule) if err != nil { return nil, err } @@ -643,8 +2326,8 @@ func (_BatchAuthenticator *BatchAuthenticatorFilterer) WatchBatchInfoAuthenticat select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(BatchAuthenticatorBatchInfoAuthenticated) - if err := _BatchAuthenticator.contract.UnpackLog(event, "BatchInfoAuthenticated", log); err != nil { + event := new(BatchAuthenticatorRoleGranted) + if err := _BatchAuthenticator.contract.UnpackLog(event, "RoleGranted", log); err != nil { return err } event.Raw = log @@ -665,21 +2348,21 @@ func (_BatchAuthenticator *BatchAuthenticatorFilterer) WatchBatchInfoAuthenticat }), nil } -// ParseBatchInfoAuthenticated is a log parse operation binding the contract event 0x731978a77d438b0ea35a9034fb28d9cf9372e1649f18c213110adcfab65c5c5c. +// ParseRoleGranted is a log parse operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. // -// Solidity: event BatchInfoAuthenticated(bytes32 indexed commitment, address indexed signer) -func (_BatchAuthenticator *BatchAuthenticatorFilterer) ParseBatchInfoAuthenticated(log types.Log) (*BatchAuthenticatorBatchInfoAuthenticated, error) { - event := new(BatchAuthenticatorBatchInfoAuthenticated) - if err := _BatchAuthenticator.contract.UnpackLog(event, "BatchInfoAuthenticated", log); err != nil { +// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) +func (_BatchAuthenticator *BatchAuthenticatorFilterer) ParseRoleGranted(log types.Log) (*BatchAuthenticatorRoleGranted, error) { + event := new(BatchAuthenticatorRoleGranted) + if err := _BatchAuthenticator.contract.UnpackLog(event, "RoleGranted", log); err != nil { return nil, err } event.Raw = log return event, nil } -// BatchAuthenticatorOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the BatchAuthenticator contract. -type BatchAuthenticatorOwnershipTransferredIterator struct { - Event *BatchAuthenticatorOwnershipTransferred // Event containing the contract specifics and raw log +// BatchAuthenticatorRoleRevokedIterator is returned from FilterRoleRevoked and is used to iterate over the raw logs and unpacked data for RoleRevoked events raised by the BatchAuthenticator contract. +type BatchAuthenticatorRoleRevokedIterator struct { + Event *BatchAuthenticatorRoleRevoked // 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 @@ -693,7 +2376,7 @@ type BatchAuthenticatorOwnershipTransferredIterator struct { // 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 *BatchAuthenticatorOwnershipTransferredIterator) Next() bool { +func (it *BatchAuthenticatorRoleRevokedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -702,7 +2385,7 @@ func (it *BatchAuthenticatorOwnershipTransferredIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(BatchAuthenticatorOwnershipTransferred) + it.Event = new(BatchAuthenticatorRoleRevoked) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -717,7 +2400,7 @@ func (it *BatchAuthenticatorOwnershipTransferredIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(BatchAuthenticatorOwnershipTransferred) + it.Event = new(BatchAuthenticatorRoleRevoked) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -733,60 +2416,69 @@ func (it *BatchAuthenticatorOwnershipTransferredIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *BatchAuthenticatorOwnershipTransferredIterator) Error() error { +func (it *BatchAuthenticatorRoleRevokedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *BatchAuthenticatorOwnershipTransferredIterator) Close() error { +func (it *BatchAuthenticatorRoleRevokedIterator) Close() error { it.sub.Unsubscribe() return nil } -// BatchAuthenticatorOwnershipTransferred represents a OwnershipTransferred event raised by the BatchAuthenticator contract. -type BatchAuthenticatorOwnershipTransferred struct { - PreviousOwner common.Address - NewOwner common.Address - Raw types.Log // Blockchain specific contextual infos +// BatchAuthenticatorRoleRevoked represents a RoleRevoked event raised by the BatchAuthenticator contract. +type BatchAuthenticatorRoleRevoked struct { + Role [32]byte + Account common.Address + Sender common.Address + Raw types.Log // Blockchain specific contextual infos } -// FilterOwnershipTransferred is a free log retrieval operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// FilterRoleRevoked is a free log retrieval operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. // -// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) -func (_BatchAuthenticator *BatchAuthenticatorFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*BatchAuthenticatorOwnershipTransferredIterator, error) { +// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) +func (_BatchAuthenticator *BatchAuthenticatorFilterer) FilterRoleRevoked(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*BatchAuthenticatorRoleRevokedIterator, error) { - var previousOwnerRule []interface{} - for _, previousOwnerItem := range previousOwner { - previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) } - var newOwnerRule []interface{} - for _, newOwnerItem := range newOwner { - newOwnerRule = append(newOwnerRule, newOwnerItem) + 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 := _BatchAuthenticator.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + logs, sub, err := _BatchAuthenticator.contract.FilterLogs(opts, "RoleRevoked", roleRule, accountRule, senderRule) if err != nil { return nil, err } - return &BatchAuthenticatorOwnershipTransferredIterator{contract: _BatchAuthenticator.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil + return &BatchAuthenticatorRoleRevokedIterator{contract: _BatchAuthenticator.contract, event: "RoleRevoked", logs: logs, sub: sub}, nil } -// WatchOwnershipTransferred is a free log subscription operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// WatchRoleRevoked is a free log subscription operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. // -// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) -func (_BatchAuthenticator *BatchAuthenticatorFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *BatchAuthenticatorOwnershipTransferred, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { +// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) +func (_BatchAuthenticator *BatchAuthenticatorFilterer) WatchRoleRevoked(opts *bind.WatchOpts, sink chan<- *BatchAuthenticatorRoleRevoked, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) { - var previousOwnerRule []interface{} - for _, previousOwnerItem := range previousOwner { - previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) } - var newOwnerRule []interface{} - for _, newOwnerItem := range newOwner { - newOwnerRule = append(newOwnerRule, newOwnerItem) + 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 := _BatchAuthenticator.contract.WatchLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + logs, sub, err := _BatchAuthenticator.contract.WatchLogs(opts, "RoleRevoked", roleRule, accountRule, senderRule) if err != nil { return nil, err } @@ -796,8 +2488,8 @@ func (_BatchAuthenticator *BatchAuthenticatorFilterer) WatchOwnershipTransferred select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(BatchAuthenticatorOwnershipTransferred) - if err := _BatchAuthenticator.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + event := new(BatchAuthenticatorRoleRevoked) + if err := _BatchAuthenticator.contract.UnpackLog(event, "RoleRevoked", log); err != nil { return err } event.Raw = log @@ -818,12 +2510,12 @@ func (_BatchAuthenticator *BatchAuthenticatorFilterer) WatchOwnershipTransferred }), nil } -// ParseOwnershipTransferred is a log parse operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// ParseRoleRevoked is a log parse operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. // -// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) -func (_BatchAuthenticator *BatchAuthenticatorFilterer) ParseOwnershipTransferred(log types.Log) (*BatchAuthenticatorOwnershipTransferred, error) { - event := new(BatchAuthenticatorOwnershipTransferred) - if err := _BatchAuthenticator.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { +// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) +func (_BatchAuthenticator *BatchAuthenticatorFilterer) ParseRoleRevoked(log types.Log) (*BatchAuthenticatorRoleRevoked, error) { + event := new(BatchAuthenticatorRoleRevoked) + if err := _BatchAuthenticator.contract.UnpackLog(event, "RoleRevoked", log); err != nil { return nil, err } event.Raw = log @@ -973,3 +2665,147 @@ func (_BatchAuthenticator *BatchAuthenticatorFilterer) ParseSignerRegistrationIn event.Raw = log return event, nil } + +// BatchAuthenticatorUpgradedIterator is returned from FilterUpgraded and is used to iterate over the raw logs and unpacked data for Upgraded events raised by the BatchAuthenticator contract. +type BatchAuthenticatorUpgradedIterator struct { + Event *BatchAuthenticatorUpgraded // 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 *BatchAuthenticatorUpgradedIterator) 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(BatchAuthenticatorUpgraded) + 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(BatchAuthenticatorUpgraded) + 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 *BatchAuthenticatorUpgradedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *BatchAuthenticatorUpgradedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// BatchAuthenticatorUpgraded represents a Upgraded event raised by the BatchAuthenticator contract. +type BatchAuthenticatorUpgraded struct { + Implementation common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUpgraded is a free log retrieval operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. +// +// Solidity: event Upgraded(address indexed implementation) +func (_BatchAuthenticator *BatchAuthenticatorFilterer) FilterUpgraded(opts *bind.FilterOpts, implementation []common.Address) (*BatchAuthenticatorUpgradedIterator, error) { + + var implementationRule []interface{} + for _, implementationItem := range implementation { + implementationRule = append(implementationRule, implementationItem) + } + + logs, sub, err := _BatchAuthenticator.contract.FilterLogs(opts, "Upgraded", implementationRule) + if err != nil { + return nil, err + } + return &BatchAuthenticatorUpgradedIterator{contract: _BatchAuthenticator.contract, event: "Upgraded", logs: logs, sub: sub}, nil +} + +// WatchUpgraded is a free log subscription operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. +// +// Solidity: event Upgraded(address indexed implementation) +func (_BatchAuthenticator *BatchAuthenticatorFilterer) WatchUpgraded(opts *bind.WatchOpts, sink chan<- *BatchAuthenticatorUpgraded, implementation []common.Address) (event.Subscription, error) { + + var implementationRule []interface{} + for _, implementationItem := range implementation { + implementationRule = append(implementationRule, implementationItem) + } + + logs, sub, err := _BatchAuthenticator.contract.WatchLogs(opts, "Upgraded", implementationRule) + 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(BatchAuthenticatorUpgraded) + if err := _BatchAuthenticator.contract.UnpackLog(event, "Upgraded", 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 +} + +// ParseUpgraded is a log parse operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. +// +// Solidity: event Upgraded(address indexed implementation) +func (_BatchAuthenticator *BatchAuthenticatorFilterer) ParseUpgraded(log types.Log) (*BatchAuthenticatorUpgraded, error) { + event := new(BatchAuthenticatorUpgraded) + if err := _BatchAuthenticator.contract.UnpackLog(event, "Upgraded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/op-batcher/bindings/batch_inbox.go b/op-batcher/bindings/batch_inbox.go index 7009f1b2330..6ee8b4aebb0 100644 --- a/op-batcher/bindings/batch_inbox.go +++ b/op-batcher/bindings/batch_inbox.go @@ -31,8 +31,8 @@ var ( // BatchInboxMetaData contains all meta data concerning the BatchInbox contract. var BatchInboxMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_batchAuthenticator\",\"type\":\"address\",\"internalType\":\"contractIBatchAuthenticator\"},{\"name\":\"_owner\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"fallback\",\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"batchAuthenticator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIBatchAuthenticator\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"nonTeeBatcher\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false}]", - Bin: "0x60c060405234801561000f575f5ffd5b50604051610f9b380380610f9b8339818101604052810190610031919061029d565b61004d61004261013c60201b60201c565b61014360201b60201c565b5f8273ffffffffffffffffffffffffffffffffffffffff1663b1bd42856040518163ffffffff1660e01b8152600401602060405180830381865afa158015610097573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100bb91906102db565b90508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508273ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506101348261014360201b60201c565b505050610306565b5f33905090565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61023182610208565b9050919050565b5f61024282610227565b9050919050565b61025281610238565b811461025c575f5ffd5b50565b5f8151905061026d81610249565b92915050565b61027c81610227565b8114610286575f5ffd5b50565b5f8151905061029781610273565b92915050565b5f5f604083850312156102b3576102b2610204565b5b5f6102c08582860161025f565b92505060206102d185828601610289565b9150509250929050565b5f602082840312156102f0576102ef610204565b5b5f6102fd84828501610289565b91505092915050565b60805160a051610c596103425f395f8181605c0152818161019a0152818161029401526104e101525f818161037201526104bd0152610c595ff3fe608060405234801561000f575f5ffd5b5060043610610059575f3560e01c8063715018a6146104015780638da5cb5b1461040b578063b1bd428514610429578063e758457314610447578063f2fde38b146104655761005a565b5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637877a9ed6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e79190610704565b15610370575f5f1b5f4914610277575f5f67ffffffffffffffff8111156101115761011061072f565b5b6040519080825280601f01601f1916602001820160405280156101435781602001600182028036833780820191505090505b5090505f5f90505b5f5f1b81491461018d578181496040516020016101699291906107d7565b6040516020818303038152906040529150808061018590610834565b91505061014b565b5f828051906020012090507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f81f2083826040518263ffffffff1660e01b81526004016101f1919061088a565b602060405180830381865afa15801561020c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102309190610704565b61026f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610266906108fd565b60405180910390fd5b50505061036b565b5f5f3660405161028892919061094d565b604051809103902090507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f81f2083826040518263ffffffff1660e01b81526004016102eb919061088a565b602060405180830381865afa158015610306573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061032a9190610704565b610369576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610360906109af565b60405180910390fd5b505b6103ff565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146103fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103f590610a17565b60405180910390fd5b5b005b610409610481565b005b610413610494565b6040516104209190610a74565b60405180910390f35b6104316104bb565b60405161043e9190610a74565b60405180910390f35b61044f6104df565b60405161045c9190610ae8565b60405180910390f35b61047f600480360381019061047a9190610b2b565b610503565b005b610489610585565b6104925f610603565b565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b61050b610585565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610579576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161057090610bc6565b60405180910390fd5b61058281610603565b50565b61058d6106c4565b73ffffffffffffffffffffffffffffffffffffffff166105ab610494565b73ffffffffffffffffffffffffffffffffffffffff1614610601576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105f890610c2e565b60405180910390fd5b565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f33905090565b5f5ffd5b5f8115159050919050565b6106e3816106cf565b81146106ed575f5ffd5b50565b5f815190506106fe816106da565b92915050565b5f60208284031215610719576107186106cb565b5b5f610726848285016106f0565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f81519050919050565b5f81905092915050565b8281835e5f83830152505050565b5f6107888261075c565b6107928185610766565b93506107a2818560208601610770565b80840191505092915050565b5f819050919050565b5f819050919050565b6107d16107cc826107ae565b6107b7565b82525050565b5f6107e2828561077e565b91506107ee82846107c0565b6020820191508190509392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f819050919050565b5f61083e8261082b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036108705761086f6107fe565b5b600182019050919050565b610884816107ae565b82525050565b5f60208201905061089d5f83018461087b565b92915050565b5f82825260208201905092915050565b7f496e76616c696420626c6f6220626174636800000000000000000000000000005f82015250565b5f6108e76012836108a3565b91506108f2826108b3565b602082019050919050565b5f6020820190508181035f830152610914816108db565b9050919050565b828183375f83830152505050565b5f6109348385610766565b935061094183858461091b565b82840190509392505050565b5f610959828486610929565b91508190509392505050565b7f496e76616c69642063616c6c64617461206261746368000000000000000000005f82015250565b5f6109996016836108a3565b91506109a482610965565b602082019050919050565b5f6020820190508181035f8301526109c68161098d565b9050919050565b7f4261746368496e626f783a20756e617574686f72697a656420626174636865725f82015250565b5f610a016020836108a3565b9150610a0c826109cd565b602082019050919050565b5f6020820190508181035f830152610a2e816109f5565b9050919050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610a5e82610a35565b9050919050565b610a6e81610a54565b82525050565b5f602082019050610a875f830184610a65565b92915050565b5f819050919050565b5f610ab0610aab610aa684610a35565b610a8d565b610a35565b9050919050565b5f610ac182610a96565b9050919050565b5f610ad282610ab7565b9050919050565b610ae281610ac8565b82525050565b5f602082019050610afb5f830184610ad9565b92915050565b610b0a81610a54565b8114610b14575f5ffd5b50565b5f81359050610b2581610b01565b92915050565b5f60208284031215610b4057610b3f6106cb565b5b5f610b4d84828501610b17565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f610bb06026836108a3565b9150610bbb82610b56565b604082019050919050565b5f6020820190508181035f830152610bdd81610ba4565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f610c186020836108a3565b9150610c2382610be4565b602082019050919050565b5f6020820190508181035f830152610c4581610c0c565b905091905056fea164736f6c634300081c000a", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"batchAuthenticator_\",\"type\":\"address\",\"internalType\":\"contractIBatchAuthenticator\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"fallback\",\"stateMutability\":\"nonpayable\"}]", + Bin: "0x60a060405234801561000f575f5ffd5b50604051610289380380610289833981810160405281019061003191906100da565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505050610105565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6100988261006f565b9050919050565b5f6100a98261008e565b9050919050565b6100b98161009f565b81146100c3575f5ffd5b50565b5f815190506100d4816100b0565b92915050565b5f602082840312156100ef576100ee61006b565b5b5f6100fc848285016100c6565b91505092915050565b60805161016d61011c5f395f6012015261016d5ff3fe608060405234801561000f575f5ffd5b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166391a1a35d335f366040518463ffffffff1660e01b815260040161006d93929190610130565b5f6040518083038186803b158015610083575f5ffd5b505afa158015610095573d5f5f3e3d5ffd5b005b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6100c082610097565b9050919050565b6100d0816100b6565b82525050565b5f82825260208201905092915050565b828183375f83830152505050565b5f601f19601f8301169050919050565b5f61010f83856100d6565b935061011c8385846100e6565b610125836100f4565b840190509392505050565b5f6040820190506101435f8301866100c7565b8181036020830152610156818486610104565b905094935050505056fea164736f6c634300081c000a", } // BatchInboxABI is the input ABI used to generate the binding from. @@ -44,7 +44,7 @@ var BatchInboxABI = BatchInboxMetaData.ABI var BatchInboxBin = BatchInboxMetaData.Bin // DeployBatchInbox deploys a new Ethereum contract, binding an instance of BatchInbox to it. -func DeployBatchInbox(auth *bind.TransactOpts, backend bind.ContractBackend, _batchAuthenticator common.Address, _owner common.Address) (common.Address, *types.Transaction, *BatchInbox, error) { +func DeployBatchInbox(auth *bind.TransactOpts, backend bind.ContractBackend, batchAuthenticator_ common.Address) (common.Address, *types.Transaction, *BatchInbox, error) { parsed, err := BatchInboxMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -53,7 +53,7 @@ func DeployBatchInbox(auth *bind.TransactOpts, backend bind.ContractBackend, _ba return common.Address{}, nil, nil, errors.New("GetABI returned nil") } - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(BatchInboxBin), backend, _batchAuthenticator, _owner) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(BatchInboxBin), backend, batchAuthenticator_) if err != nil { return common.Address{}, nil, nil, err } @@ -202,141 +202,6 @@ func (_BatchInbox *BatchInboxTransactorRaw) Transact(opts *bind.TransactOpts, me return _BatchInbox.Contract.contract.Transact(opts, method, params...) } -// BatchAuthenticator is a free data retrieval call binding the contract method 0xe7584573. -// -// Solidity: function batchAuthenticator() view returns(address) -func (_BatchInbox *BatchInboxCaller) BatchAuthenticator(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _BatchInbox.contract.Call(opts, &out, "batchAuthenticator") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// BatchAuthenticator is a free data retrieval call binding the contract method 0xe7584573. -// -// Solidity: function batchAuthenticator() view returns(address) -func (_BatchInbox *BatchInboxSession) BatchAuthenticator() (common.Address, error) { - return _BatchInbox.Contract.BatchAuthenticator(&_BatchInbox.CallOpts) -} - -// BatchAuthenticator is a free data retrieval call binding the contract method 0xe7584573. -// -// Solidity: function batchAuthenticator() view returns(address) -func (_BatchInbox *BatchInboxCallerSession) BatchAuthenticator() (common.Address, error) { - return _BatchInbox.Contract.BatchAuthenticator(&_BatchInbox.CallOpts) -} - -// NonTeeBatcher is a free data retrieval call binding the contract method 0xb1bd4285. -// -// Solidity: function nonTeeBatcher() view returns(address) -func (_BatchInbox *BatchInboxCaller) NonTeeBatcher(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _BatchInbox.contract.Call(opts, &out, "nonTeeBatcher") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// NonTeeBatcher is a free data retrieval call binding the contract method 0xb1bd4285. -// -// Solidity: function nonTeeBatcher() view returns(address) -func (_BatchInbox *BatchInboxSession) NonTeeBatcher() (common.Address, error) { - return _BatchInbox.Contract.NonTeeBatcher(&_BatchInbox.CallOpts) -} - -// NonTeeBatcher is a free data retrieval call binding the contract method 0xb1bd4285. -// -// Solidity: function nonTeeBatcher() view returns(address) -func (_BatchInbox *BatchInboxCallerSession) NonTeeBatcher() (common.Address, error) { - return _BatchInbox.Contract.NonTeeBatcher(&_BatchInbox.CallOpts) -} - -// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. -// -// Solidity: function owner() view returns(address) -func (_BatchInbox *BatchInboxCaller) Owner(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _BatchInbox.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 (_BatchInbox *BatchInboxSession) Owner() (common.Address, error) { - return _BatchInbox.Contract.Owner(&_BatchInbox.CallOpts) -} - -// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. -// -// Solidity: function owner() view returns(address) -func (_BatchInbox *BatchInboxCallerSession) Owner() (common.Address, error) { - return _BatchInbox.Contract.Owner(&_BatchInbox.CallOpts) -} - -// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. -// -// Solidity: function renounceOwnership() returns() -func (_BatchInbox *BatchInboxTransactor) RenounceOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { - return _BatchInbox.contract.Transact(opts, "renounceOwnership") -} - -// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. -// -// Solidity: function renounceOwnership() returns() -func (_BatchInbox *BatchInboxSession) RenounceOwnership() (*types.Transaction, error) { - return _BatchInbox.Contract.RenounceOwnership(&_BatchInbox.TransactOpts) -} - -// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. -// -// Solidity: function renounceOwnership() returns() -func (_BatchInbox *BatchInboxTransactorSession) RenounceOwnership() (*types.Transaction, error) { - return _BatchInbox.Contract.RenounceOwnership(&_BatchInbox.TransactOpts) -} - -// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. -// -// Solidity: function transferOwnership(address newOwner) returns() -func (_BatchInbox *BatchInboxTransactor) TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) { - return _BatchInbox.contract.Transact(opts, "transferOwnership", newOwner) -} - -// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. -// -// Solidity: function transferOwnership(address newOwner) returns() -func (_BatchInbox *BatchInboxSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { - return _BatchInbox.Contract.TransferOwnership(&_BatchInbox.TransactOpts, newOwner) -} - -// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. -// -// Solidity: function transferOwnership(address newOwner) returns() -func (_BatchInbox *BatchInboxTransactorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { - return _BatchInbox.Contract.TransferOwnership(&_BatchInbox.TransactOpts, newOwner) -} - // Fallback is a paid mutator transaction binding the contract fallback function. // // Solidity: fallback() returns() @@ -357,156 +222,3 @@ func (_BatchInbox *BatchInboxSession) Fallback(calldata []byte) (*types.Transact func (_BatchInbox *BatchInboxTransactorSession) Fallback(calldata []byte) (*types.Transaction, error) { return _BatchInbox.Contract.Fallback(&_BatchInbox.TransactOpts, calldata) } - -// BatchInboxOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the BatchInbox contract. -type BatchInboxOwnershipTransferredIterator struct { - Event *BatchInboxOwnershipTransferred // 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 *BatchInboxOwnershipTransferredIterator) 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(BatchInboxOwnershipTransferred) - 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(BatchInboxOwnershipTransferred) - 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 *BatchInboxOwnershipTransferredIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *BatchInboxOwnershipTransferredIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// BatchInboxOwnershipTransferred represents a OwnershipTransferred event raised by the BatchInbox contract. -type BatchInboxOwnershipTransferred 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 (_BatchInbox *BatchInboxFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*BatchInboxOwnershipTransferredIterator, 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 := _BatchInbox.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) - if err != nil { - return nil, err - } - return &BatchInboxOwnershipTransferredIterator{contract: _BatchInbox.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 (_BatchInbox *BatchInboxFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *BatchInboxOwnershipTransferred, 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 := _BatchInbox.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(BatchInboxOwnershipTransferred) - if err := _BatchInbox.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 (_BatchInbox *BatchInboxFilterer) ParseOwnershipTransferred(log types.Log) (*BatchInboxOwnershipTransferred, error) { - event := new(BatchInboxOwnershipTransferred) - if err := _BatchInbox.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} diff --git a/op-batcher/bindings/espresso_nitro_tee_verifier.go b/op-batcher/bindings/espresso_nitro_tee_verifier.go index 8cb065f66e1..692d446268a 100644 --- a/op-batcher/bindings/espresso_nitro_tee_verifier.go +++ b/op-batcher/bindings/espresso_nitro_tee_verifier.go @@ -29,23 +29,10 @@ var ( _ = abi.ConvertType ) -// NitroValidatorPtrs is an auto generated low-level Go binding around an user-defined struct. -type NitroValidatorPtrs struct { - ModuleID *big.Int - Timestamp uint64 - Digest *big.Int - Pcrs []*big.Int - Cert *big.Int - Cabundle []*big.Int - PublicKey *big.Int - UserData *big.Int - Nonce *big.Int -} - // EspressoNitroTEEVerifierMetaData contains all meta data concerning the EspressoNitroTEEVerifier contract. var EspressoNitroTEEVerifierMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"enclaveHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"certManager\",\"type\":\"address\",\"internalType\":\"contractCertManager\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ATTESTATION_DIGEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"ATTESTATION_TBS_PREFIX\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"CABUNDLE_KEY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"CERTIFICATE_KEY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DIGEST_KEY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_AGE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MODULE_ID_KEY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"NONCE_KEY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PCRS_KEY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PUBLIC_KEY_KEY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TIMESTAMP_KEY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"USER_DATA_KEY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"acceptOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"certManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractICertManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"decodeAttestationTbs\",\"inputs\":[{\"name\":\"attestation\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"attestationTbs\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"deleteRegisteredSigners\",\"inputs\":[{\"name\":\"signers\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pendingOwner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registerSigner\",\"inputs\":[{\"name\":\"attestationTbs\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registeredEnclaveHash\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registeredSigners\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setEnclaveHash\",\"inputs\":[{\"name\":\"enclaveHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"valid\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"validateAttestation\",\"inputs\":[{\"name\":\"attestationTbs\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structNitroValidator.Ptrs\",\"components\":[{\"name\":\"moduleID\",\"type\":\"uint256\",\"internalType\":\"CborElement\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"digest\",\"type\":\"uint256\",\"internalType\":\"CborElement\"},{\"name\":\"pcrs\",\"type\":\"uint256[]\",\"internalType\":\"CborElement[]\"},{\"name\":\"cert\",\"type\":\"uint256\",\"internalType\":\"CborElement\"},{\"name\":\"cabundle\",\"type\":\"uint256[]\",\"internalType\":\"CborElement[]\"},{\"name\":\"publicKey\",\"type\":\"uint256\",\"internalType\":\"CborElement\"},{\"name\":\"userData\",\"type\":\"uint256\",\"internalType\":\"CborElement\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"CborElement\"}]}],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"DeletedRegisteredSigner\",\"inputs\":[{\"name\":\"signer\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"EnclaveHashSet\",\"inputs\":[{\"name\":\"enclaveHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"valid\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferStarted\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SignerRegistered\",\"inputs\":[{\"name\":\"signer\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"enclaveHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AttestationTooOld\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedToParseEnclaveReport\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidDataLength\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidEnclaveHash\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidHeaderVersion\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidReportDataHash\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSignerAddress\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReportDataTooShort\",\"inputs\":[]}]", - Bin: "0x60a060405234801562000010575f80fd5b5060405162005603380380620056038339810160408190526200003391620000e3565b6001600160a01b0381166080526200004b3362000076565b5f828152600260205260409020805460ff191660011790556200006e3362000076565b50506200011f565b600180546001600160a01b0319169055620000918162000094565b50565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f8060408385031215620000f5575f80fd5b825160208401519092506001600160a01b038116811462000114575f80fd5b809150509250929050565b6080516154bd620001465f395f81816102b7015281816119fc0152611af601526154bd5ff3fe608060405234801561000f575f80fd5b506004361061019a575f3560e01c8063966989ee116100e8578063ba58e82a11610093578063e30c39781161006e578063e30c397814610476578063e7370be014610494578063e8b6d3fe146104a7578063f2fde38b146104ce575f80fd5b8063ba58e82a14610415578063cebf08d714610428578063e0a655ff1461044f575f80fd5b8063a903a277116100c3578063a903a277146103a6578063ae951149146103c7578063b22bed7e146103ee575f80fd5b8063966989ee146103365780639adb2d68146103585780639cc3eb481461037f575f80fd5b80636be1e68b1161014857806379ba50971161012357806379ba5097146102fe5780638da5cb5b1461030657806393b5552e14610323575f80fd5b80636be1e68b14610281578063715018a6146102a8578063739e8484146102b2575f80fd5b80632d4bad8a116101785780632d4bad8a1461020c5780633893af6d146102335780636378aad51461025a575f80fd5b80630123d0c11461019e57806305f7aead146101d55780630dcaeaf2146101f5575b5f80fd5b6101c06101ac366004614a44565b60036020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6101e86101e3366004614b99565b6104e1565b6040516101cc9190614c33565b6101fe61070881565b6040519081526020016101cc565b6101fe7f63ce814bd924c1ef12c43686e4cbf48ed1639a78387b0570c23ca921e8ce071c81565b6101fe7f501a3a7a4e0cf54b03f2488098bdd59bc1c2e8d741a300d6b25926d531733fef81565b6101fe7f7ab1577440dd7bedf920cb6de2f9fc6bf7ba98c78c85a3fa1f8311aac95e175981565b6101fe7f682a7e258d80bd2421d3103cbe71e3e3b82138116756b97b8256f061dc2f11fb81565b6102b0610c19565b005b6102d97f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101cc565b6102b0610c2c565b5f5473ffffffffffffffffffffffffffffffffffffffff166102d9565b6102b0610331366004614cff565b610ce1565b6101c0610344366004614d2d565b60026020525f908152604090205460ff1681565b6101fe7f8ce577cf664c36ba5130242bf5790c2675e9f4e6986a842b607821bee25372ee81565b6101fe7f8a8cb7aa1da17ada103546ae6b4e13ccc2fafa17adf5f93925e0a0a4e5681a6a81565b6103b96103b4366004614d44565b610d5f565b6040516101cc929190614de1565b6101fe7f925cec779426f44d8d555e01d2683a3a765ce2fa7562ca7352aeb09dfc57ea6a81565b6101fe7f61585f8bc67a4b6d5891a4639a074964ac66fc2241dc0b36c157dc101325367a81565b6102b0610423366004614e53565b610e9c565b6101fe7f5e4ea5393e4327b3014bc32f2264336b0d1ee84a4cfd197c8ad7e1e16829a16a81565b6101fe7f4ebf727c48eac2c66272456b06a885c5cc03e54d140f63b63b6fd10c1227958e81565b60015473ffffffffffffffffffffffffffffffffffffffff166102d9565b6102b06104a2366004614eba565b6110e1565b6101fe7fc7b28019ccfdbd30ffc65951d94bb85c9e2b8434111a000b5afd533ce65f57a481565b6102b06104dc366004614a44565b6111d1565b6105336040518061012001604052805f81526020015f67ffffffffffffffff1681526020015f8152602001606081526020015f8152602001606081526020015f81526020015f81526020015f81525090565b5f61053d84611280565b90505f61054c825f0151611916565b116105b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e6f206d6f64756c65206964000000000000000000000000000000000000000060448201526064015b60405180910390fd5b5f816020015167ffffffffffffffff161161062f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e6f2074696d657374616d70000000000000000000000000000000000000000060448201526064016105af565b5f8160a00151511161069d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e6f20636162756e646c6500000000000000000000000000000000000000000060448201526064016105af565b60408101517f501a3a7a4e0cf54b03f2488098bdd59bc1c2e8d741a300d6b25926d531733fef906106cf908690611955565b14610736576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f696e76616c69642064696765737400000000000000000000000000000000000060448201526064016105af565b8060600151516001111580156107525750602081606001515111155b6107b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f696e76616c69642070637273000000000000000000000000000000000000000060448201526064016105af565b6107c58160c00151611982565b806107f657506107d88160c00151611916565b6001111580156107f657506104006107f38260c00151611916565b11155b61085c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f696e76616c696420707562206b6579000000000000000000000000000000000060448201526064016105af565b6108698160e00151611982565b80610882575061020061087f8260e00151611916565b11155b6108e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f696e76616c69642075736572206461746100000000000000000000000000000060448201526064016105af565b6108f6816101000151611982565b80610910575061020061090d826101000151611916565b11155b610976576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f696e76616c6964206e6f6e63650000000000000000000000000000000000000060448201526064016105af565b5f5b816060015151811015610a62576109ab8260600151828151811061099e5761099e614f62565b6020026020010151611916565b602014806109d157506109cd8260600151828151811061099e5761099e614f62565b6030145b806109f457506109f08260600151828151811061099e5761099e614f62565b6040145b610a5a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f696e76616c69642070637200000000000000000000000000000000000000000060448201526064016105af565b600101610978565b505f610a7b82608001518661199f90919063ffffffff16565b90505f8260a001515167ffffffffffffffff811115610a9c57610a9c614a5d565b604051908082528060200260200182016040528015610acf57816020015b6060815260200190600190039081610aba5790505b5090505f5b8360a0015151811015610bdf57610afa8460a00151828151811061099e5761099e614f62565b600111158015610b245750610400610b218560a00151838151811061099e5761099e614f62565b11155b610b8a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e76616c696420636162756e646c652063657274000000000000000000000060448201526064016105af565b610bba8460a001518281518110610ba357610ba3614f62565b60200260200101518861199f90919063ffffffff16565b828281518110610bcc57610bcc614f62565b6020908102919091010152600101610ad4565b505f610beb83836119c6565b90505f610bfa885f8a51611b95565b9050610c0b82608001518289611cbc565b509293505050505b92915050565b610c21611d3a565b610c2a5f611dba565b565b600154339073ffffffffffffffffffffffffffffffffffffffff168114610cd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060448201527f6e6577206f776e6572000000000000000000000000000000000000000000000060648201526084016105af565b610cde81611dba565b50565b610ce9611d3a565b5f8281526002602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168415159081179091558251858152918201527f2282c24f65eac8254df1107716a961b677b872ed0e1d2a9f6bafc154441eb7fd910160405180910390a15050565b6060805f60019050835f81518110610d7957610d79614f62565b01602001517fff00000000000000000000000000000000000000000000000000000000000000167fd20000000000000000000000000000000000000000000000000000000000000003610dca575060025b5f610dd58583611deb565b90505f610de28683611dfa565b90505f610def8783611e0d565b90505f610dfc8883611e0d565b90505f85610e0986611e24565b610e139190614fbc565b90505f610e1f85611e24565b610e2885611e24565b610e329190614fbc565b90505f610e408b8985611e48565b90505f610e57610e4f88611e24565b8d9085611e48565b9050610e6582858386611f23565b9a50610e8c605086901c69ffffffffffffffffffff16610e8487611916565b8e9190611e48565b9950505050505050505050915091565b5f610f0e85858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050604080516020601f890181900481028201810190925287815292508791508690819084018382808284375f920191909152506104e192505050565b90505f610f7082606001515f81518110610f2a57610f2a614f62565b602002602001015187878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525092939250506119559050565b5f8181526002602052604090205490915060ff16610fba576040517f8911a9fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b42610708836020015167ffffffffffffffff16610fd79190614fcf565b101561100f576040517f696bbf1f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60c08201515f9061108c9060501c69ffffffffffffffffffff16611034906001614fcf565b60016110438660c00151611916565b61104d9190614fbc565b89898080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152509294939250506121109050565b73ffffffffffffffffffffffffffffffffffffffff165f90815260036020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905550505050505050565b6110e9611d3a565b5f5b81518110156111cd5760035f83838151811061110957611109614f62565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81549060ff02191690557f4872495ab7a697b6ed37286c6738fc94eaf291e5e4908abc1e2b479894f002dd82828151811061118c5761118c614f62565b60200260200101516040516111bd919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b60405180910390a16001016110eb565b5050565b6111d9611d3a565b6001805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915561123b5f5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6112d26040518061012001604052805f81526020015f67ffffffffffffffff1681526020015f8152602001606081526020015f8152602001606081526020015f81526020015f81526020015f81525090565b7f63ce814bd924c1ef12c43686e4cbf48ed1639a78387b0570c23ca921e8ce071c6112ff835f6012612110565b14611366576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f696e76616c6964206174746573746174696f6e2070726566697800000000000060448201526064016105af565b5f611372836012611deb565b90505f61138f8469ffffffffffffffffffff605085901c16612190565b90506113e36040518061012001604052805f81526020015f67ffffffffffffffff1681526020015f8152602001606081526020015f8152602001606081526020015f81526020015f81526020015f81525090565b5f6113ed84611e24565b90505b806113fa84611e24565b101561190d5761140a868461219f565b92505f6114178785611955565b90507f731a883099b3c945aecfdbd40a86f3d98a160b1967957bd49f87de411dac8d1281016114545761144a878561219f565b8084529350611907565b7f97d581da727f42dbde2cefc3418e1c1c47dec7ee98a946847da90f9e23d0ee05810161149357611485878561219f565b604084018190529350611907565b7f6da313886bd90bb272aaa1fe2d97c5c589a31d058a9d358cad514f6203a8159681016114d2576114c48785611e0d565b608084018190529350611907565b7f384d7fe6330242cf0039a6ae26b447a361d47bcbeee5fff4a502acc319a0a85c81016115115761150387856121b6565b60c084018190529350611907565b7fa1b15ac6c1bcd84cfeb43cd0dd9bcc94f2e117b5b302e68375281e1e97d65e9681016115505761154287856121b6565b60e084018190529350611907565b7f854ea88bbf22841206df34921d06039408456738737a5c05e07cee5536a1e8a781016115905761158187856121b6565b61010084018190529350611907565b7fb1408d83b7153d399d8dba94f9577a3a33fc1ab2ebf09c49c4902ef3edd86a7281016115e1576115c187856121cc565b93506115cd8460a01c90565b67ffffffffffffffff166020840152611907565b7f75734855e25e8525efcab95194b1ec333d0505e8520a06c6da1f5f5b1a97e59681016116ba5761161287856121e2565b935061161e8460a01c90565b67ffffffffffffffff1667ffffffffffffffff81111561164057611640614a5d565b604051908082528060200260200182016040528015611669578160200160208202803683370190505b5060a08401525f5b8360a00151518110156116b4576116888886611e0d565b9450848460a0015182815181106116a1576116a1614f62565b6020908102919091010152600101611671565b50611907565b7f9ea7a0743985b492a76e5b9c65f8b69b539903ddbe23f4c93ea823efecdac98681016118a5576116eb8785611dfa565b93506116f78460a01c90565b67ffffffffffffffff1667ffffffffffffffff81111561171957611719614a5d565b604051908082528060200260200182016040528015611742578160200160208202803683370190505b5060608401525f5b8360600151518110156116b45761176188866121cc565b94505f61176e8660a01c90565b67ffffffffffffffff16905084606001515181106117e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e76616c696420706372206b65792076616c7565000000000000000000000060448201526064016105af565b846060015181815181106117fe576117fe614f62565b60200260200101515f1461186e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f6475706c696361746520706372206b657900000000000000000000000000000060448201526064016105af565b6118788987611e0d565b9550858560600151828151811061189157611891614f62565b60209081029190910101525060010161174a565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f696e76616c6964206174746573746174696f6e206b657900000000000000000060448201526064016105af565b506113f0565b50949350505050565b5f81604060ff8216148061192d57508060ff166060145b1561194d5761193c8360a01c90565b67ffffffffffffffff169392505050565b505f92915050565b5f61197b605083901c69ffffffffffffffffffff1661197384611916565b859190612110565b9392505050565b5f8160f660ff8216148061197b57508060ff1660f7149392505050565b606061197b605083901c69ffffffffffffffffffff166119be84611916565b859190611e48565b6040805160a0810182525f808252602082018190529181018290526060808201839052608082015290805b8351811015611ab8577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630890702c858381518110611a4857611a48614f62565b6020026020010151846040518363ffffffff1660e01b8152600401611a6e929190614fe2565b6020604051808303815f875af1158015611a8a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611aae9190615003565b91506001016119f1565b506040517f28c5463700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906328c5463790611b2d9087908590600401614fe2565b5f604051808303815f875af1158015611b48573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611b8d919081019061506d565b949350505050565b604080516101008101825267cbbb9d5dc1059ed8815267629a292a367cd5076020820152679159015a3070dd179181019190915267152fecd8f70e59396060828101919091526767332667ffc00b316080830152678eb44a876858151160a083015267db0c2e0d64f98fa760c08301526747b5481dbefa4fa460e083015290611c20858585846121f9565b80516020808301516040808501516060860151608087015160a088015184517fffffffffffffffff00000000000000000000000000000000000000000000000060c0998a1b81169882019890985295881b8716602887015292871b8616603086015290861b85166038850152851b84169183019190915290921b1660488201526050016040516020818303038152906040529150509392505050565b611ccf611cc7612ad2565b838386612bed565b611d35576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f696e76616c69642073696700000000000000000000000000000000000000000060448201526064016105af565b505050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610c2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105af565b600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055610cde81612e7a565b5f61197b838360406001612eee565b5f61197b83611e0884611e24565b612190565b5f61197b83611e1b84611e24565b60406001612eee565b5f611e2e82611916565b610c139069ffffffffffffffffffff605085901c16614fcf565b8251606090611e578385614fcf565b1115611ebf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e646578206f7574206f6620626f756e64730000000000000000000000000060448201526064016105af565b8167ffffffffffffffff811115611ed857611ed8614a5d565b6040519080825280601f01601f191660200182016040528015611f02576020820181803683370190505b50905060208082019085850101611f1a8282866132bd565b50509392505050565b606081611f3185600d614fcf565b611f3b9190614fcf565b67ffffffffffffffff811115611f5357611f53614a5d565b6040519080825280601f01601f191660200182016040528015611f7d576020820181803683370190505b509050608460f81b815f81518110611f9757611f97614f62565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350606a60f81b81600181518110611fdd57611fdd614f62565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053507f40000000000000000000000000000000000000000000000000000000000000008161203886600c614fcf565b8151811061204857612048614f62565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535060408051808201909152600a81527f5369676e61747572653100000000000000000000000000000000000000000000602080830191825283810191908881019087016120ce6120c6856002614fcf565b84600a6132bd565b6120e36120dc85600c614fcf565b838b6132bd565b612103896120f286600d614fcf565b6120fc9190614fcf565b82896132bd565b5050505050949350505050565b82515f9061211e8385614fcf565b1115612186576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e646578206f7574206f6620626f756e64730000000000000000000000000060448201526064016105af565b5091016020012090565b5f61197b838360a06001612eee565b5f61197b836121ad84611e24565b60606001612eee565b5f61197b836121c484611e24565b60405f612eee565b5f61197b836121da84611e24565b5f6001612eee565b5f61197b836121f084611e24565b60806001612eee565b60408051610a008101825267428a2f98d728ae228152677137449123ef65cd602082015267b5c0fbcfec4d3b2f9181019190915267e9b5dba58189dbbc6060820152673956c25bf348b53860808201526759f111f1b605d01960a082015267923f82a4af194f9b60c082015267ab1c5ed5da6d811860e082015267d807aa98a30302426101008201526712835b0145706fbe61012082015267243185be4ee4b28c61014082015267550c7dc3d5ffb4e26101608201526772be5d74f27b896f6101808201526780deb1fe3b1696b16101a0820152679bdc06a725c712356101c082015267c19bf174cf6926946101e082015267e49b69c19ef14ad261020082015267efbe4786384f25e3610220820152670fc19dc68b8cd5b561024082015267240ca1cc77ac9c65610260820152672de92c6f592b0275610280820152674a7484aa6ea6e4836102a0820152675cb0a9dcbd41fbd46102c08201526776f988da831153b56102e082015267983e5152ee66dfab61030082015267a831c66d2db4321061032082015267b00327c898fb213f61034082015267bf597fc7beef0ee461036082015267c6e00bf33da88fc261038082015267d5a79147930aa7256103a08201526706ca6351e003826f6103c082015267142929670a0e6e706103e08201526727b70a8546d22ffc610400820152672e1b21385c26c926610420820152674d2c6dfc5ac42aed6104408201526753380d139d95b3df61046082015267650a73548baf63de61048082015267766a0abb3c77b2a86104a08201526781c2c92e47edaee66104c08201526792722c851482353b6104e082015267a2bfe8a14cf1036461050082015267a81a664bbc42300161052082015267c24b8b70d0f8979161054082015267c76c51a30654be3061056082015267d192e819d6ef521861058082015267d69906245565a9106105a082015267f40e35855771202a6105c082015267106aa07032bbd1b86105e08201526719a4c116b8d2d0c8610600820152671e376c085141ab53610620820152672748774cdf8eeb996106408201526734b0bcb5e19b48a861066082015267391c0cb3c5c95a63610680820152674ed8aa4ae3418acb6106a0820152675b9cca4f7763e3736106c082015267682e6ff3d6b2b8a36106e082015267748f82ee5defb2fc6107008201526778a5636f43172f606107208201526784c87814a1f0ab72610740820152678cc702081a6439ec6107608201526790befffa23631e2861078082015267a4506cebde82bde96107a082015267bef9a3f7b2c679156107c082015267c67178f2e372532b6107e082015267ca273eceea26619c61080082015267d186b8c721c0c20761082082015267eada7dd6cde0eb1e61084082015267f57d4f7fee6ed1786108608201526706f067aa72176fba610880820152670a637dc5a2c898a66108a082015267113f9804bef90dae6108c0820152671b710b35131c471b6108e08201526728db77f523047d846109008201526732caab7b40c72493610920820152673c9ebe0a15c9bebc61094082015267431d67c49c100d4c610960820152674cc5d4becb3e42b661098082015267597f299cfc657e2a6109a0820152675fcb6fab3ad6faec6109c0820152676c44198c4a4758176109e082015284516126b78486614fcf565b111561271f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4f55545f4f465f424f554e44530000000000000000000000000000000000000060448201526064016105af565b5f61272b868686613331565b90506080815161273b9190615147565b156127a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f50414444494e475f4552524f520000000000000000000000000000000000000060448201526064016105af565b6127aa614973565b6127b2614992565b6127ba6149b1565b5f6127c660808961515a565b6127d190608061516d565b90505f5b85518201811015612ac557818110156127fa576127f58b84838d0161343b565b612807565b612807868484840361343b565b5f5b60108110156128575783816010811061282457612824614f62565b602002015186826050811061283b5761283b614f62565b67ffffffffffffffff9092166020929092020152600101612809565b5060105b605081101561290d5785601082036050811061287957612879614f62565b60200201516128a087600f84036050811061289657612896614f62565b6020020151613499565b8760078403605081106128b5576128b5614f62565b60200201516128dc8960028603605081106128d2576128d2614f62565b60200201516134c7565b0101018682605081106128f1576128f1614f62565b67ffffffffffffffff909216602092909202015260010161285b565b505f5b600881101561295e5788816008811061292b5761292b614f62565b602002015185826008811061294257612942614f62565b67ffffffffffffffff9092166020929092020152600101612910565b505f5b6050811015612a69575f86826050811061297d5761297d614f62565b602002015189836050811061299457612994614f62565b6020020151608088015160a089015160c08a015182191691161860808901516129bc906134ed565b89600760200201510101010190505f6129f4878260200201518860016020020151896002602002015180821690831691909216181890565b87516129ff9061350f565b60c08901805167ffffffffffffffff90811660e08c015260a08b018051821690925260808b018051821690925260608b0180518701821690925260408b018051821690925260208b01805182169092528a5181169091529101909201909116865250600101612961565b505f5b6008811015612abc57848160088110612a8757612a87614f62565b6020020151898260088110612a9e57612a9e614f62565b6020020180519190910167ffffffffffffffff169052600101612a6c565b506080016127d5565b5050505050505050505050565b612b126040518060e00160405280606081526020016060815260200160608152602001606081526020016060815260200160608152602001606081525090565b604080516101408101909152603060e08201818152829161542161010084013981526020016040518060600160405280603081526020016153616030913981526020016040518060600160405280603081526020016153f16030913981526020016040518060600160405280603081526020016153916030913981526020016040518060600160405280603081526020016154816030913981526020016040518060600160405280603081526020016154516030913981526020016040518060600160405280603081526020016153c1603091399052919050565b5f612c1560405180608001604052805f81526020015f81526020015f81526020015f81525090565b612c1e84613531565b60208301528152612c2e83613531565b6060830152604080830191909152805160e0810190915286515f91908190612c55906135e1565b8152602001612c6789602001516135e1565b8152602001612c7989604001516135e1565b8152602001612c8b89606001516135e1565b8152602001612c9d89608001516135e1565b8152602001612caf8960a001516135e1565b8152602001612cc18960c001516135e1565b81525090505f612cd48260800151613675565b8351602081015190519192501590151680612cff57505f612cfc845f01518460a00151613747565b12155b80612d1c5750612d1c83602001515f602082015191511591141690565b80612d3757505f612d3584602001518460c00151613747565b135b15612d47575f9350505050611b8d565b612d68818360800151845f01518560200151876040015188606001516137ec565b612d77575f9350505050611b8d565b86516030811015612dba57604080516030808252606082019092525f9160208201818036833750919250612db791505060208a01838303605001846138cc565b97505b505f612dd882612dc98a6135e1565b86602001518660a001516138da565b90505f612df283865f015187602001518760a001516138da565b90505f612dff60036139ea565b90505f612e2985876080015184895f01518a604001518b606001518d604001518e60600151613a0a565b9050612e4185876080015184895f0151858989613bf3565b50809450505050612e5783838660a00151613de1565b845160208082015190840151915184511491141695505050505050949350505050565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f80858581518110612f0257612f02614f62565b602001015160f81c60f81b60e060f81b1660f81c90505f868681518110612f2b57612f2b614f62565b60209101015160f81c601f16905060ff821660e003613071578060ff1660161480612f5957508060ff166017145b612fe5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f6f6e6c79206e756c6c207072696d69746976652076616c75657320617265207360448201527f7570706f7274656400000000000000000000000000000000000000000000000060648201526084016105af565b831561304d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f6e756c6c2076616c756520666f7220726571756972656420656c656d656e740060448201526064016105af565b61306860ff83831716613061886001614fcf565b60501b1790565b92505050611b8d565b8460ff168260ff16146130e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f756e65787065637465642074797065000000000000000000000000000000000060448201526064016105af565b601c8160ff161061314d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f756e737570706f7274656420747970650000000000000000000000000000000060448201526064016105af565b8060ff1660180361319f5761306860ff831661316a886002614fcf565b896131768a6001614fcf565b8151811061318657613186614f62565b016020015160f81c60a01b60509190911b919091171790565b8060ff166019036131e65761306860ff83166131bc886003614fcf565b6131d16131ca8a6001614fcf565b8b90613e2d565b61ffff1660a01b60509190911b919091171790565b8060ff16601a0361322f5761306860ff8316613203886005614fcf565b6132186132118a6001614fcf565b8b90613eaf565b63ffffffff1660a01b60509190911b919091171790565b8060ff16601b0361327c5761306860ff831661324c886009614fcf565b61326161325a8a6001614fcf565b8b90613f31565b67ffffffffffffffff1660a01b60509190911b919091171790565b6132b260ff831661328e886001614fcf565b60501b1774ff000000000000000000000000000000000000000060a084901b161790565b979650505050505050565b602081106132f557815183526132d4602084614fcf565b92506132e1602083614fcf565b91506132ee602082614fbc565b90506132bd565b8015611d35575f6001613309836020614fbc565b613315906101006152a2565b61331f9190614fbc565b83518551821691191617845250505050565b60605f61333f83600861516d565b60c01b90505f613350608085615147565b90505f607082101561336e57613367826077614fbc565b905061337c565b6133798260f7614fbc565b90505b5f8167ffffffffffffffff81111561339657613396614a5d565b6040519080825280601f01601f1916602001820160405280156133c0576020820181803683370190505b5090505f6133e4846133d2898b614fcf565b6133dc9190614fbc565b8a9086611e48565b60405190915061341e9082907f800000000000000000000000000000000000000000000000000000000000000090859089906020016152ad565b604051602081830303815290604052955050505050509392505050565b5f5b60108110156134935761346561345482600861516d565b61345e9084614fcf565b8590613f31565b83826010811061347757613477614f62565b67ffffffffffffffff909216602092909202015260010161343d565b50505050565b5f60078267ffffffffffffffff16901c6134b4836008613fb3565b6134bf846001613fb3565b181892915050565b5f60068267ffffffffffffffff16901c6134e283603d613fb3565b6134bf846013613fb3565b5f6134f9826029613fb3565b613504836012613fb3565b6134bf84600e613fb3565b5f61351b826027613fb3565b613526836022613fb3565b6134bf84601c613fb3565b5f80825160601461359e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f553338343a206e6f74203736380000000000000000000000000000000000000060448201526064016105af565b604080516080810182529250820190505f825260208301516010830152603083015160208301525f81526050830151601082015260608301516020820152915091565b5f815160301461364d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f553338343a206e6f74203338340000000000000000000000000000000000000060448201526064016105af565b6040805180820190915290505f81526020820151601082015260308201516020820152919050565b5f61368861048060408051918201905290565b90506136be8261369860026139ea565b602082810151908201518103610420860181905291519251911191900303610400830152565b6060610120820152602061014082018190526040610160830181905260016101e0840152835161020084015283820180516102208501526102408401829052610260840192909252610280830181905283516103008401528151610320840152610360830181905261038083018190526103a08301529151610440820152905161046082015290565b815181515f91908082111561376157600192505050610c13565b80821015613793577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff92505050610c13565b505060208381015190830151808211156137b257600192505050610c13565b808210156137e4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff92505050610c13565b505092915050565b602082015182515f91159015168061381257506020868101519084015187518551149114165b80613824575060208201518251159015165b8061383d57506020868101519083015187518451149114165b1561384957505f6138c2565b5f61385688846002613fef565b90505f61386589866003613fef565b602088015188519192501590151661388f5761388c816138868b888b614033565b8a614124565b90505b60208601518651159015166138ac576138a981878a614124565b90505b6020818101519083015191519251911491141690505b9695505050505050565b8082828560045afa50505050565b5f6138e6858484614186565b90506139ab8482876060018251602093840151835193850151608081811c6fffffffffffffffffffffffffffffffff80851682810294821695841c86810287830280871c820188810180891b9287169290920160408d01528c8402878c02958e0297909402998b02988210921191909101861b90861c018601878101858101958610981196119590950195909501831b82841c01850184810180851b939092169290920198870198909852959093029086109190941001811b93901c92909201019052565b60608552602085602001526040856040015260018560c0015281518560e0015260208201518561010001526040816101208760055afa50949350505050565b5f6139fb6040808051918201905290565b5f815260208101929092525090565b613a126149d0565b613a1b83614213565b613a2483614213565b6020808401519081019190915252613a3b85614213565b613a4485614213565b6101008301516020810191909152525f5b6008811015613be6575f5b6008811015613bdd57600281830110613bd557600382901b81178215613b2b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff830160031b8217613aec8d8d8d8d898660408110613ac157613ac1614f62565b6020020151518a8760408110613ad957613ad9614f62565b6020020151600160200201518f8f614239565b868460408110613afe57613afe614f62565b6020020151878560408110613b1557613b15614f62565b6020020151600160200201919091525250613bd3565b600383901b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff830117613b988d8d8d8d898660408110613b6d57613b6d614f62565b6020020151518a8760408110613b8557613b85614f62565b6020020151600160200201518d8d614239565b868460408110613baa57613baa614f62565b6020020151878560408110613bc157613bc1614f62565b60200201516001602002019190915252505b505b600101613a60565b50600101613a55565b5098975050505050505050565b815181515f918291829190613c0c8c8c8c8c8780614362565b9095509350690ffffffffffffffffff860b483901c1660b782901c1792508215613c7a57613c748c8c8c8c8c8860408110613c4957613c49614f62565b6020020151518d8960408110613c6157613c61614f62565b6020020151600160200201518b8b614239565b90955093505b60045b60b88111613d0f57613c938d8d8d8d8a8a614421565b80965081975050508060b80382901c60071660038260b80385901c600716901b179350835f14613d0757613d018d8d8d8d8d8960408110613cd657613cd6614f62565b6020020151518e8a60408110613cee57613cee614f62565b6020020151600160200201518c8c614239565b90965094505b600301613c7d565b50505060208581015190850151613d2a8c8c8c8c8989614362565b9095509350600860fc83901c1660ff82901c1792508215613d6457613d5e8c8c8c8c8c8860408110613c4957613c49614f62565b90955093505b60045b6101008111613dd157613d7e8d8d8d8d8a8a614421565b8096508197505050806101000382901c6007166003826101000385901c600716901b179350835f14613dc957613dc38d8d8d8d8d8960408110613cd657613cd6614f62565b90965094505b600301613d67565b5050505097509795505050505050565b604083526020836020015260408360400152815183606001526020820151836080015260018360a0015280518360c0015260208101518360e001526040826101008560055afa50505050565b5f613e39826002614fcf565b83511015613ea3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e646578206f7574206f6620626f756e64730000000000000000000000000060448201526064016105af565b50016020015160f01c90565b5f613ebb826004614fcf565b83511015613f25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e646578206f7574206f6620626f756e64730000000000000000000000000060448201526064016105af565b50016020015160e01c90565b5f613f3d826008614fcf565b83511015613fa7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e646578206f7574206f6620626f756e64730000000000000000000000000060448201526064016105af565b50016020015160c01c90565b5f67ffffffffffffffff8381169083161c613fcf836040615338565b67ffffffffffffffff168467ffffffffffffffff16901b17905092915050565b5f6140006040808051918201905290565b9050610240840193508251846060015260208301518460800152818460a001526040816101008660055afa509392505050565b5f6140446040808051918201905290565b905061410a838361018087018251602093840151835193850151608081811c6fffffffffffffffffffffffffffffffff80851682810294821695841c86810287830280871c820188810180891b9287169290920160408d01528c8402878c02958e0297909402998b02988210921191909101861b90861c018601878101858101958610981196119590950195909501831b82841c01850184810180851b939092169290920198870198909852959093029086109190941001811b93901c92909201019052565b610120840193506040816101208660055afa509392505050565b5f6141356040808051918201905290565b6020858101518582015181019183018290528551875101911001815290505f61415e8284613747565b1261197b5760208082018051918401518203908190528351835192909111910303815261197b565b5f6141976040808051918201905290565b90506141cb826141a760026139ea565b60208281015190820151810360c089018190529151925191119190030360a0860152565b604084526040846020015260408460400152825184606001526020830151846080015281518460e0015260208201518461010001526040816101208660055afa509392505050565b5f6142246040808051918201905290565b90508151815260208201516020820152919050565b5f80851580614246575083155b1561429e5785158015614257575083155b1561426657505f905080614355565b85156142835761427586614213565b61427e86614213565b614295565b61428c84614213565b61429584614213565b91509150614355565b602084810151908701518551885114911416156142e457602083810151908601518451875114911416156142da576142958a8a8a8a8a8a614362565b505f905080614355565b5f6142f086858c6145fd565b90505f6142fe88878d6145fd565b905061430b8c838361467d565b6143178c836002613fef565b935061432484898d6146b0565b61432f84878d6146b0565b61433a88858d6145fd565b92506143478c8484614726565b61435283888d6146b0565b50505b9850989650505050505050565b5f80835f0361437557505f905080614416565b60208301518351159015161561438f57505f905080614416565b5f61439c89866002613fef565b90506143a9898289614726565b6143b481878a614802565b5f6143bf858a614857565b90506143cc8a838361467d565b6143d88a836002613fef565b93506143e584878b6146b0565b6143f084878b6146b0565b6143fb86858b6145fd565b92506144088a8484614726565b61441383868b6146b0565b50505b965096945050505050565b5f80835f0361443457505f905080614416565b60208301518351159015161561444e57505f905080614416565b5f61445b89866002613fef565b9050614468898289614726565b61447381878a614802565b5f61447e858a614857565b905061448b8a838361467d565b6144978a836002613fef565b93506144a484878b6146b0565b6144af84878b6146b0565b6144ba86858b6145fd565b92506144c78a8484614726565b6144d283868b6146b0565b6020830151835115901516156144ef575f80935093505050614416565b6144fc8a838660026148b7565b6145078a838a614726565b61451282888b614802565b61451d81848b6148e7565b6145288a838361467d565b6145358a878460026148b7565b61454086858b6146b0565b61454b86858b6146b0565b6145578585888c614906565b6145628a8684614726565b61456d85848b6146b0565b60208501518551159015161561458a575f80935093505050614416565b6145978a838860026148b7565b6145a28a838a614726565b6145ad82888b614802565b6145b881868b6148e7565b6145c38a838361467d565b6145d08a858460026148b7565b6145db84878b6146b0565b6145e684878b6146b0565b6145f28387868c614906565b6144088a8484614726565b5f61460e6040808051918201905290565b90505f61461b8585613747565b12614644576020808501518185015181039183018290528451865192909110910303815261197b565b6020848101518382015181018383018181528551885101928210929092018085529286015181039182905285519111910303815261197b565b6103608301925080518360600152602081015183608001526040816101208560055afa50611d3561036084038383614726565b5f6146bb8484613747565b126146e2575060208281018051918301518203908190529151835191909211919003039052565b6147048382602082810180519183015182019081905291518351019110019052565b5060208281018051918301518203908190529151835191909211919003039052565b6147ea828261018086018251602093840151835193850151608081811c6fffffffffffffffffffffffffffffffff80851682810294821695841c86810287830280871c820188810180891b9287169290920160408d01528c8402878c02958e0297909402998b02988210921191909101861b90861c018601878101858101958610981196119590950195909501831b82841c01850184810180851b939092169290920198870198909852959093029086109190941001811b93901c92909201019052565b610120830192506040826101208560055afa50505050565b6148248383602082810180519183015182019081905291518351019110019052565b5f61482f8483613747565b12611d3557602080840180519183015182039081905282518551929091119103038352505050565b5f6148686040808051918201905290565b6020808501518551600190811b60ff83901c1784521b9082015290505f61488f8284613747565b12610c1357602080820180519184015182039081905283518351929091119103038152610c13565b610240840193508151846060015260208201518460800152808460a001526040836101008660055afa5050505050565b6020808301518351600190811b60ff83901c1786521b90840152614824565b5f6149118484613747565b1261493a5760208084015181840151810391860182905283518551929091109103038452613493565b60208381015182820151810186830181815284518751019282109290920180885292850151810391829052845191119103038452613493565b60405180610a0001604052806050906020820280368337509192915050565b6040518061010001604052806008906020820280368337509192915050565b6040518061020001604052806010906020820280368337509192915050565b6040518061080001604052806040905b6149e86149fe565b8152602001906001900390816149e05790505090565b60405180604001604052806002906020820280368337509192915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114614a3f575f80fd5b919050565b5f60208284031215614a54575f80fd5b61197b82614a1c565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160a0810167ffffffffffffffff81118282101715614aad57614aad614a5d565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614afa57614afa614a5d565b604052919050565b5f67ffffffffffffffff821115614b1b57614b1b614a5d565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f82601f830112614b56575f80fd5b8135614b69614b6482614b02565b614ab3565b818152846020838601011115614b7d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f8060408385031215614baa575f80fd5b823567ffffffffffffffff80821115614bc1575f80fd5b614bcd86838701614b47565b93506020850135915080821115614be2575f80fd5b50614bef85828601614b47565b9150509250929050565b5f815180845260208085019450602084015f5b83811015614c2857815187529582019590820190600101614c0c565b509495945050505050565b60208152815160208201525f6020830151614c5a604084018267ffffffffffffffff169052565b50604083015160608301526060830151610120806080850152614c81610140850183614bf9565b9150608085015160a085015260a08501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08584030160c0860152614cc68382614bf9565b60c087015160e08781019190915287015161010080880191909152909601519190940152509192915050565b8015158114610cde575f80fd5b5f8060408385031215614d10575f80fd5b823591506020830135614d2281614cf2565b809150509250929050565b5f60208284031215614d3d575f80fd5b5035919050565b5f60208284031215614d54575f80fd5b813567ffffffffffffffff811115614d6a575f80fd5b611b8d84828501614b47565b5f5b83811015614d90578181015183820152602001614d78565b50505f910152565b5f8151808452614daf816020860160208601614d76565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b604081525f614df36040830185614d98565b8281036020840152614e058185614d98565b95945050505050565b5f8083601f840112614e1e575f80fd5b50813567ffffffffffffffff811115614e35575f80fd5b602083019150836020828501011115614e4c575f80fd5b9250929050565b5f805f8060408587031215614e66575f80fd5b843567ffffffffffffffff80821115614e7d575f80fd5b614e8988838901614e0e565b90965094506020870135915080821115614ea1575f80fd5b50614eae87828801614e0e565b95989497509550505050565b5f6020808385031215614ecb575f80fd5b823567ffffffffffffffff80821115614ee2575f80fd5b818501915085601f830112614ef5575f80fd5b813581811115614f0757614f07614a5d565b8060051b9150614f18848301614ab3565b8181529183018401918481019088841115614f31575f80fd5b938501935b83851015614f5657614f4785614a1c565b82529385019390850190614f36565b98975050505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b81810381811115610c1357610c13614f8f565b80820180821115610c1357610c13614f8f565b604081525f614ff46040830185614d98565b90508260208301529392505050565b5f60208284031215615013575f80fd5b5051919050565b8051600781900b8114614a3f575f80fd5b5f82601f83011261503a575f80fd5b8151615048614b6482614b02565b81815284602083860101111561505c575f80fd5b611b8d826020830160208701614d76565b5f6020828403121561507d575f80fd5b815167ffffffffffffffff80821115615094575f80fd5b9083019060a082860312156150a7575f80fd5b6150af614a8a565b82516150ba81614cf2565b8152602083015182811681146150ce575f80fd5b60208201526150df6040840161501a565b6040820152606083015160608201526080830151828111156150ff575f80fd5b61510b8782860161502b565b60808301525095945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f826151555761515561511a565b500690565b5f826151685761516861511a565b500490565b8082028115828204841417610c1357610c13614f8f565b600181815b808511156151dd57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156151c3576151c3614f8f565b808516156151d057918102915b93841c9390800290615189565b509250929050565b5f826151f357506001610c13565b816151ff57505f610c13565b8160018114615215576002811461521f5761523b565b6001915050610c13565b60ff84111561523057615230614f8f565b50506001821b610c13565b5060208310610133831016604e8410600b841016171561525e575081810a610c13565b6152688383615184565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561529a5761529a614f8f565b029392505050565b5f61197b83836151e5565b5f85516152be818460208a01614d76565b7fff00000000000000000000000000000000000000000000000000000000000000861690830190815284516152fa816001840160208901614d76565b8082019150507fffffffffffffffff000000000000000000000000000000000000000000000000841660018201526009810191505095945050505050565b67ffffffffffffffff82811682821603908082111561535957615359614f8f565b509291505056feb3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef3617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5fffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffcffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffffa164736f6c6343000816000a", + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"GUARDIAN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"_nitroEnclaveVerifier\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractINitroEnclaveVerifier\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"acceptOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addGuardian\",\"inputs\":[{\"name\":\"guardian\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deleteEnclaveHashes\",\"inputs\":[{\"name\":\"enclaveHashes\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"},{\"name\":\"service\",\"type\":\"uint8\",\"internalType\":\"enumServiceType\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"enclaveHashSigners\",\"inputs\":[{\"name\":\"enclaveHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"service\",\"type\":\"uint8\",\"internalType\":\"enumServiceType\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getGuardians\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleMember\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleMemberCount\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleMembers\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"guardianCount\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"nitroEnclaveVerifier\",\"type\":\"address\",\"internalType\":\"contractINitroEnclaveVerifier\"},{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isGuardian\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pendingOwner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registerService\",\"inputs\":[{\"name\":\"output\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"proofBytes\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"service\",\"type\":\"uint8\",\"internalType\":\"enumServiceType\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registeredEnclaveHash\",\"inputs\":[{\"name\":\"enclaveHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"service\",\"type\":\"uint8\",\"internalType\":\"enumServiceType\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registeredEnclaveHashes\",\"inputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumServiceType\"},{\"name\":\"enclaveHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"valid\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registeredService\",\"inputs\":[{\"name\":\"signer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"service\",\"type\":\"uint8\",\"internalType\":\"enumServiceType\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registeredServices\",\"inputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumServiceType\"},{\"name\":\"signer\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"valid\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"removeGuardian\",\"inputs\":[{\"name\":\"guardian\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setEnclaveHash\",\"inputs\":[{\"name\":\"enclaveHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"valid\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"service\",\"type\":\"uint8\",\"internalType\":\"enumServiceType\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setNitroEnclaveVerifier\",\"inputs\":[{\"name\":\"nitroEnclaveVerifier\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"event\",\"name\":\"DeletedEnclaveHash\",\"inputs\":[{\"name\":\"enclaveHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"service\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"enumServiceType\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DeletedRegisteredService\",\"inputs\":[{\"name\":\"signer\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"service\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"enumServiceType\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"EnclaveHashSet\",\"inputs\":[{\"name\":\"enclaveHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"valid\",\"type\":\"bool\",\"indexed\":true,\"internalType\":\"bool\"},{\"name\":\"service\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"enumServiceType\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"GuardianAdded\",\"inputs\":[{\"name\":\"guardian\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"GuardianRemoved\",\"inputs\":[{\"name\":\"guardian\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"NitroEnclaveVerifierSet\",\"inputs\":[{\"name\":\"nitroEnclaveVerifierAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferStarted\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ServiceRegistered\",\"inputs\":[{\"name\":\"signer\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"enclaveHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"service\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"enumServiceType\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidEnclaveHash\",\"inputs\":[{\"name\":\"enclaveHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"service\",\"type\":\"uint8\",\"internalType\":\"enumServiceType\"}]},{\"type\":\"error\",\"name\":\"InvalidGuardianAddress\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidNitroEnclaveVerifierAddress\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSignerAddress\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotGuardian\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"NotGuardianOrOwner\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OwnableInvalidOwner\",\"inputs\":[{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"OwnableUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"VerificationFailed\",\"inputs\":[{\"name\":\"result\",\"type\":\"uint8\",\"internalType\":\"enumVerificationResult\"}]}]", + Bin: "0x60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff16815250348015610042575f5ffd5b5061005161006460201b60201c565b61005f61006460201b60201c565b6101df565b5f61007361016260201b60201c565b9050805f0160089054906101000a900460ff16156100bd576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff8016815f015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff161461015f5767ffffffffffffffff815f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d267ffffffffffffffff60405161015691906101c6565b60405180910390a15b50565b5f5f61017261017b60201b60201c565b90508091505090565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005f1b905090565b5f67ffffffffffffffff82169050919050565b6101c0816101a4565b82525050565b5f6020820190506101d95f8301846101b7565b92915050565b6080516143a46102055f395f818161200401528181612059015261221301526143a45ff3fe608060405260043610610203575f3560e01c80638da5cb5b11610117578063a526d83b1161009f578063cd8f69971161006e578063cd8f699714610787578063d547741f146107af578063dac79fc8146107d7578063e30c3978146107ff578063f2fde38b1461082957610203565b8063a526d83b146106d1578063a628a19e146106f9578063ad3cb1cc14610721578063ca15c8731461074b57610203565b80639546922e116100e65780639546922e146105c95780639ca6e7c2146106055780639f3eb6721461062f578063a217fddf1461066b578063a3246ad31461069557610203565b80638da5cb5b146104eb5780638fdeb2c1146105155780639010d07c1461055157806391d148541461058d57610203565b806336568abe1161019a57806354387ad71161016957806354387ad71461043157806361ff41801461045b5780637140415614610497578063715018a6146104bf57806379ba5097146104d557610203565b806336568abe1461039b578063485cc955146103c35780634f1ef286146103eb57806352d1902d1461040757610203565b80630f1f0f86116101d65780630f1f0f86146102e5578063248a9ca31461030d57806324ea54f4146103495780632f2ff15d1461037357610203565b806301ffc9a7146102075780630665f04b14610243578063094d5de21461026d5780630c68ba21146102a9575b5f5ffd5b348015610212575f5ffd5b5061022d60048036038101906102289190612fd1565b610851565b60405161023a9190613016565b60405180910390f35b34801561024e575f5ffd5b506102576108ca565b6040516102649190613116565b60405180910390f35b348015610278575f5ffd5b50610293600480360381019061028e919061318c565b6109de565b6040516102a09190613116565b60405180910390f35b3480156102b4575f5ffd5b506102cf60048036038101906102ca91906131f4565b610a39565b6040516102dc9190613016565b60405180910390f35b3480156102f0575f5ffd5b5061030b60048036038101906103069190613249565b610a6b565b005b348015610318575f5ffd5b50610333600480360381019061032e9190613299565b610bb9565b60405161034091906132d3565b60405180910390f35b348015610354575f5ffd5b5061035d610be3565b60405161036a91906132d3565b60405180910390f35b34801561037e575f5ffd5b50610399600480360381019061039491906132ec565b610c07565b005b3480156103a6575f5ffd5b506103c160048036038101906103bc91906132ec565b610c29565b005b3480156103ce575f5ffd5b506103e960048036038101906103e49190613365565b610ca4565b005b610405600480360381019061040091906134df565b610ed4565b005b348015610412575f5ffd5b5061041b610ef3565b60405161042891906132d3565b60405180910390f35b34801561043c575f5ffd5b50610445610f24565b6040516104529190613551565b60405180910390f35b348015610466575f5ffd5b50610481600480360381019061047c919061356a565b610f53565b60405161048e9190613016565b60405180910390f35b3480156104a2575f5ffd5b506104bd60048036038101906104b891906131f4565b610f7c565b005b3480156104ca575f5ffd5b506104d3611024565b005b3480156104e0575f5ffd5b506104e9611037565b005b3480156104f6575f5ffd5b506104ff6110c5565b60405161050c91906135b7565b60405180910390f35b348015610520575f5ffd5b5061053b600480360381019061053691906135d0565b6110fa565b6040516105489190613016565b60405180910390f35b34801561055c575f5ffd5b5061057760048036038101906105729190613638565b611124565b60405161058491906135b7565b60405180910390f35b348015610598575f5ffd5b506105b360048036038101906105ae91906132ec565b61115d565b6040516105c09190613016565b60405180910390f35b3480156105d4575f5ffd5b506105ef60048036038101906105ea9190613676565b6111ce565b6040516105fc9190613016565b60405180910390f35b348015610610575f5ffd5b50610619611254565b604051610626919061370f565b60405180910390f35b34801561063a575f5ffd5b506106556004803603810190610650919061318c565b611279565b6040516106629190613016565b60405180910390f35b348015610676575f5ffd5b5061067f6112d2565b60405161068c91906132d3565b60405180910390f35b3480156106a0575f5ffd5b506106bb60048036038101906106b69190613299565b6112d8565b6040516106c89190613116565b60405180910390f35b3480156106dc575f5ffd5b506106f760048036038101906106f291906131f4565b611307565b005b348015610704575f5ffd5b5061071f600480360381019061071a91906131f4565b611413565b005b34801561072c575f5ffd5b506107356114fa565b6040516107429190613788565b60405180910390f35b348015610756575f5ffd5b50610771600480360381019061076c9190613299565b611533565b60405161077e9190613551565b60405180910390f35b348015610792575f5ffd5b506107ad60048036038101906107a8919061386c565b611561565b005b3480156107ba575f5ffd5b506107d560048036038101906107d091906132ec565b61186b565b005b3480156107e2575f5ffd5b506107fd60048036038101906107f8919061391f565b61188d565b005b34801561080a575f5ffd5b50610813611d73565b60405161082091906135b7565b60405180910390f35b348015610834575f5ffd5b5061084f600480360381019061084a91906131f4565b611da8565b005b5f7f5a05180f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108c357506108c282611e61565b5b9050919050565b60605f6108f67f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a5041611533565b90505f8167ffffffffffffffff811115610913576109126133bb565b5b6040519080825280602002602001820160405280156109415781602001602082028036833780820191505090505b5090505f5f90505b828110156109d55761097b7f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a504182611124565b82828151811061098e5761098d6139b0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508080600101915050610949565b50809250505090565b60605f60025f8460018111156109f7576109f66139dd565b5b6001811115610a0957610a086139dd565b5b81526020019081526020015f205f8581526020019081526020015f209050610a3081611eda565b91505092915050565b5f610a647f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a50418361115d565b9050919050565b610a957f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a50413361115d565b158015610ad55750610aa56110c5565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15610b1757336040517fd53780c4000000000000000000000000000000000000000000000000000000008152600401610b0e91906135b7565b60405180910390fd5b815f5f836001811115610b2d57610b2c6139dd565b5b6001811115610b3f57610b3e6139dd565b5b81526020019081526020015f205f8581526020019081526020015f205f6101000a81548160ff021916908315150217905550806001811115610b8457610b836139dd565b5b821515847f09821cb8037e04ceb9fc83e9a7c52c75b73a08d32a0f2f0f30cc83f2e442609060405160405180910390a4505050565b5f5f610bc3611ef9565b9050805f015f8481526020019081526020015f2060010154915050919050565b7f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a504181565b610c1082610bb9565b610c1981611f20565b610c238383611f34565b50505050565b610c31611f84565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610c95576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c9f8282611f8b565b505050565b5f610cad611fdb565b90505f815f0160089054906101000a900460ff161590505f825f015f9054906101000a900467ffffffffffffffff1690505f5f8267ffffffffffffffff16148015610cf55750825b90505f60018367ffffffffffffffff16148015610d2857505f3073ffffffffffffffffffffffffffffffffffffffff163b145b905081158015610d36575080155b15610d6d576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001855f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508315610dba576001855f0160086101000a81548160ff0219169083151502179055505b5f73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1603610e28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1f90613a7a565b60405180910390fd5b610e3186611fee565b8660035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508315610ecb575f855f0160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d26001604051610ec29190613ae4565b60405180910390a15b50505050505050565b610edc612002565b610ee5826120e8565b610eef82826120f3565b5050565b5f610efc612211565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b905090565b5f610f4e7f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a5041611533565b905090565b5f602052815f5260405f20602052805f5260405f205f915091509054906101000a900460ff1681565b610f84612298565b610fae7f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a50418261115d565b1561102157610fdd7f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a50418261186b565b8073ffffffffffffffffffffffffffffffffffffffff167fb8107d0c6b40be480ce3172ee66ba6d64b71f6b1685a851340036e6e2e3e3c5260405160405180910390a25b50565b61102c612298565b6110355f61231f565b565b5f611040611f84565b90508073ffffffffffffffffffffffffffffffffffffffff16611061611d73565b73ffffffffffffffffffffffffffffffffffffffff16146110b957806040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016110b091906135b7565b60405180910390fd5b6110c28161231f565b50565b5f5f6110cf612385565b9050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691505090565b6001602052815f5260405f20602052805f5260405f205f915091509054906101000a900460ff1681565b5f5f61112e6123ac565b905061115483825f015f8781526020019081526020015f206123d390919063ffffffff16565b91505092915050565b5f5f611167611ef9565b9050805f015f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1691505092915050565b5f60015f8360018111156111e5576111e46139dd565b5b60018111156111f7576111f66139dd565b5b81526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f5f5f83600181111561128f5761128e6139dd565b5b60018111156112a1576112a06139dd565b5b81526020019081526020015f205f8481526020019081526020015f205f9054906101000a900460ff16905092915050565b5f5f1b81565b60605f6112e36123ac565b90506112ff815f015f8581526020019081526020015f20611eda565b915050919050565b61130f612298565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611374576040517f1b08105400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61139e7f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a50418261115d565b611410576113cc7f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a504182610c07565b8073ffffffffffffffffffffffffffffffffffffffff167f038596bb31e2e7d3d9f184d4c98b310103f6d7f5830e5eec32bffe6f1728f96960405160405180910390a25b50565b61141b612298565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611480576040517f7ff9c81a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f677ca5a363c501f3c7f7291bec1cd7edc4fe7a33f375571edd1d7d3067031fe6816040516114ef91906135b7565b60405180910390a150565b6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b5f5f61153d6123ac565b9050611559815f015f8581526020019081526020015f206123ea565b915050919050565b61158b7f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a50413361115d565b1580156115cb575061159b6110c5565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b1561160d57336040517fd53780c400000000000000000000000000000000000000000000000000000000815260040161160491906135b7565b60405180910390fd5b5f5f90505b8251811015611866575f60025f846001811115611632576116316139dd565b5b6001811115611644576116436139dd565b5b81526020019081526020015f205f858481518110611665576116646139b0565b5b602002602001015181526020019081526020015f2090505b5f611687826123ea565b1115611792575f6116a15f836123d390919063ffffffff16565b905060015f8560018111156116b9576116b86139dd565b5b60018111156116cb576116ca6139dd565b5b81526020019081526020015f205f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81549060ff021916905561173581836123fd90919063ffffffff16565b50836001811115611749576117486139dd565b5b8173ffffffffffffffffffffffffffffffffffffffff167fbc364e6a17bd1d2abf3aff8b02c8660f8b601f3cfe343ea66df756115643f3a460405160405180910390a35061167d565b5f5f8460018111156117a7576117a66139dd565b5b60018111156117b9576117b86139dd565b5b81526020019081526020015f205f8584815181106117da576117d96139b0565b5b602002602001015181526020019081526020015f205f6101000a81549060ff0219169055826001811115611811576118106139dd565b5b848381518110611824576118236139b0565b5b60200260200101517f4f4ccf0f17d7016865671af778a980fe75a07abbbd28dcf80f9311ada39fa4e860405160405180910390a3508080600101915050611612565b505050565b61187482610bb9565b61187d81611f20565b6118878383611f8b565b50505050565b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d114be38787600288886040518663ffffffff1660e01b81526004016118f1959493929190613b7f565b5f604051808303815f875af115801561190c573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611934919061413a565b90505f6003811115611949576119486139dd565b5b815f0151600381111561195f5761195e6139dd565b5b146119a457805f01516040517f470e419c00000000000000000000000000000000000000000000000000000000815260040161199b91906141c7565b60405180910390fd5b5f8160e001515f815181106119bc576119bb6139b0565b5b6020026020010151602001515f01518260e001515f815181106119e2576119e16139b0565b5b60200260200101516020015160200151604051602001611a03929190614220565b6040516020818303038152906040528051906020012090505f5f846001811115611a3057611a2f6139dd565b5b6001811115611a4257611a416139dd565b5b81526020019081526020015f205f8281526020019081526020015f205f9054906101000a900460ff16611aae5780836040517f9f2e2b21000000000000000000000000000000000000000000000000000000008152600401611aa5929190614291565b60405180910390fd5b5f60018360c0015151611ac191906142e5565b67ffffffffffffffff811115611ada57611ad96133bb565b5b6040519080825280601f01601f191660200182016040528015611b0c5781602001600182028036833780820191505090505b5090505f600190505b8360c0015151811015611b9e578360c001518181518110611b3957611b386139b0565b5b602001015160f81c60f81b82600183611b5291906142e5565b81518110611b6357611b626139b0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053508080600101915050611b15565b505f818051906020012090505f815f1c905060015f876001811115611bc657611bc56139dd565b5b6001811115611bd857611bd76139dd565b5b81526020019081526020015f205f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611d67576001805f886001811115611c4857611c476139dd565b5b6001811115611c5a57611c596139dd565b5b81526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550611d0e8160025f896001811115611cd257611cd16139dd565b5b6001811115611ce457611ce36139dd565b5b81526020019081526020015f205f8781526020019081526020015f2061242a90919063ffffffff16565b50856001811115611d2257611d216139dd565b5b848273ffffffffffffffffffffffffffffffffffffffff167f0fa700ad17f1b256f57e62054a779bd9fe08e585f8cacb3def28cca47b25cdc160405160405180910390a45b50505050505050505050565b5f5f611d7d612457565b9050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691505090565b611db0612298565b5f611db9612457565b905081815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff16611e1b6110c5565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b5f7f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611ed35750611ed28261247e565b5b9050919050565b60605f611ee8835f016124e7565b905060608190508092505050919050565b5f7f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800905090565b611f3181611f2c611f84565b612540565b50565b5f5f611f3e6123ac565b90505f611f4b8585612591565b90508015611f7957611f7784835f015f8881526020019081526020015f2061242a90919063ffffffff16565b505b809250505092915050565b5f33905090565b5f5f611f956123ac565b90505f611fa28585612689565b90508015611fd057611fce84835f015f8881526020019081526020015f206123fd90919063ffffffff16565b505b809250505092915050565b5f5f611fe5612781565b90508091505090565b611ff66127aa565b611fff816127ea565b50565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614806120af57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661209661281f565b73ffffffffffffffffffffffffffffffffffffffff1614155b156120e6576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6120f0612298565b50565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561215b57506040513d601f19601f820116820180604052508101906121589190614318565b60015b61219c57816040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815260040161219391906135b7565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b811461220257806040517faa1d49a40000000000000000000000000000000000000000000000000000000081526004016121f991906132d3565b60405180910390fd5b61220c8383612872565b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614612296576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6122a0611f84565b73ffffffffffffffffffffffffffffffffffffffff166122be6110c5565b73ffffffffffffffffffffffffffffffffffffffff161461231d576122e1611f84565b6040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161231491906135b7565b60405180910390fd5b565b5f6123286110c5565b9050612333826128e4565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612374576123725f5f1b82611f8b565b505b6123805f5f1b83611f34565b505050565b5f7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300905090565b5f7fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000905090565b5f6123e0835f0183612921565b5f1c905092915050565b5f6123f6825f01612948565b9050919050565b5f612422835f018373ffffffffffffffffffffffffffffffffffffffff165f1b612957565b905092915050565b5f61244f835f018373ffffffffffffffffffffffffffffffffffffffff165f1b612a53565b905092915050565b5f7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00905090565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6060815f0180548060200260200160405190810160405280929190818152602001828054801561253457602002820191905f5260205f20905b815481526020019060010190808311612520575b50505050509050919050565b61254a828261115d565b61258d5780826040517fe2517d3f000000000000000000000000000000000000000000000000000000008152600401612584929190614343565b60405180910390fd5b5050565b5f5f61259b611ef9565b90506125a7848461115d565b61267e576001815f015f8681526020019081526020015f205f015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555061261a611f84565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050612683565b5f9150505b92915050565b5f5f612693611ef9565b905061269f848461115d565b15612776575f815f015f8681526020019081526020015f205f015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550612712611f84565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16857ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a4600191505061277b565b5f9150505b92915050565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005f1b905090565b6127b2612aba565b6127e8576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6127f26127aa565b6127fb81612ad8565b612803612aec565b61280b612af6565b612813612b00565b61281c81612b0a565b50565b5f61284b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b612b4e565b5f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61287b82612b57565b8173ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a25f815111156128d7576128d18282612c20565b506128e0565b6128df612d11565b5b5050565b5f6128ed612457565b9050805f015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905561291d82612d4d565b5050565b5f825f018281548110612937576129366139b0565b5b905f5260205f200154905092915050565b5f815f01805490509050919050565b5f5f836001015f8481526020019081526020015f205490505f8114612a48575f60018261298491906142e5565b90505f6001865f018054905061299a91906142e5565b9050808214612a00575f865f0182815481106129b9576129b86139b0565b5b905f5260205f200154905080875f0184815481106129da576129d96139b0565b5b905f5260205f20018190555083876001015f8381526020019081526020015f2081905550505b855f01805480612a1357612a1261436a565b5b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050612a4d565b5f9150505b92915050565b5f612a5e8383612e1e565b612ab057825f0182908060018154018082558091505060019003905f5260205f20015f9091909190915055825f0180549050836001015f8481526020019081526020015f208190555060019050612ab4565b5f90505b92915050565b5f612ac3611fdb565b5f0160089054906101000a900460ff16905090565b612ae06127aa565b612ae981612e3e565b50565b612af46127aa565b565b612afe6127aa565b565b612b086127aa565b565b612b126127aa565b612b1e5f5f1b82611f34565b50612b4b7f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a50415f5f1b612ec2565b50565b5f819050919050565b5f8173ffffffffffffffffffffffffffffffffffffffff163b03612bb257806040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401612ba991906135b7565b60405180910390fd5b80612bde7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b612b4e565b5f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60605f612c2d8484612f28565b9050808015612c6357505f612c40612f3c565b1180612c6257505f8473ffffffffffffffffffffffffffffffffffffffff163b115b5b15612c7857612c70612f43565b915050612d0b565b8015612cbb57836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401612cb291906135b7565b60405180910390fd5b5f612cc4612f3c565b1115612cd757612cd2612f60565b612d09565b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b92915050565b5f341115612d4b576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f612d56612385565b90505f815f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082825f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505050565b5f5f836001015f8481526020019081526020015f20541415905092915050565b612e466127aa565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612eb6575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401612ead91906135b7565b60405180910390fd5b612ebf8161231f565b50565b5f612ecb611ef9565b90505f612ed784610bb9565b905082825f015f8681526020019081526020015f20600101819055508281857fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff60405160405180910390a450505050565b5f5f5f835160208501865af4905092915050565b5f3d905090565b606060405190503d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b5f604051905090565b5f5ffd5b5f5ffd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612fb081612f7c565b8114612fba575f5ffd5b50565b5f81359050612fcb81612fa7565b92915050565b5f60208284031215612fe657612fe5612f74565b5b5f612ff384828501612fbd565b91505092915050565b5f8115159050919050565b61301081612ffc565b82525050565b5f6020820190506130295f830184613007565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61308182613058565b9050919050565b61309181613077565b82525050565b5f6130a28383613088565b60208301905092915050565b5f602082019050919050565b5f6130c48261302f565b6130ce8185613039565b93506130d983613049565b805f5b838110156131095781516130f08882613097565b97506130fb836130ae565b9250506001810190506130dc565b5085935050505092915050565b5f6020820190508181035f83015261312e81846130ba565b905092915050565b5f819050919050565b61314881613136565b8114613152575f5ffd5b50565b5f813590506131638161313f565b92915050565b60028110613175575f5ffd5b50565b5f8135905061318681613169565b92915050565b5f5f604083850312156131a2576131a1612f74565b5b5f6131af85828601613155565b92505060206131c085828601613178565b9150509250929050565b6131d381613077565b81146131dd575f5ffd5b50565b5f813590506131ee816131ca565b92915050565b5f6020828403121561320957613208612f74565b5b5f613216848285016131e0565b91505092915050565b61322881612ffc565b8114613232575f5ffd5b50565b5f813590506132438161321f565b92915050565b5f5f5f606084860312156132605761325f612f74565b5b5f61326d86828701613155565b935050602061327e86828701613235565b925050604061328f86828701613178565b9150509250925092565b5f602082840312156132ae576132ad612f74565b5b5f6132bb84828501613155565b91505092915050565b6132cd81613136565b82525050565b5f6020820190506132e65f8301846132c4565b92915050565b5f5f6040838503121561330257613301612f74565b5b5f61330f85828601613155565b9250506020613320858286016131e0565b9150509250929050565b5f61333482613077565b9050919050565b6133448161332a565b811461334e575f5ffd5b50565b5f8135905061335f8161333b565b92915050565b5f5f6040838503121561337b5761337a612f74565b5b5f61338885828601613351565b9250506020613399858286016131e0565b9150509250929050565b5f5ffd5b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6133f1826133ab565b810181811067ffffffffffffffff821117156134105761340f6133bb565b5b80604052505050565b5f613422612f6b565b905061342e82826133e8565b919050565b5f67ffffffffffffffff82111561344d5761344c6133bb565b5b613456826133ab565b9050602081019050919050565b828183375f83830152505050565b5f61348361347e84613433565b613419565b90508281526020810184848401111561349f5761349e6133a7565b5b6134aa848285613463565b509392505050565b5f82601f8301126134c6576134c56133a3565b5b81356134d6848260208601613471565b91505092915050565b5f5f604083850312156134f5576134f4612f74565b5b5f613502858286016131e0565b925050602083013567ffffffffffffffff81111561352357613522612f78565b5b61352f858286016134b2565b9150509250929050565b5f819050919050565b61354b81613539565b82525050565b5f6020820190506135645f830184613542565b92915050565b5f5f604083850312156135805761357f612f74565b5b5f61358d85828601613178565b925050602061359e85828601613155565b9150509250929050565b6135b181613077565b82525050565b5f6020820190506135ca5f8301846135a8565b92915050565b5f5f604083850312156135e6576135e5612f74565b5b5f6135f385828601613178565b9250506020613604858286016131e0565b9150509250929050565b61361781613539565b8114613621575f5ffd5b50565b5f813590506136328161360e565b92915050565b5f5f6040838503121561364e5761364d612f74565b5b5f61365b85828601613155565b925050602061366c85828601613624565b9150509250929050565b5f5f6040838503121561368c5761368b612f74565b5b5f613699858286016131e0565b92505060206136aa85828601613178565b9150509250929050565b5f819050919050565b5f6136d76136d26136cd84613058565b6136b4565b613058565b9050919050565b5f6136e8826136bd565b9050919050565b5f6136f9826136de565b9050919050565b613709816136ef565b82525050565b5f6020820190506137225f830184613700565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f61375a82613728565b6137648185613732565b9350613774818560208601613742565b61377d816133ab565b840191505092915050565b5f6020820190508181035f8301526137a08184613750565b905092915050565b5f67ffffffffffffffff8211156137c2576137c16133bb565b5b602082029050602081019050919050565b5f5ffd5b5f6137e96137e4846137a8565b613419565b9050808382526020820190506020840283018581111561380c5761380b6137d3565b5b835b8181101561383557806138218882613155565b84526020840193505060208101905061380e565b5050509392505050565b5f82601f830112613853576138526133a3565b5b81356138638482602086016137d7565b91505092915050565b5f5f6040838503121561388257613881612f74565b5b5f83013567ffffffffffffffff81111561389f5761389e612f78565b5b6138ab8582860161383f565b92505060206138bc85828601613178565b9150509250929050565b5f5ffd5b5f5f83601f8401126138df576138de6133a3565b5b8235905067ffffffffffffffff8111156138fc576138fb6138c6565b5b602083019150836001820283011115613918576139176137d3565b5b9250929050565b5f5f5f5f5f6060868803121561393857613937612f74565b5b5f86013567ffffffffffffffff81111561395557613954612f78565b5b613961888289016138ca565b9550955050602086013567ffffffffffffffff81111561398457613983612f78565b5b613990888289016138ca565b935093505060406139a388828901613178565b9150509295509295909350565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b7f4e6974726f456e636c61766556657269666965722063616e6e6f74206265207a5f8201527f65726f0000000000000000000000000000000000000000000000000000000000602082015250565b5f613a64602383613732565b9150613a6f82613a0a565b604082019050919050565b5f6020820190508181035f830152613a9181613a58565b9050919050565b5f819050919050565b5f67ffffffffffffffff82169050919050565b5f613ace613ac9613ac484613a98565b6136b4565b613aa1565b9050919050565b613ade81613ab4565b82525050565b5f602082019050613af75f830184613ad5565b92915050565b5f82825260208201905092915050565b5f613b188385613afd565b9350613b25838584613463565b613b2e836133ab565b840190509392505050565b60038110613b4a57613b496139dd565b5b50565b5f819050613b5a82613b39565b919050565b5f613b6982613b4d565b9050919050565b613b7981613b5f565b82525050565b5f6060820190508181035f830152613b98818789613b0d565b9050613ba76020830186613b70565b8181036040830152613bba818486613b0d565b90509695505050505050565b5f5ffd5b5f5ffd5b60048110613bda575f5ffd5b50565b5f81519050613beb81613bce565b92915050565b5f60ff82169050919050565b613c0681613bf1565b8114613c10575f5ffd5b50565b5f81519050613c2181613bfd565b92915050565b613c3081613aa1565b8114613c3a575f5ffd5b50565b5f81519050613c4b81613c27565b92915050565b5f81519050613c5f8161313f565b92915050565b5f613c77613c72846137a8565b613419565b90508083825260208201905060208402830185811115613c9a57613c996137d3565b5b835b81811015613cc35780613caf8882613c51565b845260208401935050602081019050613c9c565b5050509392505050565b5f82601f830112613ce157613ce06133a3565b5b8151613cf1848260208601613c65565b91505092915050565b5f613d0c613d0784613433565b613419565b905082815260208101848484011115613d2857613d276133a7565b5b613d33848285613742565b509392505050565b5f82601f830112613d4f57613d4e6133a3565b5b8151613d5f848260208601613cfa565b91505092915050565b5f67ffffffffffffffff821115613d8257613d816133bb565b5b602082029050602081019050919050565b5f7fffffffffffffffffffffffffffffffff0000000000000000000000000000000082169050919050565b613dc781613d93565b8114613dd1575f5ffd5b50565b5f81519050613de281613dbe565b92915050565b5f60408284031215613dfd57613dfc613bc6565b5b613e076040613419565b90505f613e1684828501613c51565b5f830152506020613e2984828501613dd4565b60208301525092915050565b5f60608284031215613e4a57613e49613bc6565b5b613e546040613419565b90505f613e6384828501613c3d565b5f830152506020613e7684828501613de8565b60208301525092915050565b5f613e94613e8f84613d68565b613419565b90508083825260208201905060608402830185811115613eb757613eb66137d3565b5b835b81811015613ee05780613ecc8882613e35565b845260208401935050606081019050613eb9565b5050509392505050565b5f82601f830112613efe57613efd6133a3565b5b8151613f0e848260208601613e82565b91505092915050565b5f67ffffffffffffffff821115613f3157613f306133bb565b5b613f3a826133ab565b9050602081019050919050565b5f613f59613f5484613f17565b613419565b905082815260208101848484011115613f7557613f746133a7565b5b613f80848285613742565b509392505050565b5f82601f830112613f9c57613f9b6133a3565b5b8151613fac848260208601613f47565b91505092915050565b5f6101208284031215613fcb57613fca613bc6565b5b613fd6610120613419565b90505f613fe584828501613bdd565b5f830152506020613ff884828501613c13565b602083015250604061400c84828501613c3d565b604083015250606082015167ffffffffffffffff8111156140305761402f613bca565b5b61403c84828501613ccd565b606083015250608082015167ffffffffffffffff8111156140605761405f613bca565b5b61406c84828501613d3b565b60808301525060a082015167ffffffffffffffff8111156140905761408f613bca565b5b61409c84828501613d3b565b60a08301525060c082015167ffffffffffffffff8111156140c0576140bf613bca565b5b6140cc84828501613d3b565b60c08301525060e082015167ffffffffffffffff8111156140f0576140ef613bca565b5b6140fc84828501613eea565b60e08301525061010082015167ffffffffffffffff81111561412157614120613bca565b5b61412d84828501613f88565b6101008301525092915050565b5f6020828403121561414f5761414e612f74565b5b5f82015167ffffffffffffffff81111561416c5761416b612f78565b5b61417884828501613fb5565b91505092915050565b60048110614192576141916139dd565b5b50565b5f8190506141a282614181565b919050565b5f6141b182614195565b9050919050565b6141c1816141a7565b82525050565b5f6020820190506141da5f8301846141b8565b92915050565b5f819050919050565b6141fa6141f582613136565b6141e0565b82525050565b5f819050919050565b61421a61421582613d93565b614200565b82525050565b5f61422b82856141e9565b60208201915061423b8284614209565b6010820191508190509392505050565b6002811061425c5761425b6139dd565b5b50565b5f81905061426c8261424b565b919050565b5f61427b8261425f565b9050919050565b61428b81614271565b82525050565b5f6040820190506142a45f8301856132c4565b6142b16020830184614282565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6142ef82613539565b91506142fa83613539565b9250828203905081811115614312576143116142b8565b5b92915050565b5f6020828403121561432d5761432c612f74565b5b5f61433a84828501613c51565b91505092915050565b5f6040820190506143565f8301856135a8565b61436360208301846132c4565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffdfea164736f6c634300081c000a", } // EspressoNitroTEEVerifierABI is the input ABI used to generate the binding from. @@ -57,7 +44,7 @@ var EspressoNitroTEEVerifierABI = EspressoNitroTEEVerifierMetaData.ABI var EspressoNitroTEEVerifierBin = EspressoNitroTEEVerifierMetaData.Bin // DeployEspressoNitroTEEVerifier deploys a new Ethereum contract, binding an instance of EspressoNitroTEEVerifier to it. -func DeployEspressoNitroTEEVerifier(auth *bind.TransactOpts, backend bind.ContractBackend, enclaveHash [32]byte, certManager common.Address) (common.Address, *types.Transaction, *EspressoNitroTEEVerifier, error) { +func DeployEspressoNitroTEEVerifier(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *EspressoNitroTEEVerifier, error) { parsed, err := EspressoNitroTEEVerifierMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -66,7 +53,7 @@ func DeployEspressoNitroTEEVerifier(auth *bind.TransactOpts, backend bind.Contra return common.Address{}, nil, nil, errors.New("GetABI returned nil") } - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(EspressoNitroTEEVerifierBin), backend, enclaveHash, certManager) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(EspressoNitroTEEVerifierBin), backend) if err != nil { return common.Address{}, nil, nil, err } @@ -215,12 +202,12 @@ func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierTransactorRaw) Transact return _EspressoNitroTEEVerifier.Contract.contract.Transact(opts, method, params...) } -// ATTESTATIONDIGEST is a free data retrieval call binding the contract method 0x3893af6d. +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. // -// Solidity: function ATTESTATION_DIGEST() view returns(bytes32) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCaller) ATTESTATIONDIGEST(opts *bind.CallOpts) ([32]byte, error) { +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCaller) DEFAULTADMINROLE(opts *bind.CallOpts) ([32]byte, error) { var out []interface{} - err := _EspressoNitroTEEVerifier.contract.Call(opts, &out, "ATTESTATION_DIGEST") + err := _EspressoNitroTEEVerifier.contract.Call(opts, &out, "DEFAULT_ADMIN_ROLE") if err != nil { return *new([32]byte), err @@ -232,26 +219,26 @@ func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCaller) ATTESTATIONDIGE } -// ATTESTATIONDIGEST is a free data retrieval call binding the contract method 0x3893af6d. +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. // -// Solidity: function ATTESTATION_DIGEST() view returns(bytes32) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierSession) ATTESTATIONDIGEST() ([32]byte, error) { - return _EspressoNitroTEEVerifier.Contract.ATTESTATIONDIGEST(&_EspressoNitroTEEVerifier.CallOpts) +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierSession) DEFAULTADMINROLE() ([32]byte, error) { + return _EspressoNitroTEEVerifier.Contract.DEFAULTADMINROLE(&_EspressoNitroTEEVerifier.CallOpts) } -// ATTESTATIONDIGEST is a free data retrieval call binding the contract method 0x3893af6d. +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. // -// Solidity: function ATTESTATION_DIGEST() view returns(bytes32) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCallerSession) ATTESTATIONDIGEST() ([32]byte, error) { - return _EspressoNitroTEEVerifier.Contract.ATTESTATIONDIGEST(&_EspressoNitroTEEVerifier.CallOpts) +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCallerSession) DEFAULTADMINROLE() ([32]byte, error) { + return _EspressoNitroTEEVerifier.Contract.DEFAULTADMINROLE(&_EspressoNitroTEEVerifier.CallOpts) } -// ATTESTATIONTBSPREFIX is a free data retrieval call binding the contract method 0x2d4bad8a. +// GUARDIANROLE is a free data retrieval call binding the contract method 0x24ea54f4. // -// Solidity: function ATTESTATION_TBS_PREFIX() view returns(bytes32) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCaller) ATTESTATIONTBSPREFIX(opts *bind.CallOpts) ([32]byte, error) { +// Solidity: function GUARDIAN_ROLE() view returns(bytes32) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCaller) GUARDIANROLE(opts *bind.CallOpts) ([32]byte, error) { var out []interface{} - err := _EspressoNitroTEEVerifier.contract.Call(opts, &out, "ATTESTATION_TBS_PREFIX") + err := _EspressoNitroTEEVerifier.contract.Call(opts, &out, "GUARDIAN_ROLE") if err != nil { return *new([32]byte), err @@ -263,150 +250,150 @@ func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCaller) ATTESTATIONTBSP } -// ATTESTATIONTBSPREFIX is a free data retrieval call binding the contract method 0x2d4bad8a. +// GUARDIANROLE is a free data retrieval call binding the contract method 0x24ea54f4. // -// Solidity: function ATTESTATION_TBS_PREFIX() view returns(bytes32) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierSession) ATTESTATIONTBSPREFIX() ([32]byte, error) { - return _EspressoNitroTEEVerifier.Contract.ATTESTATIONTBSPREFIX(&_EspressoNitroTEEVerifier.CallOpts) +// Solidity: function GUARDIAN_ROLE() view returns(bytes32) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierSession) GUARDIANROLE() ([32]byte, error) { + return _EspressoNitroTEEVerifier.Contract.GUARDIANROLE(&_EspressoNitroTEEVerifier.CallOpts) } -// ATTESTATIONTBSPREFIX is a free data retrieval call binding the contract method 0x2d4bad8a. +// GUARDIANROLE is a free data retrieval call binding the contract method 0x24ea54f4. // -// Solidity: function ATTESTATION_TBS_PREFIX() view returns(bytes32) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCallerSession) ATTESTATIONTBSPREFIX() ([32]byte, error) { - return _EspressoNitroTEEVerifier.Contract.ATTESTATIONTBSPREFIX(&_EspressoNitroTEEVerifier.CallOpts) +// Solidity: function GUARDIAN_ROLE() view returns(bytes32) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCallerSession) GUARDIANROLE() ([32]byte, error) { + return _EspressoNitroTEEVerifier.Contract.GUARDIANROLE(&_EspressoNitroTEEVerifier.CallOpts) } -// CABUNDLEKEY is a free data retrieval call binding the contract method 0x9cc3eb48. +// UPGRADEINTERFACEVERSION is a free data retrieval call binding the contract method 0xad3cb1cc. // -// Solidity: function CABUNDLE_KEY() view returns(bytes32) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCaller) CABUNDLEKEY(opts *bind.CallOpts) ([32]byte, error) { +// Solidity: function UPGRADE_INTERFACE_VERSION() view returns(string) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCaller) UPGRADEINTERFACEVERSION(opts *bind.CallOpts) (string, error) { var out []interface{} - err := _EspressoNitroTEEVerifier.contract.Call(opts, &out, "CABUNDLE_KEY") + err := _EspressoNitroTEEVerifier.contract.Call(opts, &out, "UPGRADE_INTERFACE_VERSION") if err != nil { - return *new([32]byte), err + return *new(string), err } - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + out0 := *abi.ConvertType(out[0], new(string)).(*string) return out0, err } -// CABUNDLEKEY is a free data retrieval call binding the contract method 0x9cc3eb48. +// UPGRADEINTERFACEVERSION is a free data retrieval call binding the contract method 0xad3cb1cc. // -// Solidity: function CABUNDLE_KEY() view returns(bytes32) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierSession) CABUNDLEKEY() ([32]byte, error) { - return _EspressoNitroTEEVerifier.Contract.CABUNDLEKEY(&_EspressoNitroTEEVerifier.CallOpts) +// Solidity: function UPGRADE_INTERFACE_VERSION() view returns(string) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierSession) UPGRADEINTERFACEVERSION() (string, error) { + return _EspressoNitroTEEVerifier.Contract.UPGRADEINTERFACEVERSION(&_EspressoNitroTEEVerifier.CallOpts) } -// CABUNDLEKEY is a free data retrieval call binding the contract method 0x9cc3eb48. +// UPGRADEINTERFACEVERSION is a free data retrieval call binding the contract method 0xad3cb1cc. // -// Solidity: function CABUNDLE_KEY() view returns(bytes32) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCallerSession) CABUNDLEKEY() ([32]byte, error) { - return _EspressoNitroTEEVerifier.Contract.CABUNDLEKEY(&_EspressoNitroTEEVerifier.CallOpts) +// Solidity: function UPGRADE_INTERFACE_VERSION() view returns(string) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCallerSession) UPGRADEINTERFACEVERSION() (string, error) { + return _EspressoNitroTEEVerifier.Contract.UPGRADEINTERFACEVERSION(&_EspressoNitroTEEVerifier.CallOpts) } -// CERTIFICATEKEY is a free data retrieval call binding the contract method 0xae951149. +// NitroEnclaveVerifier is a free data retrieval call binding the contract method 0x9ca6e7c2. // -// Solidity: function CERTIFICATE_KEY() view returns(bytes32) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCaller) CERTIFICATEKEY(opts *bind.CallOpts) ([32]byte, error) { +// Solidity: function _nitroEnclaveVerifier() view returns(address) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCaller) NitroEnclaveVerifier(opts *bind.CallOpts) (common.Address, error) { var out []interface{} - err := _EspressoNitroTEEVerifier.contract.Call(opts, &out, "CERTIFICATE_KEY") + err := _EspressoNitroTEEVerifier.contract.Call(opts, &out, "_nitroEnclaveVerifier") if err != nil { - return *new([32]byte), err + return *new(common.Address), err } - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) return out0, err } -// CERTIFICATEKEY is a free data retrieval call binding the contract method 0xae951149. +// NitroEnclaveVerifier is a free data retrieval call binding the contract method 0x9ca6e7c2. // -// Solidity: function CERTIFICATE_KEY() view returns(bytes32) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierSession) CERTIFICATEKEY() ([32]byte, error) { - return _EspressoNitroTEEVerifier.Contract.CERTIFICATEKEY(&_EspressoNitroTEEVerifier.CallOpts) +// Solidity: function _nitroEnclaveVerifier() view returns(address) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierSession) NitroEnclaveVerifier() (common.Address, error) { + return _EspressoNitroTEEVerifier.Contract.NitroEnclaveVerifier(&_EspressoNitroTEEVerifier.CallOpts) } -// CERTIFICATEKEY is a free data retrieval call binding the contract method 0xae951149. +// NitroEnclaveVerifier is a free data retrieval call binding the contract method 0x9ca6e7c2. // -// Solidity: function CERTIFICATE_KEY() view returns(bytes32) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCallerSession) CERTIFICATEKEY() ([32]byte, error) { - return _EspressoNitroTEEVerifier.Contract.CERTIFICATEKEY(&_EspressoNitroTEEVerifier.CallOpts) +// Solidity: function _nitroEnclaveVerifier() view returns(address) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCallerSession) NitroEnclaveVerifier() (common.Address, error) { + return _EspressoNitroTEEVerifier.Contract.NitroEnclaveVerifier(&_EspressoNitroTEEVerifier.CallOpts) } -// DIGESTKEY is a free data retrieval call binding the contract method 0x6be1e68b. +// EnclaveHashSigners is a free data retrieval call binding the contract method 0x094d5de2. // -// Solidity: function DIGEST_KEY() view returns(bytes32) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCaller) DIGESTKEY(opts *bind.CallOpts) ([32]byte, error) { +// Solidity: function enclaveHashSigners(bytes32 enclaveHash, uint8 service) view returns(address[]) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCaller) EnclaveHashSigners(opts *bind.CallOpts, enclaveHash [32]byte, service uint8) ([]common.Address, error) { var out []interface{} - err := _EspressoNitroTEEVerifier.contract.Call(opts, &out, "DIGEST_KEY") + err := _EspressoNitroTEEVerifier.contract.Call(opts, &out, "enclaveHashSigners", enclaveHash, service) if err != nil { - return *new([32]byte), err + return *new([]common.Address), err } - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) return out0, err } -// DIGESTKEY is a free data retrieval call binding the contract method 0x6be1e68b. +// EnclaveHashSigners is a free data retrieval call binding the contract method 0x094d5de2. // -// Solidity: function DIGEST_KEY() view returns(bytes32) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierSession) DIGESTKEY() ([32]byte, error) { - return _EspressoNitroTEEVerifier.Contract.DIGESTKEY(&_EspressoNitroTEEVerifier.CallOpts) +// Solidity: function enclaveHashSigners(bytes32 enclaveHash, uint8 service) view returns(address[]) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierSession) EnclaveHashSigners(enclaveHash [32]byte, service uint8) ([]common.Address, error) { + return _EspressoNitroTEEVerifier.Contract.EnclaveHashSigners(&_EspressoNitroTEEVerifier.CallOpts, enclaveHash, service) } -// DIGESTKEY is a free data retrieval call binding the contract method 0x6be1e68b. +// EnclaveHashSigners is a free data retrieval call binding the contract method 0x094d5de2. // -// Solidity: function DIGEST_KEY() view returns(bytes32) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCallerSession) DIGESTKEY() ([32]byte, error) { - return _EspressoNitroTEEVerifier.Contract.DIGESTKEY(&_EspressoNitroTEEVerifier.CallOpts) +// Solidity: function enclaveHashSigners(bytes32 enclaveHash, uint8 service) view returns(address[]) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCallerSession) EnclaveHashSigners(enclaveHash [32]byte, service uint8) ([]common.Address, error) { + return _EspressoNitroTEEVerifier.Contract.EnclaveHashSigners(&_EspressoNitroTEEVerifier.CallOpts, enclaveHash, service) } -// MAXAGE is a free data retrieval call binding the contract method 0x0dcaeaf2. +// GetGuardians is a free data retrieval call binding the contract method 0x0665f04b. // -// Solidity: function MAX_AGE() view returns(uint256) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCaller) MAXAGE(opts *bind.CallOpts) (*big.Int, error) { +// Solidity: function getGuardians() view returns(address[]) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCaller) GetGuardians(opts *bind.CallOpts) ([]common.Address, error) { var out []interface{} - err := _EspressoNitroTEEVerifier.contract.Call(opts, &out, "MAX_AGE") + err := _EspressoNitroTEEVerifier.contract.Call(opts, &out, "getGuardians") if err != nil { - return *new(*big.Int), err + return *new([]common.Address), err } - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) return out0, err } -// MAXAGE is a free data retrieval call binding the contract method 0x0dcaeaf2. +// GetGuardians is a free data retrieval call binding the contract method 0x0665f04b. // -// Solidity: function MAX_AGE() view returns(uint256) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierSession) MAXAGE() (*big.Int, error) { - return _EspressoNitroTEEVerifier.Contract.MAXAGE(&_EspressoNitroTEEVerifier.CallOpts) +// Solidity: function getGuardians() view returns(address[]) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierSession) GetGuardians() ([]common.Address, error) { + return _EspressoNitroTEEVerifier.Contract.GetGuardians(&_EspressoNitroTEEVerifier.CallOpts) } -// MAXAGE is a free data retrieval call binding the contract method 0x0dcaeaf2. +// GetGuardians is a free data retrieval call binding the contract method 0x0665f04b. // -// Solidity: function MAX_AGE() view returns(uint256) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCallerSession) MAXAGE() (*big.Int, error) { - return _EspressoNitroTEEVerifier.Contract.MAXAGE(&_EspressoNitroTEEVerifier.CallOpts) +// Solidity: function getGuardians() view returns(address[]) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCallerSession) GetGuardians() ([]common.Address, error) { + return _EspressoNitroTEEVerifier.Contract.GetGuardians(&_EspressoNitroTEEVerifier.CallOpts) } -// MODULEIDKEY is a free data retrieval call binding the contract method 0x9adb2d68. +// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. // -// Solidity: function MODULE_ID_KEY() view returns(bytes32) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCaller) MODULEIDKEY(opts *bind.CallOpts) ([32]byte, error) { +// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCaller) GetRoleAdmin(opts *bind.CallOpts, role [32]byte) ([32]byte, error) { var out []interface{} - err := _EspressoNitroTEEVerifier.contract.Call(opts, &out, "MODULE_ID_KEY") + err := _EspressoNitroTEEVerifier.contract.Call(opts, &out, "getRoleAdmin", role) if err != nil { return *new([32]byte), err @@ -418,249 +405,204 @@ func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCaller) MODULEIDKEY(opt } -// MODULEIDKEY is a free data retrieval call binding the contract method 0x9adb2d68. +// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. // -// Solidity: function MODULE_ID_KEY() view returns(bytes32) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierSession) MODULEIDKEY() ([32]byte, error) { - return _EspressoNitroTEEVerifier.Contract.MODULEIDKEY(&_EspressoNitroTEEVerifier.CallOpts) +// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierSession) GetRoleAdmin(role [32]byte) ([32]byte, error) { + return _EspressoNitroTEEVerifier.Contract.GetRoleAdmin(&_EspressoNitroTEEVerifier.CallOpts, role) } -// MODULEIDKEY is a free data retrieval call binding the contract method 0x9adb2d68. +// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. // -// Solidity: function MODULE_ID_KEY() view returns(bytes32) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCallerSession) MODULEIDKEY() ([32]byte, error) { - return _EspressoNitroTEEVerifier.Contract.MODULEIDKEY(&_EspressoNitroTEEVerifier.CallOpts) +// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCallerSession) GetRoleAdmin(role [32]byte) ([32]byte, error) { + return _EspressoNitroTEEVerifier.Contract.GetRoleAdmin(&_EspressoNitroTEEVerifier.CallOpts, role) } -// NONCEKEY is a free data retrieval call binding the contract method 0x6378aad5. +// GetRoleMember is a free data retrieval call binding the contract method 0x9010d07c. // -// Solidity: function NONCE_KEY() view returns(bytes32) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCaller) NONCEKEY(opts *bind.CallOpts) ([32]byte, error) { +// Solidity: function getRoleMember(bytes32 role, uint256 index) view returns(address) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCaller) GetRoleMember(opts *bind.CallOpts, role [32]byte, index *big.Int) (common.Address, error) { var out []interface{} - err := _EspressoNitroTEEVerifier.contract.Call(opts, &out, "NONCE_KEY") + err := _EspressoNitroTEEVerifier.contract.Call(opts, &out, "getRoleMember", role, index) if err != nil { - return *new([32]byte), err + return *new(common.Address), err } - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) return out0, err } -// NONCEKEY is a free data retrieval call binding the contract method 0x6378aad5. +// GetRoleMember is a free data retrieval call binding the contract method 0x9010d07c. // -// Solidity: function NONCE_KEY() view returns(bytes32) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierSession) NONCEKEY() ([32]byte, error) { - return _EspressoNitroTEEVerifier.Contract.NONCEKEY(&_EspressoNitroTEEVerifier.CallOpts) +// Solidity: function getRoleMember(bytes32 role, uint256 index) view returns(address) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierSession) GetRoleMember(role [32]byte, index *big.Int) (common.Address, error) { + return _EspressoNitroTEEVerifier.Contract.GetRoleMember(&_EspressoNitroTEEVerifier.CallOpts, role, index) } -// NONCEKEY is a free data retrieval call binding the contract method 0x6378aad5. +// GetRoleMember is a free data retrieval call binding the contract method 0x9010d07c. // -// Solidity: function NONCE_KEY() view returns(bytes32) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCallerSession) NONCEKEY() ([32]byte, error) { - return _EspressoNitroTEEVerifier.Contract.NONCEKEY(&_EspressoNitroTEEVerifier.CallOpts) +// Solidity: function getRoleMember(bytes32 role, uint256 index) view returns(address) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCallerSession) GetRoleMember(role [32]byte, index *big.Int) (common.Address, error) { + return _EspressoNitroTEEVerifier.Contract.GetRoleMember(&_EspressoNitroTEEVerifier.CallOpts, role, index) } -// PCRSKEY is a free data retrieval call binding the contract method 0xb22bed7e. +// GetRoleMemberCount is a free data retrieval call binding the contract method 0xca15c873. // -// Solidity: function PCRS_KEY() view returns(bytes32) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCaller) PCRSKEY(opts *bind.CallOpts) ([32]byte, error) { +// Solidity: function getRoleMemberCount(bytes32 role) view returns(uint256) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCaller) GetRoleMemberCount(opts *bind.CallOpts, role [32]byte) (*big.Int, error) { var out []interface{} - err := _EspressoNitroTEEVerifier.contract.Call(opts, &out, "PCRS_KEY") + err := _EspressoNitroTEEVerifier.contract.Call(opts, &out, "getRoleMemberCount", role) if err != nil { - return *new([32]byte), err + return *new(*big.Int), err } - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) return out0, err } -// PCRSKEY is a free data retrieval call binding the contract method 0xb22bed7e. +// GetRoleMemberCount is a free data retrieval call binding the contract method 0xca15c873. // -// Solidity: function PCRS_KEY() view returns(bytes32) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierSession) PCRSKEY() ([32]byte, error) { - return _EspressoNitroTEEVerifier.Contract.PCRSKEY(&_EspressoNitroTEEVerifier.CallOpts) +// Solidity: function getRoleMemberCount(bytes32 role) view returns(uint256) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierSession) GetRoleMemberCount(role [32]byte) (*big.Int, error) { + return _EspressoNitroTEEVerifier.Contract.GetRoleMemberCount(&_EspressoNitroTEEVerifier.CallOpts, role) } -// PCRSKEY is a free data retrieval call binding the contract method 0xb22bed7e. +// GetRoleMemberCount is a free data retrieval call binding the contract method 0xca15c873. // -// Solidity: function PCRS_KEY() view returns(bytes32) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCallerSession) PCRSKEY() ([32]byte, error) { - return _EspressoNitroTEEVerifier.Contract.PCRSKEY(&_EspressoNitroTEEVerifier.CallOpts) +// Solidity: function getRoleMemberCount(bytes32 role) view returns(uint256) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCallerSession) GetRoleMemberCount(role [32]byte) (*big.Int, error) { + return _EspressoNitroTEEVerifier.Contract.GetRoleMemberCount(&_EspressoNitroTEEVerifier.CallOpts, role) } -// PUBLICKEYKEY is a free data retrieval call binding the contract method 0xe8b6d3fe. +// GetRoleMembers is a free data retrieval call binding the contract method 0xa3246ad3. // -// Solidity: function PUBLIC_KEY_KEY() view returns(bytes32) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCaller) PUBLICKEYKEY(opts *bind.CallOpts) ([32]byte, error) { +// Solidity: function getRoleMembers(bytes32 role) view returns(address[]) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCaller) GetRoleMembers(opts *bind.CallOpts, role [32]byte) ([]common.Address, error) { var out []interface{} - err := _EspressoNitroTEEVerifier.contract.Call(opts, &out, "PUBLIC_KEY_KEY") + err := _EspressoNitroTEEVerifier.contract.Call(opts, &out, "getRoleMembers", role) if err != nil { - return *new([32]byte), err + return *new([]common.Address), err } - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) return out0, err } -// PUBLICKEYKEY is a free data retrieval call binding the contract method 0xe8b6d3fe. +// GetRoleMembers is a free data retrieval call binding the contract method 0xa3246ad3. // -// Solidity: function PUBLIC_KEY_KEY() view returns(bytes32) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierSession) PUBLICKEYKEY() ([32]byte, error) { - return _EspressoNitroTEEVerifier.Contract.PUBLICKEYKEY(&_EspressoNitroTEEVerifier.CallOpts) +// Solidity: function getRoleMembers(bytes32 role) view returns(address[]) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierSession) GetRoleMembers(role [32]byte) ([]common.Address, error) { + return _EspressoNitroTEEVerifier.Contract.GetRoleMembers(&_EspressoNitroTEEVerifier.CallOpts, role) } -// PUBLICKEYKEY is a free data retrieval call binding the contract method 0xe8b6d3fe. +// GetRoleMembers is a free data retrieval call binding the contract method 0xa3246ad3. // -// Solidity: function PUBLIC_KEY_KEY() view returns(bytes32) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCallerSession) PUBLICKEYKEY() ([32]byte, error) { - return _EspressoNitroTEEVerifier.Contract.PUBLICKEYKEY(&_EspressoNitroTEEVerifier.CallOpts) +// Solidity: function getRoleMembers(bytes32 role) view returns(address[]) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCallerSession) GetRoleMembers(role [32]byte) ([]common.Address, error) { + return _EspressoNitroTEEVerifier.Contract.GetRoleMembers(&_EspressoNitroTEEVerifier.CallOpts, role) } -// TIMESTAMPKEY is a free data retrieval call binding the contract method 0xe0a655ff. +// GuardianCount is a free data retrieval call binding the contract method 0x54387ad7. // -// Solidity: function TIMESTAMP_KEY() view returns(bytes32) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCaller) TIMESTAMPKEY(opts *bind.CallOpts) ([32]byte, error) { +// Solidity: function guardianCount() view returns(uint256) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCaller) GuardianCount(opts *bind.CallOpts) (*big.Int, error) { var out []interface{} - err := _EspressoNitroTEEVerifier.contract.Call(opts, &out, "TIMESTAMP_KEY") + err := _EspressoNitroTEEVerifier.contract.Call(opts, &out, "guardianCount") if err != nil { - return *new([32]byte), err + return *new(*big.Int), err } - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) return out0, err } -// TIMESTAMPKEY is a free data retrieval call binding the contract method 0xe0a655ff. +// GuardianCount is a free data retrieval call binding the contract method 0x54387ad7. // -// Solidity: function TIMESTAMP_KEY() view returns(bytes32) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierSession) TIMESTAMPKEY() ([32]byte, error) { - return _EspressoNitroTEEVerifier.Contract.TIMESTAMPKEY(&_EspressoNitroTEEVerifier.CallOpts) +// Solidity: function guardianCount() view returns(uint256) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierSession) GuardianCount() (*big.Int, error) { + return _EspressoNitroTEEVerifier.Contract.GuardianCount(&_EspressoNitroTEEVerifier.CallOpts) } -// TIMESTAMPKEY is a free data retrieval call binding the contract method 0xe0a655ff. +// GuardianCount is a free data retrieval call binding the contract method 0x54387ad7. // -// Solidity: function TIMESTAMP_KEY() view returns(bytes32) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCallerSession) TIMESTAMPKEY() ([32]byte, error) { - return _EspressoNitroTEEVerifier.Contract.TIMESTAMPKEY(&_EspressoNitroTEEVerifier.CallOpts) +// Solidity: function guardianCount() view returns(uint256) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCallerSession) GuardianCount() (*big.Int, error) { + return _EspressoNitroTEEVerifier.Contract.GuardianCount(&_EspressoNitroTEEVerifier.CallOpts) } -// USERDATAKEY is a free data retrieval call binding the contract method 0xcebf08d7. +// HasRole is a free data retrieval call binding the contract method 0x91d14854. // -// Solidity: function USER_DATA_KEY() view returns(bytes32) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCaller) USERDATAKEY(opts *bind.CallOpts) ([32]byte, error) { +// Solidity: function hasRole(bytes32 role, address account) view returns(bool) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCaller) HasRole(opts *bind.CallOpts, role [32]byte, account common.Address) (bool, error) { var out []interface{} - err := _EspressoNitroTEEVerifier.contract.Call(opts, &out, "USER_DATA_KEY") + err := _EspressoNitroTEEVerifier.contract.Call(opts, &out, "hasRole", role, account) if err != nil { - return *new([32]byte), err + return *new(bool), err } - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) return out0, err } -// USERDATAKEY is a free data retrieval call binding the contract method 0xcebf08d7. +// HasRole is a free data retrieval call binding the contract method 0x91d14854. // -// Solidity: function USER_DATA_KEY() view returns(bytes32) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierSession) USERDATAKEY() ([32]byte, error) { - return _EspressoNitroTEEVerifier.Contract.USERDATAKEY(&_EspressoNitroTEEVerifier.CallOpts) +// Solidity: function hasRole(bytes32 role, address account) view returns(bool) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierSession) HasRole(role [32]byte, account common.Address) (bool, error) { + return _EspressoNitroTEEVerifier.Contract.HasRole(&_EspressoNitroTEEVerifier.CallOpts, role, account) } -// USERDATAKEY is a free data retrieval call binding the contract method 0xcebf08d7. +// HasRole is a free data retrieval call binding the contract method 0x91d14854. // -// Solidity: function USER_DATA_KEY() view returns(bytes32) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCallerSession) USERDATAKEY() ([32]byte, error) { - return _EspressoNitroTEEVerifier.Contract.USERDATAKEY(&_EspressoNitroTEEVerifier.CallOpts) +// Solidity: function hasRole(bytes32 role, address account) view returns(bool) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCallerSession) HasRole(role [32]byte, account common.Address) (bool, error) { + return _EspressoNitroTEEVerifier.Contract.HasRole(&_EspressoNitroTEEVerifier.CallOpts, role, account) } -// CertManager is a free data retrieval call binding the contract method 0x739e8484. +// IsGuardian is a free data retrieval call binding the contract method 0x0c68ba21. // -// Solidity: function certManager() view returns(address) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCaller) CertManager(opts *bind.CallOpts) (common.Address, error) { +// Solidity: function isGuardian(address account) view returns(bool) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCaller) IsGuardian(opts *bind.CallOpts, account common.Address) (bool, error) { var out []interface{} - err := _EspressoNitroTEEVerifier.contract.Call(opts, &out, "certManager") + err := _EspressoNitroTEEVerifier.contract.Call(opts, &out, "isGuardian", account) if err != nil { - return *new(common.Address), err + return *new(bool), err } - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) return out0, err } -// CertManager is a free data retrieval call binding the contract method 0x739e8484. -// -// Solidity: function certManager() view returns(address) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierSession) CertManager() (common.Address, error) { - return _EspressoNitroTEEVerifier.Contract.CertManager(&_EspressoNitroTEEVerifier.CallOpts) -} - -// CertManager is a free data retrieval call binding the contract method 0x739e8484. -// -// Solidity: function certManager() view returns(address) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCallerSession) CertManager() (common.Address, error) { - return _EspressoNitroTEEVerifier.Contract.CertManager(&_EspressoNitroTEEVerifier.CallOpts) -} - -// DecodeAttestationTbs is a free data retrieval call binding the contract method 0xa903a277. -// -// Solidity: function decodeAttestationTbs(bytes attestation) pure returns(bytes attestationTbs, bytes signature) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCaller) DecodeAttestationTbs(opts *bind.CallOpts, attestation []byte) (struct { - AttestationTbs []byte - Signature []byte -}, error) { - var out []interface{} - err := _EspressoNitroTEEVerifier.contract.Call(opts, &out, "decodeAttestationTbs", attestation) - - outstruct := new(struct { - AttestationTbs []byte - Signature []byte - }) - if err != nil { - return *outstruct, err - } - - outstruct.AttestationTbs = *abi.ConvertType(out[0], new([]byte)).(*[]byte) - outstruct.Signature = *abi.ConvertType(out[1], new([]byte)).(*[]byte) - - return *outstruct, err - -} - -// DecodeAttestationTbs is a free data retrieval call binding the contract method 0xa903a277. +// IsGuardian is a free data retrieval call binding the contract method 0x0c68ba21. // -// Solidity: function decodeAttestationTbs(bytes attestation) pure returns(bytes attestationTbs, bytes signature) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierSession) DecodeAttestationTbs(attestation []byte) (struct { - AttestationTbs []byte - Signature []byte -}, error) { - return _EspressoNitroTEEVerifier.Contract.DecodeAttestationTbs(&_EspressoNitroTEEVerifier.CallOpts, attestation) +// Solidity: function isGuardian(address account) view returns(bool) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierSession) IsGuardian(account common.Address) (bool, error) { + return _EspressoNitroTEEVerifier.Contract.IsGuardian(&_EspressoNitroTEEVerifier.CallOpts, account) } -// DecodeAttestationTbs is a free data retrieval call binding the contract method 0xa903a277. +// IsGuardian is a free data retrieval call binding the contract method 0x0c68ba21. // -// Solidity: function decodeAttestationTbs(bytes attestation) pure returns(bytes attestationTbs, bytes signature) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCallerSession) DecodeAttestationTbs(attestation []byte) (struct { - AttestationTbs []byte - Signature []byte -}, error) { - return _EspressoNitroTEEVerifier.Contract.DecodeAttestationTbs(&_EspressoNitroTEEVerifier.CallOpts, attestation) +// Solidity: function isGuardian(address account) view returns(bool) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCallerSession) IsGuardian(account common.Address) (bool, error) { + return _EspressoNitroTEEVerifier.Contract.IsGuardian(&_EspressoNitroTEEVerifier.CallOpts, account) } // Owner is a free data retrieval call binding the contract method 0x8da5cb5b. @@ -725,12 +667,136 @@ func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCallerSession) PendingO return _EspressoNitroTEEVerifier.Contract.PendingOwner(&_EspressoNitroTEEVerifier.CallOpts) } -// RegisteredEnclaveHash is a free data retrieval call binding the contract method 0x966989ee. +// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. +// +// Solidity: function proxiableUUID() view returns(bytes32) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCaller) ProxiableUUID(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _EspressoNitroTEEVerifier.contract.Call(opts, &out, "proxiableUUID") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. +// +// Solidity: function proxiableUUID() view returns(bytes32) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierSession) ProxiableUUID() ([32]byte, error) { + return _EspressoNitroTEEVerifier.Contract.ProxiableUUID(&_EspressoNitroTEEVerifier.CallOpts) +} + +// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. +// +// Solidity: function proxiableUUID() view returns(bytes32) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCallerSession) ProxiableUUID() ([32]byte, error) { + return _EspressoNitroTEEVerifier.Contract.ProxiableUUID(&_EspressoNitroTEEVerifier.CallOpts) +} + +// RegisteredEnclaveHash is a free data retrieval call binding the contract method 0x9f3eb672. +// +// Solidity: function registeredEnclaveHash(bytes32 enclaveHash, uint8 service) view returns(bool) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCaller) RegisteredEnclaveHash(opts *bind.CallOpts, enclaveHash [32]byte, service uint8) (bool, error) { + var out []interface{} + err := _EspressoNitroTEEVerifier.contract.Call(opts, &out, "registeredEnclaveHash", enclaveHash, service) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// RegisteredEnclaveHash is a free data retrieval call binding the contract method 0x9f3eb672. +// +// Solidity: function registeredEnclaveHash(bytes32 enclaveHash, uint8 service) view returns(bool) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierSession) RegisteredEnclaveHash(enclaveHash [32]byte, service uint8) (bool, error) { + return _EspressoNitroTEEVerifier.Contract.RegisteredEnclaveHash(&_EspressoNitroTEEVerifier.CallOpts, enclaveHash, service) +} + +// RegisteredEnclaveHash is a free data retrieval call binding the contract method 0x9f3eb672. +// +// Solidity: function registeredEnclaveHash(bytes32 enclaveHash, uint8 service) view returns(bool) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCallerSession) RegisteredEnclaveHash(enclaveHash [32]byte, service uint8) (bool, error) { + return _EspressoNitroTEEVerifier.Contract.RegisteredEnclaveHash(&_EspressoNitroTEEVerifier.CallOpts, enclaveHash, service) +} + +// RegisteredEnclaveHashes is a free data retrieval call binding the contract method 0x61ff4180. +// +// Solidity: function registeredEnclaveHashes(uint8 , bytes32 enclaveHash) view returns(bool valid) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCaller) RegisteredEnclaveHashes(opts *bind.CallOpts, arg0 uint8, enclaveHash [32]byte) (bool, error) { + var out []interface{} + err := _EspressoNitroTEEVerifier.contract.Call(opts, &out, "registeredEnclaveHashes", arg0, enclaveHash) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// RegisteredEnclaveHashes is a free data retrieval call binding the contract method 0x61ff4180. +// +// Solidity: function registeredEnclaveHashes(uint8 , bytes32 enclaveHash) view returns(bool valid) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierSession) RegisteredEnclaveHashes(arg0 uint8, enclaveHash [32]byte) (bool, error) { + return _EspressoNitroTEEVerifier.Contract.RegisteredEnclaveHashes(&_EspressoNitroTEEVerifier.CallOpts, arg0, enclaveHash) +} + +// RegisteredEnclaveHashes is a free data retrieval call binding the contract method 0x61ff4180. +// +// Solidity: function registeredEnclaveHashes(uint8 , bytes32 enclaveHash) view returns(bool valid) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCallerSession) RegisteredEnclaveHashes(arg0 uint8, enclaveHash [32]byte) (bool, error) { + return _EspressoNitroTEEVerifier.Contract.RegisteredEnclaveHashes(&_EspressoNitroTEEVerifier.CallOpts, arg0, enclaveHash) +} + +// RegisteredService is a free data retrieval call binding the contract method 0x9546922e. +// +// Solidity: function registeredService(address signer, uint8 service) view returns(bool) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCaller) RegisteredService(opts *bind.CallOpts, signer common.Address, service uint8) (bool, error) { + var out []interface{} + err := _EspressoNitroTEEVerifier.contract.Call(opts, &out, "registeredService", signer, service) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// RegisteredService is a free data retrieval call binding the contract method 0x9546922e. // -// Solidity: function registeredEnclaveHash(bytes32 ) view returns(bool) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCaller) RegisteredEnclaveHash(opts *bind.CallOpts, arg0 [32]byte) (bool, error) { +// Solidity: function registeredService(address signer, uint8 service) view returns(bool) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierSession) RegisteredService(signer common.Address, service uint8) (bool, error) { + return _EspressoNitroTEEVerifier.Contract.RegisteredService(&_EspressoNitroTEEVerifier.CallOpts, signer, service) +} + +// RegisteredService is a free data retrieval call binding the contract method 0x9546922e. +// +// Solidity: function registeredService(address signer, uint8 service) view returns(bool) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCallerSession) RegisteredService(signer common.Address, service uint8) (bool, error) { + return _EspressoNitroTEEVerifier.Contract.RegisteredService(&_EspressoNitroTEEVerifier.CallOpts, signer, service) +} + +// RegisteredServices is a free data retrieval call binding the contract method 0x8fdeb2c1. +// +// Solidity: function registeredServices(uint8 , address signer) view returns(bool valid) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCaller) RegisteredServices(opts *bind.CallOpts, arg0 uint8, signer common.Address) (bool, error) { var out []interface{} - err := _EspressoNitroTEEVerifier.contract.Call(opts, &out, "registeredEnclaveHash", arg0) + err := _EspressoNitroTEEVerifier.contract.Call(opts, &out, "registeredServices", arg0, signer) if err != nil { return *new(bool), err @@ -742,26 +808,26 @@ func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCaller) RegisteredEncla } -// RegisteredEnclaveHash is a free data retrieval call binding the contract method 0x966989ee. +// RegisteredServices is a free data retrieval call binding the contract method 0x8fdeb2c1. // -// Solidity: function registeredEnclaveHash(bytes32 ) view returns(bool) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierSession) RegisteredEnclaveHash(arg0 [32]byte) (bool, error) { - return _EspressoNitroTEEVerifier.Contract.RegisteredEnclaveHash(&_EspressoNitroTEEVerifier.CallOpts, arg0) +// Solidity: function registeredServices(uint8 , address signer) view returns(bool valid) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierSession) RegisteredServices(arg0 uint8, signer common.Address) (bool, error) { + return _EspressoNitroTEEVerifier.Contract.RegisteredServices(&_EspressoNitroTEEVerifier.CallOpts, arg0, signer) } -// RegisteredEnclaveHash is a free data retrieval call binding the contract method 0x966989ee. +// RegisteredServices is a free data retrieval call binding the contract method 0x8fdeb2c1. // -// Solidity: function registeredEnclaveHash(bytes32 ) view returns(bool) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCallerSession) RegisteredEnclaveHash(arg0 [32]byte) (bool, error) { - return _EspressoNitroTEEVerifier.Contract.RegisteredEnclaveHash(&_EspressoNitroTEEVerifier.CallOpts, arg0) +// Solidity: function registeredServices(uint8 , address signer) view returns(bool valid) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCallerSession) RegisteredServices(arg0 uint8, signer common.Address) (bool, error) { + return _EspressoNitroTEEVerifier.Contract.RegisteredServices(&_EspressoNitroTEEVerifier.CallOpts, arg0, signer) } -// RegisteredSigners is a free data retrieval call binding the contract method 0x0123d0c1. +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. // -// Solidity: function registeredSigners(address ) view returns(bool) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCaller) RegisteredSigners(opts *bind.CallOpts, arg0 common.Address) (bool, error) { +// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCaller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) { var out []interface{} - err := _EspressoNitroTEEVerifier.contract.Call(opts, &out, "registeredSigners", arg0) + err := _EspressoNitroTEEVerifier.contract.Call(opts, &out, "supportsInterface", interfaceId) if err != nil { return *new(bool), err @@ -773,18 +839,18 @@ func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCaller) RegisteredSigne } -// RegisteredSigners is a free data retrieval call binding the contract method 0x0123d0c1. +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. // -// Solidity: function registeredSigners(address ) view returns(bool) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierSession) RegisteredSigners(arg0 common.Address) (bool, error) { - return _EspressoNitroTEEVerifier.Contract.RegisteredSigners(&_EspressoNitroTEEVerifier.CallOpts, arg0) +// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _EspressoNitroTEEVerifier.Contract.SupportsInterface(&_EspressoNitroTEEVerifier.CallOpts, interfaceId) } -// RegisteredSigners is a free data retrieval call binding the contract method 0x0123d0c1. +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. // -// Solidity: function registeredSigners(address ) view returns(bool) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCallerSession) RegisteredSigners(arg0 common.Address) (bool, error) { - return _EspressoNitroTEEVerifier.Contract.RegisteredSigners(&_EspressoNitroTEEVerifier.CallOpts, arg0) +// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierCallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _EspressoNitroTEEVerifier.Contract.SupportsInterface(&_EspressoNitroTEEVerifier.CallOpts, interfaceId) } // AcceptOwnership is a paid mutator transaction binding the contract method 0x79ba5097. @@ -808,46 +874,130 @@ func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierTransactorSession) Acce return _EspressoNitroTEEVerifier.Contract.AcceptOwnership(&_EspressoNitroTEEVerifier.TransactOpts) } -// DeleteRegisteredSigners is a paid mutator transaction binding the contract method 0xe7370be0. +// AddGuardian is a paid mutator transaction binding the contract method 0xa526d83b. +// +// Solidity: function addGuardian(address guardian) returns() +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierTransactor) AddGuardian(opts *bind.TransactOpts, guardian common.Address) (*types.Transaction, error) { + return _EspressoNitroTEEVerifier.contract.Transact(opts, "addGuardian", guardian) +} + +// AddGuardian is a paid mutator transaction binding the contract method 0xa526d83b. +// +// Solidity: function addGuardian(address guardian) returns() +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierSession) AddGuardian(guardian common.Address) (*types.Transaction, error) { + return _EspressoNitroTEEVerifier.Contract.AddGuardian(&_EspressoNitroTEEVerifier.TransactOpts, guardian) +} + +// AddGuardian is a paid mutator transaction binding the contract method 0xa526d83b. +// +// Solidity: function addGuardian(address guardian) returns() +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierTransactorSession) AddGuardian(guardian common.Address) (*types.Transaction, error) { + return _EspressoNitroTEEVerifier.Contract.AddGuardian(&_EspressoNitroTEEVerifier.TransactOpts, guardian) +} + +// DeleteEnclaveHashes is a paid mutator transaction binding the contract method 0xcd8f6997. +// +// Solidity: function deleteEnclaveHashes(bytes32[] enclaveHashes, uint8 service) returns() +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierTransactor) DeleteEnclaveHashes(opts *bind.TransactOpts, enclaveHashes [][32]byte, service uint8) (*types.Transaction, error) { + return _EspressoNitroTEEVerifier.contract.Transact(opts, "deleteEnclaveHashes", enclaveHashes, service) +} + +// DeleteEnclaveHashes is a paid mutator transaction binding the contract method 0xcd8f6997. +// +// Solidity: function deleteEnclaveHashes(bytes32[] enclaveHashes, uint8 service) returns() +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierSession) DeleteEnclaveHashes(enclaveHashes [][32]byte, service uint8) (*types.Transaction, error) { + return _EspressoNitroTEEVerifier.Contract.DeleteEnclaveHashes(&_EspressoNitroTEEVerifier.TransactOpts, enclaveHashes, service) +} + +// DeleteEnclaveHashes is a paid mutator transaction binding the contract method 0xcd8f6997. +// +// Solidity: function deleteEnclaveHashes(bytes32[] enclaveHashes, uint8 service) returns() +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierTransactorSession) DeleteEnclaveHashes(enclaveHashes [][32]byte, service uint8) (*types.Transaction, error) { + return _EspressoNitroTEEVerifier.Contract.DeleteEnclaveHashes(&_EspressoNitroTEEVerifier.TransactOpts, enclaveHashes, service) +} + +// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. +// +// Solidity: function grantRole(bytes32 role, address account) returns() +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierTransactor) GrantRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { + return _EspressoNitroTEEVerifier.contract.Transact(opts, "grantRole", role, account) +} + +// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. +// +// Solidity: function grantRole(bytes32 role, address account) returns() +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierSession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _EspressoNitroTEEVerifier.Contract.GrantRole(&_EspressoNitroTEEVerifier.TransactOpts, role, account) +} + +// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. +// +// Solidity: function grantRole(bytes32 role, address account) returns() +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierTransactorSession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _EspressoNitroTEEVerifier.Contract.GrantRole(&_EspressoNitroTEEVerifier.TransactOpts, role, account) +} + +// Initialize is a paid mutator transaction binding the contract method 0x485cc955. +// +// Solidity: function initialize(address nitroEnclaveVerifier, address initialOwner) returns() +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierTransactor) Initialize(opts *bind.TransactOpts, nitroEnclaveVerifier common.Address, initialOwner common.Address) (*types.Transaction, error) { + return _EspressoNitroTEEVerifier.contract.Transact(opts, "initialize", nitroEnclaveVerifier, initialOwner) +} + +// Initialize is a paid mutator transaction binding the contract method 0x485cc955. +// +// Solidity: function initialize(address nitroEnclaveVerifier, address initialOwner) returns() +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierSession) Initialize(nitroEnclaveVerifier common.Address, initialOwner common.Address) (*types.Transaction, error) { + return _EspressoNitroTEEVerifier.Contract.Initialize(&_EspressoNitroTEEVerifier.TransactOpts, nitroEnclaveVerifier, initialOwner) +} + +// Initialize is a paid mutator transaction binding the contract method 0x485cc955. +// +// Solidity: function initialize(address nitroEnclaveVerifier, address initialOwner) returns() +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierTransactorSession) Initialize(nitroEnclaveVerifier common.Address, initialOwner common.Address) (*types.Transaction, error) { + return _EspressoNitroTEEVerifier.Contract.Initialize(&_EspressoNitroTEEVerifier.TransactOpts, nitroEnclaveVerifier, initialOwner) +} + +// RegisterService is a paid mutator transaction binding the contract method 0xdac79fc8. // -// Solidity: function deleteRegisteredSigners(address[] signers) returns() -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierTransactor) DeleteRegisteredSigners(opts *bind.TransactOpts, signers []common.Address) (*types.Transaction, error) { - return _EspressoNitroTEEVerifier.contract.Transact(opts, "deleteRegisteredSigners", signers) +// Solidity: function registerService(bytes output, bytes proofBytes, uint8 service) returns() +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierTransactor) RegisterService(opts *bind.TransactOpts, output []byte, proofBytes []byte, service uint8) (*types.Transaction, error) { + return _EspressoNitroTEEVerifier.contract.Transact(opts, "registerService", output, proofBytes, service) } -// DeleteRegisteredSigners is a paid mutator transaction binding the contract method 0xe7370be0. +// RegisterService is a paid mutator transaction binding the contract method 0xdac79fc8. // -// Solidity: function deleteRegisteredSigners(address[] signers) returns() -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierSession) DeleteRegisteredSigners(signers []common.Address) (*types.Transaction, error) { - return _EspressoNitroTEEVerifier.Contract.DeleteRegisteredSigners(&_EspressoNitroTEEVerifier.TransactOpts, signers) +// Solidity: function registerService(bytes output, bytes proofBytes, uint8 service) returns() +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierSession) RegisterService(output []byte, proofBytes []byte, service uint8) (*types.Transaction, error) { + return _EspressoNitroTEEVerifier.Contract.RegisterService(&_EspressoNitroTEEVerifier.TransactOpts, output, proofBytes, service) } -// DeleteRegisteredSigners is a paid mutator transaction binding the contract method 0xe7370be0. +// RegisterService is a paid mutator transaction binding the contract method 0xdac79fc8. // -// Solidity: function deleteRegisteredSigners(address[] signers) returns() -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierTransactorSession) DeleteRegisteredSigners(signers []common.Address) (*types.Transaction, error) { - return _EspressoNitroTEEVerifier.Contract.DeleteRegisteredSigners(&_EspressoNitroTEEVerifier.TransactOpts, signers) +// Solidity: function registerService(bytes output, bytes proofBytes, uint8 service) returns() +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierTransactorSession) RegisterService(output []byte, proofBytes []byte, service uint8) (*types.Transaction, error) { + return _EspressoNitroTEEVerifier.Contract.RegisterService(&_EspressoNitroTEEVerifier.TransactOpts, output, proofBytes, service) } -// RegisterSigner is a paid mutator transaction binding the contract method 0xba58e82a. +// RemoveGuardian is a paid mutator transaction binding the contract method 0x71404156. // -// Solidity: function registerSigner(bytes attestationTbs, bytes signature) returns() -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierTransactor) RegisterSigner(opts *bind.TransactOpts, attestationTbs []byte, signature []byte) (*types.Transaction, error) { - return _EspressoNitroTEEVerifier.contract.Transact(opts, "registerSigner", attestationTbs, signature) +// Solidity: function removeGuardian(address guardian) returns() +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierTransactor) RemoveGuardian(opts *bind.TransactOpts, guardian common.Address) (*types.Transaction, error) { + return _EspressoNitroTEEVerifier.contract.Transact(opts, "removeGuardian", guardian) } -// RegisterSigner is a paid mutator transaction binding the contract method 0xba58e82a. +// RemoveGuardian is a paid mutator transaction binding the contract method 0x71404156. // -// Solidity: function registerSigner(bytes attestationTbs, bytes signature) returns() -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierSession) RegisterSigner(attestationTbs []byte, signature []byte) (*types.Transaction, error) { - return _EspressoNitroTEEVerifier.Contract.RegisterSigner(&_EspressoNitroTEEVerifier.TransactOpts, attestationTbs, signature) +// Solidity: function removeGuardian(address guardian) returns() +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierSession) RemoveGuardian(guardian common.Address) (*types.Transaction, error) { + return _EspressoNitroTEEVerifier.Contract.RemoveGuardian(&_EspressoNitroTEEVerifier.TransactOpts, guardian) } -// RegisterSigner is a paid mutator transaction binding the contract method 0xba58e82a. +// RemoveGuardian is a paid mutator transaction binding the contract method 0x71404156. // -// Solidity: function registerSigner(bytes attestationTbs, bytes signature) returns() -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierTransactorSession) RegisterSigner(attestationTbs []byte, signature []byte) (*types.Transaction, error) { - return _EspressoNitroTEEVerifier.Contract.RegisterSigner(&_EspressoNitroTEEVerifier.TransactOpts, attestationTbs, signature) +// Solidity: function removeGuardian(address guardian) returns() +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierTransactorSession) RemoveGuardian(guardian common.Address) (*types.Transaction, error) { + return _EspressoNitroTEEVerifier.Contract.RemoveGuardian(&_EspressoNitroTEEVerifier.TransactOpts, guardian) } // RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. @@ -871,25 +1021,88 @@ func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierTransactorSession) Reno return _EspressoNitroTEEVerifier.Contract.RenounceOwnership(&_EspressoNitroTEEVerifier.TransactOpts) } -// SetEnclaveHash is a paid mutator transaction binding the contract method 0x93b5552e. +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address callerConfirmation) returns() +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierTransactor) RenounceRole(opts *bind.TransactOpts, role [32]byte, callerConfirmation common.Address) (*types.Transaction, error) { + return _EspressoNitroTEEVerifier.contract.Transact(opts, "renounceRole", role, callerConfirmation) +} + +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address callerConfirmation) returns() +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierSession) RenounceRole(role [32]byte, callerConfirmation common.Address) (*types.Transaction, error) { + return _EspressoNitroTEEVerifier.Contract.RenounceRole(&_EspressoNitroTEEVerifier.TransactOpts, role, callerConfirmation) +} + +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address callerConfirmation) returns() +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierTransactorSession) RenounceRole(role [32]byte, callerConfirmation common.Address) (*types.Transaction, error) { + return _EspressoNitroTEEVerifier.Contract.RenounceRole(&_EspressoNitroTEEVerifier.TransactOpts, role, callerConfirmation) +} + +// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. +// +// Solidity: function revokeRole(bytes32 role, address account) returns() +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierTransactor) RevokeRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { + return _EspressoNitroTEEVerifier.contract.Transact(opts, "revokeRole", role, account) +} + +// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. +// +// Solidity: function revokeRole(bytes32 role, address account) returns() +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierSession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _EspressoNitroTEEVerifier.Contract.RevokeRole(&_EspressoNitroTEEVerifier.TransactOpts, role, account) +} + +// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. +// +// Solidity: function revokeRole(bytes32 role, address account) returns() +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierTransactorSession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _EspressoNitroTEEVerifier.Contract.RevokeRole(&_EspressoNitroTEEVerifier.TransactOpts, role, account) +} + +// SetEnclaveHash is a paid mutator transaction binding the contract method 0x0f1f0f86. +// +// Solidity: function setEnclaveHash(bytes32 enclaveHash, bool valid, uint8 service) returns() +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierTransactor) SetEnclaveHash(opts *bind.TransactOpts, enclaveHash [32]byte, valid bool, service uint8) (*types.Transaction, error) { + return _EspressoNitroTEEVerifier.contract.Transact(opts, "setEnclaveHash", enclaveHash, valid, service) +} + +// SetEnclaveHash is a paid mutator transaction binding the contract method 0x0f1f0f86. +// +// Solidity: function setEnclaveHash(bytes32 enclaveHash, bool valid, uint8 service) returns() +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierSession) SetEnclaveHash(enclaveHash [32]byte, valid bool, service uint8) (*types.Transaction, error) { + return _EspressoNitroTEEVerifier.Contract.SetEnclaveHash(&_EspressoNitroTEEVerifier.TransactOpts, enclaveHash, valid, service) +} + +// SetEnclaveHash is a paid mutator transaction binding the contract method 0x0f1f0f86. +// +// Solidity: function setEnclaveHash(bytes32 enclaveHash, bool valid, uint8 service) returns() +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierTransactorSession) SetEnclaveHash(enclaveHash [32]byte, valid bool, service uint8) (*types.Transaction, error) { + return _EspressoNitroTEEVerifier.Contract.SetEnclaveHash(&_EspressoNitroTEEVerifier.TransactOpts, enclaveHash, valid, service) +} + +// SetNitroEnclaveVerifier is a paid mutator transaction binding the contract method 0xa628a19e. // -// Solidity: function setEnclaveHash(bytes32 enclaveHash, bool valid) returns() -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierTransactor) SetEnclaveHash(opts *bind.TransactOpts, enclaveHash [32]byte, valid bool) (*types.Transaction, error) { - return _EspressoNitroTEEVerifier.contract.Transact(opts, "setEnclaveHash", enclaveHash, valid) +// Solidity: function setNitroEnclaveVerifier(address nitroEnclaveVerifier) returns() +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierTransactor) SetNitroEnclaveVerifier(opts *bind.TransactOpts, nitroEnclaveVerifier common.Address) (*types.Transaction, error) { + return _EspressoNitroTEEVerifier.contract.Transact(opts, "setNitroEnclaveVerifier", nitroEnclaveVerifier) } -// SetEnclaveHash is a paid mutator transaction binding the contract method 0x93b5552e. +// SetNitroEnclaveVerifier is a paid mutator transaction binding the contract method 0xa628a19e. // -// Solidity: function setEnclaveHash(bytes32 enclaveHash, bool valid) returns() -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierSession) SetEnclaveHash(enclaveHash [32]byte, valid bool) (*types.Transaction, error) { - return _EspressoNitroTEEVerifier.Contract.SetEnclaveHash(&_EspressoNitroTEEVerifier.TransactOpts, enclaveHash, valid) +// Solidity: function setNitroEnclaveVerifier(address nitroEnclaveVerifier) returns() +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierSession) SetNitroEnclaveVerifier(nitroEnclaveVerifier common.Address) (*types.Transaction, error) { + return _EspressoNitroTEEVerifier.Contract.SetNitroEnclaveVerifier(&_EspressoNitroTEEVerifier.TransactOpts, nitroEnclaveVerifier) } -// SetEnclaveHash is a paid mutator transaction binding the contract method 0x93b5552e. +// SetNitroEnclaveVerifier is a paid mutator transaction binding the contract method 0xa628a19e. // -// Solidity: function setEnclaveHash(bytes32 enclaveHash, bool valid) returns() -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierTransactorSession) SetEnclaveHash(enclaveHash [32]byte, valid bool) (*types.Transaction, error) { - return _EspressoNitroTEEVerifier.Contract.SetEnclaveHash(&_EspressoNitroTEEVerifier.TransactOpts, enclaveHash, valid) +// Solidity: function setNitroEnclaveVerifier(address nitroEnclaveVerifier) returns() +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierTransactorSession) SetNitroEnclaveVerifier(nitroEnclaveVerifier common.Address) (*types.Transaction, error) { + return _EspressoNitroTEEVerifier.Contract.SetNitroEnclaveVerifier(&_EspressoNitroTEEVerifier.TransactOpts, nitroEnclaveVerifier) } // TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. @@ -913,30 +1126,30 @@ func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierTransactorSession) Tran return _EspressoNitroTEEVerifier.Contract.TransferOwnership(&_EspressoNitroTEEVerifier.TransactOpts, newOwner) } -// ValidateAttestation is a paid mutator transaction binding the contract method 0x05f7aead. +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. // -// Solidity: function validateAttestation(bytes attestationTbs, bytes signature) returns((uint256,uint64,uint256,uint256[],uint256,uint256[],uint256,uint256,uint256)) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierTransactor) ValidateAttestation(opts *bind.TransactOpts, attestationTbs []byte, signature []byte) (*types.Transaction, error) { - return _EspressoNitroTEEVerifier.contract.Transact(opts, "validateAttestation", attestationTbs, signature) +// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierTransactor) UpgradeToAndCall(opts *bind.TransactOpts, newImplementation common.Address, data []byte) (*types.Transaction, error) { + return _EspressoNitroTEEVerifier.contract.Transact(opts, "upgradeToAndCall", newImplementation, data) } -// ValidateAttestation is a paid mutator transaction binding the contract method 0x05f7aead. +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. // -// Solidity: function validateAttestation(bytes attestationTbs, bytes signature) returns((uint256,uint64,uint256,uint256[],uint256,uint256[],uint256,uint256,uint256)) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierSession) ValidateAttestation(attestationTbs []byte, signature []byte) (*types.Transaction, error) { - return _EspressoNitroTEEVerifier.Contract.ValidateAttestation(&_EspressoNitroTEEVerifier.TransactOpts, attestationTbs, signature) +// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierSession) UpgradeToAndCall(newImplementation common.Address, data []byte) (*types.Transaction, error) { + return _EspressoNitroTEEVerifier.Contract.UpgradeToAndCall(&_EspressoNitroTEEVerifier.TransactOpts, newImplementation, data) } -// ValidateAttestation is a paid mutator transaction binding the contract method 0x05f7aead. +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. // -// Solidity: function validateAttestation(bytes attestationTbs, bytes signature) returns((uint256,uint64,uint256,uint256[],uint256,uint256[],uint256,uint256,uint256)) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierTransactorSession) ValidateAttestation(attestationTbs []byte, signature []byte) (*types.Transaction, error) { - return _EspressoNitroTEEVerifier.Contract.ValidateAttestation(&_EspressoNitroTEEVerifier.TransactOpts, attestationTbs, signature) +// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierTransactorSession) UpgradeToAndCall(newImplementation common.Address, data []byte) (*types.Transaction, error) { + return _EspressoNitroTEEVerifier.Contract.UpgradeToAndCall(&_EspressoNitroTEEVerifier.TransactOpts, newImplementation, data) } -// EspressoNitroTEEVerifierDeletedRegisteredSignerIterator is returned from FilterDeletedRegisteredSigner and is used to iterate over the raw logs and unpacked data for DeletedRegisteredSigner events raised by the EspressoNitroTEEVerifier contract. -type EspressoNitroTEEVerifierDeletedRegisteredSignerIterator struct { - Event *EspressoNitroTEEVerifierDeletedRegisteredSigner // Event containing the contract specifics and raw log +// EspressoNitroTEEVerifierDeletedEnclaveHashIterator is returned from FilterDeletedEnclaveHash and is used to iterate over the raw logs and unpacked data for DeletedEnclaveHash events raised by the EspressoNitroTEEVerifier contract. +type EspressoNitroTEEVerifierDeletedEnclaveHashIterator struct { + Event *EspressoNitroTEEVerifierDeletedEnclaveHash // 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 @@ -950,7 +1163,7 @@ type EspressoNitroTEEVerifierDeletedRegisteredSignerIterator struct { // 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 *EspressoNitroTEEVerifierDeletedRegisteredSignerIterator) Next() bool { +func (it *EspressoNitroTEEVerifierDeletedEnclaveHashIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -959,7 +1172,7 @@ func (it *EspressoNitroTEEVerifierDeletedRegisteredSignerIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(EspressoNitroTEEVerifierDeletedRegisteredSigner) + it.Event = new(EspressoNitroTEEVerifierDeletedEnclaveHash) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -974,7 +1187,7 @@ func (it *EspressoNitroTEEVerifierDeletedRegisteredSignerIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(EspressoNitroTEEVerifierDeletedRegisteredSigner) + it.Event = new(EspressoNitroTEEVerifierDeletedEnclaveHash) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -990,41 +1203,60 @@ func (it *EspressoNitroTEEVerifierDeletedRegisteredSignerIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *EspressoNitroTEEVerifierDeletedRegisteredSignerIterator) Error() error { +func (it *EspressoNitroTEEVerifierDeletedEnclaveHashIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *EspressoNitroTEEVerifierDeletedRegisteredSignerIterator) Close() error { +func (it *EspressoNitroTEEVerifierDeletedEnclaveHashIterator) Close() error { it.sub.Unsubscribe() return nil } -// EspressoNitroTEEVerifierDeletedRegisteredSigner represents a DeletedRegisteredSigner event raised by the EspressoNitroTEEVerifier contract. -type EspressoNitroTEEVerifierDeletedRegisteredSigner struct { - Signer common.Address - Raw types.Log // Blockchain specific contextual infos +// EspressoNitroTEEVerifierDeletedEnclaveHash represents a DeletedEnclaveHash event raised by the EspressoNitroTEEVerifier contract. +type EspressoNitroTEEVerifierDeletedEnclaveHash struct { + EnclaveHash [32]byte + Service uint8 + Raw types.Log // Blockchain specific contextual infos } -// FilterDeletedRegisteredSigner is a free log retrieval operation binding the contract event 0x4872495ab7a697b6ed37286c6738fc94eaf291e5e4908abc1e2b479894f002dd. +// FilterDeletedEnclaveHash is a free log retrieval operation binding the contract event 0x4f4ccf0f17d7016865671af778a980fe75a07abbbd28dcf80f9311ada39fa4e8. // -// Solidity: event DeletedRegisteredSigner(address signer) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) FilterDeletedRegisteredSigner(opts *bind.FilterOpts) (*EspressoNitroTEEVerifierDeletedRegisteredSignerIterator, error) { +// Solidity: event DeletedEnclaveHash(bytes32 indexed enclaveHash, uint8 indexed service) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) FilterDeletedEnclaveHash(opts *bind.FilterOpts, enclaveHash [][32]byte, service []uint8) (*EspressoNitroTEEVerifierDeletedEnclaveHashIterator, error) { + + var enclaveHashRule []interface{} + for _, enclaveHashItem := range enclaveHash { + enclaveHashRule = append(enclaveHashRule, enclaveHashItem) + } + var serviceRule []interface{} + for _, serviceItem := range service { + serviceRule = append(serviceRule, serviceItem) + } - logs, sub, err := _EspressoNitroTEEVerifier.contract.FilterLogs(opts, "DeletedRegisteredSigner") + logs, sub, err := _EspressoNitroTEEVerifier.contract.FilterLogs(opts, "DeletedEnclaveHash", enclaveHashRule, serviceRule) if err != nil { return nil, err } - return &EspressoNitroTEEVerifierDeletedRegisteredSignerIterator{contract: _EspressoNitroTEEVerifier.contract, event: "DeletedRegisteredSigner", logs: logs, sub: sub}, nil + return &EspressoNitroTEEVerifierDeletedEnclaveHashIterator{contract: _EspressoNitroTEEVerifier.contract, event: "DeletedEnclaveHash", logs: logs, sub: sub}, nil } -// WatchDeletedRegisteredSigner is a free log subscription operation binding the contract event 0x4872495ab7a697b6ed37286c6738fc94eaf291e5e4908abc1e2b479894f002dd. +// WatchDeletedEnclaveHash is a free log subscription operation binding the contract event 0x4f4ccf0f17d7016865671af778a980fe75a07abbbd28dcf80f9311ada39fa4e8. // -// Solidity: event DeletedRegisteredSigner(address signer) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) WatchDeletedRegisteredSigner(opts *bind.WatchOpts, sink chan<- *EspressoNitroTEEVerifierDeletedRegisteredSigner) (event.Subscription, error) { +// Solidity: event DeletedEnclaveHash(bytes32 indexed enclaveHash, uint8 indexed service) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) WatchDeletedEnclaveHash(opts *bind.WatchOpts, sink chan<- *EspressoNitroTEEVerifierDeletedEnclaveHash, enclaveHash [][32]byte, service []uint8) (event.Subscription, error) { + + var enclaveHashRule []interface{} + for _, enclaveHashItem := range enclaveHash { + enclaveHashRule = append(enclaveHashRule, enclaveHashItem) + } + var serviceRule []interface{} + for _, serviceItem := range service { + serviceRule = append(serviceRule, serviceItem) + } - logs, sub, err := _EspressoNitroTEEVerifier.contract.WatchLogs(opts, "DeletedRegisteredSigner") + logs, sub, err := _EspressoNitroTEEVerifier.contract.WatchLogs(opts, "DeletedEnclaveHash", enclaveHashRule, serviceRule) if err != nil { return nil, err } @@ -1034,8 +1266,8 @@ func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) WatchDeletedR select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(EspressoNitroTEEVerifierDeletedRegisteredSigner) - if err := _EspressoNitroTEEVerifier.contract.UnpackLog(event, "DeletedRegisteredSigner", log); err != nil { + event := new(EspressoNitroTEEVerifierDeletedEnclaveHash) + if err := _EspressoNitroTEEVerifier.contract.UnpackLog(event, "DeletedEnclaveHash", log); err != nil { return err } event.Raw = log @@ -1056,21 +1288,21 @@ func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) WatchDeletedR }), nil } -// ParseDeletedRegisteredSigner is a log parse operation binding the contract event 0x4872495ab7a697b6ed37286c6738fc94eaf291e5e4908abc1e2b479894f002dd. +// ParseDeletedEnclaveHash is a log parse operation binding the contract event 0x4f4ccf0f17d7016865671af778a980fe75a07abbbd28dcf80f9311ada39fa4e8. // -// Solidity: event DeletedRegisteredSigner(address signer) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) ParseDeletedRegisteredSigner(log types.Log) (*EspressoNitroTEEVerifierDeletedRegisteredSigner, error) { - event := new(EspressoNitroTEEVerifierDeletedRegisteredSigner) - if err := _EspressoNitroTEEVerifier.contract.UnpackLog(event, "DeletedRegisteredSigner", log); err != nil { +// Solidity: event DeletedEnclaveHash(bytes32 indexed enclaveHash, uint8 indexed service) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) ParseDeletedEnclaveHash(log types.Log) (*EspressoNitroTEEVerifierDeletedEnclaveHash, error) { + event := new(EspressoNitroTEEVerifierDeletedEnclaveHash) + if err := _EspressoNitroTEEVerifier.contract.UnpackLog(event, "DeletedEnclaveHash", log); err != nil { return nil, err } event.Raw = log return event, nil } -// EspressoNitroTEEVerifierEnclaveHashSetIterator is returned from FilterEnclaveHashSet and is used to iterate over the raw logs and unpacked data for EnclaveHashSet events raised by the EspressoNitroTEEVerifier contract. -type EspressoNitroTEEVerifierEnclaveHashSetIterator struct { - Event *EspressoNitroTEEVerifierEnclaveHashSet // Event containing the contract specifics and raw log +// EspressoNitroTEEVerifierDeletedRegisteredServiceIterator is returned from FilterDeletedRegisteredService and is used to iterate over the raw logs and unpacked data for DeletedRegisteredService events raised by the EspressoNitroTEEVerifier contract. +type EspressoNitroTEEVerifierDeletedRegisteredServiceIterator struct { + Event *EspressoNitroTEEVerifierDeletedRegisteredService // 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 @@ -1084,7 +1316,7 @@ type EspressoNitroTEEVerifierEnclaveHashSetIterator struct { // 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 *EspressoNitroTEEVerifierEnclaveHashSetIterator) Next() bool { +func (it *EspressoNitroTEEVerifierDeletedRegisteredServiceIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1093,7 +1325,7 @@ func (it *EspressoNitroTEEVerifierEnclaveHashSetIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(EspressoNitroTEEVerifierEnclaveHashSet) + it.Event = new(EspressoNitroTEEVerifierDeletedRegisteredService) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1108,7 +1340,7 @@ func (it *EspressoNitroTEEVerifierEnclaveHashSetIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(EspressoNitroTEEVerifierEnclaveHashSet) + it.Event = new(EspressoNitroTEEVerifierDeletedRegisteredService) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1124,42 +1356,60 @@ func (it *EspressoNitroTEEVerifierEnclaveHashSetIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *EspressoNitroTEEVerifierEnclaveHashSetIterator) Error() error { +func (it *EspressoNitroTEEVerifierDeletedRegisteredServiceIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *EspressoNitroTEEVerifierEnclaveHashSetIterator) Close() error { +func (it *EspressoNitroTEEVerifierDeletedRegisteredServiceIterator) Close() error { it.sub.Unsubscribe() return nil } -// EspressoNitroTEEVerifierEnclaveHashSet represents a EnclaveHashSet event raised by the EspressoNitroTEEVerifier contract. -type EspressoNitroTEEVerifierEnclaveHashSet struct { - EnclaveHash [32]byte - Valid bool - Raw types.Log // Blockchain specific contextual infos +// EspressoNitroTEEVerifierDeletedRegisteredService represents a DeletedRegisteredService event raised by the EspressoNitroTEEVerifier contract. +type EspressoNitroTEEVerifierDeletedRegisteredService struct { + Signer common.Address + Service uint8 + Raw types.Log // Blockchain specific contextual infos } -// FilterEnclaveHashSet is a free log retrieval operation binding the contract event 0x2282c24f65eac8254df1107716a961b677b872ed0e1d2a9f6bafc154441eb7fd. +// FilterDeletedRegisteredService is a free log retrieval operation binding the contract event 0xbc364e6a17bd1d2abf3aff8b02c8660f8b601f3cfe343ea66df756115643f3a4. // -// Solidity: event EnclaveHashSet(bytes32 enclaveHash, bool valid) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) FilterEnclaveHashSet(opts *bind.FilterOpts) (*EspressoNitroTEEVerifierEnclaveHashSetIterator, error) { +// Solidity: event DeletedRegisteredService(address indexed signer, uint8 indexed service) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) FilterDeletedRegisteredService(opts *bind.FilterOpts, signer []common.Address, service []uint8) (*EspressoNitroTEEVerifierDeletedRegisteredServiceIterator, error) { + + var signerRule []interface{} + for _, signerItem := range signer { + signerRule = append(signerRule, signerItem) + } + var serviceRule []interface{} + for _, serviceItem := range service { + serviceRule = append(serviceRule, serviceItem) + } - logs, sub, err := _EspressoNitroTEEVerifier.contract.FilterLogs(opts, "EnclaveHashSet") + logs, sub, err := _EspressoNitroTEEVerifier.contract.FilterLogs(opts, "DeletedRegisteredService", signerRule, serviceRule) if err != nil { return nil, err } - return &EspressoNitroTEEVerifierEnclaveHashSetIterator{contract: _EspressoNitroTEEVerifier.contract, event: "EnclaveHashSet", logs: logs, sub: sub}, nil + return &EspressoNitroTEEVerifierDeletedRegisteredServiceIterator{contract: _EspressoNitroTEEVerifier.contract, event: "DeletedRegisteredService", logs: logs, sub: sub}, nil } -// WatchEnclaveHashSet is a free log subscription operation binding the contract event 0x2282c24f65eac8254df1107716a961b677b872ed0e1d2a9f6bafc154441eb7fd. +// WatchDeletedRegisteredService is a free log subscription operation binding the contract event 0xbc364e6a17bd1d2abf3aff8b02c8660f8b601f3cfe343ea66df756115643f3a4. // -// Solidity: event EnclaveHashSet(bytes32 enclaveHash, bool valid) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) WatchEnclaveHashSet(opts *bind.WatchOpts, sink chan<- *EspressoNitroTEEVerifierEnclaveHashSet) (event.Subscription, error) { +// Solidity: event DeletedRegisteredService(address indexed signer, uint8 indexed service) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) WatchDeletedRegisteredService(opts *bind.WatchOpts, sink chan<- *EspressoNitroTEEVerifierDeletedRegisteredService, signer []common.Address, service []uint8) (event.Subscription, error) { + + var signerRule []interface{} + for _, signerItem := range signer { + signerRule = append(signerRule, signerItem) + } + var serviceRule []interface{} + for _, serviceItem := range service { + serviceRule = append(serviceRule, serviceItem) + } - logs, sub, err := _EspressoNitroTEEVerifier.contract.WatchLogs(opts, "EnclaveHashSet") + logs, sub, err := _EspressoNitroTEEVerifier.contract.WatchLogs(opts, "DeletedRegisteredService", signerRule, serviceRule) if err != nil { return nil, err } @@ -1169,8 +1419,8 @@ func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) WatchEnclaveH select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(EspressoNitroTEEVerifierEnclaveHashSet) - if err := _EspressoNitroTEEVerifier.contract.UnpackLog(event, "EnclaveHashSet", log); err != nil { + event := new(EspressoNitroTEEVerifierDeletedRegisteredService) + if err := _EspressoNitroTEEVerifier.contract.UnpackLog(event, "DeletedRegisteredService", log); err != nil { return err } event.Raw = log @@ -1191,21 +1441,21 @@ func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) WatchEnclaveH }), nil } -// ParseEnclaveHashSet is a log parse operation binding the contract event 0x2282c24f65eac8254df1107716a961b677b872ed0e1d2a9f6bafc154441eb7fd. +// ParseDeletedRegisteredService is a log parse operation binding the contract event 0xbc364e6a17bd1d2abf3aff8b02c8660f8b601f3cfe343ea66df756115643f3a4. // -// Solidity: event EnclaveHashSet(bytes32 enclaveHash, bool valid) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) ParseEnclaveHashSet(log types.Log) (*EspressoNitroTEEVerifierEnclaveHashSet, error) { - event := new(EspressoNitroTEEVerifierEnclaveHashSet) - if err := _EspressoNitroTEEVerifier.contract.UnpackLog(event, "EnclaveHashSet", log); err != nil { +// Solidity: event DeletedRegisteredService(address indexed signer, uint8 indexed service) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) ParseDeletedRegisteredService(log types.Log) (*EspressoNitroTEEVerifierDeletedRegisteredService, error) { + event := new(EspressoNitroTEEVerifierDeletedRegisteredService) + if err := _EspressoNitroTEEVerifier.contract.UnpackLog(event, "DeletedRegisteredService", log); err != nil { return nil, err } event.Raw = log return event, nil } -// EspressoNitroTEEVerifierOwnershipTransferStartedIterator is returned from FilterOwnershipTransferStarted and is used to iterate over the raw logs and unpacked data for OwnershipTransferStarted events raised by the EspressoNitroTEEVerifier contract. -type EspressoNitroTEEVerifierOwnershipTransferStartedIterator struct { - Event *EspressoNitroTEEVerifierOwnershipTransferStarted // Event containing the contract specifics and raw log +// EspressoNitroTEEVerifierEnclaveHashSetIterator is returned from FilterEnclaveHashSet and is used to iterate over the raw logs and unpacked data for EnclaveHashSet events raised by the EspressoNitroTEEVerifier contract. +type EspressoNitroTEEVerifierEnclaveHashSetIterator struct { + Event *EspressoNitroTEEVerifierEnclaveHashSet // 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 @@ -1219,7 +1469,7 @@ type EspressoNitroTEEVerifierOwnershipTransferStartedIterator struct { // 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 *EspressoNitroTEEVerifierOwnershipTransferStartedIterator) Next() bool { +func (it *EspressoNitroTEEVerifierEnclaveHashSetIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1228,7 +1478,7 @@ func (it *EspressoNitroTEEVerifierOwnershipTransferStartedIterator) Next() bool if it.done { select { case log := <-it.logs: - it.Event = new(EspressoNitroTEEVerifierOwnershipTransferStarted) + it.Event = new(EspressoNitroTEEVerifierEnclaveHashSet) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1243,7 +1493,7 @@ func (it *EspressoNitroTEEVerifierOwnershipTransferStartedIterator) Next() bool // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(EspressoNitroTEEVerifierOwnershipTransferStarted) + it.Event = new(EspressoNitroTEEVerifierEnclaveHashSet) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1259,60 +1509,1255 @@ func (it *EspressoNitroTEEVerifierOwnershipTransferStartedIterator) Next() bool } // Error returns any retrieval or parsing error occurred during filtering. -func (it *EspressoNitroTEEVerifierOwnershipTransferStartedIterator) Error() error { +func (it *EspressoNitroTEEVerifierEnclaveHashSetIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *EspressoNitroTEEVerifierOwnershipTransferStartedIterator) Close() error { +func (it *EspressoNitroTEEVerifierEnclaveHashSetIterator) Close() error { it.sub.Unsubscribe() return nil } -// EspressoNitroTEEVerifierOwnershipTransferStarted represents a OwnershipTransferStarted event raised by the EspressoNitroTEEVerifier contract. -type EspressoNitroTEEVerifierOwnershipTransferStarted struct { - PreviousOwner common.Address - NewOwner common.Address - Raw types.Log // Blockchain specific contextual infos +// EspressoNitroTEEVerifierEnclaveHashSet represents a EnclaveHashSet event raised by the EspressoNitroTEEVerifier contract. +type EspressoNitroTEEVerifierEnclaveHashSet struct { + EnclaveHash [32]byte + Valid bool + Service uint8 + Raw types.Log // Blockchain specific contextual infos } -// FilterOwnershipTransferStarted is a free log retrieval operation binding the contract event 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700. +// FilterEnclaveHashSet is a free log retrieval operation binding the contract event 0x09821cb8037e04ceb9fc83e9a7c52c75b73a08d32a0f2f0f30cc83f2e4426090. // -// Solidity: event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) FilterOwnershipTransferStarted(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*EspressoNitroTEEVerifierOwnershipTransferStartedIterator, error) { +// Solidity: event EnclaveHashSet(bytes32 indexed enclaveHash, bool indexed valid, uint8 indexed service) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) FilterEnclaveHashSet(opts *bind.FilterOpts, enclaveHash [][32]byte, valid []bool, service []uint8) (*EspressoNitroTEEVerifierEnclaveHashSetIterator, error) { - var previousOwnerRule []interface{} - for _, previousOwnerItem := range previousOwner { - previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + var enclaveHashRule []interface{} + for _, enclaveHashItem := range enclaveHash { + enclaveHashRule = append(enclaveHashRule, enclaveHashItem) } - var newOwnerRule []interface{} - for _, newOwnerItem := range newOwner { + var validRule []interface{} + for _, validItem := range valid { + validRule = append(validRule, validItem) + } + var serviceRule []interface{} + for _, serviceItem := range service { + serviceRule = append(serviceRule, serviceItem) + } + + logs, sub, err := _EspressoNitroTEEVerifier.contract.FilterLogs(opts, "EnclaveHashSet", enclaveHashRule, validRule, serviceRule) + if err != nil { + return nil, err + } + return &EspressoNitroTEEVerifierEnclaveHashSetIterator{contract: _EspressoNitroTEEVerifier.contract, event: "EnclaveHashSet", logs: logs, sub: sub}, nil +} + +// WatchEnclaveHashSet is a free log subscription operation binding the contract event 0x09821cb8037e04ceb9fc83e9a7c52c75b73a08d32a0f2f0f30cc83f2e4426090. +// +// Solidity: event EnclaveHashSet(bytes32 indexed enclaveHash, bool indexed valid, uint8 indexed service) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) WatchEnclaveHashSet(opts *bind.WatchOpts, sink chan<- *EspressoNitroTEEVerifierEnclaveHashSet, enclaveHash [][32]byte, valid []bool, service []uint8) (event.Subscription, error) { + + var enclaveHashRule []interface{} + for _, enclaveHashItem := range enclaveHash { + enclaveHashRule = append(enclaveHashRule, enclaveHashItem) + } + var validRule []interface{} + for _, validItem := range valid { + validRule = append(validRule, validItem) + } + var serviceRule []interface{} + for _, serviceItem := range service { + serviceRule = append(serviceRule, serviceItem) + } + + logs, sub, err := _EspressoNitroTEEVerifier.contract.WatchLogs(opts, "EnclaveHashSet", enclaveHashRule, validRule, serviceRule) + 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(EspressoNitroTEEVerifierEnclaveHashSet) + if err := _EspressoNitroTEEVerifier.contract.UnpackLog(event, "EnclaveHashSet", 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 +} + +// ParseEnclaveHashSet is a log parse operation binding the contract event 0x09821cb8037e04ceb9fc83e9a7c52c75b73a08d32a0f2f0f30cc83f2e4426090. +// +// Solidity: event EnclaveHashSet(bytes32 indexed enclaveHash, bool indexed valid, uint8 indexed service) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) ParseEnclaveHashSet(log types.Log) (*EspressoNitroTEEVerifierEnclaveHashSet, error) { + event := new(EspressoNitroTEEVerifierEnclaveHashSet) + if err := _EspressoNitroTEEVerifier.contract.UnpackLog(event, "EnclaveHashSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// EspressoNitroTEEVerifierGuardianAddedIterator is returned from FilterGuardianAdded and is used to iterate over the raw logs and unpacked data for GuardianAdded events raised by the EspressoNitroTEEVerifier contract. +type EspressoNitroTEEVerifierGuardianAddedIterator struct { + Event *EspressoNitroTEEVerifierGuardianAdded // 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 *EspressoNitroTEEVerifierGuardianAddedIterator) 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(EspressoNitroTEEVerifierGuardianAdded) + 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(EspressoNitroTEEVerifierGuardianAdded) + 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 *EspressoNitroTEEVerifierGuardianAddedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EspressoNitroTEEVerifierGuardianAddedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// EspressoNitroTEEVerifierGuardianAdded represents a GuardianAdded event raised by the EspressoNitroTEEVerifier contract. +type EspressoNitroTEEVerifierGuardianAdded struct { + Guardian common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterGuardianAdded is a free log retrieval operation binding the contract event 0x038596bb31e2e7d3d9f184d4c98b310103f6d7f5830e5eec32bffe6f1728f969. +// +// Solidity: event GuardianAdded(address indexed guardian) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) FilterGuardianAdded(opts *bind.FilterOpts, guardian []common.Address) (*EspressoNitroTEEVerifierGuardianAddedIterator, error) { + + var guardianRule []interface{} + for _, guardianItem := range guardian { + guardianRule = append(guardianRule, guardianItem) + } + + logs, sub, err := _EspressoNitroTEEVerifier.contract.FilterLogs(opts, "GuardianAdded", guardianRule) + if err != nil { + return nil, err + } + return &EspressoNitroTEEVerifierGuardianAddedIterator{contract: _EspressoNitroTEEVerifier.contract, event: "GuardianAdded", logs: logs, sub: sub}, nil +} + +// WatchGuardianAdded is a free log subscription operation binding the contract event 0x038596bb31e2e7d3d9f184d4c98b310103f6d7f5830e5eec32bffe6f1728f969. +// +// Solidity: event GuardianAdded(address indexed guardian) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) WatchGuardianAdded(opts *bind.WatchOpts, sink chan<- *EspressoNitroTEEVerifierGuardianAdded, guardian []common.Address) (event.Subscription, error) { + + var guardianRule []interface{} + for _, guardianItem := range guardian { + guardianRule = append(guardianRule, guardianItem) + } + + logs, sub, err := _EspressoNitroTEEVerifier.contract.WatchLogs(opts, "GuardianAdded", guardianRule) + 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(EspressoNitroTEEVerifierGuardianAdded) + if err := _EspressoNitroTEEVerifier.contract.UnpackLog(event, "GuardianAdded", 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 +} + +// ParseGuardianAdded is a log parse operation binding the contract event 0x038596bb31e2e7d3d9f184d4c98b310103f6d7f5830e5eec32bffe6f1728f969. +// +// Solidity: event GuardianAdded(address indexed guardian) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) ParseGuardianAdded(log types.Log) (*EspressoNitroTEEVerifierGuardianAdded, error) { + event := new(EspressoNitroTEEVerifierGuardianAdded) + if err := _EspressoNitroTEEVerifier.contract.UnpackLog(event, "GuardianAdded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// EspressoNitroTEEVerifierGuardianRemovedIterator is returned from FilterGuardianRemoved and is used to iterate over the raw logs and unpacked data for GuardianRemoved events raised by the EspressoNitroTEEVerifier contract. +type EspressoNitroTEEVerifierGuardianRemovedIterator struct { + Event *EspressoNitroTEEVerifierGuardianRemoved // 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 *EspressoNitroTEEVerifierGuardianRemovedIterator) 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(EspressoNitroTEEVerifierGuardianRemoved) + 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(EspressoNitroTEEVerifierGuardianRemoved) + 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 *EspressoNitroTEEVerifierGuardianRemovedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EspressoNitroTEEVerifierGuardianRemovedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// EspressoNitroTEEVerifierGuardianRemoved represents a GuardianRemoved event raised by the EspressoNitroTEEVerifier contract. +type EspressoNitroTEEVerifierGuardianRemoved struct { + Guardian common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterGuardianRemoved is a free log retrieval operation binding the contract event 0xb8107d0c6b40be480ce3172ee66ba6d64b71f6b1685a851340036e6e2e3e3c52. +// +// Solidity: event GuardianRemoved(address indexed guardian) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) FilterGuardianRemoved(opts *bind.FilterOpts, guardian []common.Address) (*EspressoNitroTEEVerifierGuardianRemovedIterator, error) { + + var guardianRule []interface{} + for _, guardianItem := range guardian { + guardianRule = append(guardianRule, guardianItem) + } + + logs, sub, err := _EspressoNitroTEEVerifier.contract.FilterLogs(opts, "GuardianRemoved", guardianRule) + if err != nil { + return nil, err + } + return &EspressoNitroTEEVerifierGuardianRemovedIterator{contract: _EspressoNitroTEEVerifier.contract, event: "GuardianRemoved", logs: logs, sub: sub}, nil +} + +// WatchGuardianRemoved is a free log subscription operation binding the contract event 0xb8107d0c6b40be480ce3172ee66ba6d64b71f6b1685a851340036e6e2e3e3c52. +// +// Solidity: event GuardianRemoved(address indexed guardian) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) WatchGuardianRemoved(opts *bind.WatchOpts, sink chan<- *EspressoNitroTEEVerifierGuardianRemoved, guardian []common.Address) (event.Subscription, error) { + + var guardianRule []interface{} + for _, guardianItem := range guardian { + guardianRule = append(guardianRule, guardianItem) + } + + logs, sub, err := _EspressoNitroTEEVerifier.contract.WatchLogs(opts, "GuardianRemoved", guardianRule) + 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(EspressoNitroTEEVerifierGuardianRemoved) + if err := _EspressoNitroTEEVerifier.contract.UnpackLog(event, "GuardianRemoved", 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 +} + +// ParseGuardianRemoved is a log parse operation binding the contract event 0xb8107d0c6b40be480ce3172ee66ba6d64b71f6b1685a851340036e6e2e3e3c52. +// +// Solidity: event GuardianRemoved(address indexed guardian) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) ParseGuardianRemoved(log types.Log) (*EspressoNitroTEEVerifierGuardianRemoved, error) { + event := new(EspressoNitroTEEVerifierGuardianRemoved) + if err := _EspressoNitroTEEVerifier.contract.UnpackLog(event, "GuardianRemoved", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// EspressoNitroTEEVerifierInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the EspressoNitroTEEVerifier contract. +type EspressoNitroTEEVerifierInitializedIterator struct { + Event *EspressoNitroTEEVerifierInitialized // 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 *EspressoNitroTEEVerifierInitializedIterator) 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(EspressoNitroTEEVerifierInitialized) + 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(EspressoNitroTEEVerifierInitialized) + 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 *EspressoNitroTEEVerifierInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EspressoNitroTEEVerifierInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// EspressoNitroTEEVerifierInitialized represents a Initialized event raised by the EspressoNitroTEEVerifier contract. +type EspressoNitroTEEVerifierInitialized struct { + Version uint64 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitialized is a free log retrieval operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// +// Solidity: event Initialized(uint64 version) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) FilterInitialized(opts *bind.FilterOpts) (*EspressoNitroTEEVerifierInitializedIterator, error) { + + logs, sub, err := _EspressoNitroTEEVerifier.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &EspressoNitroTEEVerifierInitializedIterator{contract: _EspressoNitroTEEVerifier.contract, event: "Initialized", logs: logs, sub: sub}, nil +} + +// WatchInitialized is a free log subscription operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// +// Solidity: event Initialized(uint64 version) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *EspressoNitroTEEVerifierInitialized) (event.Subscription, error) { + + logs, sub, err := _EspressoNitroTEEVerifier.contract.WatchLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(EspressoNitroTEEVerifierInitialized) + if err := _EspressoNitroTEEVerifier.contract.UnpackLog(event, "Initialized", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseInitialized is a log parse operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// +// Solidity: event Initialized(uint64 version) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) ParseInitialized(log types.Log) (*EspressoNitroTEEVerifierInitialized, error) { + event := new(EspressoNitroTEEVerifierInitialized) + if err := _EspressoNitroTEEVerifier.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// EspressoNitroTEEVerifierNitroEnclaveVerifierSetIterator is returned from FilterNitroEnclaveVerifierSet and is used to iterate over the raw logs and unpacked data for NitroEnclaveVerifierSet events raised by the EspressoNitroTEEVerifier contract. +type EspressoNitroTEEVerifierNitroEnclaveVerifierSetIterator struct { + Event *EspressoNitroTEEVerifierNitroEnclaveVerifierSet // 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 *EspressoNitroTEEVerifierNitroEnclaveVerifierSetIterator) 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(EspressoNitroTEEVerifierNitroEnclaveVerifierSet) + 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(EspressoNitroTEEVerifierNitroEnclaveVerifierSet) + 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 *EspressoNitroTEEVerifierNitroEnclaveVerifierSetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EspressoNitroTEEVerifierNitroEnclaveVerifierSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// EspressoNitroTEEVerifierNitroEnclaveVerifierSet represents a NitroEnclaveVerifierSet event raised by the EspressoNitroTEEVerifier contract. +type EspressoNitroTEEVerifierNitroEnclaveVerifierSet struct { + NitroEnclaveVerifierAddress common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterNitroEnclaveVerifierSet is a free log retrieval operation binding the contract event 0x677ca5a363c501f3c7f7291bec1cd7edc4fe7a33f375571edd1d7d3067031fe6. +// +// Solidity: event NitroEnclaveVerifierSet(address nitroEnclaveVerifierAddress) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) FilterNitroEnclaveVerifierSet(opts *bind.FilterOpts) (*EspressoNitroTEEVerifierNitroEnclaveVerifierSetIterator, error) { + + logs, sub, err := _EspressoNitroTEEVerifier.contract.FilterLogs(opts, "NitroEnclaveVerifierSet") + if err != nil { + return nil, err + } + return &EspressoNitroTEEVerifierNitroEnclaveVerifierSetIterator{contract: _EspressoNitroTEEVerifier.contract, event: "NitroEnclaveVerifierSet", logs: logs, sub: sub}, nil +} + +// WatchNitroEnclaveVerifierSet is a free log subscription operation binding the contract event 0x677ca5a363c501f3c7f7291bec1cd7edc4fe7a33f375571edd1d7d3067031fe6. +// +// Solidity: event NitroEnclaveVerifierSet(address nitroEnclaveVerifierAddress) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) WatchNitroEnclaveVerifierSet(opts *bind.WatchOpts, sink chan<- *EspressoNitroTEEVerifierNitroEnclaveVerifierSet) (event.Subscription, error) { + + logs, sub, err := _EspressoNitroTEEVerifier.contract.WatchLogs(opts, "NitroEnclaveVerifierSet") + 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(EspressoNitroTEEVerifierNitroEnclaveVerifierSet) + if err := _EspressoNitroTEEVerifier.contract.UnpackLog(event, "NitroEnclaveVerifierSet", 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 +} + +// ParseNitroEnclaveVerifierSet is a log parse operation binding the contract event 0x677ca5a363c501f3c7f7291bec1cd7edc4fe7a33f375571edd1d7d3067031fe6. +// +// Solidity: event NitroEnclaveVerifierSet(address nitroEnclaveVerifierAddress) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) ParseNitroEnclaveVerifierSet(log types.Log) (*EspressoNitroTEEVerifierNitroEnclaveVerifierSet, error) { + event := new(EspressoNitroTEEVerifierNitroEnclaveVerifierSet) + if err := _EspressoNitroTEEVerifier.contract.UnpackLog(event, "NitroEnclaveVerifierSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// EspressoNitroTEEVerifierOwnershipTransferStartedIterator is returned from FilterOwnershipTransferStarted and is used to iterate over the raw logs and unpacked data for OwnershipTransferStarted events raised by the EspressoNitroTEEVerifier contract. +type EspressoNitroTEEVerifierOwnershipTransferStartedIterator struct { + Event *EspressoNitroTEEVerifierOwnershipTransferStarted // 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 *EspressoNitroTEEVerifierOwnershipTransferStartedIterator) 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(EspressoNitroTEEVerifierOwnershipTransferStarted) + 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(EspressoNitroTEEVerifierOwnershipTransferStarted) + 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 *EspressoNitroTEEVerifierOwnershipTransferStartedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EspressoNitroTEEVerifierOwnershipTransferStartedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// EspressoNitroTEEVerifierOwnershipTransferStarted represents a OwnershipTransferStarted event raised by the EspressoNitroTEEVerifier contract. +type EspressoNitroTEEVerifierOwnershipTransferStarted struct { + PreviousOwner common.Address + NewOwner common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOwnershipTransferStarted is a free log retrieval operation binding the contract event 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700. +// +// Solidity: event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) FilterOwnershipTransferStarted(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*EspressoNitroTEEVerifierOwnershipTransferStartedIterator, 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 := _EspressoNitroTEEVerifier.contract.FilterLogs(opts, "OwnershipTransferStarted", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return &EspressoNitroTEEVerifierOwnershipTransferStartedIterator{contract: _EspressoNitroTEEVerifier.contract, event: "OwnershipTransferStarted", logs: logs, sub: sub}, nil +} + +// WatchOwnershipTransferStarted is a free log subscription operation binding the contract event 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700. +// +// Solidity: event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) WatchOwnershipTransferStarted(opts *bind.WatchOpts, sink chan<- *EspressoNitroTEEVerifierOwnershipTransferStarted, 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 := _EspressoNitroTEEVerifier.contract.WatchLogs(opts, "OwnershipTransferStarted", 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(EspressoNitroTEEVerifierOwnershipTransferStarted) + if err := _EspressoNitroTEEVerifier.contract.UnpackLog(event, "OwnershipTransferStarted", 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 +} + +// ParseOwnershipTransferStarted is a log parse operation binding the contract event 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700. +// +// Solidity: event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) ParseOwnershipTransferStarted(log types.Log) (*EspressoNitroTEEVerifierOwnershipTransferStarted, error) { + event := new(EspressoNitroTEEVerifierOwnershipTransferStarted) + if err := _EspressoNitroTEEVerifier.contract.UnpackLog(event, "OwnershipTransferStarted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// EspressoNitroTEEVerifierOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the EspressoNitroTEEVerifier contract. +type EspressoNitroTEEVerifierOwnershipTransferredIterator struct { + Event *EspressoNitroTEEVerifierOwnershipTransferred // 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 *EspressoNitroTEEVerifierOwnershipTransferredIterator) 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(EspressoNitroTEEVerifierOwnershipTransferred) + 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(EspressoNitroTEEVerifierOwnershipTransferred) + 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 *EspressoNitroTEEVerifierOwnershipTransferredIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EspressoNitroTEEVerifierOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// EspressoNitroTEEVerifierOwnershipTransferred represents a OwnershipTransferred event raised by the EspressoNitroTEEVerifier contract. +type EspressoNitroTEEVerifierOwnershipTransferred 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 (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*EspressoNitroTEEVerifierOwnershipTransferredIterator, 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 := _EspressoNitroTEEVerifier.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return &EspressoNitroTEEVerifierOwnershipTransferredIterator{contract: _EspressoNitroTEEVerifier.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 (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *EspressoNitroTEEVerifierOwnershipTransferred, 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 := _EspressoNitroTEEVerifier.contract.FilterLogs(opts, "OwnershipTransferStarted", previousOwnerRule, newOwnerRule) + logs, sub, err := _EspressoNitroTEEVerifier.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(EspressoNitroTEEVerifierOwnershipTransferred) + if err := _EspressoNitroTEEVerifier.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 (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) ParseOwnershipTransferred(log types.Log) (*EspressoNitroTEEVerifierOwnershipTransferred, error) { + event := new(EspressoNitroTEEVerifierOwnershipTransferred) + if err := _EspressoNitroTEEVerifier.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// EspressoNitroTEEVerifierRoleAdminChangedIterator is returned from FilterRoleAdminChanged and is used to iterate over the raw logs and unpacked data for RoleAdminChanged events raised by the EspressoNitroTEEVerifier contract. +type EspressoNitroTEEVerifierRoleAdminChangedIterator struct { + Event *EspressoNitroTEEVerifierRoleAdminChanged // 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 *EspressoNitroTEEVerifierRoleAdminChangedIterator) 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(EspressoNitroTEEVerifierRoleAdminChanged) + 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(EspressoNitroTEEVerifierRoleAdminChanged) + 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 *EspressoNitroTEEVerifierRoleAdminChangedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EspressoNitroTEEVerifierRoleAdminChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// EspressoNitroTEEVerifierRoleAdminChanged represents a RoleAdminChanged event raised by the EspressoNitroTEEVerifier contract. +type EspressoNitroTEEVerifierRoleAdminChanged struct { + Role [32]byte + PreviousAdminRole [32]byte + NewAdminRole [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRoleAdminChanged is a free log retrieval operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. +// +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) FilterRoleAdminChanged(opts *bind.FilterOpts, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (*EspressoNitroTEEVerifierRoleAdminChangedIterator, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var previousAdminRoleRule []interface{} + for _, previousAdminRoleItem := range previousAdminRole { + previousAdminRoleRule = append(previousAdminRoleRule, previousAdminRoleItem) + } + var newAdminRoleRule []interface{} + for _, newAdminRoleItem := range newAdminRole { + newAdminRoleRule = append(newAdminRoleRule, newAdminRoleItem) + } + + logs, sub, err := _EspressoNitroTEEVerifier.contract.FilterLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule) + if err != nil { + return nil, err + } + return &EspressoNitroTEEVerifierRoleAdminChangedIterator{contract: _EspressoNitroTEEVerifier.contract, event: "RoleAdminChanged", logs: logs, sub: sub}, nil +} + +// WatchRoleAdminChanged is a free log subscription operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. +// +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) WatchRoleAdminChanged(opts *bind.WatchOpts, sink chan<- *EspressoNitroTEEVerifierRoleAdminChanged, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (event.Subscription, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var previousAdminRoleRule []interface{} + for _, previousAdminRoleItem := range previousAdminRole { + previousAdminRoleRule = append(previousAdminRoleRule, previousAdminRoleItem) + } + var newAdminRoleRule []interface{} + for _, newAdminRoleItem := range newAdminRole { + newAdminRoleRule = append(newAdminRoleRule, newAdminRoleItem) + } + + logs, sub, err := _EspressoNitroTEEVerifier.contract.WatchLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule) + 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(EspressoNitroTEEVerifierRoleAdminChanged) + if err := _EspressoNitroTEEVerifier.contract.UnpackLog(event, "RoleAdminChanged", 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 +} + +// ParseRoleAdminChanged is a log parse operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. +// +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) ParseRoleAdminChanged(log types.Log) (*EspressoNitroTEEVerifierRoleAdminChanged, error) { + event := new(EspressoNitroTEEVerifierRoleAdminChanged) + if err := _EspressoNitroTEEVerifier.contract.UnpackLog(event, "RoleAdminChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// EspressoNitroTEEVerifierRoleGrantedIterator is returned from FilterRoleGranted and is used to iterate over the raw logs and unpacked data for RoleGranted events raised by the EspressoNitroTEEVerifier contract. +type EspressoNitroTEEVerifierRoleGrantedIterator struct { + Event *EspressoNitroTEEVerifierRoleGranted // 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 *EspressoNitroTEEVerifierRoleGrantedIterator) 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(EspressoNitroTEEVerifierRoleGranted) + 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(EspressoNitroTEEVerifierRoleGranted) + 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 *EspressoNitroTEEVerifierRoleGrantedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EspressoNitroTEEVerifierRoleGrantedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// EspressoNitroTEEVerifierRoleGranted represents a RoleGranted event raised by the EspressoNitroTEEVerifier contract. +type EspressoNitroTEEVerifierRoleGranted struct { + Role [32]byte + Account common.Address + Sender common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRoleGranted is a free log retrieval operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. +// +// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) FilterRoleGranted(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*EspressoNitroTEEVerifierRoleGrantedIterator, 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 := _EspressoNitroTEEVerifier.contract.FilterLogs(opts, "RoleGranted", roleRule, accountRule, senderRule) if err != nil { return nil, err } - return &EspressoNitroTEEVerifierOwnershipTransferStartedIterator{contract: _EspressoNitroTEEVerifier.contract, event: "OwnershipTransferStarted", logs: logs, sub: sub}, nil + return &EspressoNitroTEEVerifierRoleGrantedIterator{contract: _EspressoNitroTEEVerifier.contract, event: "RoleGranted", logs: logs, sub: sub}, nil } -// WatchOwnershipTransferStarted is a free log subscription operation binding the contract event 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700. +// WatchRoleGranted is a free log subscription operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. // -// Solidity: event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) WatchOwnershipTransferStarted(opts *bind.WatchOpts, sink chan<- *EspressoNitroTEEVerifierOwnershipTransferStarted, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { +// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) WatchRoleGranted(opts *bind.WatchOpts, sink chan<- *EspressoNitroTEEVerifierRoleGranted, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) { - var previousOwnerRule []interface{} - for _, previousOwnerItem := range previousOwner { - previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) } - var newOwnerRule []interface{} - for _, newOwnerItem := range newOwner { - newOwnerRule = append(newOwnerRule, newOwnerItem) + 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 := _EspressoNitroTEEVerifier.contract.WatchLogs(opts, "OwnershipTransferStarted", previousOwnerRule, newOwnerRule) + logs, sub, err := _EspressoNitroTEEVerifier.contract.WatchLogs(opts, "RoleGranted", roleRule, accountRule, senderRule) if err != nil { return nil, err } @@ -1322,8 +2767,8 @@ func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) WatchOwnershi select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(EspressoNitroTEEVerifierOwnershipTransferStarted) - if err := _EspressoNitroTEEVerifier.contract.UnpackLog(event, "OwnershipTransferStarted", log); err != nil { + event := new(EspressoNitroTEEVerifierRoleGranted) + if err := _EspressoNitroTEEVerifier.contract.UnpackLog(event, "RoleGranted", log); err != nil { return err } event.Raw = log @@ -1344,21 +2789,21 @@ func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) WatchOwnershi }), nil } -// ParseOwnershipTransferStarted is a log parse operation binding the contract event 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700. +// ParseRoleGranted is a log parse operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. // -// Solidity: event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) ParseOwnershipTransferStarted(log types.Log) (*EspressoNitroTEEVerifierOwnershipTransferStarted, error) { - event := new(EspressoNitroTEEVerifierOwnershipTransferStarted) - if err := _EspressoNitroTEEVerifier.contract.UnpackLog(event, "OwnershipTransferStarted", log); err != nil { +// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) ParseRoleGranted(log types.Log) (*EspressoNitroTEEVerifierRoleGranted, error) { + event := new(EspressoNitroTEEVerifierRoleGranted) + if err := _EspressoNitroTEEVerifier.contract.UnpackLog(event, "RoleGranted", log); err != nil { return nil, err } event.Raw = log return event, nil } -// EspressoNitroTEEVerifierOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the EspressoNitroTEEVerifier contract. -type EspressoNitroTEEVerifierOwnershipTransferredIterator struct { - Event *EspressoNitroTEEVerifierOwnershipTransferred // Event containing the contract specifics and raw log +// EspressoNitroTEEVerifierRoleRevokedIterator is returned from FilterRoleRevoked and is used to iterate over the raw logs and unpacked data for RoleRevoked events raised by the EspressoNitroTEEVerifier contract. +type EspressoNitroTEEVerifierRoleRevokedIterator struct { + Event *EspressoNitroTEEVerifierRoleRevoked // 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 @@ -1372,7 +2817,7 @@ type EspressoNitroTEEVerifierOwnershipTransferredIterator struct { // 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 *EspressoNitroTEEVerifierOwnershipTransferredIterator) Next() bool { +func (it *EspressoNitroTEEVerifierRoleRevokedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1381,7 +2826,7 @@ func (it *EspressoNitroTEEVerifierOwnershipTransferredIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(EspressoNitroTEEVerifierOwnershipTransferred) + it.Event = new(EspressoNitroTEEVerifierRoleRevoked) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1396,7 +2841,7 @@ func (it *EspressoNitroTEEVerifierOwnershipTransferredIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(EspressoNitroTEEVerifierOwnershipTransferred) + it.Event = new(EspressoNitroTEEVerifierRoleRevoked) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1412,60 +2857,69 @@ func (it *EspressoNitroTEEVerifierOwnershipTransferredIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *EspressoNitroTEEVerifierOwnershipTransferredIterator) Error() error { +func (it *EspressoNitroTEEVerifierRoleRevokedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *EspressoNitroTEEVerifierOwnershipTransferredIterator) Close() error { +func (it *EspressoNitroTEEVerifierRoleRevokedIterator) Close() error { it.sub.Unsubscribe() return nil } -// EspressoNitroTEEVerifierOwnershipTransferred represents a OwnershipTransferred event raised by the EspressoNitroTEEVerifier contract. -type EspressoNitroTEEVerifierOwnershipTransferred struct { - PreviousOwner common.Address - NewOwner common.Address - Raw types.Log // Blockchain specific contextual infos +// EspressoNitroTEEVerifierRoleRevoked represents a RoleRevoked event raised by the EspressoNitroTEEVerifier contract. +type EspressoNitroTEEVerifierRoleRevoked struct { + Role [32]byte + Account common.Address + Sender common.Address + Raw types.Log // Blockchain specific contextual infos } -// FilterOwnershipTransferred is a free log retrieval operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// FilterRoleRevoked is a free log retrieval operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. // -// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*EspressoNitroTEEVerifierOwnershipTransferredIterator, error) { +// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) FilterRoleRevoked(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*EspressoNitroTEEVerifierRoleRevokedIterator, error) { - var previousOwnerRule []interface{} - for _, previousOwnerItem := range previousOwner { - previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) } - var newOwnerRule []interface{} - for _, newOwnerItem := range newOwner { - newOwnerRule = append(newOwnerRule, newOwnerItem) + 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 := _EspressoNitroTEEVerifier.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + logs, sub, err := _EspressoNitroTEEVerifier.contract.FilterLogs(opts, "RoleRevoked", roleRule, accountRule, senderRule) if err != nil { return nil, err } - return &EspressoNitroTEEVerifierOwnershipTransferredIterator{contract: _EspressoNitroTEEVerifier.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil + return &EspressoNitroTEEVerifierRoleRevokedIterator{contract: _EspressoNitroTEEVerifier.contract, event: "RoleRevoked", logs: logs, sub: sub}, nil } -// WatchOwnershipTransferred is a free log subscription operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// WatchRoleRevoked is a free log subscription operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. // -// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *EspressoNitroTEEVerifierOwnershipTransferred, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { +// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) WatchRoleRevoked(opts *bind.WatchOpts, sink chan<- *EspressoNitroTEEVerifierRoleRevoked, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) { - var previousOwnerRule []interface{} - for _, previousOwnerItem := range previousOwner { - previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) } - var newOwnerRule []interface{} - for _, newOwnerItem := range newOwner { - newOwnerRule = append(newOwnerRule, newOwnerItem) + 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 := _EspressoNitroTEEVerifier.contract.WatchLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + logs, sub, err := _EspressoNitroTEEVerifier.contract.WatchLogs(opts, "RoleRevoked", roleRule, accountRule, senderRule) if err != nil { return nil, err } @@ -1475,8 +2929,8 @@ func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) WatchOwnershi select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(EspressoNitroTEEVerifierOwnershipTransferred) - if err := _EspressoNitroTEEVerifier.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + event := new(EspressoNitroTEEVerifierRoleRevoked) + if err := _EspressoNitroTEEVerifier.contract.UnpackLog(event, "RoleRevoked", log); err != nil { return err } event.Raw = log @@ -1497,21 +2951,21 @@ func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) WatchOwnershi }), nil } -// ParseOwnershipTransferred is a log parse operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// ParseRoleRevoked is a log parse operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. // -// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) ParseOwnershipTransferred(log types.Log) (*EspressoNitroTEEVerifierOwnershipTransferred, error) { - event := new(EspressoNitroTEEVerifierOwnershipTransferred) - if err := _EspressoNitroTEEVerifier.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { +// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) ParseRoleRevoked(log types.Log) (*EspressoNitroTEEVerifierRoleRevoked, error) { + event := new(EspressoNitroTEEVerifierRoleRevoked) + if err := _EspressoNitroTEEVerifier.contract.UnpackLog(event, "RoleRevoked", log); err != nil { return nil, err } event.Raw = log return event, nil } -// EspressoNitroTEEVerifierSignerRegisteredIterator is returned from FilterSignerRegistered and is used to iterate over the raw logs and unpacked data for SignerRegistered events raised by the EspressoNitroTEEVerifier contract. -type EspressoNitroTEEVerifierSignerRegisteredIterator struct { - Event *EspressoNitroTEEVerifierSignerRegistered // Event containing the contract specifics and raw log +// EspressoNitroTEEVerifierServiceRegisteredIterator is returned from FilterServiceRegistered and is used to iterate over the raw logs and unpacked data for ServiceRegistered events raised by the EspressoNitroTEEVerifier contract. +type EspressoNitroTEEVerifierServiceRegisteredIterator struct { + Event *EspressoNitroTEEVerifierServiceRegistered // 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 @@ -1525,7 +2979,7 @@ type EspressoNitroTEEVerifierSignerRegisteredIterator struct { // 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 *EspressoNitroTEEVerifierSignerRegisteredIterator) Next() bool { +func (it *EspressoNitroTEEVerifierServiceRegisteredIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1534,7 +2988,7 @@ func (it *EspressoNitroTEEVerifierSignerRegisteredIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(EspressoNitroTEEVerifierSignerRegistered) + it.Event = new(EspressoNitroTEEVerifierServiceRegistered) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1549,7 +3003,7 @@ func (it *EspressoNitroTEEVerifierSignerRegisteredIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(EspressoNitroTEEVerifierSignerRegistered) + it.Event = new(EspressoNitroTEEVerifierServiceRegistered) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1565,42 +3019,213 @@ func (it *EspressoNitroTEEVerifierSignerRegisteredIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *EspressoNitroTEEVerifierSignerRegisteredIterator) Error() error { +func (it *EspressoNitroTEEVerifierServiceRegisteredIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *EspressoNitroTEEVerifierSignerRegisteredIterator) Close() error { +func (it *EspressoNitroTEEVerifierServiceRegisteredIterator) Close() error { it.sub.Unsubscribe() return nil } -// EspressoNitroTEEVerifierSignerRegistered represents a SignerRegistered event raised by the EspressoNitroTEEVerifier contract. -type EspressoNitroTEEVerifierSignerRegistered struct { +// EspressoNitroTEEVerifierServiceRegistered represents a ServiceRegistered event raised by the EspressoNitroTEEVerifier contract. +type EspressoNitroTEEVerifierServiceRegistered struct { Signer common.Address EnclaveHash [32]byte + Service uint8 Raw types.Log // Blockchain specific contextual infos } -// FilterSignerRegistered is a free log retrieval operation binding the contract event 0xcf848c482fcf6fe3067875f261b92c8f20a9756538ee17b8ef66ad0b7bae208c. +// FilterServiceRegistered is a free log retrieval operation binding the contract event 0x0fa700ad17f1b256f57e62054a779bd9fe08e585f8cacb3def28cca47b25cdc1. +// +// Solidity: event ServiceRegistered(address indexed signer, bytes32 indexed enclaveHash, uint8 indexed service) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) FilterServiceRegistered(opts *bind.FilterOpts, signer []common.Address, enclaveHash [][32]byte, service []uint8) (*EspressoNitroTEEVerifierServiceRegisteredIterator, error) { + + var signerRule []interface{} + for _, signerItem := range signer { + signerRule = append(signerRule, signerItem) + } + var enclaveHashRule []interface{} + for _, enclaveHashItem := range enclaveHash { + enclaveHashRule = append(enclaveHashRule, enclaveHashItem) + } + var serviceRule []interface{} + for _, serviceItem := range service { + serviceRule = append(serviceRule, serviceItem) + } + + logs, sub, err := _EspressoNitroTEEVerifier.contract.FilterLogs(opts, "ServiceRegistered", signerRule, enclaveHashRule, serviceRule) + if err != nil { + return nil, err + } + return &EspressoNitroTEEVerifierServiceRegisteredIterator{contract: _EspressoNitroTEEVerifier.contract, event: "ServiceRegistered", logs: logs, sub: sub}, nil +} + +// WatchServiceRegistered is a free log subscription operation binding the contract event 0x0fa700ad17f1b256f57e62054a779bd9fe08e585f8cacb3def28cca47b25cdc1. +// +// Solidity: event ServiceRegistered(address indexed signer, bytes32 indexed enclaveHash, uint8 indexed service) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) WatchServiceRegistered(opts *bind.WatchOpts, sink chan<- *EspressoNitroTEEVerifierServiceRegistered, signer []common.Address, enclaveHash [][32]byte, service []uint8) (event.Subscription, error) { + + var signerRule []interface{} + for _, signerItem := range signer { + signerRule = append(signerRule, signerItem) + } + var enclaveHashRule []interface{} + for _, enclaveHashItem := range enclaveHash { + enclaveHashRule = append(enclaveHashRule, enclaveHashItem) + } + var serviceRule []interface{} + for _, serviceItem := range service { + serviceRule = append(serviceRule, serviceItem) + } + + logs, sub, err := _EspressoNitroTEEVerifier.contract.WatchLogs(opts, "ServiceRegistered", signerRule, enclaveHashRule, serviceRule) + 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(EspressoNitroTEEVerifierServiceRegistered) + if err := _EspressoNitroTEEVerifier.contract.UnpackLog(event, "ServiceRegistered", 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 +} + +// ParseServiceRegistered is a log parse operation binding the contract event 0x0fa700ad17f1b256f57e62054a779bd9fe08e585f8cacb3def28cca47b25cdc1. +// +// Solidity: event ServiceRegistered(address indexed signer, bytes32 indexed enclaveHash, uint8 indexed service) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) ParseServiceRegistered(log types.Log) (*EspressoNitroTEEVerifierServiceRegistered, error) { + event := new(EspressoNitroTEEVerifierServiceRegistered) + if err := _EspressoNitroTEEVerifier.contract.UnpackLog(event, "ServiceRegistered", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// EspressoNitroTEEVerifierUpgradedIterator is returned from FilterUpgraded and is used to iterate over the raw logs and unpacked data for Upgraded events raised by the EspressoNitroTEEVerifier contract. +type EspressoNitroTEEVerifierUpgradedIterator struct { + Event *EspressoNitroTEEVerifierUpgraded // 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 *EspressoNitroTEEVerifierUpgradedIterator) 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(EspressoNitroTEEVerifierUpgraded) + 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(EspressoNitroTEEVerifierUpgraded) + 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 *EspressoNitroTEEVerifierUpgradedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EspressoNitroTEEVerifierUpgradedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// EspressoNitroTEEVerifierUpgraded represents a Upgraded event raised by the EspressoNitroTEEVerifier contract. +type EspressoNitroTEEVerifierUpgraded struct { + Implementation common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUpgraded is a free log retrieval operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. // -// Solidity: event SignerRegistered(address signer, bytes32 enclaveHash) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) FilterSignerRegistered(opts *bind.FilterOpts) (*EspressoNitroTEEVerifierSignerRegisteredIterator, error) { +// Solidity: event Upgraded(address indexed implementation) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) FilterUpgraded(opts *bind.FilterOpts, implementation []common.Address) (*EspressoNitroTEEVerifierUpgradedIterator, error) { - logs, sub, err := _EspressoNitroTEEVerifier.contract.FilterLogs(opts, "SignerRegistered") + var implementationRule []interface{} + for _, implementationItem := range implementation { + implementationRule = append(implementationRule, implementationItem) + } + + logs, sub, err := _EspressoNitroTEEVerifier.contract.FilterLogs(opts, "Upgraded", implementationRule) if err != nil { return nil, err } - return &EspressoNitroTEEVerifierSignerRegisteredIterator{contract: _EspressoNitroTEEVerifier.contract, event: "SignerRegistered", logs: logs, sub: sub}, nil + return &EspressoNitroTEEVerifierUpgradedIterator{contract: _EspressoNitroTEEVerifier.contract, event: "Upgraded", logs: logs, sub: sub}, nil } -// WatchSignerRegistered is a free log subscription operation binding the contract event 0xcf848c482fcf6fe3067875f261b92c8f20a9756538ee17b8ef66ad0b7bae208c. +// WatchUpgraded is a free log subscription operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. // -// Solidity: event SignerRegistered(address signer, bytes32 enclaveHash) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) WatchSignerRegistered(opts *bind.WatchOpts, sink chan<- *EspressoNitroTEEVerifierSignerRegistered) (event.Subscription, error) { +// Solidity: event Upgraded(address indexed implementation) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) WatchUpgraded(opts *bind.WatchOpts, sink chan<- *EspressoNitroTEEVerifierUpgraded, implementation []common.Address) (event.Subscription, error) { + + var implementationRule []interface{} + for _, implementationItem := range implementation { + implementationRule = append(implementationRule, implementationItem) + } - logs, sub, err := _EspressoNitroTEEVerifier.contract.WatchLogs(opts, "SignerRegistered") + logs, sub, err := _EspressoNitroTEEVerifier.contract.WatchLogs(opts, "Upgraded", implementationRule) if err != nil { return nil, err } @@ -1610,8 +3235,8 @@ func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) WatchSignerRe select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(EspressoNitroTEEVerifierSignerRegistered) - if err := _EspressoNitroTEEVerifier.contract.UnpackLog(event, "SignerRegistered", log); err != nil { + event := new(EspressoNitroTEEVerifierUpgraded) + if err := _EspressoNitroTEEVerifier.contract.UnpackLog(event, "Upgraded", log); err != nil { return err } event.Raw = log @@ -1632,12 +3257,12 @@ func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) WatchSignerRe }), nil } -// ParseSignerRegistered is a log parse operation binding the contract event 0xcf848c482fcf6fe3067875f261b92c8f20a9756538ee17b8ef66ad0b7bae208c. +// ParseUpgraded is a log parse operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. // -// Solidity: event SignerRegistered(address signer, bytes32 enclaveHash) -func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) ParseSignerRegistered(log types.Log) (*EspressoNitroTEEVerifierSignerRegistered, error) { - event := new(EspressoNitroTEEVerifierSignerRegistered) - if err := _EspressoNitroTEEVerifier.contract.UnpackLog(event, "SignerRegistered", log); err != nil { +// Solidity: event Upgraded(address indexed implementation) +func (_EspressoNitroTEEVerifier *EspressoNitroTEEVerifierFilterer) ParseUpgraded(log types.Log) (*EspressoNitroTEEVerifierUpgraded, error) { + event := new(EspressoNitroTEEVerifierUpgraded) + if err := _EspressoNitroTEEVerifier.contract.UnpackLog(event, "Upgraded", log); err != nil { return nil, err } event.Raw = log diff --git a/op-batcher/bindings/espresso_tee_verifier.go b/op-batcher/bindings/espresso_tee_verifier.go index 447501bc3dc..d68452a36ea 100644 --- a/op-batcher/bindings/espresso_tee_verifier.go +++ b/op-batcher/bindings/espresso_tee_verifier.go @@ -31,8 +31,8 @@ var ( // EspressoTEEVerifierMetaData contains all meta data concerning the EspressoTEEVerifier contract. var EspressoTEEVerifierMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_espressoSGXTEEVerifier\",\"type\":\"address\",\"internalType\":\"contractIEspressoSGXTEEVerifier\"},{\"name\":\"_espressoNitroTEEVerifier\",\"type\":\"address\",\"internalType\":\"contractIEspressoNitroTEEVerifier\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"acceptOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"espressoNitroTEEVerifier\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIEspressoNitroTEEVerifier\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"espressoSGXTEEVerifier\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIEspressoSGXTEEVerifier\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pendingOwner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registerSigner\",\"inputs\":[{\"name\":\"attestation\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"teeType\",\"type\":\"uint8\",\"internalType\":\"enumIEspressoTEEVerifier.TeeType\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registeredEnclaveHashes\",\"inputs\":[{\"name\":\"enclaveHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"teeType\",\"type\":\"uint8\",\"internalType\":\"enumIEspressoTEEVerifier.TeeType\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registeredSigners\",\"inputs\":[{\"name\":\"signer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"teeType\",\"type\":\"uint8\",\"internalType\":\"enumIEspressoTEEVerifier.TeeType\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setEspressoNitroTEEVerifier\",\"inputs\":[{\"name\":\"_espressoNitroTEEVerifier\",\"type\":\"address\",\"internalType\":\"contractIEspressoNitroTEEVerifier\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setEspressoSGXTEEVerifier\",\"inputs\":[{\"name\":\"_espressoSGXTEEVerifier\",\"type\":\"address\",\"internalType\":\"contractIEspressoSGXTEEVerifier\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"verify\",\"inputs\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"userDataHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"OwnershipTransferStarted\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"InvalidSignature\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UnsupportedTeeType\",\"inputs\":[]}]", - Bin: "0x6080346100aa57601f61115d38819003918201601f19168301916001600160401b038311848410176100ae5780849260409485528339810103126100aa5780516001600160a01b03811691908290036100aa57602001516001600160a01b03811691908290036100aa57610072336100c2565b60018060a01b0319600254161760025560018060a01b0319600354161760035561009b336100c2565b60405161104690816101178239f35b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b600180546001600160a01b03199081169091555f80546001600160a01b03938416928116831782559192909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a356fe60806040526004361015610011575f80fd5b5f3560e01c8063330282f5146108c457806335ecb4c11461083c5780633cbe6803146107f35780636b406341146105ad578063715018a6146104eb57806379ba50971461038b57806380710c801461033a5780638da5cb5b146102ea578063bc3a091114610265578063d80a4c2814610214578063e30c3978146101c3578063e9b1a7be146101695763f2fde38b146100a8575f80fd5b346101655760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101655773ffffffffffffffffffffffffffffffffffffffff6100f46109b8565b6100fc610d94565b16807fffffffffffffffffffffffff0000000000000000000000000000000000000000600154161760015573ffffffffffffffffffffffffffffffffffffffff5f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b5f80fd5b346101655760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610165576101a06109b8565b602435906002821015610165576020916101b991610c8e565b6040519015158152f35b34610165575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016557602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b34610165575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016557602073ffffffffffffffffffffffffffffffffffffffff60035416604051908152f35b346101655760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101655760043573ffffffffffffffffffffffffffffffffffffffff8116809103610165576102bd610d94565b7fffffffffffffffffffffffff000000000000000000000000000000000000000060025416176002555f80f35b34610165575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016557602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b34610165575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016557602073ffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b34610165575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610165573373ffffffffffffffffffffffffffffffffffffffff6001541603610467577fffffffffffffffffffffffff0000000000000000000000000000000000000000600154166001555f54337fffffffffffffffffffffffff00000000000000000000000000000000000000008216175f5573ffffffffffffffffffffffffffffffffffffffff3391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060448201527f6e6577206f776e657200000000000000000000000000000000000000000000006064820152fd5b34610165575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016557610521610d94565b7fffffffffffffffffffffffff0000000000000000000000000000000000000000600154166001555f73ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346101655760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101655760043567ffffffffffffffff811161016557366023820112156101655780600401359067ffffffffffffffff82116107c65760405161064360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8601160182610977565b8281523660248484010111610165575f60208461067995602461067196018386013783010152602435610e12565b919091610e47565b73ffffffffffffffffffffffffffffffffffffffff60208160025416926024604051809481937f0123d0c100000000000000000000000000000000000000000000000000000000835216958660048301525afa90811561079c575f916107a7575b501561074557602073ffffffffffffffffffffffffffffffffffffffff60035416916024604051809481937f0123d0c100000000000000000000000000000000000000000000000000000000835260048301525afa90811561079c575f9161076d575b501561074557005b7f8baa579f000000000000000000000000000000000000000000000000000000005f5260045ffd5b61078f915060203d602011610795575b6107878183610977565b810190610bc6565b8161073d565b503d61077d565b6040513d5f823e3d90fd5b6107c0915060203d602011610795576107878183610977565b826106da565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b346101655760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610165576024356002811015610165576101b9602091600435610bde565b346101655760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101655760043567ffffffffffffffff81116101655761088b903690600401610949565b60243567ffffffffffffffff8111610165576108ab903690600401610949565b90604435926002841015610165576108c294610a43565b005b346101655760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101655760043573ffffffffffffffffffffffffffffffffffffffff81168091036101655761091c610d94565b7fffffffffffffffffffffffff000000000000000000000000000000000000000060035416176003555f80f35b9181601f840112156101655782359167ffffffffffffffff8311610165576020838186019501011161016557565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176107c657604052565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361016557565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe093818652868601375f8582860101520116010190565b9290610a3290610a4095936040865260408601916109db565b9260208185039101526109db565b90565b905f946002811015610b99578015610b1a57600114610a84576004857fd0cb35a1000000000000000000000000000000000000000000000000000000008152fd5b73ffffffffffffffffffffffffffffffffffffffff6003541691823b15610b1657908580949392610ae4604051978896879586947fba58e82a00000000000000000000000000000000000000000000000000000000865260048601610a19565b03925af18015610b0b57610af6575050565b610b01828092610977565b610b085750565b80fd5b6040513d84823e3d90fd5b8580fd5b509092935073ffffffffffffffffffffffffffffffffffffffff6002541690813b15610165575f8094610b7c604051978896879586947fba58e82a00000000000000000000000000000000000000000000000000000000865260048601610a19565b03925af1801561079c57610b8d5750565b5f610b9791610977565b565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b90816020910312610165575180151581036101655790565b906002811015610b995715610c15577fd0cb35a1000000000000000000000000000000000000000000000000000000005f5260045ffd5b602073ffffffffffffffffffffffffffffffffffffffff60025416916024604051809481937f966989ee00000000000000000000000000000000000000000000000000000000835260048301525afa90811561079c575f91610c75575090565b610a40915060203d602011610795576107878183610977565b906002811015610b99578015610d3057600114610ccd577fd0cb35a1000000000000000000000000000000000000000000000000000000005f5260045ffd5b602073ffffffffffffffffffffffffffffffffffffffff602481600354169360405194859384927f0123d0c10000000000000000000000000000000000000000000000000000000084521660048301525afa90811561079c575f91610c75575090565b50602073ffffffffffffffffffffffffffffffffffffffff602481600254169360405194859384927f0123d0c10000000000000000000000000000000000000000000000000000000084521660048301525afa90811561079c575f91610c75575090565b73ffffffffffffffffffffffffffffffffffffffff5f54163303610db457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b9060418151145f14610e3e57610e3a91602082015190606060408401519301515f1a90610fb1565b9091565b50505f90600290565b6005811015610b995780610e585750565b60018103610ebe5760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152fd5b60028103610f245760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152fd5b600314610f2d57565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152fd5b7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841161102e576020935f9360ff60809460405194855216868401526040830152606082015282805260015afa1561079c575f5173ffffffffffffffffffffffffffffffffffffffff81161561102657905f90565b505f90600190565b505050505f9060039056fea164736f6c634300081c000a", + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"GUARDIAN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"acceptOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addGuardian\",\"inputs\":[{\"name\":\"guardian\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"enclaveHashSigners\",\"inputs\":[{\"name\":\"enclaveHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"teeType\",\"type\":\"uint8\",\"internalType\":\"enumIEspressoTEEVerifier.TeeType\"},{\"name\":\"service\",\"type\":\"uint8\",\"internalType\":\"enumServiceType\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"espressoNitroTEEVerifier\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIEspressoNitroTEEVerifier\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"espressoSGXTEEVerifier\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIEspressoSGXTEEVerifier\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getGuardians\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleMember\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleMemberCount\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleMembers\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"guardianCount\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_espressoSGXTEEVerifier\",\"type\":\"address\",\"internalType\":\"contractIEspressoSGXTEEVerifier\"},{\"name\":\"_espressoNitroTEEVerifier\",\"type\":\"address\",\"internalType\":\"contractIEspressoNitroTEEVerifier\"},{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isGuardian\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pendingOwner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registerService\",\"inputs\":[{\"name\":\"verificationData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"teeType\",\"type\":\"uint8\",\"internalType\":\"enumIEspressoTEEVerifier.TeeType\"},{\"name\":\"service\",\"type\":\"uint8\",\"internalType\":\"enumServiceType\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registeredEnclaveHashes\",\"inputs\":[{\"name\":\"enclaveHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"teeType\",\"type\":\"uint8\",\"internalType\":\"enumIEspressoTEEVerifier.TeeType\"},{\"name\":\"service\",\"type\":\"uint8\",\"internalType\":\"enumServiceType\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registeredService\",\"inputs\":[{\"name\":\"signer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"teeType\",\"type\":\"uint8\",\"internalType\":\"enumIEspressoTEEVerifier.TeeType\"},{\"name\":\"service\",\"type\":\"uint8\",\"internalType\":\"enumServiceType\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"removeGuardian\",\"inputs\":[{\"name\":\"guardian\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setEspressoNitroTEEVerifier\",\"inputs\":[{\"name\":\"_espressoNitroTEEVerifier\",\"type\":\"address\",\"internalType\":\"contractIEspressoNitroTEEVerifier\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setEspressoSGXTEEVerifier\",\"inputs\":[{\"name\":\"_espressoSGXTEEVerifier\",\"type\":\"address\",\"internalType\":\"contractIEspressoSGXTEEVerifier\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"verify\",\"inputs\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"userDataHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"teeType\",\"type\":\"uint8\",\"internalType\":\"enumIEspressoTEEVerifier.TeeType\"},{\"name\":\"service\",\"type\":\"uint8\",\"internalType\":\"enumServiceType\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"GuardianAdded\",\"inputs\":[{\"name\":\"guardian\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"GuardianRemoved\",\"inputs\":[{\"name\":\"guardian\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferStarted\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ECDSAInvalidSignature\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ECDSAInvalidSignatureLength\",\"inputs\":[{\"name\":\"length\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"ECDSAInvalidSignatureS\",\"inputs\":[{\"name\":\"s\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidGuardianAddress\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSignature\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotGuardian\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"NotGuardianOrOwner\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OwnableInvalidOwner\",\"inputs\":[{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"OwnableUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]}]", + Bin: "0x60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff16815250348015610042575f5ffd5b5061005161005660201b60201c565b6101d1565b5f61006561015460201b60201c565b9050805f0160089054906101000a900460ff16156100af576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff8016815f015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff16146101515767ffffffffffffffff815f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d267ffffffffffffffff60405161014891906101b8565b60405180910390a15b50565b5f5f61016461016d60201b60201c565b90508091505090565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005f1b905090565b5f67ffffffffffffffff82169050919050565b6101b281610196565b82525050565b5f6020820190506101cb5f8301846101a9565b92915050565b608051613ce16101f75f395f8181611c7901528181611cce0152611e880152613ce15ff3fe6080604052600436106101f8575f3560e01c80637f82ea6c1161010c578063a526d83b1161009f578063ca15c8731161006e578063ca15c8731461072c578063d547741f14610768578063d80a4c2814610790578063e30c3978146107ba578063f2fde38b146107e4576101f8565b8063a526d83b1461068a578063ad3cb1cc146106b2578063bc3a0911146106dc578063c0c53b8b14610704576101f8565b80639010d07c116100db5780639010d07c146105ac57806391d14854146105e8578063a217fddf14610624578063a3246ad31461064e576101f8565b80637f82ea6c146104f457806380710c801461051c578063862e2345146105465780638da5cb5b14610582576101f8565b80634f1ef2861161018f578063714041561161015e5780637140415614610428578063715018a6146104505780637655e7f11461046657806379ba5097146104a25780637e41f57c146104b8576101f8565b80634f1ef2861461037c57806352d1902d1461039857806354387ad7146103c257806355ddfa06146103ec576101f8565b806324ea54f4116101cb57806324ea54f4146102da5780632f2ff15d14610304578063330282f51461032c57806336568abe14610354576101f8565b806301ffc9a7146101fc5780630665f04b146102385780630c68ba2114610262578063248a9ca31461029e575b5f5ffd5b348015610207575f5ffd5b50610222600480360381019061021d9190612eb9565b61080c565b60405161022f9190612efe565b60405180910390f35b348015610243575f5ffd5b5061024c610885565b6040516102599190612ffe565b60405180910390f35b34801561026d575f5ffd5b5061028860048036038101906102839190613048565b610999565b6040516102959190612efe565b60405180910390f35b3480156102a9575f5ffd5b506102c460048036038101906102bf91906130a6565b6109cb565b6040516102d191906130e0565b60405180910390f35b3480156102e5575f5ffd5b506102ee6109f5565b6040516102fb91906130e0565b60405180910390f35b34801561030f575f5ffd5b5061032a600480360381019061032591906130f9565b610a19565b005b348015610337575f5ffd5b50610352600480360381019061034d9190613172565b610a3b565b005b34801561035f575f5ffd5b5061037a600480360381019061037591906130f9565b610a86565b005b610396600480360381019061039191906132d9565b610b01565b005b3480156103a3575f5ffd5b506103ac610b20565b6040516103b991906130e0565b60405180910390f35b3480156103cd575f5ffd5b506103d6610b51565b6040516103e3919061334b565b60405180910390f35b3480156103f7575f5ffd5b50610412600480360381019061040d91906133aa565b610b80565b60405161041f9190612efe565b60405180910390f35b348015610433575f5ffd5b5061044e60048036038101906104499190613048565b610d6d565b005b34801561045b575f5ffd5b50610464610e15565b005b348015610471575f5ffd5b5061048c6004803603810190610487919061342a565b610e28565b6040516104999190612ffe565b60405180910390f35b3480156104ad575f5ffd5b506104b6610fa1565b005b3480156104c3575f5ffd5b506104de60048036038101906104d9919061342a565b61102f565b6040516104eb9190612efe565b60405180910390f35b3480156104ff575f5ffd5b5061051a600480360381019061051591906134d7565b6111a1565b005b348015610527575f5ffd5b506105306112f7565b60405161053d91906135d5565b60405180910390f35b348015610551575f5ffd5b5061056c600480360381019061056791906135ee565b61131b565b6040516105799190612efe565b60405180910390f35b34801561058d575f5ffd5b5061059661148d565b6040516105a3919061364d565b60405180910390f35b3480156105b7575f5ffd5b506105d260048036038101906105cd9190613690565b6114c2565b6040516105df919061364d565b60405180910390f35b3480156105f3575f5ffd5b5061060e600480360381019061060991906130f9565b6114fb565b60405161061b9190612efe565b60405180910390f35b34801561062f575f5ffd5b5061063861156c565b60405161064591906130e0565b60405180910390f35b348015610659575f5ffd5b50610674600480360381019061066f91906130a6565b611572565b6040516106819190612ffe565b60405180910390f35b348015610695575f5ffd5b506106b060048036038101906106ab9190613048565b6115a1565b005b3480156106bd575f5ffd5b506106c66116ad565b6040516106d3919061372e565b60405180910390f35b3480156106e7575f5ffd5b5061070260048036038101906106fd9190613789565b6116e6565b005b34801561070f575f5ffd5b5061072a600480360381019061072591906137b4565b611730565b005b348015610737575f5ffd5b50610752600480360381019061074d91906130a6565b611932565b60405161075f919061334b565b60405180910390f35b348015610773575f5ffd5b5061078e600480360381019061078991906130f9565b611960565b005b34801561079b575f5ffd5b506107a4611982565b6040516107b19190613824565b60405180910390f35b3480156107c5575f5ffd5b506107ce6119a7565b6040516107db919061364d565b60405180910390f35b3480156107ef575f5ffd5b5061080a60048036038101906108059190613048565b6119dc565b005b5f7f5a05180f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061087e575061087d82611a95565b5b9050919050565b60605f6108b17f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a5041611932565b90505f8167ffffffffffffffff8111156108ce576108cd6131b5565b5b6040519080825280602002602001820160405280156108fc5781602001602082028036833780820191505090505b5090505f5f90505b82811015610990576109367f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a5041826114c2565b8282815181106109495761094861383d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508080600101915050610904565b50809250505090565b5f6109c47f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a5041836114fb565b9050919050565b5f5f6109d5611b0e565b9050805f015f8481526020019081526020015f2060010154915050919050565b7f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a504181565b610a22826109cb565b610a2b81611b35565b610a358383611b49565b50505050565b610a43611b99565b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610a8e611c20565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610af2576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610afc8282611c27565b505050565b610b09611c77565b610b1282611d5d565b610b1c8282611d68565b5050565b5f610b29611e86565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b905090565b5f610b7b7f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a5041611932565b905090565b5f5f610b8c8587611f0d565b90505f6001811115610ba157610ba061386a565b5b846001811115610bb457610bb361386a565b5b03610c8e575f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639546922e82856040518363ffffffff1660e01b8152600401610c149291906138dd565b602060405180830381865afa158015610c2f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c53919061392e565b610c89576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d60565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639546922e82856040518363ffffffff1660e01b8152600401610cea9291906138dd565b602060405180830381865afa158015610d05573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d29919061392e565b610d5f576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b6001915050949350505050565b610d75611b99565b610d9f7f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a5041826114fb565b15610e1257610dce7f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a504182611960565b8073ffffffffffffffffffffffffffffffffffffffff167fb8107d0c6b40be480ce3172ee66ba6d64b71f6b1685a851340036e6e2e3e3c5260405160405180910390a25b50565b610e1d611b99565b610e265f611f37565b565b60605f6001811115610e3d57610e3c61386a565b5b836001811115610e5057610e4f61386a565b5b03610ef9575f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663094d5de285846040518363ffffffff1660e01b8152600401610eb0929190613959565b5f60405180830381865afa158015610eca573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610ef29190613a54565b9050610f9a565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663094d5de285846040518363ffffffff1660e01b8152600401610f55929190613959565b5f60405180830381865afa158015610f6f573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610f979190613a54565b90505b9392505050565b5f610faa611c20565b90508073ffffffffffffffffffffffffffffffffffffffff16610fcb6119a7565b73ffffffffffffffffffffffffffffffffffffffff161461102357806040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161101a919061364d565b60405180910390fd5b61102c81611f37565b50565b5f5f60018111156110435761104261386a565b5b8360018111156110565761105561386a565b5b036110fc575f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639f3eb67285846040518363ffffffff1660e01b81526004016110b6929190613959565b602060405180830381865afa1580156110d1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110f5919061392e565b905061119a565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639f3eb67285846040518363ffffffff1660e01b8152600401611158929190613959565b602060405180830381865afa158015611173573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611197919061392e565b90505b9392505050565b5f60018111156111b4576111b361386a565b5b8260018111156111c7576111c661386a565b5b0361125f575f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dac79fc887878787866040518663ffffffff1660e01b815260040161122d959493929190613ad7565b5f604051808303815f87803b158015611244575f5ffd5b505af1158015611256573d5f5f3e3d5ffd5b505050506112ef565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dac79fc887878787866040518663ffffffff1660e01b81526004016112c1959493929190613ad7565b5f604051808303815f87803b1580156112d8575f5ffd5b505af11580156112ea573d5f5f3e3d5ffd5b505050505b505050505050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f5f600181111561132f5761132e61386a565b5b8360018111156113425761134161386a565b5b036113e8575f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639546922e85846040518363ffffffff1660e01b81526004016113a29291906138dd565b602060405180830381865afa1580156113bd573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113e1919061392e565b9050611486565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639546922e85846040518363ffffffff1660e01b81526004016114449291906138dd565b602060405180830381865afa15801561145f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611483919061392e565b90505b9392505050565b5f5f611497611f9d565b9050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691505090565b5f5f6114cc611fc4565b90506114f283825f015f8781526020019081526020015f20611feb90919063ffffffff16565b91505092915050565b5f5f611505611b0e565b9050805f015f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1691505092915050565b5f5f1b81565b60605f61157d611fc4565b9050611599815f015f8581526020019081526020015f20612002565b915050919050565b6115a9611b99565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361160e576040517f1b08105400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116387f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a5041826114fb565b6116aa576116667f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a504182610a19565b8073ffffffffffffffffffffffffffffffffffffffff167f038596bb31e2e7d3d9f184d4c98b310103f6d7f5830e5eec32bffe6f1728f96960405160405180910390a25b50565b6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6116ee611b99565b805f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f611739612021565b90505f815f0160089054906101000a900460ff161590505f825f015f9054906101000a900467ffffffffffffffff1690505f5f8267ffffffffffffffff161480156117815750825b90505f60018367ffffffffffffffff161480156117b457505f3073ffffffffffffffffffffffffffffffffffffffff163b145b9050811580156117c2575080155b156117f9576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001855f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508315611846576001855f0160086101000a81548160ff0219169083151502179055505b61184f86612034565b875f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508660015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508315611928575f855f0160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2600160405161191f9190613b6a565b60405180910390a15b5050505050505050565b5f5f61193c611fc4565b9050611958815f015f8581526020019081526020015f20612069565b915050919050565b611969826109cb565b61197281611b35565b61197c8383611c27565b50505050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f5f6119b161207c565b9050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691505090565b6119e4611b99565b5f6119ed61207c565b905081815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff16611a4f61148d565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b5f7f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611b075750611b06826120a3565b5b9050919050565b5f7f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800905090565b611b4681611b41611c20565b61210c565b50565b5f5f611b53611fc4565b90505f611b60858561215d565b90508015611b8e57611b8c84835f015f8881526020019081526020015f2061225590919063ffffffff16565b505b809250505092915050565b611ba1611c20565b73ffffffffffffffffffffffffffffffffffffffff16611bbf61148d565b73ffffffffffffffffffffffffffffffffffffffff1614611c1e57611be2611c20565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401611c15919061364d565b60405180910390fd5b565b5f33905090565b5f5f611c31611fc4565b90505f611c3e8585612282565b90508015611c6c57611c6a84835f015f8881526020019081526020015f2061237a90919063ffffffff16565b505b809250505092915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161480611d2457507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16611d0b6123a7565b73ffffffffffffffffffffffffffffffffffffffff1614155b15611d5b576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b611d65611b99565b50565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611dd057506040513d601f19601f82011682018060405250810190611dcd9190613b97565b60015b611e1157816040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401611e08919061364d565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b8114611e7757806040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600401611e6e91906130e0565b60405180910390fd5b611e8183836123fa565b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614611f0b576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f5f5f5f611f1b868661246c565b925092509250611f2b82826124c1565b82935050505092915050565b5f611f4061148d565b9050611f4b82612623565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611f8c57611f8a5f5f1b82611c27565b505b611f985f5f1b83611b49565b505050565b5f7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300905090565b5f7fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000905090565b5f611ff8835f0183612660565b5f1c905092915050565b60605f612010835f01612687565b905060608190508092505050919050565b5f5f61202b6126e0565b90508091505090565b61203c612709565b61204581612749565b61204d61275d565b612055612767565b61205d612771565b6120668161277b565b50565b5f612075825f016127bf565b9050919050565b5f7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00905090565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61211682826114fb565b6121595780826040517fe2517d3f000000000000000000000000000000000000000000000000000000008152600401612150929190613bc2565b60405180910390fd5b5050565b5f5f612167611b0e565b905061217384846114fb565b61224a576001815f015f8681526020019081526020015f205f015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506121e6611c20565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061224f565b5f9150505b92915050565b5f61227a835f018373ffffffffffffffffffffffffffffffffffffffff165f1b6127ce565b905092915050565b5f5f61228c611b0e565b905061229884846114fb565b1561236f575f815f015f8681526020019081526020015f205f015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555061230b611c20565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16857ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a46001915050612374565b5f9150505b92915050565b5f61239f835f018373ffffffffffffffffffffffffffffffffffffffff165f1b612835565b905092915050565b5f6123d37f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b612931565b5f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6124038261293a565b8173ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a25f8151111561245f576124598282612a03565b50612468565b612467612af4565b5b5050565b5f5f5f60418451036124ac575f5f5f602087015192506040870151915060608701515f1a905061249e88828585612b30565b9550955095505050506124ba565b5f600285515f1b9250925092505b9250925092565b5f60038111156124d4576124d361386a565b5b8260038111156124e7576124e661386a565b5b031561261f57600160038111156125015761250061386a565b5b8260038111156125145761251361386a565b5b0361254b576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600381111561255f5761255e61386a565b5b8260038111156125725761257161386a565b5b036125b657805f1c6040517ffce698f70000000000000000000000000000000000000000000000000000000081526004016125ad919061334b565b60405180910390fd5b6003808111156125c9576125c861386a565b5b8260038111156125dc576125db61386a565b5b0361261e57806040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260040161261591906130e0565b60405180910390fd5b5b5050565b5f61262c61207c565b9050805f015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905561265c82612c17565b5050565b5f825f0182815481106126765761267561383d565b5b905f5260205f200154905092915050565b6060815f018054806020026020016040519081016040528092919081815260200182805480156126d457602002820191905f5260205f20905b8154815260200190600101908083116126c0575b50505050509050919050565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005f1b905090565b612711612ce8565b612747576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b612751612709565b61275a81612d06565b50565b612765612709565b565b61276f612709565b565b612779612709565b565b612783612709565b61278f5f5f1b82611b49565b506127bc7f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a50415f5f1b612d8a565b50565b5f815f01805490509050919050565b5f6127d98383612df0565b61282b57825f0182908060018154018082558091505060019003905f5260205f20015f9091909190915055825f0180549050836001015f8481526020019081526020015f20819055506001905061282f565b5f90505b92915050565b5f5f836001015f8481526020019081526020015f205490505f8114612926575f6001826128629190613c16565b90505f6001865f01805490506128789190613c16565b90508082146128de575f865f0182815481106128975761289661383d565b5b905f5260205f200154905080875f0184815481106128b8576128b761383d565b5b905f5260205f20018190555083876001015f8381526020019081526020015f2081905550505b855f018054806128f1576128f0613c49565b5b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f90556001935050505061292b565b5f9150505b92915050565b5f819050919050565b5f8173ffffffffffffffffffffffffffffffffffffffff163b0361299557806040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815260040161298c919061364d565b60405180910390fd5b806129c17f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b612931565b5f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60605f612a108484612e10565b9050808015612a4657505f612a23612e24565b1180612a4557505f8473ffffffffffffffffffffffffffffffffffffffff163b115b5b15612a5b57612a53612e2b565b915050612aee565b8015612a9e57836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401612a95919061364d565b60405180910390fd5b5f612aa7612e24565b1115612aba57612ab5612e48565b612aec565b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b92915050565b5f341115612b2e576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f5f5f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0845f1c1115612b6c575f600385925092509250612c0d565b5f6001888888886040515f8152602001604052604051612b8f9493929190613c91565b6020604051602081039080840390855afa158015612baf573d5f5f3e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612c00575f60015f5f1b93509350935050612c0d565b805f5f5f1b935093509350505b9450945094915050565b5f612c20611f9d565b90505f815f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082825f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505050565b5f612cf1612021565b5f0160089054906101000a900460ff16905090565b612d0e612709565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612d7e575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401612d75919061364d565b60405180910390fd5b612d8781611f37565b50565b5f612d93611b0e565b90505f612d9f846109cb565b905082825f015f8681526020019081526020015f20600101819055508281857fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff60405160405180910390a450505050565b5f5f836001015f8481526020019081526020015f20541415905092915050565b5f5f5f835160208501865af4905092915050565b5f3d905090565b606060405190503d81523d5f602083013e3d602001810160405290565b6040513d5f823e3d81fd5b5f604051905090565b5f5ffd5b5f5ffd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612e9881612e64565b8114612ea2575f5ffd5b50565b5f81359050612eb381612e8f565b92915050565b5f60208284031215612ece57612ecd612e5c565b5b5f612edb84828501612ea5565b91505092915050565b5f8115159050919050565b612ef881612ee4565b82525050565b5f602082019050612f115f830184612eef565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612f6982612f40565b9050919050565b612f7981612f5f565b82525050565b5f612f8a8383612f70565b60208301905092915050565b5f602082019050919050565b5f612fac82612f17565b612fb68185612f21565b9350612fc183612f31565b805f5b83811015612ff1578151612fd88882612f7f565b9750612fe383612f96565b925050600181019050612fc4565b5085935050505092915050565b5f6020820190508181035f8301526130168184612fa2565b905092915050565b61302781612f5f565b8114613031575f5ffd5b50565b5f813590506130428161301e565b92915050565b5f6020828403121561305d5761305c612e5c565b5b5f61306a84828501613034565b91505092915050565b5f819050919050565b61308581613073565b811461308f575f5ffd5b50565b5f813590506130a08161307c565b92915050565b5f602082840312156130bb576130ba612e5c565b5b5f6130c884828501613092565b91505092915050565b6130da81613073565b82525050565b5f6020820190506130f35f8301846130d1565b92915050565b5f5f6040838503121561310f5761310e612e5c565b5b5f61311c85828601613092565b925050602061312d85828601613034565b9150509250929050565b5f61314182612f5f565b9050919050565b61315181613137565b811461315b575f5ffd5b50565b5f8135905061316c81613148565b92915050565b5f6020828403121561318757613186612e5c565b5b5f6131948482850161315e565b91505092915050565b5f5ffd5b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6131eb826131a5565b810181811067ffffffffffffffff8211171561320a576132096131b5565b5b80604052505050565b5f61321c612e53565b905061322882826131e2565b919050565b5f67ffffffffffffffff821115613247576132466131b5565b5b613250826131a5565b9050602081019050919050565b828183375f83830152505050565b5f61327d6132788461322d565b613213565b905082815260208101848484011115613299576132986131a1565b5b6132a484828561325d565b509392505050565b5f82601f8301126132c0576132bf61319d565b5b81356132d084826020860161326b565b91505092915050565b5f5f604083850312156132ef576132ee612e5c565b5b5f6132fc85828601613034565b925050602083013567ffffffffffffffff81111561331d5761331c612e60565b5b613329858286016132ac565b9150509250929050565b5f819050919050565b61334581613333565b82525050565b5f60208201905061335e5f83018461333c565b92915050565b60028110613370575f5ffd5b50565b5f8135905061338181613364565b92915050565b60028110613393575f5ffd5b50565b5f813590506133a481613387565b92915050565b5f5f5f5f608085870312156133c2576133c1612e5c565b5b5f85013567ffffffffffffffff8111156133df576133de612e60565b5b6133eb878288016132ac565b94505060206133fc87828801613092565b935050604061340d87828801613373565b925050606061341e87828801613396565b91505092959194509250565b5f5f5f6060848603121561344157613440612e5c565b5b5f61344e86828701613092565b935050602061345f86828701613373565b925050604061347086828701613396565b9150509250925092565b5f5ffd5b5f5ffd5b5f5f83601f8401126134975761349661319d565b5b8235905067ffffffffffffffff8111156134b4576134b361347a565b5b6020830191508360018202830111156134d0576134cf61347e565b5b9250929050565b5f5f5f5f5f5f608087890312156134f1576134f0612e5c565b5b5f87013567ffffffffffffffff81111561350e5761350d612e60565b5b61351a89828a01613482565b9650965050602087013567ffffffffffffffff81111561353d5761353c612e60565b5b61354989828a01613482565b9450945050604061355c89828a01613373565b925050606061356d89828a01613396565b9150509295509295509295565b5f819050919050565b5f61359d61359861359384612f40565b61357a565b612f40565b9050919050565b5f6135ae82613583565b9050919050565b5f6135bf826135a4565b9050919050565b6135cf816135b5565b82525050565b5f6020820190506135e85f8301846135c6565b92915050565b5f5f5f6060848603121561360557613604612e5c565b5b5f61361286828701613034565b935050602061362386828701613373565b925050604061363486828701613396565b9150509250925092565b61364781612f5f565b82525050565b5f6020820190506136605f83018461363e565b92915050565b61366f81613333565b8114613679575f5ffd5b50565b5f8135905061368a81613666565b92915050565b5f5f604083850312156136a6576136a5612e5c565b5b5f6136b385828601613092565b92505060206136c48582860161367c565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f613700826136ce565b61370a81856136d8565b935061371a8185602086016136e8565b613723816131a5565b840191505092915050565b5f6020820190508181035f83015261374681846136f6565b905092915050565b5f61375882612f5f565b9050919050565b6137688161374e565b8114613772575f5ffd5b50565b5f813590506137838161375f565b92915050565b5f6020828403121561379e5761379d612e5c565b5b5f6137ab84828501613775565b91505092915050565b5f5f5f606084860312156137cb576137ca612e5c565b5b5f6137d886828701613775565b93505060206137e98682870161315e565b92505060406137fa86828701613034565b9150509250925092565b5f61380e826135a4565b9050919050565b61381e81613804565b82525050565b5f6020820190506138375f830184613815565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b600281106138a8576138a761386a565b5b50565b5f8190506138b882613897565b919050565b5f6138c7826138ab565b9050919050565b6138d7816138bd565b82525050565b5f6040820190506138f05f83018561363e565b6138fd60208301846138ce565b9392505050565b61390d81612ee4565b8114613917575f5ffd5b50565b5f8151905061392881613904565b92915050565b5f6020828403121561394357613942612e5c565b5b5f6139508482850161391a565b91505092915050565b5f60408201905061396c5f8301856130d1565b61397960208301846138ce565b9392505050565b5f67ffffffffffffffff82111561399a576139996131b5565b5b602082029050602081019050919050565b5f815190506139b98161301e565b92915050565b5f6139d16139cc84613980565b613213565b905080838252602082019050602084028301858111156139f4576139f361347e565b5b835b81811015613a1d5780613a0988826139ab565b8452602084019350506020810190506139f6565b5050509392505050565b5f82601f830112613a3b57613a3a61319d565b5b8151613a4b8482602086016139bf565b91505092915050565b5f60208284031215613a6957613a68612e5c565b5b5f82015167ffffffffffffffff811115613a8657613a85612e60565b5b613a9284828501613a27565b91505092915050565b5f82825260208201905092915050565b5f613ab68385613a9b565b9350613ac383858461325d565b613acc836131a5565b840190509392505050565b5f6060820190508181035f830152613af0818789613aab565b90508181036020830152613b05818587613aab565b9050613b1460408301846138ce565b9695505050505050565b5f819050919050565b5f67ffffffffffffffff82169050919050565b5f613b54613b4f613b4a84613b1e565b61357a565b613b27565b9050919050565b613b6481613b3a565b82525050565b5f602082019050613b7d5f830184613b5b565b92915050565b5f81519050613b918161307c565b92915050565b5f60208284031215613bac57613bab612e5c565b5b5f613bb984828501613b83565b91505092915050565b5f604082019050613bd55f83018561363e565b613be260208301846130d1565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613c2082613333565b9150613c2b83613333565b9250828203905081811115613c4357613c42613be9565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f60ff82169050919050565b613c8b81613c76565b82525050565b5f608082019050613ca45f8301876130d1565b613cb16020830186613c82565b613cbe60408301856130d1565b613ccb60608301846130d1565b9594505050505056fea164736f6c634300081c000a", } // EspressoTEEVerifierABI is the input ABI used to generate the binding from. @@ -44,7 +44,7 @@ var EspressoTEEVerifierABI = EspressoTEEVerifierMetaData.ABI var EspressoTEEVerifierBin = EspressoTEEVerifierMetaData.Bin // DeployEspressoTEEVerifier deploys a new Ethereum contract, binding an instance of EspressoTEEVerifier to it. -func DeployEspressoTEEVerifier(auth *bind.TransactOpts, backend bind.ContractBackend, _espressoSGXTEEVerifier common.Address, _espressoNitroTEEVerifier common.Address) (common.Address, *types.Transaction, *EspressoTEEVerifier, error) { +func DeployEspressoTEEVerifier(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *EspressoTEEVerifier, error) { parsed, err := EspressoTEEVerifierMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -53,7 +53,7 @@ func DeployEspressoTEEVerifier(auth *bind.TransactOpts, backend bind.ContractBac return common.Address{}, nil, nil, errors.New("GetABI returned nil") } - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(EspressoTEEVerifierBin), backend, _espressoSGXTEEVerifier, _espressoNitroTEEVerifier) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(EspressoTEEVerifierBin), backend) if err != nil { return common.Address{}, nil, nil, err } @@ -202,6 +202,130 @@ func (_EspressoTEEVerifier *EspressoTEEVerifierTransactorRaw) Transact(opts *bin return _EspressoTEEVerifier.Contract.contract.Transact(opts, method, params...) } +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_EspressoTEEVerifier *EspressoTEEVerifierCaller) DEFAULTADMINROLE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _EspressoTEEVerifier.contract.Call(opts, &out, "DEFAULT_ADMIN_ROLE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_EspressoTEEVerifier *EspressoTEEVerifierSession) DEFAULTADMINROLE() ([32]byte, error) { + return _EspressoTEEVerifier.Contract.DEFAULTADMINROLE(&_EspressoTEEVerifier.CallOpts) +} + +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_EspressoTEEVerifier *EspressoTEEVerifierCallerSession) DEFAULTADMINROLE() ([32]byte, error) { + return _EspressoTEEVerifier.Contract.DEFAULTADMINROLE(&_EspressoTEEVerifier.CallOpts) +} + +// GUARDIANROLE is a free data retrieval call binding the contract method 0x24ea54f4. +// +// Solidity: function GUARDIAN_ROLE() view returns(bytes32) +func (_EspressoTEEVerifier *EspressoTEEVerifierCaller) GUARDIANROLE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _EspressoTEEVerifier.contract.Call(opts, &out, "GUARDIAN_ROLE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// GUARDIANROLE is a free data retrieval call binding the contract method 0x24ea54f4. +// +// Solidity: function GUARDIAN_ROLE() view returns(bytes32) +func (_EspressoTEEVerifier *EspressoTEEVerifierSession) GUARDIANROLE() ([32]byte, error) { + return _EspressoTEEVerifier.Contract.GUARDIANROLE(&_EspressoTEEVerifier.CallOpts) +} + +// GUARDIANROLE is a free data retrieval call binding the contract method 0x24ea54f4. +// +// Solidity: function GUARDIAN_ROLE() view returns(bytes32) +func (_EspressoTEEVerifier *EspressoTEEVerifierCallerSession) GUARDIANROLE() ([32]byte, error) { + return _EspressoTEEVerifier.Contract.GUARDIANROLE(&_EspressoTEEVerifier.CallOpts) +} + +// UPGRADEINTERFACEVERSION is a free data retrieval call binding the contract method 0xad3cb1cc. +// +// Solidity: function UPGRADE_INTERFACE_VERSION() view returns(string) +func (_EspressoTEEVerifier *EspressoTEEVerifierCaller) UPGRADEINTERFACEVERSION(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _EspressoTEEVerifier.contract.Call(opts, &out, "UPGRADE_INTERFACE_VERSION") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// UPGRADEINTERFACEVERSION is a free data retrieval call binding the contract method 0xad3cb1cc. +// +// Solidity: function UPGRADE_INTERFACE_VERSION() view returns(string) +func (_EspressoTEEVerifier *EspressoTEEVerifierSession) UPGRADEINTERFACEVERSION() (string, error) { + return _EspressoTEEVerifier.Contract.UPGRADEINTERFACEVERSION(&_EspressoTEEVerifier.CallOpts) +} + +// UPGRADEINTERFACEVERSION is a free data retrieval call binding the contract method 0xad3cb1cc. +// +// Solidity: function UPGRADE_INTERFACE_VERSION() view returns(string) +func (_EspressoTEEVerifier *EspressoTEEVerifierCallerSession) UPGRADEINTERFACEVERSION() (string, error) { + return _EspressoTEEVerifier.Contract.UPGRADEINTERFACEVERSION(&_EspressoTEEVerifier.CallOpts) +} + +// EnclaveHashSigners is a free data retrieval call binding the contract method 0x7655e7f1. +// +// Solidity: function enclaveHashSigners(bytes32 enclaveHash, uint8 teeType, uint8 service) view returns(address[]) +func (_EspressoTEEVerifier *EspressoTEEVerifierCaller) EnclaveHashSigners(opts *bind.CallOpts, enclaveHash [32]byte, teeType uint8, service uint8) ([]common.Address, error) { + var out []interface{} + err := _EspressoTEEVerifier.contract.Call(opts, &out, "enclaveHashSigners", enclaveHash, teeType, service) + + if err != nil { + return *new([]common.Address), err + } + + out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) + + return out0, err + +} + +// EnclaveHashSigners is a free data retrieval call binding the contract method 0x7655e7f1. +// +// Solidity: function enclaveHashSigners(bytes32 enclaveHash, uint8 teeType, uint8 service) view returns(address[]) +func (_EspressoTEEVerifier *EspressoTEEVerifierSession) EnclaveHashSigners(enclaveHash [32]byte, teeType uint8, service uint8) ([]common.Address, error) { + return _EspressoTEEVerifier.Contract.EnclaveHashSigners(&_EspressoTEEVerifier.CallOpts, enclaveHash, teeType, service) +} + +// EnclaveHashSigners is a free data retrieval call binding the contract method 0x7655e7f1. +// +// Solidity: function enclaveHashSigners(bytes32 enclaveHash, uint8 teeType, uint8 service) view returns(address[]) +func (_EspressoTEEVerifier *EspressoTEEVerifierCallerSession) EnclaveHashSigners(enclaveHash [32]byte, teeType uint8, service uint8) ([]common.Address, error) { + return _EspressoTEEVerifier.Contract.EnclaveHashSigners(&_EspressoTEEVerifier.CallOpts, enclaveHash, teeType, service) +} + // EspressoNitroTEEVerifier is a free data retrieval call binding the contract method 0xd80a4c28. // // Solidity: function espressoNitroTEEVerifier() view returns(address) @@ -264,6 +388,254 @@ func (_EspressoTEEVerifier *EspressoTEEVerifierCallerSession) EspressoSGXTEEVeri return _EspressoTEEVerifier.Contract.EspressoSGXTEEVerifier(&_EspressoTEEVerifier.CallOpts) } +// GetGuardians is a free data retrieval call binding the contract method 0x0665f04b. +// +// Solidity: function getGuardians() view returns(address[]) +func (_EspressoTEEVerifier *EspressoTEEVerifierCaller) GetGuardians(opts *bind.CallOpts) ([]common.Address, error) { + var out []interface{} + err := _EspressoTEEVerifier.contract.Call(opts, &out, "getGuardians") + + if err != nil { + return *new([]common.Address), err + } + + out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) + + return out0, err + +} + +// GetGuardians is a free data retrieval call binding the contract method 0x0665f04b. +// +// Solidity: function getGuardians() view returns(address[]) +func (_EspressoTEEVerifier *EspressoTEEVerifierSession) GetGuardians() ([]common.Address, error) { + return _EspressoTEEVerifier.Contract.GetGuardians(&_EspressoTEEVerifier.CallOpts) +} + +// GetGuardians is a free data retrieval call binding the contract method 0x0665f04b. +// +// Solidity: function getGuardians() view returns(address[]) +func (_EspressoTEEVerifier *EspressoTEEVerifierCallerSession) GetGuardians() ([]common.Address, error) { + return _EspressoTEEVerifier.Contract.GetGuardians(&_EspressoTEEVerifier.CallOpts) +} + +// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. +// +// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) +func (_EspressoTEEVerifier *EspressoTEEVerifierCaller) GetRoleAdmin(opts *bind.CallOpts, role [32]byte) ([32]byte, error) { + var out []interface{} + err := _EspressoTEEVerifier.contract.Call(opts, &out, "getRoleAdmin", role) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. +// +// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) +func (_EspressoTEEVerifier *EspressoTEEVerifierSession) GetRoleAdmin(role [32]byte) ([32]byte, error) { + return _EspressoTEEVerifier.Contract.GetRoleAdmin(&_EspressoTEEVerifier.CallOpts, role) +} + +// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. +// +// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) +func (_EspressoTEEVerifier *EspressoTEEVerifierCallerSession) GetRoleAdmin(role [32]byte) ([32]byte, error) { + return _EspressoTEEVerifier.Contract.GetRoleAdmin(&_EspressoTEEVerifier.CallOpts, role) +} + +// GetRoleMember is a free data retrieval call binding the contract method 0x9010d07c. +// +// Solidity: function getRoleMember(bytes32 role, uint256 index) view returns(address) +func (_EspressoTEEVerifier *EspressoTEEVerifierCaller) GetRoleMember(opts *bind.CallOpts, role [32]byte, index *big.Int) (common.Address, error) { + var out []interface{} + err := _EspressoTEEVerifier.contract.Call(opts, &out, "getRoleMember", role, index) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetRoleMember is a free data retrieval call binding the contract method 0x9010d07c. +// +// Solidity: function getRoleMember(bytes32 role, uint256 index) view returns(address) +func (_EspressoTEEVerifier *EspressoTEEVerifierSession) GetRoleMember(role [32]byte, index *big.Int) (common.Address, error) { + return _EspressoTEEVerifier.Contract.GetRoleMember(&_EspressoTEEVerifier.CallOpts, role, index) +} + +// GetRoleMember is a free data retrieval call binding the contract method 0x9010d07c. +// +// Solidity: function getRoleMember(bytes32 role, uint256 index) view returns(address) +func (_EspressoTEEVerifier *EspressoTEEVerifierCallerSession) GetRoleMember(role [32]byte, index *big.Int) (common.Address, error) { + return _EspressoTEEVerifier.Contract.GetRoleMember(&_EspressoTEEVerifier.CallOpts, role, index) +} + +// GetRoleMemberCount is a free data retrieval call binding the contract method 0xca15c873. +// +// Solidity: function getRoleMemberCount(bytes32 role) view returns(uint256) +func (_EspressoTEEVerifier *EspressoTEEVerifierCaller) GetRoleMemberCount(opts *bind.CallOpts, role [32]byte) (*big.Int, error) { + var out []interface{} + err := _EspressoTEEVerifier.contract.Call(opts, &out, "getRoleMemberCount", role) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetRoleMemberCount is a free data retrieval call binding the contract method 0xca15c873. +// +// Solidity: function getRoleMemberCount(bytes32 role) view returns(uint256) +func (_EspressoTEEVerifier *EspressoTEEVerifierSession) GetRoleMemberCount(role [32]byte) (*big.Int, error) { + return _EspressoTEEVerifier.Contract.GetRoleMemberCount(&_EspressoTEEVerifier.CallOpts, role) +} + +// GetRoleMemberCount is a free data retrieval call binding the contract method 0xca15c873. +// +// Solidity: function getRoleMemberCount(bytes32 role) view returns(uint256) +func (_EspressoTEEVerifier *EspressoTEEVerifierCallerSession) GetRoleMemberCount(role [32]byte) (*big.Int, error) { + return _EspressoTEEVerifier.Contract.GetRoleMemberCount(&_EspressoTEEVerifier.CallOpts, role) +} + +// GetRoleMembers is a free data retrieval call binding the contract method 0xa3246ad3. +// +// Solidity: function getRoleMembers(bytes32 role) view returns(address[]) +func (_EspressoTEEVerifier *EspressoTEEVerifierCaller) GetRoleMembers(opts *bind.CallOpts, role [32]byte) ([]common.Address, error) { + var out []interface{} + err := _EspressoTEEVerifier.contract.Call(opts, &out, "getRoleMembers", role) + + if err != nil { + return *new([]common.Address), err + } + + out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) + + return out0, err + +} + +// GetRoleMembers is a free data retrieval call binding the contract method 0xa3246ad3. +// +// Solidity: function getRoleMembers(bytes32 role) view returns(address[]) +func (_EspressoTEEVerifier *EspressoTEEVerifierSession) GetRoleMembers(role [32]byte) ([]common.Address, error) { + return _EspressoTEEVerifier.Contract.GetRoleMembers(&_EspressoTEEVerifier.CallOpts, role) +} + +// GetRoleMembers is a free data retrieval call binding the contract method 0xa3246ad3. +// +// Solidity: function getRoleMembers(bytes32 role) view returns(address[]) +func (_EspressoTEEVerifier *EspressoTEEVerifierCallerSession) GetRoleMembers(role [32]byte) ([]common.Address, error) { + return _EspressoTEEVerifier.Contract.GetRoleMembers(&_EspressoTEEVerifier.CallOpts, role) +} + +// GuardianCount is a free data retrieval call binding the contract method 0x54387ad7. +// +// Solidity: function guardianCount() view returns(uint256) +func (_EspressoTEEVerifier *EspressoTEEVerifierCaller) GuardianCount(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _EspressoTEEVerifier.contract.Call(opts, &out, "guardianCount") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GuardianCount is a free data retrieval call binding the contract method 0x54387ad7. +// +// Solidity: function guardianCount() view returns(uint256) +func (_EspressoTEEVerifier *EspressoTEEVerifierSession) GuardianCount() (*big.Int, error) { + return _EspressoTEEVerifier.Contract.GuardianCount(&_EspressoTEEVerifier.CallOpts) +} + +// GuardianCount is a free data retrieval call binding the contract method 0x54387ad7. +// +// Solidity: function guardianCount() view returns(uint256) +func (_EspressoTEEVerifier *EspressoTEEVerifierCallerSession) GuardianCount() (*big.Int, error) { + return _EspressoTEEVerifier.Contract.GuardianCount(&_EspressoTEEVerifier.CallOpts) +} + +// HasRole is a free data retrieval call binding the contract method 0x91d14854. +// +// Solidity: function hasRole(bytes32 role, address account) view returns(bool) +func (_EspressoTEEVerifier *EspressoTEEVerifierCaller) HasRole(opts *bind.CallOpts, role [32]byte, account common.Address) (bool, error) { + var out []interface{} + err := _EspressoTEEVerifier.contract.Call(opts, &out, "hasRole", role, account) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// HasRole is a free data retrieval call binding the contract method 0x91d14854. +// +// Solidity: function hasRole(bytes32 role, address account) view returns(bool) +func (_EspressoTEEVerifier *EspressoTEEVerifierSession) HasRole(role [32]byte, account common.Address) (bool, error) { + return _EspressoTEEVerifier.Contract.HasRole(&_EspressoTEEVerifier.CallOpts, role, account) +} + +// HasRole is a free data retrieval call binding the contract method 0x91d14854. +// +// Solidity: function hasRole(bytes32 role, address account) view returns(bool) +func (_EspressoTEEVerifier *EspressoTEEVerifierCallerSession) HasRole(role [32]byte, account common.Address) (bool, error) { + return _EspressoTEEVerifier.Contract.HasRole(&_EspressoTEEVerifier.CallOpts, role, account) +} + +// IsGuardian is a free data retrieval call binding the contract method 0x0c68ba21. +// +// Solidity: function isGuardian(address account) view returns(bool) +func (_EspressoTEEVerifier *EspressoTEEVerifierCaller) IsGuardian(opts *bind.CallOpts, account common.Address) (bool, error) { + var out []interface{} + err := _EspressoTEEVerifier.contract.Call(opts, &out, "isGuardian", account) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsGuardian is a free data retrieval call binding the contract method 0x0c68ba21. +// +// Solidity: function isGuardian(address account) view returns(bool) +func (_EspressoTEEVerifier *EspressoTEEVerifierSession) IsGuardian(account common.Address) (bool, error) { + return _EspressoTEEVerifier.Contract.IsGuardian(&_EspressoTEEVerifier.CallOpts, account) +} + +// IsGuardian is a free data retrieval call binding the contract method 0x0c68ba21. +// +// Solidity: function isGuardian(address account) view returns(bool) +func (_EspressoTEEVerifier *EspressoTEEVerifierCallerSession) IsGuardian(account common.Address) (bool, error) { + return _EspressoTEEVerifier.Contract.IsGuardian(&_EspressoTEEVerifier.CallOpts, account) +} + // Owner is a free data retrieval call binding the contract method 0x8da5cb5b. // // Solidity: function owner() view returns(address) @@ -326,12 +698,74 @@ func (_EspressoTEEVerifier *EspressoTEEVerifierCallerSession) PendingOwner() (co return _EspressoTEEVerifier.Contract.PendingOwner(&_EspressoTEEVerifier.CallOpts) } -// RegisteredEnclaveHashes is a free data retrieval call binding the contract method 0x3cbe6803. +// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. +// +// Solidity: function proxiableUUID() view returns(bytes32) +func (_EspressoTEEVerifier *EspressoTEEVerifierCaller) ProxiableUUID(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _EspressoTEEVerifier.contract.Call(opts, &out, "proxiableUUID") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. +// +// Solidity: function proxiableUUID() view returns(bytes32) +func (_EspressoTEEVerifier *EspressoTEEVerifierSession) ProxiableUUID() ([32]byte, error) { + return _EspressoTEEVerifier.Contract.ProxiableUUID(&_EspressoTEEVerifier.CallOpts) +} + +// ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d. // -// Solidity: function registeredEnclaveHashes(bytes32 enclaveHash, uint8 teeType) view returns(bool) -func (_EspressoTEEVerifier *EspressoTEEVerifierCaller) RegisteredEnclaveHashes(opts *bind.CallOpts, enclaveHash [32]byte, teeType uint8) (bool, error) { +// Solidity: function proxiableUUID() view returns(bytes32) +func (_EspressoTEEVerifier *EspressoTEEVerifierCallerSession) ProxiableUUID() ([32]byte, error) { + return _EspressoTEEVerifier.Contract.ProxiableUUID(&_EspressoTEEVerifier.CallOpts) +} + +// RegisteredEnclaveHashes is a free data retrieval call binding the contract method 0x7e41f57c. +// +// Solidity: function registeredEnclaveHashes(bytes32 enclaveHash, uint8 teeType, uint8 service) view returns(bool) +func (_EspressoTEEVerifier *EspressoTEEVerifierCaller) RegisteredEnclaveHashes(opts *bind.CallOpts, enclaveHash [32]byte, teeType uint8, service uint8) (bool, error) { + var out []interface{} + err := _EspressoTEEVerifier.contract.Call(opts, &out, "registeredEnclaveHashes", enclaveHash, teeType, service) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// RegisteredEnclaveHashes is a free data retrieval call binding the contract method 0x7e41f57c. +// +// Solidity: function registeredEnclaveHashes(bytes32 enclaveHash, uint8 teeType, uint8 service) view returns(bool) +func (_EspressoTEEVerifier *EspressoTEEVerifierSession) RegisteredEnclaveHashes(enclaveHash [32]byte, teeType uint8, service uint8) (bool, error) { + return _EspressoTEEVerifier.Contract.RegisteredEnclaveHashes(&_EspressoTEEVerifier.CallOpts, enclaveHash, teeType, service) +} + +// RegisteredEnclaveHashes is a free data retrieval call binding the contract method 0x7e41f57c. +// +// Solidity: function registeredEnclaveHashes(bytes32 enclaveHash, uint8 teeType, uint8 service) view returns(bool) +func (_EspressoTEEVerifier *EspressoTEEVerifierCallerSession) RegisteredEnclaveHashes(enclaveHash [32]byte, teeType uint8, service uint8) (bool, error) { + return _EspressoTEEVerifier.Contract.RegisteredEnclaveHashes(&_EspressoTEEVerifier.CallOpts, enclaveHash, teeType, service) +} + +// RegisteredService is a free data retrieval call binding the contract method 0x862e2345. +// +// Solidity: function registeredService(address signer, uint8 teeType, uint8 service) view returns(bool) +func (_EspressoTEEVerifier *EspressoTEEVerifierCaller) RegisteredService(opts *bind.CallOpts, signer common.Address, teeType uint8, service uint8) (bool, error) { var out []interface{} - err := _EspressoTEEVerifier.contract.Call(opts, &out, "registeredEnclaveHashes", enclaveHash, teeType) + err := _EspressoTEEVerifier.contract.Call(opts, &out, "registeredService", signer, teeType, service) if err != nil { return *new(bool), err @@ -343,26 +777,26 @@ func (_EspressoTEEVerifier *EspressoTEEVerifierCaller) RegisteredEnclaveHashes(o } -// RegisteredEnclaveHashes is a free data retrieval call binding the contract method 0x3cbe6803. +// RegisteredService is a free data retrieval call binding the contract method 0x862e2345. // -// Solidity: function registeredEnclaveHashes(bytes32 enclaveHash, uint8 teeType) view returns(bool) -func (_EspressoTEEVerifier *EspressoTEEVerifierSession) RegisteredEnclaveHashes(enclaveHash [32]byte, teeType uint8) (bool, error) { - return _EspressoTEEVerifier.Contract.RegisteredEnclaveHashes(&_EspressoTEEVerifier.CallOpts, enclaveHash, teeType) +// Solidity: function registeredService(address signer, uint8 teeType, uint8 service) view returns(bool) +func (_EspressoTEEVerifier *EspressoTEEVerifierSession) RegisteredService(signer common.Address, teeType uint8, service uint8) (bool, error) { + return _EspressoTEEVerifier.Contract.RegisteredService(&_EspressoTEEVerifier.CallOpts, signer, teeType, service) } -// RegisteredEnclaveHashes is a free data retrieval call binding the contract method 0x3cbe6803. +// RegisteredService is a free data retrieval call binding the contract method 0x862e2345. // -// Solidity: function registeredEnclaveHashes(bytes32 enclaveHash, uint8 teeType) view returns(bool) -func (_EspressoTEEVerifier *EspressoTEEVerifierCallerSession) RegisteredEnclaveHashes(enclaveHash [32]byte, teeType uint8) (bool, error) { - return _EspressoTEEVerifier.Contract.RegisteredEnclaveHashes(&_EspressoTEEVerifier.CallOpts, enclaveHash, teeType) +// Solidity: function registeredService(address signer, uint8 teeType, uint8 service) view returns(bool) +func (_EspressoTEEVerifier *EspressoTEEVerifierCallerSession) RegisteredService(signer common.Address, teeType uint8, service uint8) (bool, error) { + return _EspressoTEEVerifier.Contract.RegisteredService(&_EspressoTEEVerifier.CallOpts, signer, teeType, service) } -// RegisteredSigners is a free data retrieval call binding the contract method 0xe9b1a7be. +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. // -// Solidity: function registeredSigners(address signer, uint8 teeType) view returns(bool) -func (_EspressoTEEVerifier *EspressoTEEVerifierCaller) RegisteredSigners(opts *bind.CallOpts, signer common.Address, teeType uint8) (bool, error) { +// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) +func (_EspressoTEEVerifier *EspressoTEEVerifierCaller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) { var out []interface{} - err := _EspressoTEEVerifier.contract.Call(opts, &out, "registeredSigners", signer, teeType) + err := _EspressoTEEVerifier.contract.Call(opts, &out, "supportsInterface", interfaceId) if err != nil { return *new(bool), err @@ -374,47 +808,49 @@ func (_EspressoTEEVerifier *EspressoTEEVerifierCaller) RegisteredSigners(opts *b } -// RegisteredSigners is a free data retrieval call binding the contract method 0xe9b1a7be. +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. // -// Solidity: function registeredSigners(address signer, uint8 teeType) view returns(bool) -func (_EspressoTEEVerifier *EspressoTEEVerifierSession) RegisteredSigners(signer common.Address, teeType uint8) (bool, error) { - return _EspressoTEEVerifier.Contract.RegisteredSigners(&_EspressoTEEVerifier.CallOpts, signer, teeType) +// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) +func (_EspressoTEEVerifier *EspressoTEEVerifierSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _EspressoTEEVerifier.Contract.SupportsInterface(&_EspressoTEEVerifier.CallOpts, interfaceId) } -// RegisteredSigners is a free data retrieval call binding the contract method 0xe9b1a7be. +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. // -// Solidity: function registeredSigners(address signer, uint8 teeType) view returns(bool) -func (_EspressoTEEVerifier *EspressoTEEVerifierCallerSession) RegisteredSigners(signer common.Address, teeType uint8) (bool, error) { - return _EspressoTEEVerifier.Contract.RegisteredSigners(&_EspressoTEEVerifier.CallOpts, signer, teeType) +// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) +func (_EspressoTEEVerifier *EspressoTEEVerifierCallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _EspressoTEEVerifier.Contract.SupportsInterface(&_EspressoTEEVerifier.CallOpts, interfaceId) } -// Verify is a free data retrieval call binding the contract method 0x6b406341. +// Verify is a free data retrieval call binding the contract method 0x55ddfa06. // -// Solidity: function verify(bytes signature, bytes32 userDataHash) view returns() -func (_EspressoTEEVerifier *EspressoTEEVerifierCaller) Verify(opts *bind.CallOpts, signature []byte, userDataHash [32]byte) error { +// Solidity: function verify(bytes signature, bytes32 userDataHash, uint8 teeType, uint8 service) view returns(bool) +func (_EspressoTEEVerifier *EspressoTEEVerifierCaller) Verify(opts *bind.CallOpts, signature []byte, userDataHash [32]byte, teeType uint8, service uint8) (bool, error) { var out []interface{} - err := _EspressoTEEVerifier.contract.Call(opts, &out, "verify", signature, userDataHash) + err := _EspressoTEEVerifier.contract.Call(opts, &out, "verify", signature, userDataHash, teeType, service) if err != nil { - return err + return *new(bool), err } - return err + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err } -// Verify is a free data retrieval call binding the contract method 0x6b406341. +// Verify is a free data retrieval call binding the contract method 0x55ddfa06. // -// Solidity: function verify(bytes signature, bytes32 userDataHash) view returns() -func (_EspressoTEEVerifier *EspressoTEEVerifierSession) Verify(signature []byte, userDataHash [32]byte) error { - return _EspressoTEEVerifier.Contract.Verify(&_EspressoTEEVerifier.CallOpts, signature, userDataHash) +// Solidity: function verify(bytes signature, bytes32 userDataHash, uint8 teeType, uint8 service) view returns(bool) +func (_EspressoTEEVerifier *EspressoTEEVerifierSession) Verify(signature []byte, userDataHash [32]byte, teeType uint8, service uint8) (bool, error) { + return _EspressoTEEVerifier.Contract.Verify(&_EspressoTEEVerifier.CallOpts, signature, userDataHash, teeType, service) } -// Verify is a free data retrieval call binding the contract method 0x6b406341. +// Verify is a free data retrieval call binding the contract method 0x55ddfa06. // -// Solidity: function verify(bytes signature, bytes32 userDataHash) view returns() -func (_EspressoTEEVerifier *EspressoTEEVerifierCallerSession) Verify(signature []byte, userDataHash [32]byte) error { - return _EspressoTEEVerifier.Contract.Verify(&_EspressoTEEVerifier.CallOpts, signature, userDataHash) +// Solidity: function verify(bytes signature, bytes32 userDataHash, uint8 teeType, uint8 service) view returns(bool) +func (_EspressoTEEVerifier *EspressoTEEVerifierCallerSession) Verify(signature []byte, userDataHash [32]byte, teeType uint8, service uint8) (bool, error) { + return _EspressoTEEVerifier.Contract.Verify(&_EspressoTEEVerifier.CallOpts, signature, userDataHash, teeType, service) } // AcceptOwnership is a paid mutator transaction binding the contract method 0x79ba5097. @@ -424,128 +860,1327 @@ func (_EspressoTEEVerifier *EspressoTEEVerifierTransactor) AcceptOwnership(opts return _EspressoTEEVerifier.contract.Transact(opts, "acceptOwnership") } -// AcceptOwnership is a paid mutator transaction binding the contract method 0x79ba5097. +// AcceptOwnership is a paid mutator transaction binding the contract method 0x79ba5097. +// +// Solidity: function acceptOwnership() returns() +func (_EspressoTEEVerifier *EspressoTEEVerifierSession) AcceptOwnership() (*types.Transaction, error) { + return _EspressoTEEVerifier.Contract.AcceptOwnership(&_EspressoTEEVerifier.TransactOpts) +} + +// AcceptOwnership is a paid mutator transaction binding the contract method 0x79ba5097. +// +// Solidity: function acceptOwnership() returns() +func (_EspressoTEEVerifier *EspressoTEEVerifierTransactorSession) AcceptOwnership() (*types.Transaction, error) { + return _EspressoTEEVerifier.Contract.AcceptOwnership(&_EspressoTEEVerifier.TransactOpts) +} + +// AddGuardian is a paid mutator transaction binding the contract method 0xa526d83b. +// +// Solidity: function addGuardian(address guardian) returns() +func (_EspressoTEEVerifier *EspressoTEEVerifierTransactor) AddGuardian(opts *bind.TransactOpts, guardian common.Address) (*types.Transaction, error) { + return _EspressoTEEVerifier.contract.Transact(opts, "addGuardian", guardian) +} + +// AddGuardian is a paid mutator transaction binding the contract method 0xa526d83b. +// +// Solidity: function addGuardian(address guardian) returns() +func (_EspressoTEEVerifier *EspressoTEEVerifierSession) AddGuardian(guardian common.Address) (*types.Transaction, error) { + return _EspressoTEEVerifier.Contract.AddGuardian(&_EspressoTEEVerifier.TransactOpts, guardian) +} + +// AddGuardian is a paid mutator transaction binding the contract method 0xa526d83b. +// +// Solidity: function addGuardian(address guardian) returns() +func (_EspressoTEEVerifier *EspressoTEEVerifierTransactorSession) AddGuardian(guardian common.Address) (*types.Transaction, error) { + return _EspressoTEEVerifier.Contract.AddGuardian(&_EspressoTEEVerifier.TransactOpts, guardian) +} + +// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. +// +// Solidity: function grantRole(bytes32 role, address account) returns() +func (_EspressoTEEVerifier *EspressoTEEVerifierTransactor) GrantRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { + return _EspressoTEEVerifier.contract.Transact(opts, "grantRole", role, account) +} + +// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. +// +// Solidity: function grantRole(bytes32 role, address account) returns() +func (_EspressoTEEVerifier *EspressoTEEVerifierSession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _EspressoTEEVerifier.Contract.GrantRole(&_EspressoTEEVerifier.TransactOpts, role, account) +} + +// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. +// +// Solidity: function grantRole(bytes32 role, address account) returns() +func (_EspressoTEEVerifier *EspressoTEEVerifierTransactorSession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _EspressoTEEVerifier.Contract.GrantRole(&_EspressoTEEVerifier.TransactOpts, role, account) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc0c53b8b. +// +// Solidity: function initialize(address _espressoSGXTEEVerifier, address _espressoNitroTEEVerifier, address initialOwner) returns() +func (_EspressoTEEVerifier *EspressoTEEVerifierTransactor) Initialize(opts *bind.TransactOpts, _espressoSGXTEEVerifier common.Address, _espressoNitroTEEVerifier common.Address, initialOwner common.Address) (*types.Transaction, error) { + return _EspressoTEEVerifier.contract.Transact(opts, "initialize", _espressoSGXTEEVerifier, _espressoNitroTEEVerifier, initialOwner) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc0c53b8b. +// +// Solidity: function initialize(address _espressoSGXTEEVerifier, address _espressoNitroTEEVerifier, address initialOwner) returns() +func (_EspressoTEEVerifier *EspressoTEEVerifierSession) Initialize(_espressoSGXTEEVerifier common.Address, _espressoNitroTEEVerifier common.Address, initialOwner common.Address) (*types.Transaction, error) { + return _EspressoTEEVerifier.Contract.Initialize(&_EspressoTEEVerifier.TransactOpts, _espressoSGXTEEVerifier, _espressoNitroTEEVerifier, initialOwner) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc0c53b8b. +// +// Solidity: function initialize(address _espressoSGXTEEVerifier, address _espressoNitroTEEVerifier, address initialOwner) returns() +func (_EspressoTEEVerifier *EspressoTEEVerifierTransactorSession) Initialize(_espressoSGXTEEVerifier common.Address, _espressoNitroTEEVerifier common.Address, initialOwner common.Address) (*types.Transaction, error) { + return _EspressoTEEVerifier.Contract.Initialize(&_EspressoTEEVerifier.TransactOpts, _espressoSGXTEEVerifier, _espressoNitroTEEVerifier, initialOwner) +} + +// RegisterService is a paid mutator transaction binding the contract method 0x7f82ea6c. +// +// Solidity: function registerService(bytes verificationData, bytes data, uint8 teeType, uint8 service) returns() +func (_EspressoTEEVerifier *EspressoTEEVerifierTransactor) RegisterService(opts *bind.TransactOpts, verificationData []byte, data []byte, teeType uint8, service uint8) (*types.Transaction, error) { + return _EspressoTEEVerifier.contract.Transact(opts, "registerService", verificationData, data, teeType, service) +} + +// RegisterService is a paid mutator transaction binding the contract method 0x7f82ea6c. +// +// Solidity: function registerService(bytes verificationData, bytes data, uint8 teeType, uint8 service) returns() +func (_EspressoTEEVerifier *EspressoTEEVerifierSession) RegisterService(verificationData []byte, data []byte, teeType uint8, service uint8) (*types.Transaction, error) { + return _EspressoTEEVerifier.Contract.RegisterService(&_EspressoTEEVerifier.TransactOpts, verificationData, data, teeType, service) +} + +// RegisterService is a paid mutator transaction binding the contract method 0x7f82ea6c. +// +// Solidity: function registerService(bytes verificationData, bytes data, uint8 teeType, uint8 service) returns() +func (_EspressoTEEVerifier *EspressoTEEVerifierTransactorSession) RegisterService(verificationData []byte, data []byte, teeType uint8, service uint8) (*types.Transaction, error) { + return _EspressoTEEVerifier.Contract.RegisterService(&_EspressoTEEVerifier.TransactOpts, verificationData, data, teeType, service) +} + +// RemoveGuardian is a paid mutator transaction binding the contract method 0x71404156. +// +// Solidity: function removeGuardian(address guardian) returns() +func (_EspressoTEEVerifier *EspressoTEEVerifierTransactor) RemoveGuardian(opts *bind.TransactOpts, guardian common.Address) (*types.Transaction, error) { + return _EspressoTEEVerifier.contract.Transact(opts, "removeGuardian", guardian) +} + +// RemoveGuardian is a paid mutator transaction binding the contract method 0x71404156. +// +// Solidity: function removeGuardian(address guardian) returns() +func (_EspressoTEEVerifier *EspressoTEEVerifierSession) RemoveGuardian(guardian common.Address) (*types.Transaction, error) { + return _EspressoTEEVerifier.Contract.RemoveGuardian(&_EspressoTEEVerifier.TransactOpts, guardian) +} + +// RemoveGuardian is a paid mutator transaction binding the contract method 0x71404156. +// +// Solidity: function removeGuardian(address guardian) returns() +func (_EspressoTEEVerifier *EspressoTEEVerifierTransactorSession) RemoveGuardian(guardian common.Address) (*types.Transaction, error) { + return _EspressoTEEVerifier.Contract.RemoveGuardian(&_EspressoTEEVerifier.TransactOpts, guardian) +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_EspressoTEEVerifier *EspressoTEEVerifierTransactor) RenounceOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _EspressoTEEVerifier.contract.Transact(opts, "renounceOwnership") +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_EspressoTEEVerifier *EspressoTEEVerifierSession) RenounceOwnership() (*types.Transaction, error) { + return _EspressoTEEVerifier.Contract.RenounceOwnership(&_EspressoTEEVerifier.TransactOpts) +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_EspressoTEEVerifier *EspressoTEEVerifierTransactorSession) RenounceOwnership() (*types.Transaction, error) { + return _EspressoTEEVerifier.Contract.RenounceOwnership(&_EspressoTEEVerifier.TransactOpts) +} + +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address callerConfirmation) returns() +func (_EspressoTEEVerifier *EspressoTEEVerifierTransactor) RenounceRole(opts *bind.TransactOpts, role [32]byte, callerConfirmation common.Address) (*types.Transaction, error) { + return _EspressoTEEVerifier.contract.Transact(opts, "renounceRole", role, callerConfirmation) +} + +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address callerConfirmation) returns() +func (_EspressoTEEVerifier *EspressoTEEVerifierSession) RenounceRole(role [32]byte, callerConfirmation common.Address) (*types.Transaction, error) { + return _EspressoTEEVerifier.Contract.RenounceRole(&_EspressoTEEVerifier.TransactOpts, role, callerConfirmation) +} + +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address callerConfirmation) returns() +func (_EspressoTEEVerifier *EspressoTEEVerifierTransactorSession) RenounceRole(role [32]byte, callerConfirmation common.Address) (*types.Transaction, error) { + return _EspressoTEEVerifier.Contract.RenounceRole(&_EspressoTEEVerifier.TransactOpts, role, callerConfirmation) +} + +// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. +// +// Solidity: function revokeRole(bytes32 role, address account) returns() +func (_EspressoTEEVerifier *EspressoTEEVerifierTransactor) RevokeRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { + return _EspressoTEEVerifier.contract.Transact(opts, "revokeRole", role, account) +} + +// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. +// +// Solidity: function revokeRole(bytes32 role, address account) returns() +func (_EspressoTEEVerifier *EspressoTEEVerifierSession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _EspressoTEEVerifier.Contract.RevokeRole(&_EspressoTEEVerifier.TransactOpts, role, account) +} + +// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. +// +// Solidity: function revokeRole(bytes32 role, address account) returns() +func (_EspressoTEEVerifier *EspressoTEEVerifierTransactorSession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _EspressoTEEVerifier.Contract.RevokeRole(&_EspressoTEEVerifier.TransactOpts, role, account) +} + +// SetEspressoNitroTEEVerifier is a paid mutator transaction binding the contract method 0x330282f5. +// +// Solidity: function setEspressoNitroTEEVerifier(address _espressoNitroTEEVerifier) returns() +func (_EspressoTEEVerifier *EspressoTEEVerifierTransactor) SetEspressoNitroTEEVerifier(opts *bind.TransactOpts, _espressoNitroTEEVerifier common.Address) (*types.Transaction, error) { + return _EspressoTEEVerifier.contract.Transact(opts, "setEspressoNitroTEEVerifier", _espressoNitroTEEVerifier) +} + +// SetEspressoNitroTEEVerifier is a paid mutator transaction binding the contract method 0x330282f5. +// +// Solidity: function setEspressoNitroTEEVerifier(address _espressoNitroTEEVerifier) returns() +func (_EspressoTEEVerifier *EspressoTEEVerifierSession) SetEspressoNitroTEEVerifier(_espressoNitroTEEVerifier common.Address) (*types.Transaction, error) { + return _EspressoTEEVerifier.Contract.SetEspressoNitroTEEVerifier(&_EspressoTEEVerifier.TransactOpts, _espressoNitroTEEVerifier) +} + +// SetEspressoNitroTEEVerifier is a paid mutator transaction binding the contract method 0x330282f5. +// +// Solidity: function setEspressoNitroTEEVerifier(address _espressoNitroTEEVerifier) returns() +func (_EspressoTEEVerifier *EspressoTEEVerifierTransactorSession) SetEspressoNitroTEEVerifier(_espressoNitroTEEVerifier common.Address) (*types.Transaction, error) { + return _EspressoTEEVerifier.Contract.SetEspressoNitroTEEVerifier(&_EspressoTEEVerifier.TransactOpts, _espressoNitroTEEVerifier) +} + +// SetEspressoSGXTEEVerifier is a paid mutator transaction binding the contract method 0xbc3a0911. +// +// Solidity: function setEspressoSGXTEEVerifier(address _espressoSGXTEEVerifier) returns() +func (_EspressoTEEVerifier *EspressoTEEVerifierTransactor) SetEspressoSGXTEEVerifier(opts *bind.TransactOpts, _espressoSGXTEEVerifier common.Address) (*types.Transaction, error) { + return _EspressoTEEVerifier.contract.Transact(opts, "setEspressoSGXTEEVerifier", _espressoSGXTEEVerifier) +} + +// SetEspressoSGXTEEVerifier is a paid mutator transaction binding the contract method 0xbc3a0911. +// +// Solidity: function setEspressoSGXTEEVerifier(address _espressoSGXTEEVerifier) returns() +func (_EspressoTEEVerifier *EspressoTEEVerifierSession) SetEspressoSGXTEEVerifier(_espressoSGXTEEVerifier common.Address) (*types.Transaction, error) { + return _EspressoTEEVerifier.Contract.SetEspressoSGXTEEVerifier(&_EspressoTEEVerifier.TransactOpts, _espressoSGXTEEVerifier) +} + +// SetEspressoSGXTEEVerifier is a paid mutator transaction binding the contract method 0xbc3a0911. +// +// Solidity: function setEspressoSGXTEEVerifier(address _espressoSGXTEEVerifier) returns() +func (_EspressoTEEVerifier *EspressoTEEVerifierTransactorSession) SetEspressoSGXTEEVerifier(_espressoSGXTEEVerifier common.Address) (*types.Transaction, error) { + return _EspressoTEEVerifier.Contract.SetEspressoSGXTEEVerifier(&_EspressoTEEVerifier.TransactOpts, _espressoSGXTEEVerifier) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_EspressoTEEVerifier *EspressoTEEVerifierTransactor) TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) { + return _EspressoTEEVerifier.contract.Transact(opts, "transferOwnership", newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_EspressoTEEVerifier *EspressoTEEVerifierSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _EspressoTEEVerifier.Contract.TransferOwnership(&_EspressoTEEVerifier.TransactOpts, newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_EspressoTEEVerifier *EspressoTEEVerifierTransactorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _EspressoTEEVerifier.Contract.TransferOwnership(&_EspressoTEEVerifier.TransactOpts, newOwner) +} + +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. +// +// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() +func (_EspressoTEEVerifier *EspressoTEEVerifierTransactor) UpgradeToAndCall(opts *bind.TransactOpts, newImplementation common.Address, data []byte) (*types.Transaction, error) { + return _EspressoTEEVerifier.contract.Transact(opts, "upgradeToAndCall", newImplementation, data) +} + +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. +// +// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() +func (_EspressoTEEVerifier *EspressoTEEVerifierSession) UpgradeToAndCall(newImplementation common.Address, data []byte) (*types.Transaction, error) { + return _EspressoTEEVerifier.Contract.UpgradeToAndCall(&_EspressoTEEVerifier.TransactOpts, newImplementation, data) +} + +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. +// +// Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() +func (_EspressoTEEVerifier *EspressoTEEVerifierTransactorSession) UpgradeToAndCall(newImplementation common.Address, data []byte) (*types.Transaction, error) { + return _EspressoTEEVerifier.Contract.UpgradeToAndCall(&_EspressoTEEVerifier.TransactOpts, newImplementation, data) +} + +// EspressoTEEVerifierGuardianAddedIterator is returned from FilterGuardianAdded and is used to iterate over the raw logs and unpacked data for GuardianAdded events raised by the EspressoTEEVerifier contract. +type EspressoTEEVerifierGuardianAddedIterator struct { + Event *EspressoTEEVerifierGuardianAdded // 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 *EspressoTEEVerifierGuardianAddedIterator) 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(EspressoTEEVerifierGuardianAdded) + 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(EspressoTEEVerifierGuardianAdded) + 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 *EspressoTEEVerifierGuardianAddedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EspressoTEEVerifierGuardianAddedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// EspressoTEEVerifierGuardianAdded represents a GuardianAdded event raised by the EspressoTEEVerifier contract. +type EspressoTEEVerifierGuardianAdded struct { + Guardian common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterGuardianAdded is a free log retrieval operation binding the contract event 0x038596bb31e2e7d3d9f184d4c98b310103f6d7f5830e5eec32bffe6f1728f969. +// +// Solidity: event GuardianAdded(address indexed guardian) +func (_EspressoTEEVerifier *EspressoTEEVerifierFilterer) FilterGuardianAdded(opts *bind.FilterOpts, guardian []common.Address) (*EspressoTEEVerifierGuardianAddedIterator, error) { + + var guardianRule []interface{} + for _, guardianItem := range guardian { + guardianRule = append(guardianRule, guardianItem) + } + + logs, sub, err := _EspressoTEEVerifier.contract.FilterLogs(opts, "GuardianAdded", guardianRule) + if err != nil { + return nil, err + } + return &EspressoTEEVerifierGuardianAddedIterator{contract: _EspressoTEEVerifier.contract, event: "GuardianAdded", logs: logs, sub: sub}, nil +} + +// WatchGuardianAdded is a free log subscription operation binding the contract event 0x038596bb31e2e7d3d9f184d4c98b310103f6d7f5830e5eec32bffe6f1728f969. +// +// Solidity: event GuardianAdded(address indexed guardian) +func (_EspressoTEEVerifier *EspressoTEEVerifierFilterer) WatchGuardianAdded(opts *bind.WatchOpts, sink chan<- *EspressoTEEVerifierGuardianAdded, guardian []common.Address) (event.Subscription, error) { + + var guardianRule []interface{} + for _, guardianItem := range guardian { + guardianRule = append(guardianRule, guardianItem) + } + + logs, sub, err := _EspressoTEEVerifier.contract.WatchLogs(opts, "GuardianAdded", guardianRule) + 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(EspressoTEEVerifierGuardianAdded) + if err := _EspressoTEEVerifier.contract.UnpackLog(event, "GuardianAdded", 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 +} + +// ParseGuardianAdded is a log parse operation binding the contract event 0x038596bb31e2e7d3d9f184d4c98b310103f6d7f5830e5eec32bffe6f1728f969. +// +// Solidity: event GuardianAdded(address indexed guardian) +func (_EspressoTEEVerifier *EspressoTEEVerifierFilterer) ParseGuardianAdded(log types.Log) (*EspressoTEEVerifierGuardianAdded, error) { + event := new(EspressoTEEVerifierGuardianAdded) + if err := _EspressoTEEVerifier.contract.UnpackLog(event, "GuardianAdded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// EspressoTEEVerifierGuardianRemovedIterator is returned from FilterGuardianRemoved and is used to iterate over the raw logs and unpacked data for GuardianRemoved events raised by the EspressoTEEVerifier contract. +type EspressoTEEVerifierGuardianRemovedIterator struct { + Event *EspressoTEEVerifierGuardianRemoved // 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 *EspressoTEEVerifierGuardianRemovedIterator) 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(EspressoTEEVerifierGuardianRemoved) + 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(EspressoTEEVerifierGuardianRemoved) + 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 *EspressoTEEVerifierGuardianRemovedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EspressoTEEVerifierGuardianRemovedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// EspressoTEEVerifierGuardianRemoved represents a GuardianRemoved event raised by the EspressoTEEVerifier contract. +type EspressoTEEVerifierGuardianRemoved struct { + Guardian common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterGuardianRemoved is a free log retrieval operation binding the contract event 0xb8107d0c6b40be480ce3172ee66ba6d64b71f6b1685a851340036e6e2e3e3c52. +// +// Solidity: event GuardianRemoved(address indexed guardian) +func (_EspressoTEEVerifier *EspressoTEEVerifierFilterer) FilterGuardianRemoved(opts *bind.FilterOpts, guardian []common.Address) (*EspressoTEEVerifierGuardianRemovedIterator, error) { + + var guardianRule []interface{} + for _, guardianItem := range guardian { + guardianRule = append(guardianRule, guardianItem) + } + + logs, sub, err := _EspressoTEEVerifier.contract.FilterLogs(opts, "GuardianRemoved", guardianRule) + if err != nil { + return nil, err + } + return &EspressoTEEVerifierGuardianRemovedIterator{contract: _EspressoTEEVerifier.contract, event: "GuardianRemoved", logs: logs, sub: sub}, nil +} + +// WatchGuardianRemoved is a free log subscription operation binding the contract event 0xb8107d0c6b40be480ce3172ee66ba6d64b71f6b1685a851340036e6e2e3e3c52. +// +// Solidity: event GuardianRemoved(address indexed guardian) +func (_EspressoTEEVerifier *EspressoTEEVerifierFilterer) WatchGuardianRemoved(opts *bind.WatchOpts, sink chan<- *EspressoTEEVerifierGuardianRemoved, guardian []common.Address) (event.Subscription, error) { + + var guardianRule []interface{} + for _, guardianItem := range guardian { + guardianRule = append(guardianRule, guardianItem) + } + + logs, sub, err := _EspressoTEEVerifier.contract.WatchLogs(opts, "GuardianRemoved", guardianRule) + 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(EspressoTEEVerifierGuardianRemoved) + if err := _EspressoTEEVerifier.contract.UnpackLog(event, "GuardianRemoved", 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 +} + +// ParseGuardianRemoved is a log parse operation binding the contract event 0xb8107d0c6b40be480ce3172ee66ba6d64b71f6b1685a851340036e6e2e3e3c52. +// +// Solidity: event GuardianRemoved(address indexed guardian) +func (_EspressoTEEVerifier *EspressoTEEVerifierFilterer) ParseGuardianRemoved(log types.Log) (*EspressoTEEVerifierGuardianRemoved, error) { + event := new(EspressoTEEVerifierGuardianRemoved) + if err := _EspressoTEEVerifier.contract.UnpackLog(event, "GuardianRemoved", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// EspressoTEEVerifierInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the EspressoTEEVerifier contract. +type EspressoTEEVerifierInitializedIterator struct { + Event *EspressoTEEVerifierInitialized // 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 *EspressoTEEVerifierInitializedIterator) 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(EspressoTEEVerifierInitialized) + 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(EspressoTEEVerifierInitialized) + 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 *EspressoTEEVerifierInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EspressoTEEVerifierInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// EspressoTEEVerifierInitialized represents a Initialized event raised by the EspressoTEEVerifier contract. +type EspressoTEEVerifierInitialized struct { + Version uint64 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitialized is a free log retrieval operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// +// Solidity: event Initialized(uint64 version) +func (_EspressoTEEVerifier *EspressoTEEVerifierFilterer) FilterInitialized(opts *bind.FilterOpts) (*EspressoTEEVerifierInitializedIterator, error) { + + logs, sub, err := _EspressoTEEVerifier.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &EspressoTEEVerifierInitializedIterator{contract: _EspressoTEEVerifier.contract, event: "Initialized", logs: logs, sub: sub}, nil +} + +// WatchInitialized is a free log subscription operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// +// Solidity: event Initialized(uint64 version) +func (_EspressoTEEVerifier *EspressoTEEVerifierFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *EspressoTEEVerifierInitialized) (event.Subscription, error) { + + logs, sub, err := _EspressoTEEVerifier.contract.WatchLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(EspressoTEEVerifierInitialized) + if err := _EspressoTEEVerifier.contract.UnpackLog(event, "Initialized", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseInitialized is a log parse operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2. +// +// Solidity: event Initialized(uint64 version) +func (_EspressoTEEVerifier *EspressoTEEVerifierFilterer) ParseInitialized(log types.Log) (*EspressoTEEVerifierInitialized, error) { + event := new(EspressoTEEVerifierInitialized) + if err := _EspressoTEEVerifier.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// EspressoTEEVerifierOwnershipTransferStartedIterator is returned from FilterOwnershipTransferStarted and is used to iterate over the raw logs and unpacked data for OwnershipTransferStarted events raised by the EspressoTEEVerifier contract. +type EspressoTEEVerifierOwnershipTransferStartedIterator struct { + Event *EspressoTEEVerifierOwnershipTransferStarted // 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 *EspressoTEEVerifierOwnershipTransferStartedIterator) 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(EspressoTEEVerifierOwnershipTransferStarted) + 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(EspressoTEEVerifierOwnershipTransferStarted) + 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 *EspressoTEEVerifierOwnershipTransferStartedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EspressoTEEVerifierOwnershipTransferStartedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// EspressoTEEVerifierOwnershipTransferStarted represents a OwnershipTransferStarted event raised by the EspressoTEEVerifier contract. +type EspressoTEEVerifierOwnershipTransferStarted struct { + PreviousOwner common.Address + NewOwner common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOwnershipTransferStarted is a free log retrieval operation binding the contract event 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700. +// +// Solidity: event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner) +func (_EspressoTEEVerifier *EspressoTEEVerifierFilterer) FilterOwnershipTransferStarted(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*EspressoTEEVerifierOwnershipTransferStartedIterator, 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 := _EspressoTEEVerifier.contract.FilterLogs(opts, "OwnershipTransferStarted", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return &EspressoTEEVerifierOwnershipTransferStartedIterator{contract: _EspressoTEEVerifier.contract, event: "OwnershipTransferStarted", logs: logs, sub: sub}, nil +} + +// WatchOwnershipTransferStarted is a free log subscription operation binding the contract event 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700. +// +// Solidity: event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner) +func (_EspressoTEEVerifier *EspressoTEEVerifierFilterer) WatchOwnershipTransferStarted(opts *bind.WatchOpts, sink chan<- *EspressoTEEVerifierOwnershipTransferStarted, 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 := _EspressoTEEVerifier.contract.WatchLogs(opts, "OwnershipTransferStarted", 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(EspressoTEEVerifierOwnershipTransferStarted) + if err := _EspressoTEEVerifier.contract.UnpackLog(event, "OwnershipTransferStarted", 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 +} + +// ParseOwnershipTransferStarted is a log parse operation binding the contract event 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700. +// +// Solidity: event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner) +func (_EspressoTEEVerifier *EspressoTEEVerifierFilterer) ParseOwnershipTransferStarted(log types.Log) (*EspressoTEEVerifierOwnershipTransferStarted, error) { + event := new(EspressoTEEVerifierOwnershipTransferStarted) + if err := _EspressoTEEVerifier.contract.UnpackLog(event, "OwnershipTransferStarted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// EspressoTEEVerifierOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the EspressoTEEVerifier contract. +type EspressoTEEVerifierOwnershipTransferredIterator struct { + Event *EspressoTEEVerifierOwnershipTransferred // 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 *EspressoTEEVerifierOwnershipTransferredIterator) 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(EspressoTEEVerifierOwnershipTransferred) + 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(EspressoTEEVerifierOwnershipTransferred) + 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 *EspressoTEEVerifierOwnershipTransferredIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EspressoTEEVerifierOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// EspressoTEEVerifierOwnershipTransferred represents a OwnershipTransferred event raised by the EspressoTEEVerifier contract. +type EspressoTEEVerifierOwnershipTransferred 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 (_EspressoTEEVerifier *EspressoTEEVerifierFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*EspressoTEEVerifierOwnershipTransferredIterator, 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 := _EspressoTEEVerifier.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return &EspressoTEEVerifierOwnershipTransferredIterator{contract: _EspressoTEEVerifier.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 (_EspressoTEEVerifier *EspressoTEEVerifierFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *EspressoTEEVerifierOwnershipTransferred, 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 := _EspressoTEEVerifier.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(EspressoTEEVerifierOwnershipTransferred) + if err := _EspressoTEEVerifier.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 (_EspressoTEEVerifier *EspressoTEEVerifierFilterer) ParseOwnershipTransferred(log types.Log) (*EspressoTEEVerifierOwnershipTransferred, error) { + event := new(EspressoTEEVerifierOwnershipTransferred) + if err := _EspressoTEEVerifier.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// EspressoTEEVerifierRoleAdminChangedIterator is returned from FilterRoleAdminChanged and is used to iterate over the raw logs and unpacked data for RoleAdminChanged events raised by the EspressoTEEVerifier contract. +type EspressoTEEVerifierRoleAdminChangedIterator struct { + Event *EspressoTEEVerifierRoleAdminChanged // 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 *EspressoTEEVerifierRoleAdminChangedIterator) 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(EspressoTEEVerifierRoleAdminChanged) + 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(EspressoTEEVerifierRoleAdminChanged) + 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 *EspressoTEEVerifierRoleAdminChangedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EspressoTEEVerifierRoleAdminChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// EspressoTEEVerifierRoleAdminChanged represents a RoleAdminChanged event raised by the EspressoTEEVerifier contract. +type EspressoTEEVerifierRoleAdminChanged struct { + Role [32]byte + PreviousAdminRole [32]byte + NewAdminRole [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRoleAdminChanged is a free log retrieval operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. +// +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_EspressoTEEVerifier *EspressoTEEVerifierFilterer) FilterRoleAdminChanged(opts *bind.FilterOpts, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (*EspressoTEEVerifierRoleAdminChangedIterator, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var previousAdminRoleRule []interface{} + for _, previousAdminRoleItem := range previousAdminRole { + previousAdminRoleRule = append(previousAdminRoleRule, previousAdminRoleItem) + } + var newAdminRoleRule []interface{} + for _, newAdminRoleItem := range newAdminRole { + newAdminRoleRule = append(newAdminRoleRule, newAdminRoleItem) + } + + logs, sub, err := _EspressoTEEVerifier.contract.FilterLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule) + if err != nil { + return nil, err + } + return &EspressoTEEVerifierRoleAdminChangedIterator{contract: _EspressoTEEVerifier.contract, event: "RoleAdminChanged", logs: logs, sub: sub}, nil +} + +// WatchRoleAdminChanged is a free log subscription operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. +// +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_EspressoTEEVerifier *EspressoTEEVerifierFilterer) WatchRoleAdminChanged(opts *bind.WatchOpts, sink chan<- *EspressoTEEVerifierRoleAdminChanged, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (event.Subscription, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var previousAdminRoleRule []interface{} + for _, previousAdminRoleItem := range previousAdminRole { + previousAdminRoleRule = append(previousAdminRoleRule, previousAdminRoleItem) + } + var newAdminRoleRule []interface{} + for _, newAdminRoleItem := range newAdminRole { + newAdminRoleRule = append(newAdminRoleRule, newAdminRoleItem) + } + + logs, sub, err := _EspressoTEEVerifier.contract.WatchLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule) + 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(EspressoTEEVerifierRoleAdminChanged) + if err := _EspressoTEEVerifier.contract.UnpackLog(event, "RoleAdminChanged", 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 +} + +// ParseRoleAdminChanged is a log parse operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. // -// Solidity: function acceptOwnership() returns() -func (_EspressoTEEVerifier *EspressoTEEVerifierSession) AcceptOwnership() (*types.Transaction, error) { - return _EspressoTEEVerifier.Contract.AcceptOwnership(&_EspressoTEEVerifier.TransactOpts) +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_EspressoTEEVerifier *EspressoTEEVerifierFilterer) ParseRoleAdminChanged(log types.Log) (*EspressoTEEVerifierRoleAdminChanged, error) { + event := new(EspressoTEEVerifierRoleAdminChanged) + if err := _EspressoTEEVerifier.contract.UnpackLog(event, "RoleAdminChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil } -// AcceptOwnership is a paid mutator transaction binding the contract method 0x79ba5097. -// -// Solidity: function acceptOwnership() returns() -func (_EspressoTEEVerifier *EspressoTEEVerifierTransactorSession) AcceptOwnership() (*types.Transaction, error) { - return _EspressoTEEVerifier.Contract.AcceptOwnership(&_EspressoTEEVerifier.TransactOpts) -} +// EspressoTEEVerifierRoleGrantedIterator is returned from FilterRoleGranted and is used to iterate over the raw logs and unpacked data for RoleGranted events raised by the EspressoTEEVerifier contract. +type EspressoTEEVerifierRoleGrantedIterator struct { + Event *EspressoTEEVerifierRoleGranted // Event containing the contract specifics and raw log -// RegisterSigner is a paid mutator transaction binding the contract method 0x35ecb4c1. -// -// Solidity: function registerSigner(bytes attestation, bytes data, uint8 teeType) returns() -func (_EspressoTEEVerifier *EspressoTEEVerifierTransactor) RegisterSigner(opts *bind.TransactOpts, attestation []byte, data []byte, teeType uint8) (*types.Transaction, error) { - return _EspressoTEEVerifier.contract.Transact(opts, "registerSigner", attestation, data, teeType) -} + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data -// RegisterSigner is a paid mutator transaction binding the contract method 0x35ecb4c1. -// -// Solidity: function registerSigner(bytes attestation, bytes data, uint8 teeType) returns() -func (_EspressoTEEVerifier *EspressoTEEVerifierSession) RegisterSigner(attestation []byte, data []byte, teeType uint8) (*types.Transaction, error) { - return _EspressoTEEVerifier.Contract.RegisterSigner(&_EspressoTEEVerifier.TransactOpts, attestation, data, teeType) + 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 } -// RegisterSigner is a paid mutator transaction binding the contract method 0x35ecb4c1. -// -// Solidity: function registerSigner(bytes attestation, bytes data, uint8 teeType) returns() -func (_EspressoTEEVerifier *EspressoTEEVerifierTransactorSession) RegisterSigner(attestation []byte, data []byte, teeType uint8) (*types.Transaction, error) { - return _EspressoTEEVerifier.Contract.RegisterSigner(&_EspressoTEEVerifier.TransactOpts, attestation, data, teeType) -} +// 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 *EspressoTEEVerifierRoleGrantedIterator) 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(EspressoTEEVerifierRoleGranted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true -// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. -// -// Solidity: function renounceOwnership() returns() -func (_EspressoTEEVerifier *EspressoTEEVerifierTransactor) RenounceOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { - return _EspressoTEEVerifier.contract.Transact(opts, "renounceOwnership") -} + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(EspressoTEEVerifierRoleGranted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true -// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. -// -// Solidity: function renounceOwnership() returns() -func (_EspressoTEEVerifier *EspressoTEEVerifierSession) RenounceOwnership() (*types.Transaction, error) { - return _EspressoTEEVerifier.Contract.RenounceOwnership(&_EspressoTEEVerifier.TransactOpts) + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } } -// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. -// -// Solidity: function renounceOwnership() returns() -func (_EspressoTEEVerifier *EspressoTEEVerifierTransactorSession) RenounceOwnership() (*types.Transaction, error) { - return _EspressoTEEVerifier.Contract.RenounceOwnership(&_EspressoTEEVerifier.TransactOpts) +// Error returns any retrieval or parsing error occurred during filtering. +func (it *EspressoTEEVerifierRoleGrantedIterator) Error() error { + return it.fail } -// SetEspressoNitroTEEVerifier is a paid mutator transaction binding the contract method 0x330282f5. -// -// Solidity: function setEspressoNitroTEEVerifier(address _espressoNitroTEEVerifier) returns() -func (_EspressoTEEVerifier *EspressoTEEVerifierTransactor) SetEspressoNitroTEEVerifier(opts *bind.TransactOpts, _espressoNitroTEEVerifier common.Address) (*types.Transaction, error) { - return _EspressoTEEVerifier.contract.Transact(opts, "setEspressoNitroTEEVerifier", _espressoNitroTEEVerifier) +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EspressoTEEVerifierRoleGrantedIterator) Close() error { + it.sub.Unsubscribe() + return nil } -// SetEspressoNitroTEEVerifier is a paid mutator transaction binding the contract method 0x330282f5. -// -// Solidity: function setEspressoNitroTEEVerifier(address _espressoNitroTEEVerifier) returns() -func (_EspressoTEEVerifier *EspressoTEEVerifierSession) SetEspressoNitroTEEVerifier(_espressoNitroTEEVerifier common.Address) (*types.Transaction, error) { - return _EspressoTEEVerifier.Contract.SetEspressoNitroTEEVerifier(&_EspressoTEEVerifier.TransactOpts, _espressoNitroTEEVerifier) +// EspressoTEEVerifierRoleGranted represents a RoleGranted event raised by the EspressoTEEVerifier contract. +type EspressoTEEVerifierRoleGranted struct { + Role [32]byte + Account common.Address + Sender common.Address + Raw types.Log // Blockchain specific contextual infos } -// SetEspressoNitroTEEVerifier is a paid mutator transaction binding the contract method 0x330282f5. +// FilterRoleGranted is a free log retrieval operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. // -// Solidity: function setEspressoNitroTEEVerifier(address _espressoNitroTEEVerifier) returns() -func (_EspressoTEEVerifier *EspressoTEEVerifierTransactorSession) SetEspressoNitroTEEVerifier(_espressoNitroTEEVerifier common.Address) (*types.Transaction, error) { - return _EspressoTEEVerifier.Contract.SetEspressoNitroTEEVerifier(&_EspressoTEEVerifier.TransactOpts, _espressoNitroTEEVerifier) -} +// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) +func (_EspressoTEEVerifier *EspressoTEEVerifierFilterer) FilterRoleGranted(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*EspressoTEEVerifierRoleGrantedIterator, error) { -// SetEspressoSGXTEEVerifier is a paid mutator transaction binding the contract method 0xbc3a0911. -// -// Solidity: function setEspressoSGXTEEVerifier(address _espressoSGXTEEVerifier) returns() -func (_EspressoTEEVerifier *EspressoTEEVerifierTransactor) SetEspressoSGXTEEVerifier(opts *bind.TransactOpts, _espressoSGXTEEVerifier common.Address) (*types.Transaction, error) { - return _EspressoTEEVerifier.contract.Transact(opts, "setEspressoSGXTEEVerifier", _espressoSGXTEEVerifier) -} + 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) + } -// SetEspressoSGXTEEVerifier is a paid mutator transaction binding the contract method 0xbc3a0911. -// -// Solidity: function setEspressoSGXTEEVerifier(address _espressoSGXTEEVerifier) returns() -func (_EspressoTEEVerifier *EspressoTEEVerifierSession) SetEspressoSGXTEEVerifier(_espressoSGXTEEVerifier common.Address) (*types.Transaction, error) { - return _EspressoTEEVerifier.Contract.SetEspressoSGXTEEVerifier(&_EspressoTEEVerifier.TransactOpts, _espressoSGXTEEVerifier) + logs, sub, err := _EspressoTEEVerifier.contract.FilterLogs(opts, "RoleGranted", roleRule, accountRule, senderRule) + if err != nil { + return nil, err + } + return &EspressoTEEVerifierRoleGrantedIterator{contract: _EspressoTEEVerifier.contract, event: "RoleGranted", logs: logs, sub: sub}, nil } -// SetEspressoSGXTEEVerifier is a paid mutator transaction binding the contract method 0xbc3a0911. +// WatchRoleGranted is a free log subscription operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. // -// Solidity: function setEspressoSGXTEEVerifier(address _espressoSGXTEEVerifier) returns() -func (_EspressoTEEVerifier *EspressoTEEVerifierTransactorSession) SetEspressoSGXTEEVerifier(_espressoSGXTEEVerifier common.Address) (*types.Transaction, error) { - return _EspressoTEEVerifier.Contract.SetEspressoSGXTEEVerifier(&_EspressoTEEVerifier.TransactOpts, _espressoSGXTEEVerifier) -} +// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) +func (_EspressoTEEVerifier *EspressoTEEVerifierFilterer) WatchRoleGranted(opts *bind.WatchOpts, sink chan<- *EspressoTEEVerifierRoleGranted, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) { -// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. -// -// Solidity: function transferOwnership(address newOwner) returns() -func (_EspressoTEEVerifier *EspressoTEEVerifierTransactor) TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) { - return _EspressoTEEVerifier.contract.Transact(opts, "transferOwnership", newOwner) -} + 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) + } -// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. -// -// Solidity: function transferOwnership(address newOwner) returns() -func (_EspressoTEEVerifier *EspressoTEEVerifierSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { - return _EspressoTEEVerifier.Contract.TransferOwnership(&_EspressoTEEVerifier.TransactOpts, newOwner) + logs, sub, err := _EspressoTEEVerifier.contract.WatchLogs(opts, "RoleGranted", 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(EspressoTEEVerifierRoleGranted) + if err := _EspressoTEEVerifier.contract.UnpackLog(event, "RoleGranted", 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 } -// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// ParseRoleGranted is a log parse operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. // -// Solidity: function transferOwnership(address newOwner) returns() -func (_EspressoTEEVerifier *EspressoTEEVerifierTransactorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { - return _EspressoTEEVerifier.Contract.TransferOwnership(&_EspressoTEEVerifier.TransactOpts, newOwner) +// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) +func (_EspressoTEEVerifier *EspressoTEEVerifierFilterer) ParseRoleGranted(log types.Log) (*EspressoTEEVerifierRoleGranted, error) { + event := new(EspressoTEEVerifierRoleGranted) + if err := _EspressoTEEVerifier.contract.UnpackLog(event, "RoleGranted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil } -// EspressoTEEVerifierOwnershipTransferStartedIterator is returned from FilterOwnershipTransferStarted and is used to iterate over the raw logs and unpacked data for OwnershipTransferStarted events raised by the EspressoTEEVerifier contract. -type EspressoTEEVerifierOwnershipTransferStartedIterator struct { - Event *EspressoTEEVerifierOwnershipTransferStarted // Event containing the contract specifics and raw log +// EspressoTEEVerifierRoleRevokedIterator is returned from FilterRoleRevoked and is used to iterate over the raw logs and unpacked data for RoleRevoked events raised by the EspressoTEEVerifier contract. +type EspressoTEEVerifierRoleRevokedIterator struct { + Event *EspressoTEEVerifierRoleRevoked // 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 @@ -559,7 +2194,7 @@ type EspressoTEEVerifierOwnershipTransferStartedIterator struct { // 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 *EspressoTEEVerifierOwnershipTransferStartedIterator) Next() bool { +func (it *EspressoTEEVerifierRoleRevokedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -568,7 +2203,7 @@ func (it *EspressoTEEVerifierOwnershipTransferStartedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(EspressoTEEVerifierOwnershipTransferStarted) + it.Event = new(EspressoTEEVerifierRoleRevoked) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -583,7 +2218,7 @@ func (it *EspressoTEEVerifierOwnershipTransferStartedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(EspressoTEEVerifierOwnershipTransferStarted) + it.Event = new(EspressoTEEVerifierRoleRevoked) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -599,60 +2234,69 @@ func (it *EspressoTEEVerifierOwnershipTransferStartedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *EspressoTEEVerifierOwnershipTransferStartedIterator) Error() error { +func (it *EspressoTEEVerifierRoleRevokedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *EspressoTEEVerifierOwnershipTransferStartedIterator) Close() error { +func (it *EspressoTEEVerifierRoleRevokedIterator) Close() error { it.sub.Unsubscribe() return nil } -// EspressoTEEVerifierOwnershipTransferStarted represents a OwnershipTransferStarted event raised by the EspressoTEEVerifier contract. -type EspressoTEEVerifierOwnershipTransferStarted struct { - PreviousOwner common.Address - NewOwner common.Address - Raw types.Log // Blockchain specific contextual infos +// EspressoTEEVerifierRoleRevoked represents a RoleRevoked event raised by the EspressoTEEVerifier contract. +type EspressoTEEVerifierRoleRevoked struct { + Role [32]byte + Account common.Address + Sender common.Address + Raw types.Log // Blockchain specific contextual infos } -// FilterOwnershipTransferStarted is a free log retrieval operation binding the contract event 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700. +// FilterRoleRevoked is a free log retrieval operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. // -// Solidity: event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner) -func (_EspressoTEEVerifier *EspressoTEEVerifierFilterer) FilterOwnershipTransferStarted(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*EspressoTEEVerifierOwnershipTransferStartedIterator, error) { +// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) +func (_EspressoTEEVerifier *EspressoTEEVerifierFilterer) FilterRoleRevoked(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*EspressoTEEVerifierRoleRevokedIterator, error) { - var previousOwnerRule []interface{} - for _, previousOwnerItem := range previousOwner { - previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) } - var newOwnerRule []interface{} - for _, newOwnerItem := range newOwner { - newOwnerRule = append(newOwnerRule, newOwnerItem) + 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 := _EspressoTEEVerifier.contract.FilterLogs(opts, "OwnershipTransferStarted", previousOwnerRule, newOwnerRule) + logs, sub, err := _EspressoTEEVerifier.contract.FilterLogs(opts, "RoleRevoked", roleRule, accountRule, senderRule) if err != nil { return nil, err } - return &EspressoTEEVerifierOwnershipTransferStartedIterator{contract: _EspressoTEEVerifier.contract, event: "OwnershipTransferStarted", logs: logs, sub: sub}, nil + return &EspressoTEEVerifierRoleRevokedIterator{contract: _EspressoTEEVerifier.contract, event: "RoleRevoked", logs: logs, sub: sub}, nil } -// WatchOwnershipTransferStarted is a free log subscription operation binding the contract event 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700. +// WatchRoleRevoked is a free log subscription operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. // -// Solidity: event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner) -func (_EspressoTEEVerifier *EspressoTEEVerifierFilterer) WatchOwnershipTransferStarted(opts *bind.WatchOpts, sink chan<- *EspressoTEEVerifierOwnershipTransferStarted, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { +// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) +func (_EspressoTEEVerifier *EspressoTEEVerifierFilterer) WatchRoleRevoked(opts *bind.WatchOpts, sink chan<- *EspressoTEEVerifierRoleRevoked, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) { - var previousOwnerRule []interface{} - for _, previousOwnerItem := range previousOwner { - previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) } - var newOwnerRule []interface{} - for _, newOwnerItem := range newOwner { - newOwnerRule = append(newOwnerRule, newOwnerItem) + 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 := _EspressoTEEVerifier.contract.WatchLogs(opts, "OwnershipTransferStarted", previousOwnerRule, newOwnerRule) + logs, sub, err := _EspressoTEEVerifier.contract.WatchLogs(opts, "RoleRevoked", roleRule, accountRule, senderRule) if err != nil { return nil, err } @@ -662,8 +2306,8 @@ func (_EspressoTEEVerifier *EspressoTEEVerifierFilterer) WatchOwnershipTransferS select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(EspressoTEEVerifierOwnershipTransferStarted) - if err := _EspressoTEEVerifier.contract.UnpackLog(event, "OwnershipTransferStarted", log); err != nil { + event := new(EspressoTEEVerifierRoleRevoked) + if err := _EspressoTEEVerifier.contract.UnpackLog(event, "RoleRevoked", log); err != nil { return err } event.Raw = log @@ -684,21 +2328,21 @@ func (_EspressoTEEVerifier *EspressoTEEVerifierFilterer) WatchOwnershipTransferS }), nil } -// ParseOwnershipTransferStarted is a log parse operation binding the contract event 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700. +// ParseRoleRevoked is a log parse operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. // -// Solidity: event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner) -func (_EspressoTEEVerifier *EspressoTEEVerifierFilterer) ParseOwnershipTransferStarted(log types.Log) (*EspressoTEEVerifierOwnershipTransferStarted, error) { - event := new(EspressoTEEVerifierOwnershipTransferStarted) - if err := _EspressoTEEVerifier.contract.UnpackLog(event, "OwnershipTransferStarted", log); err != nil { +// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) +func (_EspressoTEEVerifier *EspressoTEEVerifierFilterer) ParseRoleRevoked(log types.Log) (*EspressoTEEVerifierRoleRevoked, error) { + event := new(EspressoTEEVerifierRoleRevoked) + if err := _EspressoTEEVerifier.contract.UnpackLog(event, "RoleRevoked", log); err != nil { return nil, err } event.Raw = log return event, nil } -// EspressoTEEVerifierOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the EspressoTEEVerifier contract. -type EspressoTEEVerifierOwnershipTransferredIterator struct { - Event *EspressoTEEVerifierOwnershipTransferred // Event containing the contract specifics and raw log +// EspressoTEEVerifierUpgradedIterator is returned from FilterUpgraded and is used to iterate over the raw logs and unpacked data for Upgraded events raised by the EspressoTEEVerifier contract. +type EspressoTEEVerifierUpgradedIterator struct { + Event *EspressoTEEVerifierUpgraded // 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 @@ -712,7 +2356,7 @@ type EspressoTEEVerifierOwnershipTransferredIterator struct { // 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 *EspressoTEEVerifierOwnershipTransferredIterator) Next() bool { +func (it *EspressoTEEVerifierUpgradedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -721,7 +2365,7 @@ func (it *EspressoTEEVerifierOwnershipTransferredIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(EspressoTEEVerifierOwnershipTransferred) + it.Event = new(EspressoTEEVerifierUpgraded) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -736,7 +2380,7 @@ func (it *EspressoTEEVerifierOwnershipTransferredIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(EspressoTEEVerifierOwnershipTransferred) + it.Event = new(EspressoTEEVerifierUpgraded) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -752,60 +2396,51 @@ func (it *EspressoTEEVerifierOwnershipTransferredIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *EspressoTEEVerifierOwnershipTransferredIterator) Error() error { +func (it *EspressoTEEVerifierUpgradedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *EspressoTEEVerifierOwnershipTransferredIterator) Close() error { +func (it *EspressoTEEVerifierUpgradedIterator) Close() error { it.sub.Unsubscribe() return nil } -// EspressoTEEVerifierOwnershipTransferred represents a OwnershipTransferred event raised by the EspressoTEEVerifier contract. -type EspressoTEEVerifierOwnershipTransferred struct { - PreviousOwner common.Address - NewOwner common.Address - Raw types.Log // Blockchain specific contextual infos +// EspressoTEEVerifierUpgraded represents a Upgraded event raised by the EspressoTEEVerifier contract. +type EspressoTEEVerifierUpgraded struct { + Implementation common.Address + Raw types.Log // Blockchain specific contextual infos } -// FilterOwnershipTransferred is a free log retrieval operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// FilterUpgraded is a free log retrieval operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. // -// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) -func (_EspressoTEEVerifier *EspressoTEEVerifierFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*EspressoTEEVerifierOwnershipTransferredIterator, error) { +// Solidity: event Upgraded(address indexed implementation) +func (_EspressoTEEVerifier *EspressoTEEVerifierFilterer) FilterUpgraded(opts *bind.FilterOpts, implementation []common.Address) (*EspressoTEEVerifierUpgradedIterator, error) { - var previousOwnerRule []interface{} - for _, previousOwnerItem := range previousOwner { - previousOwnerRule = append(previousOwnerRule, previousOwnerItem) - } - var newOwnerRule []interface{} - for _, newOwnerItem := range newOwner { - newOwnerRule = append(newOwnerRule, newOwnerItem) + var implementationRule []interface{} + for _, implementationItem := range implementation { + implementationRule = append(implementationRule, implementationItem) } - logs, sub, err := _EspressoTEEVerifier.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + logs, sub, err := _EspressoTEEVerifier.contract.FilterLogs(opts, "Upgraded", implementationRule) if err != nil { return nil, err } - return &EspressoTEEVerifierOwnershipTransferredIterator{contract: _EspressoTEEVerifier.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil + return &EspressoTEEVerifierUpgradedIterator{contract: _EspressoTEEVerifier.contract, event: "Upgraded", logs: logs, sub: sub}, nil } -// WatchOwnershipTransferred is a free log subscription operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// WatchUpgraded is a free log subscription operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. // -// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) -func (_EspressoTEEVerifier *EspressoTEEVerifierFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *EspressoTEEVerifierOwnershipTransferred, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { +// Solidity: event Upgraded(address indexed implementation) +func (_EspressoTEEVerifier *EspressoTEEVerifierFilterer) WatchUpgraded(opts *bind.WatchOpts, sink chan<- *EspressoTEEVerifierUpgraded, implementation []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) + var implementationRule []interface{} + for _, implementationItem := range implementation { + implementationRule = append(implementationRule, implementationItem) } - logs, sub, err := _EspressoTEEVerifier.contract.WatchLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + logs, sub, err := _EspressoTEEVerifier.contract.WatchLogs(opts, "Upgraded", implementationRule) if err != nil { return nil, err } @@ -815,8 +2450,8 @@ func (_EspressoTEEVerifier *EspressoTEEVerifierFilterer) WatchOwnershipTransferr select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(EspressoTEEVerifierOwnershipTransferred) - if err := _EspressoTEEVerifier.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + event := new(EspressoTEEVerifierUpgraded) + if err := _EspressoTEEVerifier.contract.UnpackLog(event, "Upgraded", log); err != nil { return err } event.Raw = log @@ -837,12 +2472,12 @@ func (_EspressoTEEVerifier *EspressoTEEVerifierFilterer) WatchOwnershipTransferr }), nil } -// ParseOwnershipTransferred is a log parse operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// ParseUpgraded is a log parse operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. // -// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) -func (_EspressoTEEVerifier *EspressoTEEVerifierFilterer) ParseOwnershipTransferred(log types.Log) (*EspressoTEEVerifierOwnershipTransferred, error) { - event := new(EspressoTEEVerifierOwnershipTransferred) - if err := _EspressoTEEVerifier.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { +// Solidity: event Upgraded(address indexed implementation) +func (_EspressoTEEVerifier *EspressoTEEVerifierFilterer) ParseUpgraded(log types.Log) (*EspressoTEEVerifierUpgraded, error) { + event := new(EspressoTEEVerifierUpgraded) + if err := _EspressoTEEVerifier.contract.UnpackLog(event, "Upgraded", log); err != nil { return nil, err } event.Raw = log diff --git a/op-batcher/enclave-tools/enclave-tools.go b/op-batcher/enclave-tools/enclave-tools.go index 6eecefbeb27..b78d11764a1 100644 --- a/op-batcher/enclave-tools/enclave-tools.go +++ b/op-batcher/enclave-tools/enclave-tools.go @@ -95,7 +95,15 @@ func RegisterEnclaveHash(ctx context.Context, authenticatorAddress common.Addres if err != nil { return fmt.Errorf("failed to create transactor: %w", err) } - registrationTx, err := nitroVerifier.SetEnclaveHash(opts, crypto.Keccak256Hash(pcr0Bytes), true) + + // Convert hash to [32]byte for the contract call + var enclaveHash [32]byte + copy(enclaveHash[:], crypto.Keccak256(pcr0Bytes)) + + // ServiceType.BatchPoster = 0 + const serviceTypeBatchPoster uint8 = 0 + + registrationTx, err := nitroVerifier.SetEnclaveHash(opts, enclaveHash, true, serviceTypeBatchPoster) if err != nil { return fmt.Errorf("failed to create registration transaction: %w", err) } diff --git a/packages/contracts-bedrock/foundry.toml b/packages/contracts-bedrock/foundry.toml index f70f5566783..a7d9904b55b 100644 --- a/packages/contracts-bedrock/foundry.toml +++ b/packages/contracts-bedrock/foundry.toml @@ -35,12 +35,13 @@ ast = true evm_version = 'cancun' remappings = [ + 'lib/espresso-tee-contracts/:@openzeppelin/contracts-upgradeable/=lib/espresso-tee-contracts/lib/openzeppelin-contracts-upgradeable/contracts', + 'lib/espresso-tee-contracts/:@openzeppelin/contracts/=lib/espresso-tee-contracts/lib/openzeppelin-contracts/contracts', + 'lib/espresso-tee-contracts/:solady/=lib/solady/src', '@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts', '@espresso-tee-contracts/=lib/espresso-tee-contracts/src', '@nitro-validator/=lib/espresso-tee-contracts/lib/nitro-validator/src', 'aws-nitro-enclave-attestation/=lib/espresso-tee-contracts/lib/aws-nitro-enclave-attestation/contracts/src', - 'lib/espresso-tee-contracts/:@openzeppelin/contracts/=lib/espresso-tee-contracts/lib/openzeppelin-contracts/contracts', - 'lib/espresso-tee-contracts/:solady/=lib/solady/src', '@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts', '@openzeppelin/contracts-v5/=lib/openzeppelin-contracts-v5/contracts', '@rari-capital/solmate/=lib/solmate', diff --git a/packages/contracts-bedrock/interfaces/L1/IBatchAuthenticator.sol b/packages/contracts-bedrock/interfaces/L1/IBatchAuthenticator.sol index b23f92a3480..d0292005c20 100644 --- a/packages/contracts-bedrock/interfaces/L1/IBatchAuthenticator.sol +++ b/packages/contracts-bedrock/interfaces/L1/IBatchAuthenticator.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity ^0.8.22; interface IBatchAuthenticator { event Initialized(uint8 version); @@ -42,10 +42,23 @@ interface IBatchAuthenticator { function switchBatcher() external; - function __constructor__( + function initialize( address _espressoTEEVerifier, address _teeBatcher, address _nonTeeBatcher, address _owner ) external; + + function validateBatch(address sender, bytes calldata data) external view; + + // Guardian functions + function addGuardian(address guardian) external; + + function removeGuardian(address guardian) external; + + function isGuardian(address account) external view returns (bool); + + function getGuardians() external view returns (address[] memory); + + function guardianCount() external view returns (uint256); } diff --git a/packages/contracts-bedrock/interfaces/L1/IBatchInbox.sol b/packages/contracts-bedrock/interfaces/L1/IBatchInbox.sol index 4dc60a997e7..7b1387f50bb 100644 --- a/packages/contracts-bedrock/interfaces/L1/IBatchInbox.sol +++ b/packages/contracts-bedrock/interfaces/L1/IBatchInbox.sol @@ -1,10 +1,13 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; +/// @title IBatchInbox +/// @notice Interface for the BatchInbox contract. +/// @dev Note: This contract intentionally has no public/external view functions to ensure +/// ALL calls route to the fallback function. This prevents function selector collisions +/// that could bypass batch authentication. interface IBatchInbox { fallback() external; - function version() external view returns (string memory); - - function __constructor__(address _batchAuthenticator, address _owner) external; + function __constructor__(address batchAuthenticator_) external; } diff --git a/packages/contracts-bedrock/lib/espresso-tee-contracts b/packages/contracts-bedrock/lib/espresso-tee-contracts index 0d73791be5d..e312610f762 160000 --- a/packages/contracts-bedrock/lib/espresso-tee-contracts +++ b/packages/contracts-bedrock/lib/espresso-tee-contracts @@ -1 +1 @@ -Subproject commit 0d73791be5d5fc3549e7771a1aeee9939c56762e +Subproject commit e312610f762b2b1cffd720dc897bb3d62f1efddd diff --git a/packages/contracts-bedrock/scripts/deploy/DeployAWSNitroVerifier.s.sol b/packages/contracts-bedrock/scripts/deploy/DeployAWSNitroVerifier.s.sol index f396dbd6c19..ea150274080 100644 --- a/packages/contracts-bedrock/scripts/deploy/DeployAWSNitroVerifier.s.sol +++ b/packages/contracts-bedrock/scripts/deploy/DeployAWSNitroVerifier.s.sol @@ -8,11 +8,13 @@ import { Script } from "forge-std/Script.sol"; import { Solarray } from "scripts/libraries/Solarray.sol"; import { DeployUtils } from "scripts/libraries/DeployUtils.sol"; import { INitroEnclaveVerifier } from "aws-nitro-enclave-attestation/interfaces/INitroEnclaveVerifier.sol"; +import { ERC1967Proxy } from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; +import { ServiceType } from "@espresso-tee-contracts/types/Types.sol"; contract MockEspressoNitroTEEVerifier is IEspressoNitroTEEVerifier { constructor() { } - function registeredSigners(address signer) external pure override returns (bool) { + function isSignerValid(address signer, ServiceType) external pure override returns (bool) { // Added this special condition for test TestE2eDevnetWithUnattestedBatcherKey if (signer == address(0xe16d5c4080C0faD6D2Ef4eb07C657674a217271C)) { return false; @@ -20,15 +22,25 @@ contract MockEspressoNitroTEEVerifier is IEspressoNitroTEEVerifier { return true; } - function registeredEnclaveHash(bytes32) external pure override returns (bool) { + function registeredEnclaveHash(bytes32, ServiceType) external pure override returns (bool) { return true; } - function registerSigner(bytes calldata, bytes calldata) external override { } + function registerService(bytes calldata, bytes calldata, ServiceType) external override { } - function setEnclaveHash(bytes32, bool) external override { } + function setEnclaveHash(bytes32, bool, ServiceType) external override { } - function deleteRegisteredSigners(address[] memory) external override { } + function deleteEnclaveHashes(bytes32[] memory, ServiceType) external override { } + + function setNitroEnclaveVerifier(address) external override { } + + function nitroEnclaveVerifier() external pure override returns (INitroEnclaveVerifier) { + return INitroEnclaveVerifier(address(0)); + } + + function teeVerifier() external pure override returns (address) { + return address(0); + } } contract DeployAWSNitroVerifierInput is BaseDeployIO { @@ -88,19 +100,36 @@ contract DeployAWSNitroVerifier is Script { public returns (IEspressoNitroTEEVerifier) { - vm.broadcast(msg.sender); - bytes32 enclaveHash = input.enclaveHash(); address nitroEnclaveVerifier = input.nitroEnclaveVerifier(); - IEspressoNitroTEEVerifier impl; + IEspressoNitroTEEVerifier proxyAddr; if (nitroEnclaveVerifier == address(0)) { - impl = new MockEspressoNitroTEEVerifier(); + // Deploy mock without proxy for testing + vm.broadcast(msg.sender); + proxyAddr = new MockEspressoNitroTEEVerifier(); + vm.label(address(proxyAddr), "MockNitroTEEVerifier"); } else { - impl = new EspressoNitroTEEVerifier(enclaveHash, INitroEnclaveVerifier(nitroEnclaveVerifier)); + // Deploy implementation + vm.broadcast(msg.sender); + EspressoNitroTEEVerifier impl = new EspressoNitroTEEVerifier(); + vm.label(address(impl), "NitroTEEVerifierImpl"); + + // Prepare initialization data + bytes memory initData = abi.encodeWithSelector( + EspressoNitroTEEVerifier.initialize.selector, + INitroEnclaveVerifier(nitroEnclaveVerifier), + msg.sender // initial owner + ); + + // Deploy proxy + vm.broadcast(msg.sender); + ERC1967Proxy proxy = new ERC1967Proxy(address(impl), initData); + vm.label(address(proxy), "NitroTEEVerifierProxy"); + proxyAddr = IEspressoNitroTEEVerifier(address(proxy)); } - vm.label(address(impl), "NitroTEEVerifierImpl"); - output.set(output.nitroTEEVerifierAddress.selector, address(impl)); - return impl; + + output.set(output.nitroTEEVerifierAddress.selector, address(proxyAddr)); + return proxyAddr; } function checkOutput(DeployAWSNitroVerifierOutput output) public view { diff --git a/packages/contracts-bedrock/scripts/deploy/DeployEspresso.s.sol b/packages/contracts-bedrock/scripts/deploy/DeployEspresso.s.sol index 0e13b72cbe2..0be6c08bd22 100644 --- a/packages/contracts-bedrock/scripts/deploy/DeployEspresso.s.sol +++ b/packages/contracts-bedrock/scripts/deploy/DeployEspresso.s.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.22; +pragma solidity ^0.8.22; import { BaseDeployIO } from "scripts/deploy/BaseDeployIO.sol"; import { IBatchInbox } from "interfaces/L1/IBatchInbox.sol"; @@ -7,10 +7,12 @@ import { Script } from "forge-std/Script.sol"; import { DeployUtils } from "scripts/libraries/DeployUtils.sol"; import { Solarray } from "scripts/libraries/Solarray.sol"; import { IBatchAuthenticator } from "interfaces/L1/IBatchAuthenticator.sol"; +import { BatchAuthenticator } from "src/L1/BatchAuthenticator.sol"; import { IEspressoNitroTEEVerifier } from "@espresso-tee-contracts/interface/IEspressoNitroTEEVerifier.sol"; import { IEspressoSGXTEEVerifier } from "@espresso-tee-contracts/interface/IEspressoSGXTEEVerifier.sol"; import { IEspressoTEEVerifier } from "@espresso-tee-contracts/interface/IEspressoTEEVerifier.sol"; import { EspressoTEEVerifier } from "@espresso-tee-contracts/EspressoTEEVerifier.sol"; +import { ERC1967Proxy } from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; import { console2 as console } from "forge-std/console2.sol"; contract DeployEspressoInput is BaseDeployIO { @@ -84,7 +86,7 @@ contract DeployEspresso is Script { function run(DeployEspressoInput input, DeployEspressoOutput output, address deployerAddress) public { IEspressoTEEVerifier teeVerifier = deployTEEVerifier(input); IBatchAuthenticator batchAuthenticator = deployBatchAuthenticator(input, output, teeVerifier, deployerAddress); - deployBatchInbox(input, output, batchAuthenticator, deployerAddress); + deployBatchInbox(input, output, batchAuthenticator); checkOutput(output); } @@ -97,43 +99,53 @@ contract DeployEspresso is Script { public returns (IBatchAuthenticator) { - bytes32 salt = input.salt(); + // Deploy implementation vm.broadcast(msg.sender); - IBatchAuthenticator impl = IBatchAuthenticator( - DeployUtils.create2({ - _name: "BatchAuthenticator", - _salt: salt, - _args: DeployUtils.encodeConstructor( - abi.encodeCall( - IBatchAuthenticator.__constructor__, - (address(teeVerifier), input.teeBatcher(), input.nonTeeBatcher(), owner) - ) - ) - }) - ); + BatchAuthenticator impl = new BatchAuthenticator(); vm.label(address(impl), "BatchAuthenticatorImpl"); - output.set(output.batchAuthenticatorAddress.selector, address(impl)); - return impl; + // Prepare initialization data + bytes memory initData = abi.encodeWithSelector( + BatchAuthenticator.initialize.selector, teeVerifier, input.teeBatcher(), input.nonTeeBatcher(), owner + ); + + // Deploy proxy + vm.broadcast(msg.sender); + ERC1967Proxy proxy = new ERC1967Proxy(address(impl), initData); + vm.label(address(proxy), "BatchAuthenticatorProxy"); + + output.set(output.batchAuthenticatorAddress.selector, address(proxy)); + return IBatchAuthenticator(address(proxy)); } function deployTEEVerifier(DeployEspressoInput input) public returns (IEspressoTEEVerifier) { IEspressoNitroTEEVerifier nitroTEEVerifier = IEspressoNitroTEEVerifier(input.nitroTEEVerifier()); + + // Deploy implementation vm.broadcast(msg.sender); - IEspressoTEEVerifier impl = new EspressoTEEVerifier( - // SGX TEE verifier is not yet implemented - IEspressoSGXTEEVerifier(address(0)), - nitroTEEVerifier - ); + EspressoTEEVerifier impl = new EspressoTEEVerifier(); vm.label(address(impl), "EspressoTEEVerifierImpl"); - return impl; + + // Prepare initialization data + bytes memory initData = abi.encodeWithSelector( + EspressoTEEVerifier.initialize.selector, + IEspressoSGXTEEVerifier(address(0)), // SGX TEE verifier not yet implemented + nitroTEEVerifier, + msg.sender // initial owner + ); + + // Deploy proxy + vm.broadcast(msg.sender); + ERC1967Proxy proxy = new ERC1967Proxy(address(impl), initData); + vm.label(address(proxy), "EspressoTEEVerifierProxy"); + + return IEspressoTEEVerifier(address(proxy)); } function deployBatchInbox( DeployEspressoInput input, DeployEspressoOutput output, - IBatchAuthenticator batchAuthenticator, - address owner + IBatchAuthenticator batchAuthenticator ) public { @@ -144,7 +156,7 @@ contract DeployEspresso is Script { _name: "BatchInbox", _salt: salt, _args: DeployUtils.encodeConstructor( - abi.encodeCall(IBatchInbox.__constructor__, (address(batchAuthenticator), owner)) + abi.encodeCall(IBatchInbox.__constructor__, (address(batchAuthenticator))) ) }) ); diff --git a/packages/contracts-bedrock/src/L1/BatchAuthenticator.sol b/packages/contracts-bedrock/src/L1/BatchAuthenticator.sol index cd08d05b19d..b51a6a73906 100644 --- a/packages/contracts-bedrock/src/L1/BatchAuthenticator.sol +++ b/packages/contracts-bedrock/src/L1/BatchAuthenticator.sol @@ -1,12 +1,14 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity ^0.8.22; import { ECDSA } from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; -import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol"; +import { Strings } from "@openzeppelin/contracts/utils/Strings.sol"; +import { OwnableWithGuardiansUpgradeable } from "@espresso-tee-contracts/OwnableWithGuardiansUpgradeable.sol"; import { ISemver } from "interfaces/universal/ISemver.sol"; import { IEspressoTEEVerifier } from "@espresso-tee-contracts/interface/IEspressoTEEVerifier.sol"; +import { ServiceType } from "@espresso-tee-contracts/types/Types.sol"; -contract BatchAuthenticator is ISemver, Ownable { +contract BatchAuthenticator is ISemver, OwnableWithGuardiansUpgradeable { /// @notice Semantic version. /// @custom:semver 1.0.0 string public constant version = "1.0.0"; @@ -21,41 +23,122 @@ contract BatchAuthenticator is ISemver, Ownable { mapping(bytes32 => bool) public validBatchInfo; /// @notice Address of the TEE batcher whose signatures may authenticate batches. - address public immutable teeBatcher; + address public teeBatcher; /// @notice Address of the non-TEE (fallback) batcher that can post when TEE is inactive. - address public immutable nonTeeBatcher; + address public nonTeeBatcher; - IEspressoTEEVerifier public immutable espressoTEEVerifier; + IEspressoTEEVerifier public espressoTEEVerifier; /// @notice Flag indicating which batcher is currently active. /// @dev When true the TEE batcher is active; when false the non-TEE batcher is active. bool public activeIsTee; - constructor( + /// @custom:oz-upgrades-unsafe-allow constructor + constructor() { + _disableInitializers(); + } + + /// @notice Initializes the contract with verifier addresses and initial owner + /// @param _espressoTEEVerifier The Espresso TEE verifier contract address + /// @param _teeBatcher The TEE batcher address + /// @param _nonTeeBatcher The non-TEE fallback batcher address + /// @param _owner The initial owner address + function initialize( IEspressoTEEVerifier _espressoTEEVerifier, address _teeBatcher, address _nonTeeBatcher, address _owner ) - Ownable() + public + initializer { require(_teeBatcher != address(0), "BatchAuthenticator: zero tee batcher"); require(_nonTeeBatcher != address(0), "BatchAuthenticator: zero non-tee batcher"); + __OwnableWithGuardians_init(_owner); + espressoTEEVerifier = _espressoTEEVerifier; teeBatcher = _teeBatcher; nonTeeBatcher = _nonTeeBatcher; // By default, start with the TEE batcher active. activeIsTee = true; - _transferOwnership(_owner); } /// @notice Toggles the active batcher between the TEE and non-TEE batcher. - function switchBatcher() external onlyOwner { + /// @dev Can be called by either the owner or a guardian for emergency response. + function switchBatcher() external onlyGuardianOrOwner { activeIsTee = !activeIsTee; } + /// @notice Validates a batch submission from the BatchInbox. + /// @dev Routes to the appropriate validation function based on activeIsTee. + /// @param sender The address that sent the batch to BatchInbox. + /// @param data The calldata of the original batch submission. + function validateBatch(address sender, bytes calldata data) external view { + if (activeIsTee) { + _validateTeeBatch(sender, data); + } else { + _validateNonTeeBatch(sender); + } + } + + /// @notice Validates a TEE batch submission. + /// @dev Checks that the sender is the TEE batcher and that the batch commitment + /// has been pre-authenticated via authenticateBatchInfo(). + /// Note: blobhash() works here because it returns blob hashes for the current + /// transaction, regardless of call depth. + /// @param sender The address that sent the batch to BatchInbox. + /// @param data The calldata of the original batch submission. + function _validateTeeBatch(address sender, bytes calldata data) internal view { + require( + sender == teeBatcher, + string( + abi.encodePacked( + "BatchAuthenticator: batcher not authorized to post in TEE mode. Expected: ", + Strings.toHexString(uint160(teeBatcher), 20), + ", Actual: ", + Strings.toHexString(uint160(sender), 20) + ) + ) + ); + + bytes32 hash; + if (blobhash(0) != 0) { + // Blob batch: hash all blob hashes together + bytes memory concatenatedHashes = new bytes(0); + uint256 i = 0; + while (blobhash(i) != 0) { + concatenatedHashes = bytes.concat(concatenatedHashes, blobhash(i)); + i++; + } + hash = keccak256(concatenatedHashes); + require(validBatchInfo[hash], "BatchAuthenticator: invalid blob batch"); + } else { + // Calldata batch: hash the calldata + hash = keccak256(data); + require(validBatchInfo[hash], "BatchAuthenticator: invalid calldata batch"); + } + } + + /// @notice Validates a non-TEE (fallback) batch submission. + /// @dev Only checks that the sender is the non-TEE batcher. No batch content + /// validation is performed in fallback mode. + /// @param sender The address that sent the batch to BatchInbox. + function _validateNonTeeBatch(address sender) internal view { + require( + sender == nonTeeBatcher, + string( + abi.encodePacked( + "BatchAuthenticator: batcher not authorized to post in fallback mode. Expected: ", + Strings.toHexString(uint160(nonTeeBatcher), 20), + ", Actual: ", + Strings.toHexString(uint160(sender), 20) + ) + ) + ); + } + function authenticateBatchInfo(bytes32 commitment, bytes calldata _signature) external { // https://github.com/ethereum/go-ethereum/issues/19751#issuecomment-504900739 bytes memory signature = _signature; @@ -70,7 +153,7 @@ contract BatchAuthenticator is ISemver, Ownable { require(signer != address(0), "BatchAuthenticator: invalid signature"); require( - espressoTEEVerifier.espressoNitroTEEVerifier().registeredSigners(signer), + espressoTEEVerifier.espressoNitroTEEVerifier().isSignerValid(signer, ServiceType.BatchPoster), "BatchAuthenticator: invalid signer" ); @@ -79,7 +162,9 @@ contract BatchAuthenticator is ISemver, Ownable { } function registerSigner(bytes calldata attestationTbs, bytes calldata signature) external { - espressoTEEVerifier.registerSigner(attestationTbs, signature, IEspressoTEEVerifier.TeeType.NITRO); + espressoTEEVerifier.registerService( + attestationTbs, signature, IEspressoTEEVerifier.TeeType.NITRO, ServiceType.BatchPoster + ); emit SignerRegistrationInitiated(msg.sender); } } diff --git a/packages/contracts-bedrock/src/L1/BatchInbox.sol b/packages/contracts-bedrock/src/L1/BatchInbox.sol index 613de19aef2..ac858dbaf38 100644 --- a/packages/contracts-bedrock/src/L1/BatchInbox.sol +++ b/packages/contracts-bedrock/src/L1/BatchInbox.sol @@ -1,76 +1,31 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.24; -import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol"; -import { Strings } from "@openzeppelin/contracts/utils/Strings.sol"; import { IBatchAuthenticator } from "interfaces/L1/IBatchAuthenticator.sol"; /// @title BatchInbox -/// @notice Receives batches from either a TEE batcher or a non-TEE batcher and enforces -/// that TEE batches are authenticated by the configured batch authenticator. -contract BatchInbox is Ownable { - /// @notice Contract responsible for authenticating TEE batch commitments. - IBatchAuthenticator public immutable batchAuthenticator; +/// @notice Receives batches from either a TEE batcher or a non-TEE batcher and delegates +/// validation to the BatchAuthenticator contract. +/// @dev This contract intentionally has no public/external functions to ensure ALL calls +/// route to the fallback function. This prevents function selector collisions that +/// could bypass batch authentication. The batchAuthenticator address can be read +/// directly from storage slot 0 if needed. +contract BatchInbox { + /// @notice Contract responsible for validating batch submissions. + /// @dev Internal to prevent function selector collision with fallback. + /// Can be read externally via storage slot 0. + IBatchAuthenticator internal immutable _batchAuthenticator; /// @notice Initializes the contract with the batch authenticator. - /// @param _batchAuthenticator Address of the batch authenticator contract. - constructor(IBatchAuthenticator _batchAuthenticator, address _owner) Ownable() { - batchAuthenticator = _batchAuthenticator; - _transferOwnership(_owner); + /// @param batchAuthenticator_ Address of the batch authenticator contract. + constructor(IBatchAuthenticator batchAuthenticator_) { + _batchAuthenticator = batchAuthenticator_; } /// @notice Fallback entry point for batch submissions. - /// @dev Enforces that the caller matches the currently active batcher and, when - /// the TEE batcher is active, that the batch commitment is approved by - /// the batch authenticator. For non-TEE batches, only the caller check - /// is enforced. + /// @dev Delegates all validation logic to BatchAuthenticator.validateBatch(). + /// This allows the validation logic to be upgraded via the BatchAuthenticator proxy. fallback() external { - // TEE batcher requires batch and address authentication - if (batchAuthenticator.activeIsTee()) { - if (msg.sender != batchAuthenticator.teeBatcher()) { - revert( - string( - abi.encodePacked( - "BatchInbox: batcher not authorized to post in TEE mode. Expected: ", - Strings.toHexString(uint160(batchAuthenticator.teeBatcher()), 20), - ", Actual: ", - Strings.toHexString(uint160(msg.sender), 20) - ) - ) - ); - } - - if (blobhash(0) != 0) { - bytes memory concatenatedHashes = new bytes(0); - uint256 currentBlob = 0; - while (blobhash(currentBlob) != 0) { - concatenatedHashes = bytes.concat(concatenatedHashes, blobhash(currentBlob)); - currentBlob++; - } - bytes32 hash = keccak256(concatenatedHashes); - if (!batchAuthenticator.validBatchInfo(hash)) { - revert("Invalid blob batch"); - } - } else { - bytes32 hash = keccak256(msg.data); - if (!batchAuthenticator.validBatchInfo(hash)) { - revert("Invalid calldata batch"); - } - } - } else { - // Fallback batcher requires only batcher address authentication - if (msg.sender != batchAuthenticator.nonTeeBatcher()) { - revert( - string( - abi.encodePacked( - "BatchInbox: batcher not authorized to post in fallback mode. Expected: ", - Strings.toHexString(uint160(batchAuthenticator.nonTeeBatcher()), 20), - ", Actual: ", - Strings.toHexString(uint160(msg.sender), 20) - ) - ) - ); - } - } + _batchAuthenticator.validateBatch(msg.sender, msg.data); } } diff --git a/packages/contracts-bedrock/test/L1/BatchAuthenticator.t.sol b/packages/contracts-bedrock/test/L1/BatchAuthenticator.t.sol index 57f432601d1..b09be92db9c 100644 --- a/packages/contracts-bedrock/test/L1/BatchAuthenticator.t.sol +++ b/packages/contracts-bedrock/test/L1/BatchAuthenticator.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity ^0.8.22; // Testing import { Test } from "forge-std/Test.sol"; @@ -9,27 +9,40 @@ import { BatchAuthenticator } from "src/L1/BatchAuthenticator.sol"; import { IEspressoTEEVerifier } from "@espresso-tee-contracts/interface/IEspressoTEEVerifier.sol"; import { IEspressoNitroTEEVerifier } from "@espresso-tee-contracts/interface/IEspressoNitroTEEVerifier.sol"; import { IEspressoSGXTEEVerifier } from "@espresso-tee-contracts/interface/IEspressoSGXTEEVerifier.sol"; +import { INitroEnclaveVerifier } from "aws-nitro-enclave-attestation/interfaces/INitroEnclaveVerifier.sol"; +import { ERC1967Proxy } from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; +import { ServiceType } from "@espresso-tee-contracts/types/Types.sol"; contract MockNitroTEEVerifier is IEspressoNitroTEEVerifier { - mapping(address => bool) private _registeredSigners; + mapping(address => mapping(ServiceType => bool)) private _registeredServices; - function registeredSigners(address signer) external view override returns (bool) { - return _registeredSigners[signer]; + function isSignerValid(address signer, ServiceType serviceType) external view override returns (bool) { + return _registeredServices[signer][serviceType]; } - function registeredEnclaveHash(bytes32) external pure override returns (bool) { + function registeredEnclaveHash(bytes32, ServiceType) external pure override returns (bool) { return false; } - function registerSigner(bytes calldata, bytes calldata) external pure override { } + function registerService(bytes calldata, bytes calldata, ServiceType) external pure override { } - function setEnclaveHash(bytes32, bool) external pure override { } + function setEnclaveHash(bytes32, bool, ServiceType) external pure override { } - function deleteRegisteredSigners(address[] memory) external pure override { } + function deleteEnclaveHashes(bytes32[] memory, ServiceType) external pure override { } + + function setNitroEnclaveVerifier(address) external pure override { } + + function nitroEnclaveVerifier() external pure override returns (INitroEnclaveVerifier) { + return INitroEnclaveVerifier(address(0)); + } + + function teeVerifier() external pure override returns (address) { + return address(0); + } // Test helper - function setRegisteredSigner(address signer, bool value) external { - _registeredSigners[signer] = value; + function setRegisteredService(address signer, ServiceType serviceType, bool value) external { + _registeredServices[signer][serviceType] = value; } } @@ -50,17 +63,13 @@ contract MockEspressoTEEVerifier is IEspressoTEEVerifier { return sgx; } - function verify(bytes memory, bytes32, TeeType) external pure override returns (bool) { + function verify(bytes memory, bytes32, TeeType, ServiceType) external pure override returns (bool) { return true; } - function registerSigner(bytes calldata, bytes calldata, TeeType) external pure override { } + function registerService(bytes calldata, bytes calldata, TeeType, ServiceType) external pure override { } - function registeredSigners(address, TeeType) external pure override returns (bool) { - return false; - } - - function registeredEnclaveHashes(bytes32, TeeType) external pure override returns (bool) { + function registeredEnclaveHashes(bytes32, TeeType, ServiceType) external pure override returns (bool) { return false; } @@ -71,13 +80,22 @@ contract MockEspressoTEEVerifier is IEspressoTEEVerifier { function setEspressoNitroTEEVerifier(IEspressoNitroTEEVerifier _nitro) external override { nitro = _nitro; } + + function setEnclaveHash(bytes32, bool, TeeType, ServiceType) external pure override { } + + function deleteEnclaveHashes(bytes32[] memory, TeeType, ServiceType) external pure override { } + + function setQuoteVerifier(address) external pure override { } + + function setNitroEnclaveVerifier(address) external pure override { } } /// @title BatchAuthenticator_SwitchBatcher_Test -/// @notice Tests ownership restrictions on BatchAuthenticator switchBatcher behavior +/// @notice Tests ownership and guardian restrictions on BatchAuthenticator switchBatcher behavior contract BatchAuthenticator_SwitchBatcher_Test is Test { address public deployer = address(0xABCD); address public unauthorized = address(0xDEAD); + address public guardian = address(0xFEED); address public teeBatcher = address(0x1234); address public nonTeeBatcher = address(0x5678); @@ -90,12 +108,24 @@ contract BatchAuthenticator_SwitchBatcher_Test is Test { nitroVerifier = new MockNitroTEEVerifier(); teeVerifier = new MockEspressoTEEVerifier(nitroVerifier); - vm.prank(deployer); - authenticator = - new BatchAuthenticator(IEspressoTEEVerifier(address(teeVerifier)), teeBatcher, nonTeeBatcher, deployer); + // Deploy implementation + BatchAuthenticator impl = new BatchAuthenticator(); + + // Prepare initialization data + bytes memory initData = abi.encodeWithSelector( + BatchAuthenticator.initialize.selector, + IEspressoTEEVerifier(address(teeVerifier)), + teeBatcher, + nonTeeBatcher, + deployer + ); + + // Deploy proxy + ERC1967Proxy proxy = new ERC1967Proxy(address(impl), initData); + authenticator = BatchAuthenticator(address(proxy)); } - /// @notice Test that only the owner can switch the active batcher + /// @notice Test that only the owner or guardian can switch the active batcher function test_switchBatcher_revertsForNonOwner() external { // Owner can switch batcher successfully. vm.startPrank(deployer); @@ -106,13 +136,49 @@ contract BatchAuthenticator_SwitchBatcher_Test is Test { // Non-owner cannot switch batcher. vm.startPrank(unauthorized); - vm.expectRevert("Ownable: caller is not the owner"); + vm.expectRevert(); authenticator.switchBatcher(); vm.stopPrank(); } + + /// @notice Test that guardians can switch the active batcher + function test_switchBatcher_guardianCanSwitch() external { + // Add guardian + vm.prank(deployer); + authenticator.addGuardian(guardian); + + // Guardian can switch batcher + vm.startPrank(guardian); + bool initialIsTee = authenticator.activeIsTee(); + authenticator.switchBatcher(); + assertEq(authenticator.activeIsTee(), !initialIsTee, "guardian should be able to switch batcher"); + vm.stopPrank(); + } + + /// @notice Test guardian management functions + function test_guardianManagement() external { + vm.startPrank(deployer); + + // Add guardian + authenticator.addGuardian(guardian); + assertTrue(authenticator.isGuardian(guardian), "should be guardian"); + assertEq(authenticator.guardianCount(), 1, "should have 1 guardian"); + + // Get guardians list + address[] memory guardians = authenticator.getGuardians(); + assertEq(guardians.length, 1, "should have 1 guardian in list"); + assertEq(guardians[0], guardian, "guardian address should match"); + + // Remove guardian + authenticator.removeGuardian(guardian); + assertFalse(authenticator.isGuardian(guardian), "should not be guardian"); + assertEq(authenticator.guardianCount(), 0, "should have 0 guardians"); + + vm.stopPrank(); + } } -contract BatchAuthenticator_Constructor_Test is Test { +contract BatchAuthenticator_Initialize_Test is Test { address public teeBatcher = address(0x1234); address public nonTeeBatcher = address(0x5678); @@ -126,20 +192,52 @@ contract BatchAuthenticator_Constructor_Test is Test { teeVerifier = new MockEspressoTEEVerifier(nitroVerifier); } - function test_constructor_revertsWhenTeeBatcherIsZero() external { + function test_initialize_revertsWhenTeeBatcherIsZero() external { + BatchAuthenticator impl = new BatchAuthenticator(); + + bytes memory initData = abi.encodeWithSelector( + BatchAuthenticator.initialize.selector, + IEspressoTEEVerifier(address(teeVerifier)), + address(0), + nonTeeBatcher, + owner + ); + vm.expectRevert("BatchAuthenticator: zero tee batcher"); - new BatchAuthenticator(IEspressoTEEVerifier(address(teeVerifier)), address(0), nonTeeBatcher, owner); + new ERC1967Proxy(address(impl), initData); } - function test_constructor_revertsWhenNonTeeBatcherIsZero() external { + function test_initialize_revertsWhenNonTeeBatcherIsZero() external { + BatchAuthenticator impl = new BatchAuthenticator(); + + bytes memory initData = abi.encodeWithSelector( + BatchAuthenticator.initialize.selector, + IEspressoTEEVerifier(address(teeVerifier)), + teeBatcher, + address(0), + owner + ); + vm.expectRevert("BatchAuthenticator: zero non-tee batcher"); - new BatchAuthenticator(IEspressoTEEVerifier(address(teeVerifier)), teeBatcher, address(0), owner); + new ERC1967Proxy(address(impl), initData); } - function test_constructor_succeedsWithValidAddresses() external { - BatchAuthenticator authenticator = - new BatchAuthenticator(IEspressoTEEVerifier(address(teeVerifier)), teeBatcher, nonTeeBatcher, owner); + function test_initialize_succeedsWithValidAddresses() external { + BatchAuthenticator impl = new BatchAuthenticator(); + + bytes memory initData = abi.encodeWithSelector( + BatchAuthenticator.initialize.selector, + IEspressoTEEVerifier(address(teeVerifier)), + teeBatcher, + nonTeeBatcher, + owner + ); + + ERC1967Proxy proxy = new ERC1967Proxy(address(impl), initData); + BatchAuthenticator authenticator = BatchAuthenticator(address(proxy)); + assertEq(authenticator.teeBatcher(), teeBatcher); assertEq(authenticator.nonTeeBatcher(), nonTeeBatcher); + assertEq(authenticator.owner(), owner); } } diff --git a/packages/contracts-bedrock/test/L1/BatchInbox.t.sol b/packages/contracts-bedrock/test/L1/BatchInbox.t.sol index 35e469cd191..23d8fb8f14d 100644 --- a/packages/contracts-bedrock/test/L1/BatchInbox.t.sol +++ b/packages/contracts-bedrock/test/L1/BatchInbox.t.sol @@ -10,18 +10,10 @@ import { BatchInbox } from "src/L1/BatchInbox.sol"; import { BatchAuthenticator } from "src/L1/BatchAuthenticator.sol"; import { IBatchAuthenticator } from "interfaces/L1/IBatchAuthenticator.sol"; import { IEspressoTEEVerifier } from "@espresso-tee-contracts/interface/IEspressoTEEVerifier.sol"; +import { ERC1967Proxy } from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; import { MockNitroTEEVerifier, MockEspressoTEEVerifier } from "./BatchAuthenticator.t.sol"; contract TestBatchAuthenticator is BatchAuthenticator { - constructor( - IEspressoTEEVerifier _espressoTEEVerifier, - address _teeBatcher, - address _nonTeeBatcher, - address _owner - ) - BatchAuthenticator(_espressoTEEVerifier, _teeBatcher, _nonTeeBatcher, _owner) - { } - // Test helper to bypass signature verification in authenticateBatchInfo. function setValidBatchInfo(bytes32 hash, bool valid) external { validBatchInfo[hash] = valid; @@ -46,11 +38,23 @@ contract BatchInbox_Test is Test { nitroVerifier = new MockNitroTEEVerifier(); teeVerifier = new MockEspressoTEEVerifier(nitroVerifier); - vm.prank(deployer); - authenticator = - new TestBatchAuthenticator(IEspressoTEEVerifier(address(teeVerifier)), teeBatcher, nonTeeBatcher, deployer); + // Deploy implementation + TestBatchAuthenticator impl = new TestBatchAuthenticator(); + + // Prepare initialization data + bytes memory initData = abi.encodeWithSelector( + BatchAuthenticator.initialize.selector, + IEspressoTEEVerifier(address(teeVerifier)), + teeBatcher, + nonTeeBatcher, + deployer + ); + + // Deploy proxy + ERC1967Proxy proxy = new ERC1967Proxy(address(impl), initData); + authenticator = TestBatchAuthenticator(address(proxy)); - inbox = new BatchInbox(IBatchAuthenticator(address(authenticator)), deployer); + inbox = new BatchInbox(IBatchAuthenticator(address(authenticator))); } } @@ -107,7 +111,7 @@ contract BatchInbox_Fallback_Test is BatchInbox_Test { // Check the revert reason - contract returns detailed error with addresses string memory expectedError = string( abi.encodePacked( - "BatchInbox: batcher not authorized to post in fallback mode. Expected: ", + "BatchAuthenticator: batcher not authorized to post in fallback mode. Expected: ", Strings.toHexString(uint160(nonTeeBatcher), 20), ", Actual: ", Strings.toHexString(uint160(teeBatcher), 20) @@ -130,7 +134,10 @@ contract BatchInbox_Fallback_Test is BatchInbox_Test { (bool success, bytes memory returnData) = address(inbox).call(data); assertFalse(success, "Should revert"); // Check the revert reason - assertEq(string(returnData), string(abi.encodeWithSignature("Error(string)", "Invalid calldata batch"))); + assertEq( + string(returnData), + string(abi.encodeWithSignature("Error(string)", "BatchAuthenticator: invalid calldata batch")) + ); } /// @notice Test that TEE batcher succeeds with valid authentication @@ -190,7 +197,7 @@ contract BatchInbox_Fallback_Test is BatchInbox_Test { // Check the revert reason - contract checks sender first, so it returns TEE mode error string memory expectedError = string( abi.encodePacked( - "BatchInbox: batcher not authorized to post in TEE mode. Expected: ", + "BatchAuthenticator: batcher not authorized to post in TEE mode. Expected: ", Strings.toHexString(uint160(teeBatcher), 20), ", Actual: ", Strings.toHexString(uint160(nonTeeBatcher), 20) @@ -199,3 +206,92 @@ contract BatchInbox_Fallback_Test is BatchInbox_Test { assertEq(string(returnData), string(abi.encodeWithSignature("Error(string)", expectedError))); } } + +/// @title BatchInbox_Blob_Test +/// @notice Tests for blob batch submissions +contract BatchInbox_Blob_Test is BatchInbox_Test { + /// @notice Test that TEE batcher succeeds with valid blob authentication + function test_fallback_blobBatchSucceedsWithValidAuth() external { + // TEE batcher is active by default + bytes32[] memory blobHashes = new bytes32[](2); + blobHashes[0] = keccak256("blob1"); + blobHashes[1] = keccak256("blob2"); + + // Set blob hashes for this transaction + vm.blobhashes(blobHashes); + + // Calculate expected hash (concatenation of blob hashes) + bytes memory concatenatedHashes = bytes.concat(blobHashes[0], blobHashes[1]); + bytes32 expectedHash = keccak256(concatenatedHashes); + + // Set the hash as valid in authenticator + authenticator.setValidBatchInfo(expectedHash, true); + + // TEE batcher should succeed + vm.prank(teeBatcher); + (bool success,) = address(inbox).call("any-calldata"); + assertTrue(success, "TEE batcher should succeed with valid blob auth"); + } + + /// @notice Test that TEE batcher fails with invalid blob authentication + function test_fallback_blobBatchFailsWithInvalidAuth() external { + // TEE batcher is active by default + bytes32[] memory blobHashes = new bytes32[](1); + blobHashes[0] = keccak256("blob1"); + + // Set blob hashes for this transaction + vm.blobhashes(blobHashes); + + // Don't set the hash as valid - should fail + + // TEE batcher should fail + vm.prank(teeBatcher); + (bool success, bytes memory returnData) = address(inbox).call("any-calldata"); + assertFalse(success, "TEE batcher should fail with invalid blob auth"); + assertEq( + string(returnData), + string(abi.encodeWithSignature("Error(string)", "BatchAuthenticator: invalid blob batch")) + ); + } + + /// @notice Test that blob hashes take precedence over calldata + function test_fallback_blobHashesTakePrecedenceOverCalldata() external { + // TEE batcher is active by default + bytes memory data = "valid-calldata"; + bytes32 calldataHash = keccak256(data); + + bytes32[] memory blobHashes = new bytes32[](1); + blobHashes[0] = keccak256("blob1"); + + // Set blob hashes for this transaction + vm.blobhashes(blobHashes); + + // Only authenticate the calldata hash, not the blob hash + authenticator.setValidBatchInfo(calldataHash, true); + + // Should fail because blob hashes take precedence and blob hash is not authenticated + vm.prank(teeBatcher); + (bool success,) = address(inbox).call(data); + assertFalse(success, "Should fail because blob hash is checked, not calldata"); + } + + /// @notice Test that non-TEE batcher ignores blobs (no auth required) + function test_fallback_nonTeeBatcherIgnoresBlobs() external { + // Switch to non-TEE batcher + vm.prank(deployer); + authenticator.switchBatcher(); + + bytes32[] memory blobHashes = new bytes32[](1); + blobHashes[0] = keccak256("blob1"); + + // Set blob hashes for this transaction + vm.blobhashes(blobHashes); + + // Don't authenticate the blob hash + + // Non-TEE batcher should succeed without authentication + vm.prank(nonTeeBatcher); + (bool success,) = address(inbox).call("any-calldata"); + assertTrue(success, "Non-TEE batcher should not require blob auth"); + } +}