diff --git a/Makefile b/Makefile index 06b8fb36..9a3a22cd 100644 --- a/Makefile +++ b/Makefile @@ -2,6 +2,7 @@ # Hardcoded for simplicity CONTRACT_NAMES = channel \ + CrossL2Prover \ Dispatcher \ DummyLightClient \ DummyProofVerifier \ @@ -11,6 +12,7 @@ CONTRACT_NAMES = channel \ Ibc \ IbcDispatcher \ IbcUtils \ + ICrossL2Prover \ IDispatcher \ IFeeVault \ ILightClient \ @@ -40,7 +42,7 @@ build-contracts: rm -frd ./out; \ forge install; \ forge build --skip test script -C contracts \ - -R $$(cat remappings.txt) --lib-paths lib \ + --lib-paths lib \ --extra-output-files abi --force # Libraries do not generate the correct ABI code (ChannelState enum causes errors) diff --git a/bindings/go/crossl2prover/CrossL2Prover.go b/bindings/go/crossl2prover/CrossL2Prover.go new file mode 100644 index 00000000..c529e74d --- /dev/null +++ b/bindings/go/crossl2prover/CrossL2Prover.go @@ -0,0 +1,497 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package crossl2prover + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// Ics23Proof is an auto generated low-level Go binding around an user-defined struct. +type Ics23Proof struct { + Proof []OpIcs23Proof + Height *big.Int +} + +// OpIcs23Proof is an auto generated low-level Go binding around an user-defined struct. +type OpIcs23Proof struct { + Path []OpIcs23ProofPath + Key []byte + Value []byte + Prefix []byte +} + +// OpIcs23ProofPath is an auto generated low-level Go binding around an user-defined struct. +type OpIcs23ProofPath struct { + Prefix []byte + Suffix []byte +} + +// CrossL2ProverMetaData contains all meta data concerning the CrossL2Prover contract. +var CrossL2ProverMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"verifier_\",\"type\":\"address\",\"internalType\":\"contractISignatureVerifier\"},{\"name\":\"peptideClientId_\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"LIGHT_CLIENT_TYPE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumLightClientType\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getState\",\"inputs\":[{\"name\":\"height\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"peptideAppHashes\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"peptideClientId\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"updateClient\",\"inputs\":[{\"name\":\"proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"peptideHeight\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"peptideAppHash\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"validateEvent\",\"inputs\":[{\"name\":\"receiptIndex\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"receiptRLPEncodedBytes\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"logIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"logBytes\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validateReceipt\",\"inputs\":[{\"name\":\"receiptIndex\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"receiptRLPEncodedBytes\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"valid\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"verifier\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISignatureVerifier\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"verifyMembership\",\"inputs\":[{\"name\":\"appHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"key\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"value\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"proofs\",\"type\":\"tuple\",\"internalType\":\"structIcs23Proof\",\"components\":[{\"name\":\"proof\",\"type\":\"tuple[]\",\"internalType\":\"structOpIcs23Proof[]\",\"components\":[{\"name\":\"path\",\"type\":\"tuple[]\",\"internalType\":\"structOpIcs23ProofPath[]\",\"components\":[{\"name\":\"prefix\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"suffix\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"key\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"value\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"prefix\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"height\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"verifyNonMembership\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIcs23Proof\",\"components\":[{\"name\":\"proof\",\"type\":\"tuple[]\",\"internalType\":\"structOpIcs23Proof[]\",\"components\":[{\"name\":\"path\",\"type\":\"tuple[]\",\"internalType\":\"structOpIcs23ProofPath[]\",\"components\":[{\"name\":\"prefix\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"suffix\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"key\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"value\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"prefix\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"height\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"pure\"},{\"type\":\"error\",\"name\":\"CannotUpdateClientWithDifferentAppHash\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidAppHash\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidIbcStateProof\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidL1BlockHash\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidL1BlockNumber\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidPacketProof\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidProofKey\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidProofValue\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidRLPEncodedL1BlockNumber\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidRLPEncodedL1StateRoot\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MethodNotImplemented\",\"inputs\":[]}]", +} + +// CrossL2ProverABI is the input ABI used to generate the binding from. +// Deprecated: Use CrossL2ProverMetaData.ABI instead. +var CrossL2ProverABI = CrossL2ProverMetaData.ABI + +// CrossL2Prover is an auto generated Go binding around an Ethereum contract. +type CrossL2Prover struct { + CrossL2ProverCaller // Read-only binding to the contract + CrossL2ProverTransactor // Write-only binding to the contract + CrossL2ProverFilterer // Log filterer for contract events +} + +// CrossL2ProverCaller is an auto generated read-only Go binding around an Ethereum contract. +type CrossL2ProverCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// CrossL2ProverTransactor is an auto generated write-only Go binding around an Ethereum contract. +type CrossL2ProverTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// CrossL2ProverFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type CrossL2ProverFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// CrossL2ProverSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type CrossL2ProverSession struct { + Contract *CrossL2Prover // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// CrossL2ProverCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type CrossL2ProverCallerSession struct { + Contract *CrossL2ProverCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// CrossL2ProverTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type CrossL2ProverTransactorSession struct { + Contract *CrossL2ProverTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// CrossL2ProverRaw is an auto generated low-level Go binding around an Ethereum contract. +type CrossL2ProverRaw struct { + Contract *CrossL2Prover // Generic contract binding to access the raw methods on +} + +// CrossL2ProverCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type CrossL2ProverCallerRaw struct { + Contract *CrossL2ProverCaller // Generic read-only contract binding to access the raw methods on +} + +// CrossL2ProverTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type CrossL2ProverTransactorRaw struct { + Contract *CrossL2ProverTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewCrossL2Prover creates a new instance of CrossL2Prover, bound to a specific deployed contract. +func NewCrossL2Prover(address common.Address, backend bind.ContractBackend) (*CrossL2Prover, error) { + contract, err := bindCrossL2Prover(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &CrossL2Prover{CrossL2ProverCaller: CrossL2ProverCaller{contract: contract}, CrossL2ProverTransactor: CrossL2ProverTransactor{contract: contract}, CrossL2ProverFilterer: CrossL2ProverFilterer{contract: contract}}, nil +} + +// NewCrossL2ProverCaller creates a new read-only instance of CrossL2Prover, bound to a specific deployed contract. +func NewCrossL2ProverCaller(address common.Address, caller bind.ContractCaller) (*CrossL2ProverCaller, error) { + contract, err := bindCrossL2Prover(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &CrossL2ProverCaller{contract: contract}, nil +} + +// NewCrossL2ProverTransactor creates a new write-only instance of CrossL2Prover, bound to a specific deployed contract. +func NewCrossL2ProverTransactor(address common.Address, transactor bind.ContractTransactor) (*CrossL2ProverTransactor, error) { + contract, err := bindCrossL2Prover(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &CrossL2ProverTransactor{contract: contract}, nil +} + +// NewCrossL2ProverFilterer creates a new log filterer instance of CrossL2Prover, bound to a specific deployed contract. +func NewCrossL2ProverFilterer(address common.Address, filterer bind.ContractFilterer) (*CrossL2ProverFilterer, error) { + contract, err := bindCrossL2Prover(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &CrossL2ProverFilterer{contract: contract}, nil +} + +// bindCrossL2Prover binds a generic wrapper to an already deployed contract. +func bindCrossL2Prover(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := CrossL2ProverMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_CrossL2Prover *CrossL2ProverRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _CrossL2Prover.Contract.CrossL2ProverCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_CrossL2Prover *CrossL2ProverRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _CrossL2Prover.Contract.CrossL2ProverTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_CrossL2Prover *CrossL2ProverRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _CrossL2Prover.Contract.CrossL2ProverTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_CrossL2Prover *CrossL2ProverCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _CrossL2Prover.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_CrossL2Prover *CrossL2ProverTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _CrossL2Prover.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_CrossL2Prover *CrossL2ProverTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _CrossL2Prover.Contract.contract.Transact(opts, method, params...) +} + +// LIGHTCLIENTTYPE is a free data retrieval call binding the contract method 0x57c1c5f4. +// +// Solidity: function LIGHT_CLIENT_TYPE() view returns(uint8) +func (_CrossL2Prover *CrossL2ProverCaller) LIGHTCLIENTTYPE(opts *bind.CallOpts) (uint8, error) { + var out []interface{} + err := _CrossL2Prover.contract.Call(opts, &out, "LIGHT_CLIENT_TYPE") + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +// LIGHTCLIENTTYPE is a free data retrieval call binding the contract method 0x57c1c5f4. +// +// Solidity: function LIGHT_CLIENT_TYPE() view returns(uint8) +func (_CrossL2Prover *CrossL2ProverSession) LIGHTCLIENTTYPE() (uint8, error) { + return _CrossL2Prover.Contract.LIGHTCLIENTTYPE(&_CrossL2Prover.CallOpts) +} + +// LIGHTCLIENTTYPE is a free data retrieval call binding the contract method 0x57c1c5f4. +// +// Solidity: function LIGHT_CLIENT_TYPE() view returns(uint8) +func (_CrossL2Prover *CrossL2ProverCallerSession) LIGHTCLIENTTYPE() (uint8, error) { + return _CrossL2Prover.Contract.LIGHTCLIENTTYPE(&_CrossL2Prover.CallOpts) +} + +// GetState is a free data retrieval call binding the contract method 0x44c9af28. +// +// Solidity: function getState(uint256 height) view returns(uint256) +func (_CrossL2Prover *CrossL2ProverCaller) GetState(opts *bind.CallOpts, height *big.Int) (*big.Int, error) { + var out []interface{} + err := _CrossL2Prover.contract.Call(opts, &out, "getState", height) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetState is a free data retrieval call binding the contract method 0x44c9af28. +// +// Solidity: function getState(uint256 height) view returns(uint256) +func (_CrossL2Prover *CrossL2ProverSession) GetState(height *big.Int) (*big.Int, error) { + return _CrossL2Prover.Contract.GetState(&_CrossL2Prover.CallOpts, height) +} + +// GetState is a free data retrieval call binding the contract method 0x44c9af28. +// +// Solidity: function getState(uint256 height) view returns(uint256) +func (_CrossL2Prover *CrossL2ProverCallerSession) GetState(height *big.Int) (*big.Int, error) { + return _CrossL2Prover.Contract.GetState(&_CrossL2Prover.CallOpts, height) +} + +// PeptideAppHashes is a free data retrieval call binding the contract method 0xc67e15f7. +// +// Solidity: function peptideAppHashes(uint256 ) view returns(uint256) +func (_CrossL2Prover *CrossL2ProverCaller) PeptideAppHashes(opts *bind.CallOpts, arg0 *big.Int) (*big.Int, error) { + var out []interface{} + err := _CrossL2Prover.contract.Call(opts, &out, "peptideAppHashes", arg0) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// PeptideAppHashes is a free data retrieval call binding the contract method 0xc67e15f7. +// +// Solidity: function peptideAppHashes(uint256 ) view returns(uint256) +func (_CrossL2Prover *CrossL2ProverSession) PeptideAppHashes(arg0 *big.Int) (*big.Int, error) { + return _CrossL2Prover.Contract.PeptideAppHashes(&_CrossL2Prover.CallOpts, arg0) +} + +// PeptideAppHashes is a free data retrieval call binding the contract method 0xc67e15f7. +// +// Solidity: function peptideAppHashes(uint256 ) view returns(uint256) +func (_CrossL2Prover *CrossL2ProverCallerSession) PeptideAppHashes(arg0 *big.Int) (*big.Int, error) { + return _CrossL2Prover.Contract.PeptideAppHashes(&_CrossL2Prover.CallOpts, arg0) +} + +// PeptideClientId is a free data retrieval call binding the contract method 0xa2198c95. +// +// Solidity: function peptideClientId() view returns(string) +func (_CrossL2Prover *CrossL2ProverCaller) PeptideClientId(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _CrossL2Prover.contract.Call(opts, &out, "peptideClientId") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// PeptideClientId is a free data retrieval call binding the contract method 0xa2198c95. +// +// Solidity: function peptideClientId() view returns(string) +func (_CrossL2Prover *CrossL2ProverSession) PeptideClientId() (string, error) { + return _CrossL2Prover.Contract.PeptideClientId(&_CrossL2Prover.CallOpts) +} + +// PeptideClientId is a free data retrieval call binding the contract method 0xa2198c95. +// +// Solidity: function peptideClientId() view returns(string) +func (_CrossL2Prover *CrossL2ProverCallerSession) PeptideClientId() (string, error) { + return _CrossL2Prover.Contract.PeptideClientId(&_CrossL2Prover.CallOpts) +} + +// ValidateEvent is a free data retrieval call binding the contract method 0x81ce4d34. +// +// Solidity: function validateEvent(bytes receiptIndex, bytes receiptRLPEncodedBytes, uint256 logIndex, bytes logBytes, bytes proof) view returns(bool) +func (_CrossL2Prover *CrossL2ProverCaller) ValidateEvent(opts *bind.CallOpts, receiptIndex []byte, receiptRLPEncodedBytes []byte, logIndex *big.Int, logBytes []byte, proof []byte) (bool, error) { + var out []interface{} + err := _CrossL2Prover.contract.Call(opts, &out, "validateEvent", receiptIndex, receiptRLPEncodedBytes, logIndex, logBytes, proof) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// ValidateEvent is a free data retrieval call binding the contract method 0x81ce4d34. +// +// Solidity: function validateEvent(bytes receiptIndex, bytes receiptRLPEncodedBytes, uint256 logIndex, bytes logBytes, bytes proof) view returns(bool) +func (_CrossL2Prover *CrossL2ProverSession) ValidateEvent(receiptIndex []byte, receiptRLPEncodedBytes []byte, logIndex *big.Int, logBytes []byte, proof []byte) (bool, error) { + return _CrossL2Prover.Contract.ValidateEvent(&_CrossL2Prover.CallOpts, receiptIndex, receiptRLPEncodedBytes, logIndex, logBytes, proof) +} + +// ValidateEvent is a free data retrieval call binding the contract method 0x81ce4d34. +// +// Solidity: function validateEvent(bytes receiptIndex, bytes receiptRLPEncodedBytes, uint256 logIndex, bytes logBytes, bytes proof) view returns(bool) +func (_CrossL2Prover *CrossL2ProverCallerSession) ValidateEvent(receiptIndex []byte, receiptRLPEncodedBytes []byte, logIndex *big.Int, logBytes []byte, proof []byte) (bool, error) { + return _CrossL2Prover.Contract.ValidateEvent(&_CrossL2Prover.CallOpts, receiptIndex, receiptRLPEncodedBytes, logIndex, logBytes, proof) +} + +// ValidateReceipt is a free data retrieval call binding the contract method 0x85532872. +// +// Solidity: function validateReceipt(bytes receiptIndex, bytes receiptRLPEncodedBytes, bytes proof) view returns(bool valid) +func (_CrossL2Prover *CrossL2ProverCaller) ValidateReceipt(opts *bind.CallOpts, receiptIndex []byte, receiptRLPEncodedBytes []byte, proof []byte) (bool, error) { + var out []interface{} + err := _CrossL2Prover.contract.Call(opts, &out, "validateReceipt", receiptIndex, receiptRLPEncodedBytes, proof) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// ValidateReceipt is a free data retrieval call binding the contract method 0x85532872. +// +// Solidity: function validateReceipt(bytes receiptIndex, bytes receiptRLPEncodedBytes, bytes proof) view returns(bool valid) +func (_CrossL2Prover *CrossL2ProverSession) ValidateReceipt(receiptIndex []byte, receiptRLPEncodedBytes []byte, proof []byte) (bool, error) { + return _CrossL2Prover.Contract.ValidateReceipt(&_CrossL2Prover.CallOpts, receiptIndex, receiptRLPEncodedBytes, proof) +} + +// ValidateReceipt is a free data retrieval call binding the contract method 0x85532872. +// +// Solidity: function validateReceipt(bytes receiptIndex, bytes receiptRLPEncodedBytes, bytes proof) view returns(bool valid) +func (_CrossL2Prover *CrossL2ProverCallerSession) ValidateReceipt(receiptIndex []byte, receiptRLPEncodedBytes []byte, proof []byte) (bool, error) { + return _CrossL2Prover.Contract.ValidateReceipt(&_CrossL2Prover.CallOpts, receiptIndex, receiptRLPEncodedBytes, proof) +} + +// Verifier is a free data retrieval call binding the contract method 0x2b7ac3f3. +// +// Solidity: function verifier() view returns(address) +func (_CrossL2Prover *CrossL2ProverCaller) Verifier(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _CrossL2Prover.contract.Call(opts, &out, "verifier") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Verifier is a free data retrieval call binding the contract method 0x2b7ac3f3. +// +// Solidity: function verifier() view returns(address) +func (_CrossL2Prover *CrossL2ProverSession) Verifier() (common.Address, error) { + return _CrossL2Prover.Contract.Verifier(&_CrossL2Prover.CallOpts) +} + +// Verifier is a free data retrieval call binding the contract method 0x2b7ac3f3. +// +// Solidity: function verifier() view returns(address) +func (_CrossL2Prover *CrossL2ProverCallerSession) Verifier() (common.Address, error) { + return _CrossL2Prover.Contract.Verifier(&_CrossL2Prover.CallOpts) +} + +// VerifyMembership is a free data retrieval call binding the contract method 0xc2f0329f. +// +// Solidity: function verifyMembership(bytes32 appHash, bytes key, bytes value, (((bytes,bytes)[],bytes,bytes,bytes)[],uint256) proofs) pure returns() +func (_CrossL2Prover *CrossL2ProverCaller) VerifyMembership(opts *bind.CallOpts, appHash [32]byte, key []byte, value []byte, proofs Ics23Proof) error { + var out []interface{} + err := _CrossL2Prover.contract.Call(opts, &out, "verifyMembership", appHash, key, value, proofs) + + if err != nil { + return err + } + + return err + +} + +// VerifyMembership is a free data retrieval call binding the contract method 0xc2f0329f. +// +// Solidity: function verifyMembership(bytes32 appHash, bytes key, bytes value, (((bytes,bytes)[],bytes,bytes,bytes)[],uint256) proofs) pure returns() +func (_CrossL2Prover *CrossL2ProverSession) VerifyMembership(appHash [32]byte, key []byte, value []byte, proofs Ics23Proof) error { + return _CrossL2Prover.Contract.VerifyMembership(&_CrossL2Prover.CallOpts, appHash, key, value, proofs) +} + +// VerifyMembership is a free data retrieval call binding the contract method 0xc2f0329f. +// +// Solidity: function verifyMembership(bytes32 appHash, bytes key, bytes value, (((bytes,bytes)[],bytes,bytes,bytes)[],uint256) proofs) pure returns() +func (_CrossL2Prover *CrossL2ProverCallerSession) VerifyMembership(appHash [32]byte, key []byte, value []byte, proofs Ics23Proof) error { + return _CrossL2Prover.Contract.VerifyMembership(&_CrossL2Prover.CallOpts, appHash, key, value, proofs) +} + +// VerifyNonMembership is a free data retrieval call binding the contract method 0x2a6ded74. +// +// Solidity: function verifyNonMembership(bytes32 , bytes , (((bytes,bytes)[],bytes,bytes,bytes)[],uint256) ) pure returns() +func (_CrossL2Prover *CrossL2ProverCaller) VerifyNonMembership(opts *bind.CallOpts, arg0 [32]byte, arg1 []byte, arg2 Ics23Proof) error { + var out []interface{} + err := _CrossL2Prover.contract.Call(opts, &out, "verifyNonMembership", arg0, arg1, arg2) + + if err != nil { + return err + } + + return err + +} + +// VerifyNonMembership is a free data retrieval call binding the contract method 0x2a6ded74. +// +// Solidity: function verifyNonMembership(bytes32 , bytes , (((bytes,bytes)[],bytes,bytes,bytes)[],uint256) ) pure returns() +func (_CrossL2Prover *CrossL2ProverSession) VerifyNonMembership(arg0 [32]byte, arg1 []byte, arg2 Ics23Proof) error { + return _CrossL2Prover.Contract.VerifyNonMembership(&_CrossL2Prover.CallOpts, arg0, arg1, arg2) +} + +// VerifyNonMembership is a free data retrieval call binding the contract method 0x2a6ded74. +// +// Solidity: function verifyNonMembership(bytes32 , bytes , (((bytes,bytes)[],bytes,bytes,bytes)[],uint256) ) pure returns() +func (_CrossL2Prover *CrossL2ProverCallerSession) VerifyNonMembership(arg0 [32]byte, arg1 []byte, arg2 Ics23Proof) error { + return _CrossL2Prover.Contract.VerifyNonMembership(&_CrossL2Prover.CallOpts, arg0, arg1, arg2) +} + +// UpdateClient is a paid mutator transaction binding the contract method 0x49ff245e. +// +// Solidity: function updateClient(bytes proof, uint256 peptideHeight, uint256 peptideAppHash) returns() +func (_CrossL2Prover *CrossL2ProverTransactor) UpdateClient(opts *bind.TransactOpts, proof []byte, peptideHeight *big.Int, peptideAppHash *big.Int) (*types.Transaction, error) { + return _CrossL2Prover.contract.Transact(opts, "updateClient", proof, peptideHeight, peptideAppHash) +} + +// UpdateClient is a paid mutator transaction binding the contract method 0x49ff245e. +// +// Solidity: function updateClient(bytes proof, uint256 peptideHeight, uint256 peptideAppHash) returns() +func (_CrossL2Prover *CrossL2ProverSession) UpdateClient(proof []byte, peptideHeight *big.Int, peptideAppHash *big.Int) (*types.Transaction, error) { + return _CrossL2Prover.Contract.UpdateClient(&_CrossL2Prover.TransactOpts, proof, peptideHeight, peptideAppHash) +} + +// UpdateClient is a paid mutator transaction binding the contract method 0x49ff245e. +// +// Solidity: function updateClient(bytes proof, uint256 peptideHeight, uint256 peptideAppHash) returns() +func (_CrossL2Prover *CrossL2ProverTransactorSession) UpdateClient(proof []byte, peptideHeight *big.Int, peptideAppHash *big.Int) (*types.Transaction, error) { + return _CrossL2Prover.Contract.UpdateClient(&_CrossL2Prover.TransactOpts, proof, peptideHeight, peptideAppHash) +} diff --git a/bindings/go/icrossl2prover/ICrossL2Prover.go b/bindings/go/icrossl2prover/ICrossL2Prover.go new file mode 100644 index 00000000..76ea9d08 --- /dev/null +++ b/bindings/go/icrossl2prover/ICrossL2Prover.go @@ -0,0 +1,306 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package icrossl2prover + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// ICrossL2ProverMetaData contains all meta data concerning the ICrossL2Prover contract. +var ICrossL2ProverMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"function\",\"name\":\"LIGHT_CLIENT_TYPE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumLightClientType\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getState\",\"inputs\":[{\"name\":\"height\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"updateClient\",\"inputs\":[{\"name\":\"proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"height\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"appHash\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"validateEvent\",\"inputs\":[{\"name\":\"receiptIndex\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"receiptRLPEncodedBytes\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"logIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"logBytes\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"validateReceipt\",\"inputs\":[{\"name\":\"receiptIndex\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"receiptRLPEncodedBytes\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"}]", +} + +// ICrossL2ProverABI is the input ABI used to generate the binding from. +// Deprecated: Use ICrossL2ProverMetaData.ABI instead. +var ICrossL2ProverABI = ICrossL2ProverMetaData.ABI + +// ICrossL2Prover is an auto generated Go binding around an Ethereum contract. +type ICrossL2Prover struct { + ICrossL2ProverCaller // Read-only binding to the contract + ICrossL2ProverTransactor // Write-only binding to the contract + ICrossL2ProverFilterer // Log filterer for contract events +} + +// ICrossL2ProverCaller is an auto generated read-only Go binding around an Ethereum contract. +type ICrossL2ProverCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ICrossL2ProverTransactor is an auto generated write-only Go binding around an Ethereum contract. +type ICrossL2ProverTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ICrossL2ProverFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type ICrossL2ProverFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ICrossL2ProverSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type ICrossL2ProverSession struct { + Contract *ICrossL2Prover // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ICrossL2ProverCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type ICrossL2ProverCallerSession struct { + Contract *ICrossL2ProverCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// ICrossL2ProverTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type ICrossL2ProverTransactorSession struct { + Contract *ICrossL2ProverTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ICrossL2ProverRaw is an auto generated low-level Go binding around an Ethereum contract. +type ICrossL2ProverRaw struct { + Contract *ICrossL2Prover // Generic contract binding to access the raw methods on +} + +// ICrossL2ProverCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type ICrossL2ProverCallerRaw struct { + Contract *ICrossL2ProverCaller // Generic read-only contract binding to access the raw methods on +} + +// ICrossL2ProverTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type ICrossL2ProverTransactorRaw struct { + Contract *ICrossL2ProverTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewICrossL2Prover creates a new instance of ICrossL2Prover, bound to a specific deployed contract. +func NewICrossL2Prover(address common.Address, backend bind.ContractBackend) (*ICrossL2Prover, error) { + contract, err := bindICrossL2Prover(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ICrossL2Prover{ICrossL2ProverCaller: ICrossL2ProverCaller{contract: contract}, ICrossL2ProverTransactor: ICrossL2ProverTransactor{contract: contract}, ICrossL2ProverFilterer: ICrossL2ProverFilterer{contract: contract}}, nil +} + +// NewICrossL2ProverCaller creates a new read-only instance of ICrossL2Prover, bound to a specific deployed contract. +func NewICrossL2ProverCaller(address common.Address, caller bind.ContractCaller) (*ICrossL2ProverCaller, error) { + contract, err := bindICrossL2Prover(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ICrossL2ProverCaller{contract: contract}, nil +} + +// NewICrossL2ProverTransactor creates a new write-only instance of ICrossL2Prover, bound to a specific deployed contract. +func NewICrossL2ProverTransactor(address common.Address, transactor bind.ContractTransactor) (*ICrossL2ProverTransactor, error) { + contract, err := bindICrossL2Prover(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ICrossL2ProverTransactor{contract: contract}, nil +} + +// NewICrossL2ProverFilterer creates a new log filterer instance of ICrossL2Prover, bound to a specific deployed contract. +func NewICrossL2ProverFilterer(address common.Address, filterer bind.ContractFilterer) (*ICrossL2ProverFilterer, error) { + contract, err := bindICrossL2Prover(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ICrossL2ProverFilterer{contract: contract}, nil +} + +// bindICrossL2Prover binds a generic wrapper to an already deployed contract. +func bindICrossL2Prover(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ICrossL2ProverMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ICrossL2Prover *ICrossL2ProverRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ICrossL2Prover.Contract.ICrossL2ProverCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ICrossL2Prover *ICrossL2ProverRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ICrossL2Prover.Contract.ICrossL2ProverTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ICrossL2Prover *ICrossL2ProverRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ICrossL2Prover.Contract.ICrossL2ProverTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ICrossL2Prover *ICrossL2ProverCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ICrossL2Prover.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ICrossL2Prover *ICrossL2ProverTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ICrossL2Prover.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ICrossL2Prover *ICrossL2ProverTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ICrossL2Prover.Contract.contract.Transact(opts, method, params...) +} + +// LIGHTCLIENTTYPE is a free data retrieval call binding the contract method 0x57c1c5f4. +// +// Solidity: function LIGHT_CLIENT_TYPE() view returns(uint8) +func (_ICrossL2Prover *ICrossL2ProverCaller) LIGHTCLIENTTYPE(opts *bind.CallOpts) (uint8, error) { + var out []interface{} + err := _ICrossL2Prover.contract.Call(opts, &out, "LIGHT_CLIENT_TYPE") + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +// LIGHTCLIENTTYPE is a free data retrieval call binding the contract method 0x57c1c5f4. +// +// Solidity: function LIGHT_CLIENT_TYPE() view returns(uint8) +func (_ICrossL2Prover *ICrossL2ProverSession) LIGHTCLIENTTYPE() (uint8, error) { + return _ICrossL2Prover.Contract.LIGHTCLIENTTYPE(&_ICrossL2Prover.CallOpts) +} + +// LIGHTCLIENTTYPE is a free data retrieval call binding the contract method 0x57c1c5f4. +// +// Solidity: function LIGHT_CLIENT_TYPE() view returns(uint8) +func (_ICrossL2Prover *ICrossL2ProverCallerSession) LIGHTCLIENTTYPE() (uint8, error) { + return _ICrossL2Prover.Contract.LIGHTCLIENTTYPE(&_ICrossL2Prover.CallOpts) +} + +// GetState is a free data retrieval call binding the contract method 0x44c9af28. +// +// Solidity: function getState(uint256 height) view returns(uint256) +func (_ICrossL2Prover *ICrossL2ProverCaller) GetState(opts *bind.CallOpts, height *big.Int) (*big.Int, error) { + var out []interface{} + err := _ICrossL2Prover.contract.Call(opts, &out, "getState", height) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetState is a free data retrieval call binding the contract method 0x44c9af28. +// +// Solidity: function getState(uint256 height) view returns(uint256) +func (_ICrossL2Prover *ICrossL2ProverSession) GetState(height *big.Int) (*big.Int, error) { + return _ICrossL2Prover.Contract.GetState(&_ICrossL2Prover.CallOpts, height) +} + +// GetState is a free data retrieval call binding the contract method 0x44c9af28. +// +// Solidity: function getState(uint256 height) view returns(uint256) +func (_ICrossL2Prover *ICrossL2ProverCallerSession) GetState(height *big.Int) (*big.Int, error) { + return _ICrossL2Prover.Contract.GetState(&_ICrossL2Prover.CallOpts, height) +} + +// UpdateClient is a paid mutator transaction binding the contract method 0x49ff245e. +// +// Solidity: function updateClient(bytes proof, uint256 height, uint256 appHash) returns() +func (_ICrossL2Prover *ICrossL2ProverTransactor) UpdateClient(opts *bind.TransactOpts, proof []byte, height *big.Int, appHash *big.Int) (*types.Transaction, error) { + return _ICrossL2Prover.contract.Transact(opts, "updateClient", proof, height, appHash) +} + +// UpdateClient is a paid mutator transaction binding the contract method 0x49ff245e. +// +// Solidity: function updateClient(bytes proof, uint256 height, uint256 appHash) returns() +func (_ICrossL2Prover *ICrossL2ProverSession) UpdateClient(proof []byte, height *big.Int, appHash *big.Int) (*types.Transaction, error) { + return _ICrossL2Prover.Contract.UpdateClient(&_ICrossL2Prover.TransactOpts, proof, height, appHash) +} + +// UpdateClient is a paid mutator transaction binding the contract method 0x49ff245e. +// +// Solidity: function updateClient(bytes proof, uint256 height, uint256 appHash) returns() +func (_ICrossL2Prover *ICrossL2ProverTransactorSession) UpdateClient(proof []byte, height *big.Int, appHash *big.Int) (*types.Transaction, error) { + return _ICrossL2Prover.Contract.UpdateClient(&_ICrossL2Prover.TransactOpts, proof, height, appHash) +} + +// ValidateEvent is a paid mutator transaction binding the contract method 0x81ce4d34. +// +// Solidity: function validateEvent(bytes receiptIndex, bytes receiptRLPEncodedBytes, uint256 logIndex, bytes logBytes, bytes proof) returns(bool) +func (_ICrossL2Prover *ICrossL2ProverTransactor) ValidateEvent(opts *bind.TransactOpts, receiptIndex []byte, receiptRLPEncodedBytes []byte, logIndex *big.Int, logBytes []byte, proof []byte) (*types.Transaction, error) { + return _ICrossL2Prover.contract.Transact(opts, "validateEvent", receiptIndex, receiptRLPEncodedBytes, logIndex, logBytes, proof) +} + +// ValidateEvent is a paid mutator transaction binding the contract method 0x81ce4d34. +// +// Solidity: function validateEvent(bytes receiptIndex, bytes receiptRLPEncodedBytes, uint256 logIndex, bytes logBytes, bytes proof) returns(bool) +func (_ICrossL2Prover *ICrossL2ProverSession) ValidateEvent(receiptIndex []byte, receiptRLPEncodedBytes []byte, logIndex *big.Int, logBytes []byte, proof []byte) (*types.Transaction, error) { + return _ICrossL2Prover.Contract.ValidateEvent(&_ICrossL2Prover.TransactOpts, receiptIndex, receiptRLPEncodedBytes, logIndex, logBytes, proof) +} + +// ValidateEvent is a paid mutator transaction binding the contract method 0x81ce4d34. +// +// Solidity: function validateEvent(bytes receiptIndex, bytes receiptRLPEncodedBytes, uint256 logIndex, bytes logBytes, bytes proof) returns(bool) +func (_ICrossL2Prover *ICrossL2ProverTransactorSession) ValidateEvent(receiptIndex []byte, receiptRLPEncodedBytes []byte, logIndex *big.Int, logBytes []byte, proof []byte) (*types.Transaction, error) { + return _ICrossL2Prover.Contract.ValidateEvent(&_ICrossL2Prover.TransactOpts, receiptIndex, receiptRLPEncodedBytes, logIndex, logBytes, proof) +} + +// ValidateReceipt is a paid mutator transaction binding the contract method 0x85532872. +// +// Solidity: function validateReceipt(bytes receiptIndex, bytes receiptRLPEncodedBytes, bytes proof) returns(bool) +func (_ICrossL2Prover *ICrossL2ProverTransactor) ValidateReceipt(opts *bind.TransactOpts, receiptIndex []byte, receiptRLPEncodedBytes []byte, proof []byte) (*types.Transaction, error) { + return _ICrossL2Prover.contract.Transact(opts, "validateReceipt", receiptIndex, receiptRLPEncodedBytes, proof) +} + +// ValidateReceipt is a paid mutator transaction binding the contract method 0x85532872. +// +// Solidity: function validateReceipt(bytes receiptIndex, bytes receiptRLPEncodedBytes, bytes proof) returns(bool) +func (_ICrossL2Prover *ICrossL2ProverSession) ValidateReceipt(receiptIndex []byte, receiptRLPEncodedBytes []byte, proof []byte) (*types.Transaction, error) { + return _ICrossL2Prover.Contract.ValidateReceipt(&_ICrossL2Prover.TransactOpts, receiptIndex, receiptRLPEncodedBytes, proof) +} + +// ValidateReceipt is a paid mutator transaction binding the contract method 0x85532872. +// +// Solidity: function validateReceipt(bytes receiptIndex, bytes receiptRLPEncodedBytes, bytes proof) returns(bool) +func (_ICrossL2Prover *ICrossL2ProverTransactorSession) ValidateReceipt(receiptIndex []byte, receiptRLPEncodedBytes []byte, proof []byte) (*types.Transaction, error) { + return _ICrossL2Prover.Contract.ValidateReceipt(&_ICrossL2Prover.TransactOpts, receiptIndex, receiptRLPEncodedBytes, proof) +} diff --git a/bindings/go/ilightclient/IClientUpdates.go b/bindings/go/ilightclient/IClientUpdates.go new file mode 100644 index 00000000..6eda62b1 --- /dev/null +++ b/bindings/go/ilightclient/IClientUpdates.go @@ -0,0 +1,233 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package ilightclient + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// IClientUpdatesMetaData contains all meta data concerning the IClientUpdates contract. +var IClientUpdatesMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"function\",\"name\":\"LIGHT_CLIENT_TYPE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumLightClientType\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"updateClient\",\"inputs\":[{\"name\":\"proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"height\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"appHash\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"}]", +} + +// IClientUpdatesABI is the input ABI used to generate the binding from. +// Deprecated: Use IClientUpdatesMetaData.ABI instead. +var IClientUpdatesABI = IClientUpdatesMetaData.ABI + +// IClientUpdates is an auto generated Go binding around an Ethereum contract. +type IClientUpdates struct { + IClientUpdatesCaller // Read-only binding to the contract + IClientUpdatesTransactor // Write-only binding to the contract + IClientUpdatesFilterer // Log filterer for contract events +} + +// IClientUpdatesCaller is an auto generated read-only Go binding around an Ethereum contract. +type IClientUpdatesCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IClientUpdatesTransactor is an auto generated write-only Go binding around an Ethereum contract. +type IClientUpdatesTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IClientUpdatesFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type IClientUpdatesFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IClientUpdatesSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type IClientUpdatesSession struct { + Contract *IClientUpdates // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IClientUpdatesCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type IClientUpdatesCallerSession struct { + Contract *IClientUpdatesCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// IClientUpdatesTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type IClientUpdatesTransactorSession struct { + Contract *IClientUpdatesTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IClientUpdatesRaw is an auto generated low-level Go binding around an Ethereum contract. +type IClientUpdatesRaw struct { + Contract *IClientUpdates // Generic contract binding to access the raw methods on +} + +// IClientUpdatesCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type IClientUpdatesCallerRaw struct { + Contract *IClientUpdatesCaller // Generic read-only contract binding to access the raw methods on +} + +// IClientUpdatesTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type IClientUpdatesTransactorRaw struct { + Contract *IClientUpdatesTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewIClientUpdates creates a new instance of IClientUpdates, bound to a specific deployed contract. +func NewIClientUpdates(address common.Address, backend bind.ContractBackend) (*IClientUpdates, error) { + contract, err := bindIClientUpdates(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &IClientUpdates{IClientUpdatesCaller: IClientUpdatesCaller{contract: contract}, IClientUpdatesTransactor: IClientUpdatesTransactor{contract: contract}, IClientUpdatesFilterer: IClientUpdatesFilterer{contract: contract}}, nil +} + +// NewIClientUpdatesCaller creates a new read-only instance of IClientUpdates, bound to a specific deployed contract. +func NewIClientUpdatesCaller(address common.Address, caller bind.ContractCaller) (*IClientUpdatesCaller, error) { + contract, err := bindIClientUpdates(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &IClientUpdatesCaller{contract: contract}, nil +} + +// NewIClientUpdatesTransactor creates a new write-only instance of IClientUpdates, bound to a specific deployed contract. +func NewIClientUpdatesTransactor(address common.Address, transactor bind.ContractTransactor) (*IClientUpdatesTransactor, error) { + contract, err := bindIClientUpdates(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &IClientUpdatesTransactor{contract: contract}, nil +} + +// NewIClientUpdatesFilterer creates a new log filterer instance of IClientUpdates, bound to a specific deployed contract. +func NewIClientUpdatesFilterer(address common.Address, filterer bind.ContractFilterer) (*IClientUpdatesFilterer, error) { + contract, err := bindIClientUpdates(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &IClientUpdatesFilterer{contract: contract}, nil +} + +// bindIClientUpdates binds a generic wrapper to an already deployed contract. +func bindIClientUpdates(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := IClientUpdatesMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_IClientUpdates *IClientUpdatesRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IClientUpdates.Contract.IClientUpdatesCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_IClientUpdates *IClientUpdatesRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IClientUpdates.Contract.IClientUpdatesTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IClientUpdates *IClientUpdatesRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IClientUpdates.Contract.IClientUpdatesTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_IClientUpdates *IClientUpdatesCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IClientUpdates.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_IClientUpdates *IClientUpdatesTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IClientUpdates.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IClientUpdates *IClientUpdatesTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IClientUpdates.Contract.contract.Transact(opts, method, params...) +} + +// LIGHTCLIENTTYPE is a free data retrieval call binding the contract method 0x57c1c5f4. +// +// Solidity: function LIGHT_CLIENT_TYPE() view returns(uint8) +func (_IClientUpdates *IClientUpdatesCaller) LIGHTCLIENTTYPE(opts *bind.CallOpts) (uint8, error) { + var out []interface{} + err := _IClientUpdates.contract.Call(opts, &out, "LIGHT_CLIENT_TYPE") + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +// LIGHTCLIENTTYPE is a free data retrieval call binding the contract method 0x57c1c5f4. +// +// Solidity: function LIGHT_CLIENT_TYPE() view returns(uint8) +func (_IClientUpdates *IClientUpdatesSession) LIGHTCLIENTTYPE() (uint8, error) { + return _IClientUpdates.Contract.LIGHTCLIENTTYPE(&_IClientUpdates.CallOpts) +} + +// LIGHTCLIENTTYPE is a free data retrieval call binding the contract method 0x57c1c5f4. +// +// Solidity: function LIGHT_CLIENT_TYPE() view returns(uint8) +func (_IClientUpdates *IClientUpdatesCallerSession) LIGHTCLIENTTYPE() (uint8, error) { + return _IClientUpdates.Contract.LIGHTCLIENTTYPE(&_IClientUpdates.CallOpts) +} + +// UpdateClient is a paid mutator transaction binding the contract method 0x49ff245e. +// +// Solidity: function updateClient(bytes proof, uint256 height, uint256 appHash) returns() +func (_IClientUpdates *IClientUpdatesTransactor) UpdateClient(opts *bind.TransactOpts, proof []byte, height *big.Int, appHash *big.Int) (*types.Transaction, error) { + return _IClientUpdates.contract.Transact(opts, "updateClient", proof, height, appHash) +} + +// UpdateClient is a paid mutator transaction binding the contract method 0x49ff245e. +// +// Solidity: function updateClient(bytes proof, uint256 height, uint256 appHash) returns() +func (_IClientUpdates *IClientUpdatesSession) UpdateClient(proof []byte, height *big.Int, appHash *big.Int) (*types.Transaction, error) { + return _IClientUpdates.Contract.UpdateClient(&_IClientUpdates.TransactOpts, proof, height, appHash) +} + +// UpdateClient is a paid mutator transaction binding the contract method 0x49ff245e. +// +// Solidity: function updateClient(bytes proof, uint256 height, uint256 appHash) returns() +func (_IClientUpdates *IClientUpdatesTransactorSession) UpdateClient(proof []byte, height *big.Int, appHash *big.Int) (*types.Transaction, error) { + return _IClientUpdates.Contract.UpdateClient(&_IClientUpdates.TransactOpts, proof, height, appHash) +} diff --git a/bindings/go/ilightclient/IMembershipVerifier.go b/bindings/go/ilightclient/IMembershipVerifier.go new file mode 100644 index 00000000..0e0339b6 --- /dev/null +++ b/bindings/go/ilightclient/IMembershipVerifier.go @@ -0,0 +1,222 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package ilightclient + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// Ics23Proof is an auto generated low-level Go binding around an user-defined struct. +type Ics23Proof struct { + Proof []OpIcs23Proof + Height *big.Int +} + +// OpIcs23Proof is an auto generated low-level Go binding around an user-defined struct. +type OpIcs23Proof struct { + Path []OpIcs23ProofPath + Key []byte + Value []byte + Prefix []byte +} + +// OpIcs23ProofPath is an auto generated low-level Go binding around an user-defined struct. +type OpIcs23ProofPath struct { + Prefix []byte + Suffix []byte +} + +// IMembershipVerifierMetaData contains all meta data concerning the IMembershipVerifier contract. +var IMembershipVerifierMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"function\",\"name\":\"verifyMembership\",\"inputs\":[{\"name\":\"proof\",\"type\":\"tuple\",\"internalType\":\"structIcs23Proof\",\"components\":[{\"name\":\"proof\",\"type\":\"tuple[]\",\"internalType\":\"structOpIcs23Proof[]\",\"components\":[{\"name\":\"path\",\"type\":\"tuple[]\",\"internalType\":\"structOpIcs23ProofPath[]\",\"components\":[{\"name\":\"prefix\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"suffix\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"key\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"value\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"prefix\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"height\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"key\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"expectedValue\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"}]", +} + +// IMembershipVerifierABI is the input ABI used to generate the binding from. +// Deprecated: Use IMembershipVerifierMetaData.ABI instead. +var IMembershipVerifierABI = IMembershipVerifierMetaData.ABI + +// IMembershipVerifier is an auto generated Go binding around an Ethereum contract. +type IMembershipVerifier struct { + IMembershipVerifierCaller // Read-only binding to the contract + IMembershipVerifierTransactor // Write-only binding to the contract + IMembershipVerifierFilterer // Log filterer for contract events +} + +// IMembershipVerifierCaller is an auto generated read-only Go binding around an Ethereum contract. +type IMembershipVerifierCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IMembershipVerifierTransactor is an auto generated write-only Go binding around an Ethereum contract. +type IMembershipVerifierTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IMembershipVerifierFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type IMembershipVerifierFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IMembershipVerifierSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type IMembershipVerifierSession struct { + Contract *IMembershipVerifier // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IMembershipVerifierCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type IMembershipVerifierCallerSession struct { + Contract *IMembershipVerifierCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// IMembershipVerifierTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type IMembershipVerifierTransactorSession struct { + Contract *IMembershipVerifierTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IMembershipVerifierRaw is an auto generated low-level Go binding around an Ethereum contract. +type IMembershipVerifierRaw struct { + Contract *IMembershipVerifier // Generic contract binding to access the raw methods on +} + +// IMembershipVerifierCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type IMembershipVerifierCallerRaw struct { + Contract *IMembershipVerifierCaller // Generic read-only contract binding to access the raw methods on +} + +// IMembershipVerifierTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type IMembershipVerifierTransactorRaw struct { + Contract *IMembershipVerifierTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewIMembershipVerifier creates a new instance of IMembershipVerifier, bound to a specific deployed contract. +func NewIMembershipVerifier(address common.Address, backend bind.ContractBackend) (*IMembershipVerifier, error) { + contract, err := bindIMembershipVerifier(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &IMembershipVerifier{IMembershipVerifierCaller: IMembershipVerifierCaller{contract: contract}, IMembershipVerifierTransactor: IMembershipVerifierTransactor{contract: contract}, IMembershipVerifierFilterer: IMembershipVerifierFilterer{contract: contract}}, nil +} + +// NewIMembershipVerifierCaller creates a new read-only instance of IMembershipVerifier, bound to a specific deployed contract. +func NewIMembershipVerifierCaller(address common.Address, caller bind.ContractCaller) (*IMembershipVerifierCaller, error) { + contract, err := bindIMembershipVerifier(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &IMembershipVerifierCaller{contract: contract}, nil +} + +// NewIMembershipVerifierTransactor creates a new write-only instance of IMembershipVerifier, bound to a specific deployed contract. +func NewIMembershipVerifierTransactor(address common.Address, transactor bind.ContractTransactor) (*IMembershipVerifierTransactor, error) { + contract, err := bindIMembershipVerifier(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &IMembershipVerifierTransactor{contract: contract}, nil +} + +// NewIMembershipVerifierFilterer creates a new log filterer instance of IMembershipVerifier, bound to a specific deployed contract. +func NewIMembershipVerifierFilterer(address common.Address, filterer bind.ContractFilterer) (*IMembershipVerifierFilterer, error) { + contract, err := bindIMembershipVerifier(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &IMembershipVerifierFilterer{contract: contract}, nil +} + +// bindIMembershipVerifier binds a generic wrapper to an already deployed contract. +func bindIMembershipVerifier(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := IMembershipVerifierMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_IMembershipVerifier *IMembershipVerifierRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IMembershipVerifier.Contract.IMembershipVerifierCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_IMembershipVerifier *IMembershipVerifierRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IMembershipVerifier.Contract.IMembershipVerifierTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IMembershipVerifier *IMembershipVerifierRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IMembershipVerifier.Contract.IMembershipVerifierTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_IMembershipVerifier *IMembershipVerifierCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IMembershipVerifier.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_IMembershipVerifier *IMembershipVerifierTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IMembershipVerifier.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IMembershipVerifier *IMembershipVerifierTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IMembershipVerifier.Contract.contract.Transact(opts, method, params...) +} + +// VerifyMembership is a paid mutator transaction binding the contract method 0xcb535ab5. +// +// Solidity: function verifyMembership((((bytes,bytes)[],bytes,bytes,bytes)[],uint256) proof, bytes key, bytes expectedValue) returns() +func (_IMembershipVerifier *IMembershipVerifierTransactor) VerifyMembership(opts *bind.TransactOpts, proof Ics23Proof, key []byte, expectedValue []byte) (*types.Transaction, error) { + return _IMembershipVerifier.contract.Transact(opts, "verifyMembership", proof, key, expectedValue) +} + +// VerifyMembership is a paid mutator transaction binding the contract method 0xcb535ab5. +// +// Solidity: function verifyMembership((((bytes,bytes)[],bytes,bytes,bytes)[],uint256) proof, bytes key, bytes expectedValue) returns() +func (_IMembershipVerifier *IMembershipVerifierSession) VerifyMembership(proof Ics23Proof, key []byte, expectedValue []byte) (*types.Transaction, error) { + return _IMembershipVerifier.Contract.VerifyMembership(&_IMembershipVerifier.TransactOpts, proof, key, expectedValue) +} + +// VerifyMembership is a paid mutator transaction binding the contract method 0xcb535ab5. +// +// Solidity: function verifyMembership((((bytes,bytes)[],bytes,bytes,bytes)[],uint256) proof, bytes key, bytes expectedValue) returns() +func (_IMembershipVerifier *IMembershipVerifierTransactorSession) VerifyMembership(proof Ics23Proof, key []byte, expectedValue []byte) (*types.Transaction, error) { + return _IMembershipVerifier.Contract.VerifyMembership(&_IMembershipVerifier.TransactOpts, proof, key, expectedValue) +} diff --git a/bindings/go/ilightclient/INonMembershipVerifier.go b/bindings/go/ilightclient/INonMembershipVerifier.go new file mode 100644 index 00000000..8c2de30c --- /dev/null +++ b/bindings/go/ilightclient/INonMembershipVerifier.go @@ -0,0 +1,222 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package ilightclient + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// Ics23Proof is an auto generated low-level Go binding around an user-defined struct. +type Ics23Proof struct { + Proof []OpIcs23Proof + Height *big.Int +} + +// OpIcs23Proof is an auto generated low-level Go binding around an user-defined struct. +type OpIcs23Proof struct { + Path []OpIcs23ProofPath + Key []byte + Value []byte + Prefix []byte +} + +// OpIcs23ProofPath is an auto generated low-level Go binding around an user-defined struct. +type OpIcs23ProofPath struct { + Prefix []byte + Suffix []byte +} + +// INonMembershipVerifierMetaData contains all meta data concerning the INonMembershipVerifier contract. +var INonMembershipVerifierMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"function\",\"name\":\"verifyNonMembership\",\"inputs\":[{\"name\":\"proof\",\"type\":\"tuple\",\"internalType\":\"structIcs23Proof\",\"components\":[{\"name\":\"proof\",\"type\":\"tuple[]\",\"internalType\":\"structOpIcs23Proof[]\",\"components\":[{\"name\":\"path\",\"type\":\"tuple[]\",\"internalType\":\"structOpIcs23ProofPath[]\",\"components\":[{\"name\":\"prefix\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"suffix\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"key\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"value\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"prefix\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"height\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"key\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"}]", +} + +// INonMembershipVerifierABI is the input ABI used to generate the binding from. +// Deprecated: Use INonMembershipVerifierMetaData.ABI instead. +var INonMembershipVerifierABI = INonMembershipVerifierMetaData.ABI + +// INonMembershipVerifier is an auto generated Go binding around an Ethereum contract. +type INonMembershipVerifier struct { + INonMembershipVerifierCaller // Read-only binding to the contract + INonMembershipVerifierTransactor // Write-only binding to the contract + INonMembershipVerifierFilterer // Log filterer for contract events +} + +// INonMembershipVerifierCaller is an auto generated read-only Go binding around an Ethereum contract. +type INonMembershipVerifierCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// INonMembershipVerifierTransactor is an auto generated write-only Go binding around an Ethereum contract. +type INonMembershipVerifierTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// INonMembershipVerifierFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type INonMembershipVerifierFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// INonMembershipVerifierSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type INonMembershipVerifierSession struct { + Contract *INonMembershipVerifier // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// INonMembershipVerifierCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type INonMembershipVerifierCallerSession struct { + Contract *INonMembershipVerifierCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// INonMembershipVerifierTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type INonMembershipVerifierTransactorSession struct { + Contract *INonMembershipVerifierTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// INonMembershipVerifierRaw is an auto generated low-level Go binding around an Ethereum contract. +type INonMembershipVerifierRaw struct { + Contract *INonMembershipVerifier // Generic contract binding to access the raw methods on +} + +// INonMembershipVerifierCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type INonMembershipVerifierCallerRaw struct { + Contract *INonMembershipVerifierCaller // Generic read-only contract binding to access the raw methods on +} + +// INonMembershipVerifierTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type INonMembershipVerifierTransactorRaw struct { + Contract *INonMembershipVerifierTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewINonMembershipVerifier creates a new instance of INonMembershipVerifier, bound to a specific deployed contract. +func NewINonMembershipVerifier(address common.Address, backend bind.ContractBackend) (*INonMembershipVerifier, error) { + contract, err := bindINonMembershipVerifier(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &INonMembershipVerifier{INonMembershipVerifierCaller: INonMembershipVerifierCaller{contract: contract}, INonMembershipVerifierTransactor: INonMembershipVerifierTransactor{contract: contract}, INonMembershipVerifierFilterer: INonMembershipVerifierFilterer{contract: contract}}, nil +} + +// NewINonMembershipVerifierCaller creates a new read-only instance of INonMembershipVerifier, bound to a specific deployed contract. +func NewINonMembershipVerifierCaller(address common.Address, caller bind.ContractCaller) (*INonMembershipVerifierCaller, error) { + contract, err := bindINonMembershipVerifier(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &INonMembershipVerifierCaller{contract: contract}, nil +} + +// NewINonMembershipVerifierTransactor creates a new write-only instance of INonMembershipVerifier, bound to a specific deployed contract. +func NewINonMembershipVerifierTransactor(address common.Address, transactor bind.ContractTransactor) (*INonMembershipVerifierTransactor, error) { + contract, err := bindINonMembershipVerifier(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &INonMembershipVerifierTransactor{contract: contract}, nil +} + +// NewINonMembershipVerifierFilterer creates a new log filterer instance of INonMembershipVerifier, bound to a specific deployed contract. +func NewINonMembershipVerifierFilterer(address common.Address, filterer bind.ContractFilterer) (*INonMembershipVerifierFilterer, error) { + contract, err := bindINonMembershipVerifier(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &INonMembershipVerifierFilterer{contract: contract}, nil +} + +// bindINonMembershipVerifier binds a generic wrapper to an already deployed contract. +func bindINonMembershipVerifier(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := INonMembershipVerifierMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_INonMembershipVerifier *INonMembershipVerifierRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _INonMembershipVerifier.Contract.INonMembershipVerifierCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_INonMembershipVerifier *INonMembershipVerifierRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _INonMembershipVerifier.Contract.INonMembershipVerifierTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_INonMembershipVerifier *INonMembershipVerifierRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _INonMembershipVerifier.Contract.INonMembershipVerifierTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_INonMembershipVerifier *INonMembershipVerifierCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _INonMembershipVerifier.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_INonMembershipVerifier *INonMembershipVerifierTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _INonMembershipVerifier.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_INonMembershipVerifier *INonMembershipVerifierTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _INonMembershipVerifier.Contract.contract.Transact(opts, method, params...) +} + +// VerifyNonMembership is a paid mutator transaction binding the contract method 0xfdaab4e5. +// +// Solidity: function verifyNonMembership((((bytes,bytes)[],bytes,bytes,bytes)[],uint256) proof, bytes key) returns() +func (_INonMembershipVerifier *INonMembershipVerifierTransactor) VerifyNonMembership(opts *bind.TransactOpts, proof Ics23Proof, key []byte) (*types.Transaction, error) { + return _INonMembershipVerifier.contract.Transact(opts, "verifyNonMembership", proof, key) +} + +// VerifyNonMembership is a paid mutator transaction binding the contract method 0xfdaab4e5. +// +// Solidity: function verifyNonMembership((((bytes,bytes)[],bytes,bytes,bytes)[],uint256) proof, bytes key) returns() +func (_INonMembershipVerifier *INonMembershipVerifierSession) VerifyNonMembership(proof Ics23Proof, key []byte) (*types.Transaction, error) { + return _INonMembershipVerifier.Contract.VerifyNonMembership(&_INonMembershipVerifier.TransactOpts, proof, key) +} + +// VerifyNonMembership is a paid mutator transaction binding the contract method 0xfdaab4e5. +// +// Solidity: function verifyNonMembership((((bytes,bytes)[],bytes,bytes,bytes)[],uint256) proof, bytes key) returns() +func (_INonMembershipVerifier *INonMembershipVerifierTransactorSession) VerifyNonMembership(proof Ics23Proof, key []byte) (*types.Transaction, error) { + return _INonMembershipVerifier.Contract.VerifyNonMembership(&_INonMembershipVerifier.TransactOpts, proof, key) +} diff --git a/contracts/base/AppStateVerifier.sol b/contracts/base/AppStateVerifier.sol index e9f2dbf2..51dea2df 100644 --- a/contracts/base/AppStateVerifier.sol +++ b/contracts/base/AppStateVerifier.sol @@ -44,8 +44,8 @@ abstract contract AppStateVerifier is IAppStateVerifier { * The cosmos SDK and ics23 support chained proofs to switch between different proof specs. * Custom proof specs are not supported here. Only Iavl and Tendermint or similar proof specs are supported. */ - function verifyMembership(bytes32 appHash, bytes calldata key, bytes calldata value, Ics23Proof calldata proofs) - external + function verifyMembership(bytes32 appHash, bytes memory key, bytes memory value, Ics23Proof calldata proofs) + public pure { // first check that the provided proof indeed proves the keys and values. diff --git a/contracts/core/OptimisticLightClient.sol b/contracts/core/OptimisticLightClient.sol index 4db90f3c..a6a2a8ca 100644 --- a/contracts/core/OptimisticLightClient.sol +++ b/contracts/core/OptimisticLightClient.sol @@ -55,7 +55,13 @@ contract OptimisticLightClient is IOptimisticLightClient { } /** - * @inheritdoc ILightClient + * @dev Adds an appHash to the internal store, after verifying the client update proof associated with the light + * client implementation. + * @param proof A generic byte array that contains proof data to prove the apphash client update. This can differ + * depending on the light client type. E.g. this can be an abi.encoded struct which contains an OpL2StateProof and + * L1Block from the IProofVerifier + * interface. + * @param polymerAppHash App hash (state root) to be verified */ function updateClient(bytes calldata proof, uint256 polymerHeight, uint256 polymerAppHash) external override { (L1Header memory l1header, OpL2StateProof memory stateProof) = abi.decode(proof, (L1Header, OpL2StateProof)); @@ -94,7 +100,9 @@ contract OptimisticLightClient is IOptimisticLightClient { } /** - * @inheritdoc ILightClient + * @dev Checks if the current trusted optimistic consensus state + * can be used to perform the membership test and if so, verifies the proof + * @dev reverts if the proof is not valid (i.e. if the key is not included in the proof) */ function verifyMembership(Ics23Proof calldata proof, bytes calldata key, bytes calldata expectedValue) external @@ -109,7 +117,7 @@ contract OptimisticLightClient is IOptimisticLightClient { } /** - * @inheritdoc ILightClient + * @dev Verifies that the given key is not included in the proof */ function verifyNonMembership(Ics23Proof calldata proof, bytes calldata key) external view { (uint256 polymerAppHash,, bool ended) = _getStateAndEndTime(proof.height - 1); diff --git a/contracts/core/SequencerSoloClient.sol b/contracts/core/SequencerSoloClient.sol index 464c68a4..6e75259d 100644 --- a/contracts/core/SequencerSoloClient.sol +++ b/contracts/core/SequencerSoloClient.sol @@ -54,7 +54,9 @@ contract SequencerSoloClient is ILightClient { } /** - * @inheritdoc ILightClient + * @dev Adds an appHash to the internal store, after verifying the client update proof associated with the light + * client implementation. + * @param peptideAppHash App hash (state root) to be verified * @param proof An array of bytes that contain the l1blockhash and the sequencer's signature. The first 32 bytes of * this argument should be the l1BlockHash, and the remaining bytes should be the sequencer signature which attests * to the peptide AppHash @@ -75,7 +77,9 @@ contract SequencerSoloClient is ILightClient { } /** - * @inheritdoc ILightClient + * @dev Checks if the current trusted optimistic consensus state + * can be used to perform the membership test and if so, verifies the proof + * @dev reverts if the proof is not valid (i.e. if the key is not included in the proof) */ function verifyMembership(Ics23Proof calldata proof, bytes calldata key, bytes calldata expectedValue) external @@ -88,7 +92,7 @@ contract SequencerSoloClient is ILightClient { } /** - * @inheritdoc ILightClient + * @dev Verifies that the given key is not included in the proof */ function verifyNonMembership(Ics23Proof calldata, bytes calldata) external pure { revert NonMembershipProofsNotYetImplemented(); diff --git a/contracts/core/proofAPI/CrossL2Prover.sol b/contracts/core/proofAPI/CrossL2Prover.sol new file mode 100644 index 00000000..f25e892a --- /dev/null +++ b/contracts/core/proofAPI/CrossL2Prover.sol @@ -0,0 +1,143 @@ +// SPDX-License-Identifier: Apache-2.0 +/* + * Copyright 2024, Polymer Labs + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +pragma solidity ^0.8.0; + +import {RLPReader} from "optimism/libraries/rlp/RLPReader.sol"; +import {MerkleTrie} from "optimism/libraries/trie/MerkleTrie.sol"; +import {Bytes} from "optimism/libraries/Bytes.sol"; +import {PolymerProofs} from "../../libs/PolymerProofs.sol"; +import {AppStateVerifier} from "../../base/AppStateVerifier.sol"; +import {ICrossL2Prover} from "../../interfaces/ICrossL2Prover.sol"; +import {Ics23Proof} from "../../interfaces/IProofVerifier.sol"; +import {ISignatureVerifier} from "../../interfaces/ISignatureVerifier.sol"; +import {LightClientType} from "../../interfaces/ILightClient.sol"; + +contract CrossL2Prover is AppStateVerifier, ICrossL2Prover { + LightClientType public constant LIGHT_CLIENT_TYPE = LightClientType.SequencerLightClient; // Stored as a constant + // for cheap on-chain use + + string public peptideClientId; + ISignatureVerifier public immutable verifier; + + // Store peptide apphashes for a given height + mapping(uint256 => uint256) public peptideAppHashes; + + error CannotUpdateClientWithDifferentAppHash(); + + constructor(ISignatureVerifier verifier_, string memory peptideClientId_) { + verifier = verifier_; + peptideClientId = peptideClientId_; + } + + /** + * @inheritdoc ICrossL2Prover + */ + function validateReceipt(bytes calldata receiptIndex, bytes calldata receiptRLPEncodedBytes, bytes calldata proof) + public + view + returns (bool valid) + { + (Ics23Proof memory peptideAppProof, bytes[] memory receiptMMPTProof, bytes32 receiptRoot, uint64 eventHeight) = + abi.decode(proof, (Ics23Proof, bytes[], bytes32, uint64)); + // Before we can trust the receipt root, we first need to verify that the receipt root is indeed stored + // on peptide at the given clientID and height. + + // VerifyMembership verifies the receipt root through an ics23 proof of peptide state that attests that the + // given eventHeight has the receipt root at the peptide height + this.verifyMembership( + bytes32(_getPeptideAppHash(peptideAppProof.height)), + PolymerProofs.receiptProofKey(peptideClientId, eventHeight), + abi.encodePacked(receiptRoot), + peptideAppProof + ); + + // Now that verifyMembership passed, we can now trust the receiptRoot. + // Now we just simply have to prove that raw receipt is indeed part of the receipt root at the given receipt + // index. + // This is done through a Merkle proof. + valid = MerkleTrie.verifyInclusionProof( + abi.encodePacked(receiptIndex), receiptRLPEncodedBytes, receiptMMPTProof, receiptRoot + ); + } + + function validateEvent( + bytes calldata receiptIndex, + bytes calldata receiptRLPEncodedBytes, + uint256 logIndex, + bytes calldata logBytes, + bytes calldata proof + ) external view returns (bool) { + // First we validate an event by validating the receipt + if (!validateReceipt(receiptIndex, receiptRLPEncodedBytes, proof)) { + return false; + } + + // The first byte is a RLP encoded receipt type so slice it off. + RLPReader.RLPItem[] memory receipt = + RLPReader.readList(Bytes.slice(receiptRLPEncodedBytes, 1, receiptRLPEncodedBytes.length - 1)); + /* + // RLP encoded receipt has the following structure. Logs are the 4th RLP list item. + type ReceiptRLP struct { + PostStateOrStatus []byte + CumulativeGasUsed uint64 + Bloom Bloom + Logs []*Log + } + */ + RLPReader.RLPItem[] memory logs = RLPReader.readList(receipt[3]); + + // Then we decode the rlp bytes and check that the logBytes is the same as the log at the given index + return keccak256(RLPReader.readRawBytes(logs[logIndex])) == keccak256(logBytes); + } + + /** + * @dev Adds an appHash to the internal store, after verifying the client update proof associated with the light + * client implementation. + * @param peptideAppHash App hash (state root) to be verified + * @param proof An array of bytes that contain the l1blockhash and the sequencer's signature. The first 32 bytes of + * this argument should be the l1BlockHash, and the remaining bytes should be the sequencer signature which attests + * to the peptide AppHash + * for that l1BlockHash + */ + function updateClient(bytes calldata proof, uint256 peptideHeight, uint256 peptideAppHash) external { + _updateClient(proof, peptideHeight, peptideAppHash); + } + + function getState(uint256 height) external view returns (uint256) { + return _getPeptideAppHash(height); + } + + function _getPeptideAppHash(uint256 _height) internal view returns (uint256) { + return peptideAppHashes[_height]; + } + + function _updateClient(bytes calldata proof, uint256 peptideHeight, uint256 peptideAppHash) internal { + if (peptideAppHashes[peptideHeight] != 0) { + // Note: we don't cache peptideAppHash[peptideHeight] in mem for gas savings here because this if + // statement + // would not be triggered too often, and would make the more frequent branch more expensive due to mem + // allocation. + if (peptideAppHashes[peptideHeight] != peptideAppHash) { + revert CannotUpdateClientWithDifferentAppHash(); + } + return; + } + verifier.verifyStateUpdate(peptideHeight, bytes32(peptideAppHash), bytes32(proof[:32]), proof[32:]); + peptideAppHashes[peptideHeight] = peptideAppHash; + } +} diff --git a/contracts/interfaces/ICrossL2Prover.sol b/contracts/interfaces/ICrossL2Prover.sol new file mode 100644 index 00000000..28c59506 --- /dev/null +++ b/contracts/interfaces/ICrossL2Prover.sol @@ -0,0 +1,93 @@ +// SPDX-License-Identifier: Apache-2.0 +/* + * Copyright 2024, Polymer Labs + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +pragma solidity ^0.8.0; + +import {Ics23Proof} from "./IProofVerifier.sol"; +import {IClientUpdates} from "./ILightClient.sol"; + +/** + * @title ICrossL2Prover + * @author Polymer Labs + * @notice A contract that can prove peptides state. Since peptide is an aggregator of many chains' states, this + * contract can in turn be used to prove any arbitrary events and/or storage on counterparty chains. + */ +interface ICrossL2Prover is IClientUpdates { + struct EventProof { + Ics23Proof iavlProof; // Proof that the receipt root exists within an iavl tree at a given apphash stored in + // this contract + bytes[] receiptMMPTProof; // A modified Merkle Patricia tree proof that proves the raw RLP receipt bytes are + // included in the receipt root + bytes32 receiptRoot; // The receipt root that is is proven against in the MMPT proof + uint64 eventHeight; // The source L2 block the receipt or event we are trying to prove was emitted in. The + // receiptRoot of the block at this eight should be the the same as the receipt root given in this struct + } + + /** + * @notice Validates a cross chain receipt from a couterparty chain + * @notice Some of the data needed to call this method will be returned by polymer's proof api. This method should + * only be + * called after we are certain that polymer's relayer has called updateClient on this contract to update this light + * client + * @param receiptIndex: The index of the receipt in the block. This is the same as the key the receipt bytes are + * stored in the MMPT. + * @param receiptRLPEncodedBytes: The raw rlp encoded bytes of the whole receipt object we are trying to prove, this + * is the value stored in the MMPT + * @param proof: The proof data needed to prove the receipt. This is returned from Polymer's proof API and should + * be passed in as is. This is generally an opaque bytes object but it is constructed through abi encoding the proof + * fields from the above EventProof struct in this interface. See the struct for per-property documentation. + * @return valid A boolean indicating if the proof was successful and can be trusted on this chain or not. Once the + * raw receipt has been proven, logs can be fetched from the raw receipt: + * type ReceiptRLP struct { + * PostStateOrStatus []byte + * CumulativeGasUsed uint64 + * Bloom Bloom + * Logs []*Log + * } + */ + function validateReceipt(bytes calldata receiptIndex, bytes calldata receiptRLPEncodedBytes, bytes calldata proof) + external + returns (bool); + + /** + * @notice Validates a cross chain event from a couterparty chain + * @notice Some of the data needed to call this method will be returned by polymer's proof api. This method should + * only be called after we are certain that polymer's relayer has called updateClient on this contract to update + * this light client + * @param receiptIndex: The index of the receipt in the block. This is the same as the key the receipt bytes are + * stored in the MMPT. + * @param receiptRLPEncodedBytes: The raw rlp encoded bytes of the whole receipt object we are trying to prove, this + * is the value stored in the MMPT + * @param logIndex: The index of the log in the logs array of the receipt. NOTE: This is not the log index within + * the block, only the log index within the receipt. + * @param logBytes: The raw bytes of the log we are trying to prove. This is the value stored in the MMPT. + * @param proof: The proof data needed to prove the receipt. This is returned from Polymer's proof API and should + * be passed in as is. This is generally an opaque bytes object but it is constructed through abi encoding the proof + * fields from the above EventProof struct in this interface. See the struct for per-property documentation. + */ + function validateEvent( + bytes calldata receiptIndex, + bytes calldata receiptRLPEncodedBytes, + uint256 logIndex, + bytes calldata logBytes, + bytes calldata proof + ) external returns (bool); + + /** + * Returns the peptide at a given apphash at a given height, + */ + function getState(uint256 height) external view returns (uint256); +} diff --git a/contracts/interfaces/ILightClient.sol b/contracts/interfaces/ILightClient.sol index 6a23f0f6..0064e64e 100644 --- a/contracts/interfaces/ILightClient.sol +++ b/contracts/interfaces/ILightClient.sol @@ -21,18 +21,14 @@ import {Ics23Proof} from "./IProofVerifier.sol"; enum LightClientType { SimTestLightClient, // Note: not deployed on any mainnets OptimisticLightClient, // Our native opstack light client - SequencerLightClient // Our native sequencer light client + SequencerLightClient, // Our native sequencer light client, which does not check l1 origin check to cut down on + // latency + ReOrgResistantSequencerLightClient // Our native sequencer light client, which checks for l1 origin checks to be + // re-org resistant } -/** - * @title ILightClient - * @author Polymer Labs - * @notice A contract that manages the merkle root(appHash) at different block heights of a chain and tracks the fraud - * proof end time for them. - * @notice This is used for state inclusion proofs - */ -interface ILightClient { +interface IClientUpdates { /** * @dev Adds an appHash to the internal store, after verifying the client update proof associated with the light * client implementation. @@ -44,26 +40,39 @@ interface ILightClient { */ function updateClient(bytes calldata proof, uint256 height, uint256 appHash) external; + /* + * Returns the type of the light client, useful for relayers to know which light client implementation is at which + address. + */ + function LIGHT_CLIENT_TYPE() external view returns (LightClientType); +} + +interface IMembershipVerifier { /** * @dev Checks if the current trusted optimistic consensus state * can be used to perform the membership test and if so, verifies the proof * @dev reverts if the proof is not valid (i.e. if the key is not included in the proof) */ - function verifyMembership(Ics23Proof calldata proof, bytes memory key, bytes memory expectedValue) external; + function verifyMembership(Ics23Proof calldata proof, bytes calldata key, bytes memory expectedValue) external; +} +interface INonMembershipVerifier { /** * @dev Verifies that the given key is not included in the proof */ - function verifyNonMembership(Ics23Proof calldata proof, bytes memory key) external; + function verifyNonMembership(Ics23Proof calldata proof, bytes calldata key) external; +} +/** + * @title ILightClient + * @author Polymer Labs + * @notice A contract that manages the merkle root(appHash) at different block heights of a chain and tracks the fraud + * proof end time for them. + * @notice This is used for state inclusion proofs + */ +interface ILightClient is IClientUpdates, IMembershipVerifier, INonMembershipVerifier { /** * Returns the apphash at a given height */ function getState(uint256 height) external view returns (uint256); - - /* - * Returns the type of the light client, useful for relayers to know which light client implementation is at which - address. - */ - function LIGHT_CLIENT_TYPE() external view returns (LightClientType); } diff --git a/contracts/libs/PolymerProofs.sol b/contracts/libs/PolymerProofs.sol new file mode 100644 index 00000000..bdb54fc6 --- /dev/null +++ b/contracts/libs/PolymerProofs.sol @@ -0,0 +1,27 @@ +// SPDX-License-Identifier: Apache-2.0 +/* + * Copyright 2024, Polymer Labs + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +pragma solidity ^0.8.0; + +/** + * A library for helpers for proving peptide state + */ +library PolymerProofs { + function receiptProofKey(string memory clientId, uint64 height) internal pure returns (bytes memory proofKey) { + proofKey = abi.encodePacked("polyibc/client/", clientId, "/receiptRoot/", height); + } +} diff --git a/package-lock.json b/package-lock.json index 5916fdd1..f7b3ddc5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@open-ibc/vibc-core-smart-contracts", - "version": "4.0.9", + "version": "4.0.11", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@open-ibc/vibc-core-smart-contracts", - "version": "4.0.9", + "version": "4.0.11", "license": "MIT", "dependencies": { "@commander-js/extra-typings": "^12.1.0", @@ -1052,81 +1052,89 @@ } }, "node_modules/@nomicfoundation/edr": { - "version": "0.4.0", + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr/-/edr-0.6.5.tgz", + "integrity": "sha512-tAqMslLP+/2b2sZP4qe9AuGxG3OkQ5gGgHE4isUuq6dUVjwCRPFhAOhpdFl+OjY5P3yEv3hmq9HjUGRa2VNjng==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { - "@nomicfoundation/edr-darwin-arm64": "0.4.0", - "@nomicfoundation/edr-darwin-x64": "0.4.0", - "@nomicfoundation/edr-linux-arm64-gnu": "0.4.0", - "@nomicfoundation/edr-linux-arm64-musl": "0.4.0", - "@nomicfoundation/edr-linux-x64-gnu": "0.4.0", - "@nomicfoundation/edr-linux-x64-musl": "0.4.0", - "@nomicfoundation/edr-win32-x64-msvc": "0.4.0" + "@nomicfoundation/edr-darwin-arm64": "0.6.5", + "@nomicfoundation/edr-darwin-x64": "0.6.5", + "@nomicfoundation/edr-linux-arm64-gnu": "0.6.5", + "@nomicfoundation/edr-linux-arm64-musl": "0.6.5", + "@nomicfoundation/edr-linux-x64-gnu": "0.6.5", + "@nomicfoundation/edr-linux-x64-musl": "0.6.5", + "@nomicfoundation/edr-win32-x64-msvc": "0.6.5" }, "engines": { "node": ">= 18" } }, "node_modules/@nomicfoundation/edr-darwin-arm64": { - "version": "0.4.0", + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.6.5.tgz", + "integrity": "sha512-A9zCCbbNxBpLgjS1kEJSpqxIvGGAX4cYbpDYCU2f3jVqOwaZ/NU761y1SvuCRVpOwhoCXqByN9b7HPpHi0L4hw==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">= 18" } }, "node_modules/@nomicfoundation/edr-darwin-x64": { - "version": "0.4.0", + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.6.5.tgz", + "integrity": "sha512-x3zBY/v3R0modR5CzlL6qMfFMdgwd6oHrWpTkuuXnPFOX8SU31qq87/230f4szM+ukGK8Hi+mNq7Ro2VF4Fj+w==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">= 18" } }, "node_modules/@nomicfoundation/edr-linux-arm64-gnu": { - "version": "0.4.0", + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.6.5.tgz", + "integrity": "sha512-HGpB8f1h8ogqPHTyUpyPRKZxUk2lu061g97dOQ/W4CxevI0s/qiw5DB3U3smLvSnBHKOzYS1jkxlMeGN01ky7A==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">= 18" } }, "node_modules/@nomicfoundation/edr-linux-arm64-musl": { - "version": "0.4.0", + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.6.5.tgz", + "integrity": "sha512-ESvJM5Y9XC03fZg9KaQg3Hl+mbx7dsSkTIAndoJS7X2SyakpL9KZpOSYrDk135o8s9P9lYJdPOyiq+Sh+XoCbQ==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">= 18" } }, "node_modules/@nomicfoundation/edr-linux-x64-gnu": { - "version": "0.4.0", + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.6.5.tgz", + "integrity": "sha512-HCM1usyAR1Ew6RYf5AkMYGvHBy64cPA5NMbaeY72r0mpKaH3txiMyydcHibByOGdQ8iFLWpyUdpl1egotw+Tgg==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">= 18" } }, "node_modules/@nomicfoundation/edr-linux-x64-musl": { - "version": "0.4.0", + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.6.5.tgz", + "integrity": "sha512-nB2uFRyczhAvWUH7NjCsIO6rHnQrof3xcCe6Mpmnzfl2PYcGyxN7iO4ZMmRcQS7R1Y670VH6+8ZBiRn8k43m7A==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">= 18" } }, "node_modules/@nomicfoundation/edr-win32-x64-msvc": { - "version": "0.4.0", + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.6.5.tgz", + "integrity": "sha512-B9QD/4DSSCFtWicO8A3BrsnitO1FPv7axB62wq5Q+qeJ50yJlTmyeGY3cw62gWItdvy2mh3fRM6L1LpnHiB77A==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">= 18" @@ -2914,8 +2922,9 @@ }, "node_modules/command-exists": { "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/command-line-args": { @@ -3058,9 +3067,10 @@ "peer": true }, "node_modules/cross-spawn": { - "version": "7.0.3", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, - "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -4102,7 +4112,9 @@ "license": "MIT" }, "node_modules/follow-redirects": { - "version": "1.15.6", + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", "dev": true, "funding": [ { @@ -4110,7 +4122,6 @@ "url": "https://github.com/sponsors/RubenVerborgh" } ], - "license": "MIT", "peer": true, "engines": { "node": ">=4.0" @@ -4414,14 +4425,15 @@ } }, "node_modules/hardhat": { - "version": "2.22.5", + "version": "2.22.16", + "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.22.16.tgz", + "integrity": "sha512-d52yQZ09u0roL6GlgJSvtknsBtIuj9JrJ/U8VMzr/wue+gO5v2tQayvOX6llerlR57Zw2EOTQjLAt6RpHvjwHA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@ethersproject/abi": "^5.1.2", "@metamask/eth-sig-util": "^4.0.0", - "@nomicfoundation/edr": "^0.4.0", + "@nomicfoundation/edr": "^0.6.4", "@nomicfoundation/ethereumjs-common": "4.0.4", "@nomicfoundation/ethereumjs-tx": "5.0.4", "@nomicfoundation/ethereumjs-util": "9.0.4", @@ -4433,31 +4445,32 @@ "aggregate-error": "^3.0.0", "ansi-escapes": "^4.3.0", "boxen": "^5.1.2", - "chalk": "^2.4.2", - "chokidar": "^3.4.0", + "chokidar": "^4.0.0", "ci-info": "^2.0.0", "debug": "^4.1.1", "enquirer": "^2.3.0", "env-paths": "^2.2.0", "ethereum-cryptography": "^1.0.3", "ethereumjs-abi": "^0.6.8", - "find-up": "^2.1.0", + "find-up": "^5.0.0", "fp-ts": "1.19.3", "fs-extra": "^7.0.1", - "glob": "7.2.0", "immutable": "^4.0.0-rc.12", "io-ts": "1.10.4", + "json-stream-stringify": "^3.1.4", "keccak": "^3.0.2", "lodash": "^4.17.11", "mnemonist": "^0.38.0", "mocha": "^10.0.0", "p-map": "^4.0.0", + "picocolors": "^1.1.0", "raw-body": "^2.4.1", "resolve": "1.17.0", "semver": "^6.3.0", - "solc": "0.7.3", + "solc": "0.8.26", "source-map-support": "^0.5.13", "stacktrace-parser": "^0.1.10", + "tinyglobby": "^0.2.6", "tsort": "0.0.1", "undici": "^5.14.0", "uuid": "^8.3.2", @@ -4479,6 +4492,22 @@ } } }, + "node_modules/hardhat/node_modules/chokidar": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.1.tgz", + "integrity": "sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==", + "dev": true, + "peer": true, + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/hardhat/node_modules/ethereum-cryptography": { "version": "1.2.0", "dev": true, @@ -4536,64 +4565,6 @@ "@scure/base": "~1.1.0" } }, - "node_modules/hardhat/node_modules/find-up": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hardhat/node_modules/find-up/node_modules/locate-path": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hardhat/node_modules/find-up/node_modules/locate-path/node_modules/p-locate": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hardhat/node_modules/find-up/node_modules/locate-path/node_modules/p-locate/node_modules/p-limit": { - "version": "1.3.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hardhat/node_modules/find-up/node_modules/locate-path/node_modules/path-exists": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=4" - } - }, "node_modules/hardhat/node_modules/fs-extra": { "version": "7.0.1", "dev": true, @@ -4608,46 +4579,18 @@ "node": ">=6 <7 || >=8" } }, - "node_modules/hardhat/node_modules/glob": { - "version": "7.2.0", + "node_modules/hardhat/node_modules/readdirp": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz", + "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==", "dev": true, - "license": "ISC", "peer": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, "engines": { - "node": "*" + "node": ">= 14.16.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/hardhat/node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/hardhat/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "type": "individual", + "url": "https://paulmillr.com/funding/" } }, "node_modules/hardhat/node_modules/resolve": { @@ -5096,6 +5039,16 @@ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, + "node_modules/json-stream-stringify": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/json-stream-stringify/-/json-stream-stringify-3.1.6.tgz", + "integrity": "sha512-x7fpwxOkbhFCaJDJ8vb1fBY3DdSa4AlITaz+HHILQJzdPMnHEFjxPwVUi1ALIbcIxDE0PNe/0i7frnY8QnBQog==", + "dev": true, + "peer": true, + "engines": { + "node": ">=7.10.1" + } + }, "node_modules/jsonfile": { "version": "4.0.0", "license": "MIT", @@ -5139,15 +5092,6 @@ "node": ">=0.10.0" } }, - "node_modules/klaw": { - "version": "1.3.1", - "dev": true, - "license": "MIT", - "peer": true, - "optionalDependencies": { - "graceful-fs": "^4.1.9" - } - }, "node_modules/kuler": { "version": "2.0.0", "license": "MIT" @@ -5343,6 +5287,8 @@ }, "node_modules/memorystream": { "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", "dev": true, "peer": true, "engines": { @@ -5789,8 +5735,9 @@ }, "node_modules/os-tmpdir": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=0.10.0" @@ -5846,15 +5793,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-try": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=4" - } - }, "node_modules/package-json": { "version": "8.1.1", "license": "MIT", @@ -5975,8 +5913,9 @@ } }, "node_modules/picocolors": { - "version": "1.0.1", - "license": "ISC" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" }, "node_modules/picomatch": { "version": "2.3.1", @@ -6313,60 +6252,6 @@ "node": ">=0.10.0" } }, - "node_modules/rimraf": { - "version": "2.7.1", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/rimraf/node_modules/glob": { - "version": "7.2.0", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/ripemd160": { "version": "2.0.2", "license": "MIT", @@ -6781,60 +6666,42 @@ } }, "node_modules/solc": { - "version": "0.7.3", + "version": "0.8.26", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.26.tgz", + "integrity": "sha512-yiPQNVf5rBFHwN6SIf3TUUvVAFKcQqmSUFeq+fb6pNRCo0ZCgpYOZDi3BVoezCPIAcKrVYd/qXlBLUP9wVrZ9g==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "command-exists": "^1.2.8", - "commander": "3.0.2", + "commander": "^8.1.0", "follow-redirects": "^1.12.1", - "fs-extra": "^0.30.0", "js-sha3": "0.8.0", "memorystream": "^0.3.1", - "require-from-string": "^2.0.0", "semver": "^5.5.0", "tmp": "0.0.33" }, "bin": { - "solcjs": "solcjs" + "solcjs": "solc.js" }, "engines": { - "node": ">=8.0.0" + "node": ">=10.0.0" } }, "node_modules/solc/node_modules/commander": { - "version": "3.0.2", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/solc/node_modules/fs-extra": { - "version": "0.30.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" - } - }, - "node_modules/solc/node_modules/fs-extra/node_modules/jsonfile": { - "version": "2.4.0", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", "dev": true, - "license": "MIT", "peer": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "engines": { + "node": ">= 12" } }, "node_modules/solc/node_modules/semver": { "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, - "license": "ISC", "peer": true, "bin": { "semver": "bin/semver" @@ -6935,9 +6802,10 @@ "license": "MIT" }, "node_modules/solidity-coverage": { - "version": "0.8.12", + "version": "0.8.13", + "resolved": "https://registry.npmjs.org/solidity-coverage/-/solidity-coverage-0.8.13.tgz", + "integrity": "sha512-RiBoI+kF94V3Rv0+iwOj3HQVSqNzA9qm/qDP1ZDXK5IX0Cvho1qiz8hAXTsAo6KOIUeP73jfscq0KlLqVxzGWA==", "dev": true, - "license": "ISC", "dependencies": { "@ethersproject/abi": "^5.0.9", "@solidity-parser/parser": "^0.18.0", @@ -7329,8 +7197,9 @@ }, "node_modules/tmp": { "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "os-tmpdir": "~1.0.2" diff --git a/package.json b/package.json index 6f7a68f1..d3e8cbb0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@open-ibc/vibc-core-smart-contracts", - "version": "4.0.10", + "version": "4.0.11", "main": "dist/index.js", "bin": { "verify-vibc-core-smart-contracts": "./dist/scripts/verify-contract-script.js", diff --git a/specs/update.spec.yaml b/specs/update.spec.yaml index d61b1572..39492136 100644 --- a/specs/update.spec.yaml +++ b/specs/update.spec.yaml @@ -67,6 +67,14 @@ - '{{SequencerSigVerifier}}' - '{{L1BlockAddress}}' +- name: ProofApiLightClient + description: 'ProofApiCrossL2Inbox' + factoryName: 'CrossL2Prover' + deployer: 'KEY_DEPLOYER' + deployArgs: + - '{{SequencerSigVerifier}}' + - 'peptide-clientId' + - name: DummyLightClient description: 'DummyLightClient' factoryName: 'DummyLightClient' diff --git a/src/evm/contracts/CrossL2Prover.ts b/src/evm/contracts/CrossL2Prover.ts new file mode 100644 index 00000000..9e513bba --- /dev/null +++ b/src/evm/contracts/CrossL2Prover.ts @@ -0,0 +1,325 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumberish, + BytesLike, + FunctionFragment, + Result, + Interface, + ContractRunner, + ContractMethod, + Listener, +} from "ethers"; +import type { + TypedContractEvent, + TypedDeferredTopicFilter, + TypedEventLog, + TypedListener, + TypedContractMethod, +} from "./common"; + +export type OpIcs23ProofPathStruct = { prefix: BytesLike; suffix: BytesLike }; + +export type OpIcs23ProofPathStructOutput = [prefix: string, suffix: string] & { + prefix: string; + suffix: string; +}; + +export type OpIcs23ProofStruct = { + path: OpIcs23ProofPathStruct[]; + key: BytesLike; + value: BytesLike; + prefix: BytesLike; +}; + +export type OpIcs23ProofStructOutput = [ + path: OpIcs23ProofPathStructOutput[], + key: string, + value: string, + prefix: string +] & { + path: OpIcs23ProofPathStructOutput[]; + key: string; + value: string; + prefix: string; +}; + +export type Ics23ProofStruct = { + proof: OpIcs23ProofStruct[]; + height: BigNumberish; +}; + +export type Ics23ProofStructOutput = [ + proof: OpIcs23ProofStructOutput[], + height: bigint +] & { proof: OpIcs23ProofStructOutput[]; height: bigint }; + +export interface CrossL2ProverInterface extends Interface { + getFunction( + nameOrSignature: + | "LIGHT_CLIENT_TYPE" + | "getState" + | "peptideAppHashes" + | "peptideClientId" + | "updateClient" + | "validateEvent" + | "validateReceipt" + | "verifier" + | "verifyMembership" + | "verifyNonMembership" + ): FunctionFragment; + + encodeFunctionData( + functionFragment: "LIGHT_CLIENT_TYPE", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "getState", + values: [BigNumberish] + ): string; + encodeFunctionData( + functionFragment: "peptideAppHashes", + values: [BigNumberish] + ): string; + encodeFunctionData( + functionFragment: "peptideClientId", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "updateClient", + values: [BytesLike, BigNumberish, BigNumberish] + ): string; + encodeFunctionData( + functionFragment: "validateEvent", + values: [BytesLike, BytesLike, BigNumberish, BytesLike, BytesLike] + ): string; + encodeFunctionData( + functionFragment: "validateReceipt", + values: [BytesLike, BytesLike, BytesLike] + ): string; + encodeFunctionData(functionFragment: "verifier", values?: undefined): string; + encodeFunctionData( + functionFragment: "verifyMembership", + values: [BytesLike, BytesLike, BytesLike, Ics23ProofStruct] + ): string; + encodeFunctionData( + functionFragment: "verifyNonMembership", + values: [BytesLike, BytesLike, Ics23ProofStruct] + ): string; + + decodeFunctionResult( + functionFragment: "LIGHT_CLIENT_TYPE", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "getState", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "peptideAppHashes", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "peptideClientId", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "updateClient", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "validateEvent", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "validateReceipt", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "verifier", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "verifyMembership", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "verifyNonMembership", + data: BytesLike + ): Result; +} + +export interface CrossL2Prover extends BaseContract { + connect(runner?: ContractRunner | null): CrossL2Prover; + waitForDeployment(): Promise; + + interface: CrossL2ProverInterface; + + queryFilter( + event: TCEvent, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>>; + queryFilter( + filter: TypedDeferredTopicFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>>; + + on( + event: TCEvent, + listener: TypedListener + ): Promise; + on( + filter: TypedDeferredTopicFilter, + listener: TypedListener + ): Promise; + + once( + event: TCEvent, + listener: TypedListener + ): Promise; + once( + filter: TypedDeferredTopicFilter, + listener: TypedListener + ): Promise; + + listeners( + event: TCEvent + ): Promise>>; + listeners(eventName?: string): Promise>; + removeAllListeners( + event?: TCEvent + ): Promise; + + LIGHT_CLIENT_TYPE: TypedContractMethod<[], [bigint], "view">; + + getState: TypedContractMethod<[height: BigNumberish], [bigint], "view">; + + peptideAppHashes: TypedContractMethod<[arg0: BigNumberish], [bigint], "view">; + + peptideClientId: TypedContractMethod<[], [string], "view">; + + updateClient: TypedContractMethod< + [ + proof: BytesLike, + peptideHeight: BigNumberish, + peptideAppHash: BigNumberish + ], + [void], + "nonpayable" + >; + + validateEvent: TypedContractMethod< + [ + receiptIndex: BytesLike, + receiptRLPEncodedBytes: BytesLike, + logIndex: BigNumberish, + logBytes: BytesLike, + proof: BytesLike + ], + [boolean], + "view" + >; + + validateReceipt: TypedContractMethod< + [ + receiptIndex: BytesLike, + receiptRLPEncodedBytes: BytesLike, + proof: BytesLike + ], + [boolean], + "view" + >; + + verifier: TypedContractMethod<[], [string], "view">; + + verifyMembership: TypedContractMethod< + [ + appHash: BytesLike, + key: BytesLike, + value: BytesLike, + proofs: Ics23ProofStruct + ], + [void], + "view" + >; + + verifyNonMembership: TypedContractMethod< + [arg0: BytesLike, arg1: BytesLike, arg2: Ics23ProofStruct], + [void], + "view" + >; + + getFunction( + key: string | FunctionFragment + ): T; + + getFunction( + nameOrSignature: "LIGHT_CLIENT_TYPE" + ): TypedContractMethod<[], [bigint], "view">; + getFunction( + nameOrSignature: "getState" + ): TypedContractMethod<[height: BigNumberish], [bigint], "view">; + getFunction( + nameOrSignature: "peptideAppHashes" + ): TypedContractMethod<[arg0: BigNumberish], [bigint], "view">; + getFunction( + nameOrSignature: "peptideClientId" + ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "updateClient" + ): TypedContractMethod< + [ + proof: BytesLike, + peptideHeight: BigNumberish, + peptideAppHash: BigNumberish + ], + [void], + "nonpayable" + >; + getFunction( + nameOrSignature: "validateEvent" + ): TypedContractMethod< + [ + receiptIndex: BytesLike, + receiptRLPEncodedBytes: BytesLike, + logIndex: BigNumberish, + logBytes: BytesLike, + proof: BytesLike + ], + [boolean], + "view" + >; + getFunction( + nameOrSignature: "validateReceipt" + ): TypedContractMethod< + [ + receiptIndex: BytesLike, + receiptRLPEncodedBytes: BytesLike, + proof: BytesLike + ], + [boolean], + "view" + >; + getFunction( + nameOrSignature: "verifier" + ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "verifyMembership" + ): TypedContractMethod< + [ + appHash: BytesLike, + key: BytesLike, + value: BytesLike, + proofs: Ics23ProofStruct + ], + [void], + "view" + >; + getFunction( + nameOrSignature: "verifyNonMembership" + ): TypedContractMethod< + [arg0: BytesLike, arg1: BytesLike, arg2: Ics23ProofStruct], + [void], + "view" + >; + + filters: {}; +} diff --git a/src/evm/contracts/ICrossL2Prover.ts b/src/evm/contracts/ICrossL2Prover.ts new file mode 100644 index 00000000..fe72a9bf --- /dev/null +++ b/src/evm/contracts/ICrossL2Prover.ts @@ -0,0 +1,191 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumberish, + BytesLike, + FunctionFragment, + Result, + Interface, + ContractRunner, + ContractMethod, + Listener, +} from "ethers"; +import type { + TypedContractEvent, + TypedDeferredTopicFilter, + TypedEventLog, + TypedListener, + TypedContractMethod, +} from "./common"; + +export interface ICrossL2ProverInterface extends Interface { + getFunction( + nameOrSignature: + | "LIGHT_CLIENT_TYPE" + | "getState" + | "updateClient" + | "validateEvent" + | "validateReceipt" + ): FunctionFragment; + + encodeFunctionData( + functionFragment: "LIGHT_CLIENT_TYPE", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "getState", + values: [BigNumberish] + ): string; + encodeFunctionData( + functionFragment: "updateClient", + values: [BytesLike, BigNumberish, BigNumberish] + ): string; + encodeFunctionData( + functionFragment: "validateEvent", + values: [BytesLike, BytesLike, BigNumberish, BytesLike, BytesLike] + ): string; + encodeFunctionData( + functionFragment: "validateReceipt", + values: [BytesLike, BytesLike, BytesLike] + ): string; + + decodeFunctionResult( + functionFragment: "LIGHT_CLIENT_TYPE", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "getState", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "updateClient", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "validateEvent", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "validateReceipt", + data: BytesLike + ): Result; +} + +export interface ICrossL2Prover extends BaseContract { + connect(runner?: ContractRunner | null): ICrossL2Prover; + waitForDeployment(): Promise; + + interface: ICrossL2ProverInterface; + + queryFilter( + event: TCEvent, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>>; + queryFilter( + filter: TypedDeferredTopicFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>>; + + on( + event: TCEvent, + listener: TypedListener + ): Promise; + on( + filter: TypedDeferredTopicFilter, + listener: TypedListener + ): Promise; + + once( + event: TCEvent, + listener: TypedListener + ): Promise; + once( + filter: TypedDeferredTopicFilter, + listener: TypedListener + ): Promise; + + listeners( + event: TCEvent + ): Promise>>; + listeners(eventName?: string): Promise>; + removeAllListeners( + event?: TCEvent + ): Promise; + + LIGHT_CLIENT_TYPE: TypedContractMethod<[], [bigint], "view">; + + getState: TypedContractMethod<[height: BigNumberish], [bigint], "view">; + + updateClient: TypedContractMethod< + [proof: BytesLike, height: BigNumberish, appHash: BigNumberish], + [void], + "nonpayable" + >; + + validateEvent: TypedContractMethod< + [ + receiptIndex: BytesLike, + receiptRLPEncodedBytes: BytesLike, + logIndex: BigNumberish, + logBytes: BytesLike, + proof: BytesLike + ], + [boolean], + "nonpayable" + >; + + validateReceipt: TypedContractMethod< + [ + receiptIndex: BytesLike, + receiptRLPEncodedBytes: BytesLike, + proof: BytesLike + ], + [boolean], + "nonpayable" + >; + + getFunction( + key: string | FunctionFragment + ): T; + + getFunction( + nameOrSignature: "LIGHT_CLIENT_TYPE" + ): TypedContractMethod<[], [bigint], "view">; + getFunction( + nameOrSignature: "getState" + ): TypedContractMethod<[height: BigNumberish], [bigint], "view">; + getFunction( + nameOrSignature: "updateClient" + ): TypedContractMethod< + [proof: BytesLike, height: BigNumberish, appHash: BigNumberish], + [void], + "nonpayable" + >; + getFunction( + nameOrSignature: "validateEvent" + ): TypedContractMethod< + [ + receiptIndex: BytesLike, + receiptRLPEncodedBytes: BytesLike, + logIndex: BigNumberish, + logBytes: BytesLike, + proof: BytesLike + ], + [boolean], + "nonpayable" + >; + getFunction( + nameOrSignature: "validateReceipt" + ): TypedContractMethod< + [ + receiptIndex: BytesLike, + receiptRLPEncodedBytes: BytesLike, + proof: BytesLike + ], + [boolean], + "nonpayable" + >; + + filters: {}; +} diff --git a/src/evm/contracts/ILightClient.sol/IClientUpdates.ts b/src/evm/contracts/ILightClient.sol/IClientUpdates.ts new file mode 100644 index 00000000..8c34fad9 --- /dev/null +++ b/src/evm/contracts/ILightClient.sol/IClientUpdates.ts @@ -0,0 +1,114 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumberish, + BytesLike, + FunctionFragment, + Result, + Interface, + ContractRunner, + ContractMethod, + Listener, +} from "ethers"; +import type { + TypedContractEvent, + TypedDeferredTopicFilter, + TypedEventLog, + TypedListener, + TypedContractMethod, +} from "../common"; + +export interface IClientUpdatesInterface extends Interface { + getFunction( + nameOrSignature: "LIGHT_CLIENT_TYPE" | "updateClient" + ): FunctionFragment; + + encodeFunctionData( + functionFragment: "LIGHT_CLIENT_TYPE", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "updateClient", + values: [BytesLike, BigNumberish, BigNumberish] + ): string; + + decodeFunctionResult( + functionFragment: "LIGHT_CLIENT_TYPE", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "updateClient", + data: BytesLike + ): Result; +} + +export interface IClientUpdates extends BaseContract { + connect(runner?: ContractRunner | null): IClientUpdates; + waitForDeployment(): Promise; + + interface: IClientUpdatesInterface; + + queryFilter( + event: TCEvent, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>>; + queryFilter( + filter: TypedDeferredTopicFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>>; + + on( + event: TCEvent, + listener: TypedListener + ): Promise; + on( + filter: TypedDeferredTopicFilter, + listener: TypedListener + ): Promise; + + once( + event: TCEvent, + listener: TypedListener + ): Promise; + once( + filter: TypedDeferredTopicFilter, + listener: TypedListener + ): Promise; + + listeners( + event: TCEvent + ): Promise>>; + listeners(eventName?: string): Promise>; + removeAllListeners( + event?: TCEvent + ): Promise; + + LIGHT_CLIENT_TYPE: TypedContractMethod<[], [bigint], "view">; + + updateClient: TypedContractMethod< + [proof: BytesLike, height: BigNumberish, appHash: BigNumberish], + [void], + "nonpayable" + >; + + getFunction( + key: string | FunctionFragment + ): T; + + getFunction( + nameOrSignature: "LIGHT_CLIENT_TYPE" + ): TypedContractMethod<[], [bigint], "view">; + getFunction( + nameOrSignature: "updateClient" + ): TypedContractMethod< + [proof: BytesLike, height: BigNumberish, appHash: BigNumberish], + [void], + "nonpayable" + >; + + filters: {}; +} diff --git a/src/evm/contracts/ILightClient.ts b/src/evm/contracts/ILightClient.sol/ILightClient.ts similarity index 99% rename from src/evm/contracts/ILightClient.ts rename to src/evm/contracts/ILightClient.sol/ILightClient.ts index 493d2870..661d4442 100644 --- a/src/evm/contracts/ILightClient.ts +++ b/src/evm/contracts/ILightClient.sol/ILightClient.ts @@ -18,7 +18,7 @@ import type { TypedEventLog, TypedListener, TypedContractMethod, -} from "./common"; +} from "../common"; export type OpIcs23ProofPathStruct = { prefix: BytesLike; suffix: BytesLike }; diff --git a/src/evm/contracts/ILightClient.sol/IMembershipVerifier.ts b/src/evm/contracts/ILightClient.sol/IMembershipVerifier.ts new file mode 100644 index 00000000..1c76aa2c --- /dev/null +++ b/src/evm/contracts/ILightClient.sol/IMembershipVerifier.ts @@ -0,0 +1,135 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumberish, + BytesLike, + FunctionFragment, + Result, + Interface, + ContractRunner, + ContractMethod, + Listener, +} from "ethers"; +import type { + TypedContractEvent, + TypedDeferredTopicFilter, + TypedEventLog, + TypedListener, + TypedContractMethod, +} from "../common"; + +export type OpIcs23ProofPathStruct = { prefix: BytesLike; suffix: BytesLike }; + +export type OpIcs23ProofPathStructOutput = [prefix: string, suffix: string] & { + prefix: string; + suffix: string; +}; + +export type OpIcs23ProofStruct = { + path: OpIcs23ProofPathStruct[]; + key: BytesLike; + value: BytesLike; + prefix: BytesLike; +}; + +export type OpIcs23ProofStructOutput = [ + path: OpIcs23ProofPathStructOutput[], + key: string, + value: string, + prefix: string +] & { + path: OpIcs23ProofPathStructOutput[]; + key: string; + value: string; + prefix: string; +}; + +export type Ics23ProofStruct = { + proof: OpIcs23ProofStruct[]; + height: BigNumberish; +}; + +export type Ics23ProofStructOutput = [ + proof: OpIcs23ProofStructOutput[], + height: bigint +] & { proof: OpIcs23ProofStructOutput[]; height: bigint }; + +export interface IMembershipVerifierInterface extends Interface { + getFunction(nameOrSignature: "verifyMembership"): FunctionFragment; + + encodeFunctionData( + functionFragment: "verifyMembership", + values: [Ics23ProofStruct, BytesLike, BytesLike] + ): string; + + decodeFunctionResult( + functionFragment: "verifyMembership", + data: BytesLike + ): Result; +} + +export interface IMembershipVerifier extends BaseContract { + connect(runner?: ContractRunner | null): IMembershipVerifier; + waitForDeployment(): Promise; + + interface: IMembershipVerifierInterface; + + queryFilter( + event: TCEvent, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>>; + queryFilter( + filter: TypedDeferredTopicFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>>; + + on( + event: TCEvent, + listener: TypedListener + ): Promise; + on( + filter: TypedDeferredTopicFilter, + listener: TypedListener + ): Promise; + + once( + event: TCEvent, + listener: TypedListener + ): Promise; + once( + filter: TypedDeferredTopicFilter, + listener: TypedListener + ): Promise; + + listeners( + event: TCEvent + ): Promise>>; + listeners(eventName?: string): Promise>; + removeAllListeners( + event?: TCEvent + ): Promise; + + verifyMembership: TypedContractMethod< + [proof: Ics23ProofStruct, key: BytesLike, expectedValue: BytesLike], + [void], + "nonpayable" + >; + + getFunction( + key: string | FunctionFragment + ): T; + + getFunction( + nameOrSignature: "verifyMembership" + ): TypedContractMethod< + [proof: Ics23ProofStruct, key: BytesLike, expectedValue: BytesLike], + [void], + "nonpayable" + >; + + filters: {}; +} diff --git a/src/evm/contracts/ILightClient.sol/INonMembershipVerifier.ts b/src/evm/contracts/ILightClient.sol/INonMembershipVerifier.ts new file mode 100644 index 00000000..67b316ca --- /dev/null +++ b/src/evm/contracts/ILightClient.sol/INonMembershipVerifier.ts @@ -0,0 +1,135 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumberish, + BytesLike, + FunctionFragment, + Result, + Interface, + ContractRunner, + ContractMethod, + Listener, +} from "ethers"; +import type { + TypedContractEvent, + TypedDeferredTopicFilter, + TypedEventLog, + TypedListener, + TypedContractMethod, +} from "../common"; + +export type OpIcs23ProofPathStruct = { prefix: BytesLike; suffix: BytesLike }; + +export type OpIcs23ProofPathStructOutput = [prefix: string, suffix: string] & { + prefix: string; + suffix: string; +}; + +export type OpIcs23ProofStruct = { + path: OpIcs23ProofPathStruct[]; + key: BytesLike; + value: BytesLike; + prefix: BytesLike; +}; + +export type OpIcs23ProofStructOutput = [ + path: OpIcs23ProofPathStructOutput[], + key: string, + value: string, + prefix: string +] & { + path: OpIcs23ProofPathStructOutput[]; + key: string; + value: string; + prefix: string; +}; + +export type Ics23ProofStruct = { + proof: OpIcs23ProofStruct[]; + height: BigNumberish; +}; + +export type Ics23ProofStructOutput = [ + proof: OpIcs23ProofStructOutput[], + height: bigint +] & { proof: OpIcs23ProofStructOutput[]; height: bigint }; + +export interface INonMembershipVerifierInterface extends Interface { + getFunction(nameOrSignature: "verifyNonMembership"): FunctionFragment; + + encodeFunctionData( + functionFragment: "verifyNonMembership", + values: [Ics23ProofStruct, BytesLike] + ): string; + + decodeFunctionResult( + functionFragment: "verifyNonMembership", + data: BytesLike + ): Result; +} + +export interface INonMembershipVerifier extends BaseContract { + connect(runner?: ContractRunner | null): INonMembershipVerifier; + waitForDeployment(): Promise; + + interface: INonMembershipVerifierInterface; + + queryFilter( + event: TCEvent, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>>; + queryFilter( + filter: TypedDeferredTopicFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>>; + + on( + event: TCEvent, + listener: TypedListener + ): Promise; + on( + filter: TypedDeferredTopicFilter, + listener: TypedListener + ): Promise; + + once( + event: TCEvent, + listener: TypedListener + ): Promise; + once( + filter: TypedDeferredTopicFilter, + listener: TypedListener + ): Promise; + + listeners( + event: TCEvent + ): Promise>>; + listeners(eventName?: string): Promise>; + removeAllListeners( + event?: TCEvent + ): Promise; + + verifyNonMembership: TypedContractMethod< + [proof: Ics23ProofStruct, key: BytesLike], + [void], + "nonpayable" + >; + + getFunction( + key: string | FunctionFragment + ): T; + + getFunction( + nameOrSignature: "verifyNonMembership" + ): TypedContractMethod< + [proof: Ics23ProofStruct, key: BytesLike], + [void], + "nonpayable" + >; + + filters: {}; +} diff --git a/src/evm/contracts/ILightClient.sol/index.ts b/src/evm/contracts/ILightClient.sol/index.ts new file mode 100644 index 00000000..ffdbb286 --- /dev/null +++ b/src/evm/contracts/ILightClient.sol/index.ts @@ -0,0 +1,7 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export type { IClientUpdates } from "./IClientUpdates"; +export type { ILightClient } from "./ILightClient"; +export type { IMembershipVerifier } from "./IMembershipVerifier"; +export type { INonMembershipVerifier } from "./INonMembershipVerifier"; diff --git a/src/evm/contracts/factories/CrossL2Prover__factory.ts b/src/evm/contracts/factories/CrossL2Prover__factory.ts new file mode 100644 index 00000000..cd9f18c4 --- /dev/null +++ b/src/evm/contracts/factories/CrossL2Prover__factory.ts @@ -0,0 +1,465 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { + Contract, + ContractFactory, + ContractTransactionResponse, + Interface, +} from "ethers"; +import type { + Signer, + AddressLike, + ContractDeployTransaction, + ContractRunner, +} from "ethers"; +import type { NonPayableOverrides } from "../common"; +import type { CrossL2Prover, CrossL2ProverInterface } from "../CrossL2Prover"; + +const _abi = [ + { + type: "constructor", + inputs: [ + { + name: "verifier_", + type: "address", + internalType: "contract ISignatureVerifier", + }, + { + name: "peptideClientId_", + type: "string", + internalType: "string", + }, + ], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "LIGHT_CLIENT_TYPE", + inputs: [], + outputs: [ + { + name: "", + type: "uint8", + internalType: "enum LightClientType", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "getState", + inputs: [ + { + name: "height", + type: "uint256", + internalType: "uint256", + }, + ], + outputs: [ + { + name: "", + type: "uint256", + internalType: "uint256", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "peptideAppHashes", + inputs: [ + { + name: "", + type: "uint256", + internalType: "uint256", + }, + ], + outputs: [ + { + name: "", + type: "uint256", + internalType: "uint256", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "peptideClientId", + inputs: [], + outputs: [ + { + name: "", + type: "string", + internalType: "string", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "updateClient", + inputs: [ + { + name: "proof", + type: "bytes", + internalType: "bytes", + }, + { + name: "peptideHeight", + type: "uint256", + internalType: "uint256", + }, + { + name: "peptideAppHash", + type: "uint256", + internalType: "uint256", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "validateEvent", + inputs: [ + { + name: "receiptIndex", + type: "bytes", + internalType: "bytes", + }, + { + name: "receiptRLPEncodedBytes", + type: "bytes", + internalType: "bytes", + }, + { + name: "logIndex", + type: "uint256", + internalType: "uint256", + }, + { + name: "logBytes", + type: "bytes", + internalType: "bytes", + }, + { + name: "proof", + type: "bytes", + internalType: "bytes", + }, + ], + outputs: [ + { + name: "", + type: "bool", + internalType: "bool", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "validateReceipt", + inputs: [ + { + name: "receiptIndex", + type: "bytes", + internalType: "bytes", + }, + { + name: "receiptRLPEncodedBytes", + type: "bytes", + internalType: "bytes", + }, + { + name: "proof", + type: "bytes", + internalType: "bytes", + }, + ], + outputs: [ + { + name: "valid", + type: "bool", + internalType: "bool", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "verifier", + inputs: [], + outputs: [ + { + name: "", + type: "address", + internalType: "contract ISignatureVerifier", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "verifyMembership", + inputs: [ + { + name: "appHash", + type: "bytes32", + internalType: "bytes32", + }, + { + name: "key", + type: "bytes", + internalType: "bytes", + }, + { + name: "value", + type: "bytes", + internalType: "bytes", + }, + { + name: "proofs", + type: "tuple", + internalType: "struct Ics23Proof", + components: [ + { + name: "proof", + type: "tuple[]", + internalType: "struct OpIcs23Proof[]", + components: [ + { + name: "path", + type: "tuple[]", + internalType: "struct OpIcs23ProofPath[]", + components: [ + { + name: "prefix", + type: "bytes", + internalType: "bytes", + }, + { + name: "suffix", + type: "bytes", + internalType: "bytes", + }, + ], + }, + { + name: "key", + type: "bytes", + internalType: "bytes", + }, + { + name: "value", + type: "bytes", + internalType: "bytes", + }, + { + name: "prefix", + type: "bytes", + internalType: "bytes", + }, + ], + }, + { + name: "height", + type: "uint256", + internalType: "uint256", + }, + ], + }, + ], + outputs: [], + stateMutability: "pure", + }, + { + type: "function", + name: "verifyNonMembership", + inputs: [ + { + name: "", + type: "bytes32", + internalType: "bytes32", + }, + { + name: "", + type: "bytes", + internalType: "bytes", + }, + { + name: "", + type: "tuple", + internalType: "struct Ics23Proof", + components: [ + { + name: "proof", + type: "tuple[]", + internalType: "struct OpIcs23Proof[]", + components: [ + { + name: "path", + type: "tuple[]", + internalType: "struct OpIcs23ProofPath[]", + components: [ + { + name: "prefix", + type: "bytes", + internalType: "bytes", + }, + { + name: "suffix", + type: "bytes", + internalType: "bytes", + }, + ], + }, + { + name: "key", + type: "bytes", + internalType: "bytes", + }, + { + name: "value", + type: "bytes", + internalType: "bytes", + }, + { + name: "prefix", + type: "bytes", + internalType: "bytes", + }, + ], + }, + { + name: "height", + type: "uint256", + internalType: "uint256", + }, + ], + }, + ], + outputs: [], + stateMutability: "pure", + }, + { + type: "error", + name: "CannotUpdateClientWithDifferentAppHash", + inputs: [], + }, + { + type: "error", + name: "InvalidAppHash", + inputs: [], + }, + { + type: "error", + name: "InvalidIbcStateProof", + inputs: [], + }, + { + type: "error", + name: "InvalidL1BlockHash", + inputs: [], + }, + { + type: "error", + name: "InvalidL1BlockNumber", + inputs: [], + }, + { + type: "error", + name: "InvalidPacketProof", + inputs: [], + }, + { + type: "error", + name: "InvalidProofKey", + inputs: [], + }, + { + type: "error", + name: "InvalidProofValue", + inputs: [], + }, + { + type: "error", + name: "InvalidRLPEncodedL1BlockNumber", + inputs: [], + }, + { + type: "error", + name: "InvalidRLPEncodedL1StateRoot", + inputs: [], + }, + { + type: "error", + name: "MethodNotImplemented", + inputs: [], + }, +] as const; + +const _bytecode = + "0x60a06040523480156200001157600080fd5b506040516200330f3803806200330f83398101604081905262000034916200006e565b6001600160a01b03821660805260006200004f8282620001fd565b505050620002c9565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156200008257600080fd5b82516001600160a01b03811681146200009a57600080fd5b602084810151919350906001600160401b0380821115620000ba57600080fd5b818601915086601f830112620000cf57600080fd5b815181811115620000e457620000e462000058565b604051601f8201601f19908116603f011681019083821181831017156200010f576200010f62000058565b8160405282815289868487010111156200012857600080fd5b600093505b828410156200014c57848401860151818501870152928501926200012d565b828411156200015e5760008684830101525b8096505050505050509250929050565b600181811c908216806200018357607f821691505b602082108103620001a457634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001f857600081815260208120601f850160051c81016020861015620001d35750805b601f850160051c820191505b81811015620001f457828155600101620001df565b5050505b505050565b81516001600160401b0381111562000219576200021962000058565b62000231816200022a84546200016e565b84620001aa565b602080601f831160018114620002695760008415620002505750858301515b600019600386901b1c1916600185901b178555620001f4565b600085815260208120601f198616915b828110156200029a5788860151825594840194600190910190840162000279565b5085821015620002b95787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051613024620002eb6000396000818160bd015261074701526130246000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c806381ce4d341161006657806381ce4d34146101455780638553287214610168578063a2198c951461017b578063c2f0329f14610190578063c67e15f7146101a357600080fd5b80632a6ded74146100a35780632b7ac3f3146100b857806344c9af28146100fc57806349ff245e1461011d57806357c1c5f414610130575b600080fd5b6100b66100b136600461227e565b6101c3565b005b6100df7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61010f61010a3660046122f0565b6101dc565b6040519081526020016100f3565b6100b661012b366004612309565b6101f2565b610138600281565b6040516100f3919061236f565b610158610153366004612397565b610204565b60405190151581526020016100f3565b610158610176366004612466565b6102f4565b6101836104a6565b6040516100f39190612557565b6100b661019e366004612669565b610534565b61010f6101b13660046122f0565b60016020526000908152604090205481565b604051632974974360e01b815260040160405180910390fd5b6000818152600160205260408120545b92915050565b6101fe848484846106f6565b50505050565b60006102148a8a8a8a87876102f4565b610220575060006102e7565b60006102776102728a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061026d91508290508d6126f7565b6107f8565b610941565b9050600061029e826003815181106102915761029161270e565b602002602001015161094f565b905086866040516102b0929190612724565b60405180910390206102da828a815181106102cd576102cd61270e565b6020026020010151610b72565b8051906020012014925050505b9998505050505050505050565b600080808080610306868801886128e0565b9350935093509350306001600160a01b031663c2f0329f610337866020015160009081526001602052604090205490565b60001b6103ce6000805461034a90612ac1565b80601f016020809104026020016040519081016040528092919081815260200182805461037690612ac1565b80156103c35780601f10610398576101008083540402835291602001916103c3565b820191906000526020600020905b8154815290600101906020018083116103a657829003601f168201915b505050505085610b88565b604080516020810188905201604051602081830303815290604052886040518563ffffffff1660e01b81526004016104099493929190612af5565b60006040518083038186803b15801561042157600080fd5b505afa158015610435573d6000803e3d6000fd5b505050506104978b8b60405160200161044f929190612724565b60408051601f198184030181526020601f8d018190048102840181019092528b835291908c908c9081908401838280828437600092019190915250889250879150610bb49050565b9b9a5050505050505050505050565b600080546104b390612ac1565b80601f01602080910402602001604051908101604052809291908181526020018280546104df90612ac1565b801561052c5780601f106105015761010080835404028352916020019161052c565b820191906000526020600020905b81548152906001019060200180831161050f57829003601f168201915b505050505081565b61053e8180612c57565b600081811061054f5761054f61270e565b90506020028101906105619190612ca0565b61056f906020810190612cc0565b60405161057d929190612724565b60405180910390208380519060200120146105ab5760405163026a287560e51b815260040160405180910390fd5b6105b58180612c57565b60008181106105c6576105c661270e565b90506020028101906105d89190612ca0565b6105e6906040810190612cc0565b6040516105f4929190612724565b6040518091039020828051906020012014610622576040516310d9300f60e11b815260040160405180910390fd5b61065761062f8280612c57565b60008181106106405761064061270e565b90506020028101906106529190612ca0565b610be4565b6106618280612c57565b60018181106106725761067261270e565b90506020028101906106849190612ca0565b610692906040810190612cc0565b61069b91612d06565b146106b957604051636589f0e160e11b815260040160405180910390fd5b6106d76106c68280612c57565b60018181106106405761064061270e565b84146101fe576040516392cb8fbb60e01b815260040160405180910390fd5b6000828152600160205260409020541561073d57600082815260016020526040902054811461073857604051631549535560e01b815260040160405180910390fd5b6101fe565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663e8d90039838361077c60206000898b612d24565b61078591612d06565b610792886020818c612d24565b6040518663ffffffff1660e01b81526004016107b2959493929190612d4e565b600060405180830381600087803b1580156107cc57600080fd5b505af11580156107e0573d6000803e3d6000fd5b50505060009283525060016020526040909120555050565b60608182601f0110156108435760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b60448201526064015b60405180910390fd5b8282840110156108865760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b604482015260640161083a565b818301845110156108cd5760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b604482015260640161083a565b6060821580156108ec5760405191506000825260208201604052610936565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561092557805183526020928301920161090d565b5050858452601f01601f1916604052505b5090505b9392505050565b60606101ec61094f83610e08565b6060600080600061095f85610e5b565b91945092509050600181600181111561097a5761097a612359565b146109ed5760405162461bcd60e51b815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d0000000000000000606482015260840161083a565b84516109f98385612d92565b14610a615760405162461bcd60e51b815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e76616044820152713634b2103230ba30903932b6b0b4b73232b960711b606482015260840161083a565b604080516020808252610420820190925290816020015b6040805180820190915260008082526020820152815260200190600190039081610a785790505093506000835b8651811015610b6657600080610aeb6040518060400160405280858c60000151610acf91906126f7565b8152602001858c60200151610ae49190612d92565b9052610e5b565b509150915060405180604001604052808383610b079190612d92565b8152602001848b60200151610b1c9190612d92565b815250888581518110610b3157610b3161270e565b6020908102919091010152610b47600185612d92565b9350610b538183612d92565b610b5d9084612d92565b92505050610aa5565b50845250919392505050565b60606101ec82602001516000846000015161151e565b60608282604051602001610b9d929190612daa565b604051602081830303815290604052905092915050565b6000610bdb84610bc58786866115b1565b8051602091820120825192909101919091201490565b95945050505050565b6000806002610bf66040850185612cc0565b604051610c04929190612724565b602060405180830381855afa158015610c21573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610c449190612e0d565b90506002610c556060850185612cc0565b610c6c610c656020880188612cc0565b9050611e47565b610c796020880188612cc0565b610c836020611e47565b87604051602001610c9a9796959493929190612e26565b60408051601f1981840301815290829052610cb491612e73565b602060405180830381855afa158015610cd1573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610cf49190612e0d565b915060005b610d038480612c57565b9050811015610e01576002610d188580612c57565b83818110610d2857610d2861270e565b9050602002810190610d3a9190612e85565b610d449080612cc0565b85610d4f8880612c57565b86818110610d5f57610d5f61270e565b9050602002810190610d719190612e85565b610d7f906020810190612cc0565b604051602001610d93959493929190612e9b565b60408051601f1981840301815290829052610dad91612e73565b602060405180830381855afa158015610dca573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610ded9190612e0d565b925080610df981612ec3565b915050610cf9565b5050919050565b60408051808201909152600080825260208201526000825111610e3d5760405162461bcd60e51b815260040161083a90612edc565b50604080518082019091528151815260209182019181019190915290565b600080600080846000015111610e835760405162461bcd60e51b815260040161083a90612edc565b6020840151805160001a607f8111610ea8576000600160009450945094505050611517565b60b78111611005576000610ebd6080836126f7565b905080876000015111610f3d5760405162461bcd60e51b815260206004820152604e6024820152600080516020612fcf83398151915260448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201526d2873686f727420737472696e672960901b608482015260a40161083a565b6001838101516001600160f81b0319169082141580610f6a5750600160ff1b6001600160f81b0319821610155b610ff25760405162461bcd60e51b815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201526c73686f727420737472696e672960981b608482015260a40161083a565b5060019550935060009250611517915050565b60bf811161124657600061101a60b7836126f7565b90508087600001511161109d5760405162461bcd60e51b81526020600482015260516024820152600080516020612fcf83398151915260448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527067746820286c6f6e6720737472696e672960781b608482015260a40161083a565b60018301516001600160f81b03191660008190036111245760405162461bcd60e51b815260206004820152604a6024820152600080516020612fcf83398151915260448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f6064820152696e6720737472696e672960b01b608482015260a40161083a565b600184015160088302610100031c603781116111a75760405162461bcd60e51b81526020600482015260486024820152600080516020612fcf83398151915260448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201526720737472696e672960c01b608482015260a40161083a565b6111b18184612d92565b8951116112295760405162461bcd60e51b815260206004820152604c6024820152600080516020612fcf83398151915260448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201526b6c6f6e6720737472696e672960a01b608482015260a40161083a565b611234836001612d92565b97509550600094506115179350505050565b60f781116112e857600061125b60c0836126f7565b9050808760000151116112d75760405162461bcd60e51b815260206004820152604a6024820152600080516020612fcf83398151915260448201527f742062652067726561746572207468616e206c697374206c656e677468202873606482015269686f7274206c6973742960b01b608482015260a40161083a565b600195509350849250611517915050565b60006112f560f7836126f7565b9050808760000151116113745760405162461bcd60e51b815260206004820152604d6024820152600080516020612fcf83398151915260448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201526c6820286c6f6e67206c6973742960981b608482015260a40161083a565b60018301516001600160f81b03191660008190036113f95760405162461bcd60e51b81526020600482015260486024820152600080516020612fcf83398151915260448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f6064820152676e67206c6973742960c01b608482015260a40161083a565b600184015160088302610100031c6037811161147a5760405162461bcd60e51b81526020600482015260466024820152600080516020612fcf83398151915260448201527f742062652067726561746572207468616e20353520627974657320286c6f6e67606482015265206c6973742960d01b608482015260a40161083a565b6114848184612d92565b8951116114fa5760405162461bcd60e51b815260206004820152604a6024820152600080516020612fcf83398151915260448201527f742062652067726561746572207468616e20746f74616c206c656e67746820286064820152696c6f6e67206c6973742960b01b608482015260a40161083a565b611505836001612d92565b97509550600194506115179350505050565b9193909250565b6060816001600160401b038111156115385761153861256a565b6040519080825280601f01601f191660200182016040528015611562576020820181803683370190505b509050811561093a5760006115778486612d92565b90506020820160005b84811015611598578281015182820152602001611580565b848111156115a7576000858301525b5050509392505050565b606060008451116115fc5760405162461bcd60e51b81526020600482015260156024820152744d65726b6c65547269653a20656d707479206b657960581b604482015260640161083a565b600061160784611eb6565b9050600061161486611f9a565b905060008460405160200161162b91815260200190565b60405160208183030381529060405290506000805b8451811015611df057600085828151811061165d5761165d61270e565b6020026020010151905084518311156116cf5760405162461bcd60e51b815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201526d0e8c2d840d6caf240d8cadccee8d60931b606482015260840161083a565b8260000361176e578051805160209182012060405161171d926116f792910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b6117695760405162461bcd60e51b815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f742068617368000000604482015260640161083a565b611864565b8051516020116117f45780518051602091820120604051611798926116f792910190815260200190565b6117695760405162461bcd60e51b815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e6044820152660c2d840d0c2e6d60cb1b606482015260840161083a565b8051845160208087019190912082519190920120146118645760405162461bcd60e51b815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f646044820152650ca40d0c2e6d60d31b606482015260840161083a565b61187060106001612d92565b81602001515103611a1857845183036119b0576118aa816020015160108151811061189d5761189d61270e565b6020026020010151611ffd565b965060008751116119235760405162461bcd60e51b815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e6368290000000000606482015260840161083a565b6001865161193191906126f7565b82146119a55760405162461bcd60e51b815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e636829000000000000606482015260840161083a565b50505050505061093a565b60008584815181106119c4576119c461270e565b602001015160f81c60f81b60f81c9050600082602001518260ff16815181106119ef576119ef61270e565b60200260200101519050611a0281612120565b9550611a0f600186612d92565b94505050611ddd565b600281602001515103611d84576000611a3082612145565b9050600081600081518110611a4757611a4761270e565b016020015160f81c90506000611a5e600283612f4c565b611a69906002612f7c565b90506000611a7a848360ff16612169565b90506000611a888a89612169565b90506000611a96838361219a565b905080835114611b0e5760405162461bcd60e51b815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b6579000000000000606482015260840161083a565b60ff851660021480611b23575060ff85166003145b15611cc45780825114611b9e5760405162461bcd60e51b815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e646572000000606482015260840161083a565b611bb8876020015160018151811061189d5761189d61270e565b9c5060008d5111611c315760405162461bcd60e51b815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c6561662900000000000000606482015260840161083a565b60018c51611c3f91906126f7565b8814611cb35760405162461bcd60e51b815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c656166290000000000000000606482015260840161083a565b50505050505050505050505061093a565b60ff85161580611cd7575060ff85166001145b15611d1657611d038760200151600181518110611cf657611cf661270e565b6020026020010151612120565b9950611d0f818a612d92565b9850611d79565b60405162461bcd60e51b815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f64652077697468604482015271040c2dc40eadcd6dcdeeedc40e0e4caccd2f60731b606482015260840161083a565b505050505050611ddd565b60405162461bcd60e51b815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e706172736561604482015267626c65206e6f646560c01b606482015260840161083a565b5080611de881612ec3565b915050611640565b5060405162461bcd60e51b815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c656044820152646d656e747360d81b606482015260840161083a565b6060805b60808310611e89578083607f1660801760f81b604051602001611e6f929190612f9f565b60408051601f198184030190525260079290921c91611e4b565b808360f81b604051602001611e9f929190612f9f565b604051602081830303815290604052915050919050565b8051606090806001600160401b03811115611ed357611ed361256a565b604051908082528060200260200182016040528015611f1857816020015b6040805180820190915260608082526020820152815260200190600190039081611ef15790505b50915060005b81811015610e01576040518060400160405280858381518110611f4357611f4361270e565b60200260200101518152602001611f72868481518110611f6557611f6561270e565b6020026020010151610941565b815250838281518110611f8757611f8761270e565b6020908102919091010152600101611f1e565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015611ff2578060011b82018184015160001a8060041c8253600f811660018301535050600101611fc4565b509295945050505050565b6060600080600061200d85610e5b565b91945092509050600081600181111561202857612028612359565b1461209b5760405162461bcd60e51b815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d00000000000000606482015260840161083a565b6120a58284612d92565b8551146121115760405162461bcd60e51b815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527330b71034b73b30b634b2103932b6b0b4b73232b960611b606482015260840161083a565b610bdb8560200151848461151e565b6060602082600001511061213c5761213782611ffd565b6101ec565b6101ec82610b72565b60606101ec612164836020015160008151811061189d5761189d61270e565b611f9a565b60608251821061218857506040805160208101909152600081526101ec565b61093a838384865161026d91906126f7565b60008082518451106121ad5782516121b0565b83515b90505b808210801561220757508282815181106121cf576121cf61270e565b602001015160f81c60f81b6001600160f81b0319168483815181106121f6576121f661270e565b01602001516001600160f81b031916145b15612217578160010191506121b3565b5092915050565b60008083601f84011261223057600080fd5b5081356001600160401b0381111561224757600080fd5b60208301915083602082850101111561225f57600080fd5b9250929050565b60006040828403121561227857600080fd5b50919050565b6000806000806060858703121561229457600080fd5b8435935060208501356001600160401b03808211156122b257600080fd5b6122be8883890161221e565b909550935060408701359150808211156122d757600080fd5b506122e487828801612266565b91505092959194509250565b60006020828403121561230257600080fd5b5035919050565b6000806000806060858703121561231f57600080fd5b84356001600160401b0381111561233557600080fd5b6123418782880161221e565b90989097506020870135966040013595509350505050565b634e487b7160e01b600052602160045260246000fd5b602081016004831061239157634e487b7160e01b600052602160045260246000fd5b91905290565b600080600080600080600080600060a08a8c0312156123b557600080fd5b89356001600160401b03808211156123cc57600080fd5b6123d88d838e0161221e565b909b50995060208c01359150808211156123f157600080fd5b6123fd8d838e0161221e565b909950975060408c0135965060608c013591508082111561241d57600080fd5b6124298d838e0161221e565b909650945060808c013591508082111561244257600080fd5b5061244f8c828d0161221e565b915080935050809150509295985092959850929598565b6000806000806000806060878903121561247f57600080fd5b86356001600160401b038082111561249657600080fd5b6124a28a838b0161221e565b909850965060208901359150808211156124bb57600080fd5b6124c78a838b0161221e565b909650945060408901359150808211156124e057600080fd5b506124ed89828a0161221e565b979a9699509497509295939492505050565b60005b8381101561251a578181015183820152602001612502565b838111156101fe5750506000910152565b600081518084526125438160208601602086016124ff565b601f01601f19169290920160200192915050565b60208152600061093a602083018461252b565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156125a2576125a261256a565b60405290565b604051608081016001600160401b03811182821017156125a2576125a261256a565b604051601f8201601f191681016001600160401b03811182821017156125f2576125f261256a565b604052919050565b600082601f83011261260b57600080fd5b81356001600160401b038111156126245761262461256a565b612637601f8201601f19166020016125ca565b81815284602083860101111561264c57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806080858703121561267f57600080fd5b8435935060208501356001600160401b038082111561269d57600080fd5b6126a9888389016125fa565b945060408701359150808211156126bf57600080fd5b6126cb888389016125fa565b935060608701359150808211156122d757600080fd5b634e487b7160e01b600052601160045260246000fd5b600082821015612709576127096126e1565b500390565b634e487b7160e01b600052603260045260246000fd5b8183823760009101908152919050565b60006001600160401b0382111561274d5761274d61256a565b5060051b60200190565b600082601f83011261276857600080fd5b8135602061277d61277883612734565b6125ca565b82815260059290921b8401810191818101908684111561279c57600080fd5b8286015b8481101561283a5780356001600160401b03808211156127c05760008081fd5b908801906040828b03601f19018113156127da5760008081fd5b6127e2612580565b87840135838111156127f45760008081fd5b6128028d8a838801016125fa565b8252509083013590828211156128185760008081fd5b6128268c89848701016125fa565b8189015286525050509183019183016127a0565b509695505050505050565b600082601f83011261285657600080fd5b8135602061286661277883612734565b82815260059290921b8401810191818101908684111561288557600080fd5b8286015b8481101561283a5780356001600160401b038111156128a85760008081fd5b6128b68986838b01016125fa565b845250918301918301612889565b80356001600160401b03811681146128db57600080fd5b919050565b600080600080608085870312156128f657600080fd5b6001600160401b03808635111561290c57600080fd5b6040863587018803121561291f57600080fd5b612927612580565b818735880135111561293857600080fd5b86358701803501601f8101891361294e57600080fd5b61295b6127788235612734565b81358082526020808301929160051b8401018b101561297957600080fd5b602083015b6020843560051b850101811015612a6c57858135111561299d57600080fd5b803584016080818e03601f190112156129b557600080fd5b6129bd6125a8565b87602083013511156129ce57600080fd5b6129e08e602080850135850101612757565b815287604083013511156129f357600080fd5b612a068e602060408501358501016125fa565b60208201528760608301351115612a1c57600080fd5b612a2f8e602060608501358501016125fa565b60408201528760808301351115612a4557600080fd5b612a588e602060808501358501016125fa565b60608201528452506020928301920161297e565b508352505060208735880181013581830152909550860135811015612a9057600080fd5b50612aa18660208701358701612845565b925060408501359150612ab6606086016128c4565b905092959194509250565b600181811c90821680612ad557607f821691505b60208210810361227857634e487b7160e01b600052602260045260246000fd5b84815260006020608081840152612b0f608084018761252b565b8381036040850152612b21818761252b565b905083810360608501526040810185516040835281815180845260608501915060608160051b8601019350858301925060005b81811015612c4257605f19868603018352835180516080808852815190880181905260a0600582901b89018101928b01919089019060005b81811015612bdf57609f198b86030183528351805160408752612bb2604088018261252b565b90508e82015191508681038f880152612bcb818361252b565b96505050928c0192918c0191600101612b8c565b50505050888201518782038a890152612bf8828261252b565b91505060408201518782036040890152612c12828261252b565b915050606082015191508681036060880152612c2e818361252b565b965050509286019291860191600101612b54565b50505050948201519101525090949350505050565b6000808335601e19843603018112612c6e57600080fd5b8301803591506001600160401b03821115612c8857600080fd5b6020019150600581901b360382131561225f57600080fd5b60008235607e19833603018112612cb657600080fd5b9190910192915050565b6000808335601e19843603018112612cd757600080fd5b8301803591506001600160401b03821115612cf157600080fd5b60200191503681900382131561225f57600080fd5b803560208310156101ec57600019602084900360031b1b1692915050565b60008085851115612d3457600080fd5b83861115612d4157600080fd5b5050820193919092039150565b85815284602082015283604082015260806060820152816080820152818360a0830137600081830160a090810191909152601f909201601f19160101949350505050565b60008219821115612da557612da56126e1565b500190565b6e706f6c796962632f636c69656e742f60881b815260008351612dd481600f8501602088016124ff565b6c2f72656365697074526f6f742f60981b600f93909101928301525060c09190911b6001600160c01b031916601c820152602401919050565b600060208284031215612e1f57600080fd5b5051919050565b868882376000878201600081528751612e43818360208c016124ff565b018587823760009086019081528451612e608183602089016124ff565b0192835250506020019695505050505050565b60008251612cb68184602087016124ff565b60008235603e19833603018112612cb657600080fd5b8486823760008582018581528385602083013760009301602001928352509095945050505050565b600060018201612ed557612ed56126e1565b5060010190565b6020808252604a908201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60408201527f206d7573742062652067726561746572207468616e207a65726f20746f206265606082015269206465636f6461626c6560b01b608082015260a00190565b600060ff831680612f6d57634e487b7160e01b600052601260045260246000fd5b8060ff84160691505092915050565b600060ff821660ff841680821015612f9657612f966126e1565b90039392505050565b60008351612fb18184602088016124ff565b6001600160f81b031993909316919092019081526001019291505056fe524c505265616465723a206c656e677468206f6620636f6e74656e74206d7573a2646970667358221220a7ebac4b1f1aff28835e9b8a2414311e0782939bde0922cb7e47fb84ed09c14864736f6c634300080f0033"; + +type CrossL2ProverConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: CrossL2ProverConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class CrossL2Prover__factory extends ContractFactory { + constructor(...args: CrossL2ProverConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override getDeployTransaction( + verifier_: AddressLike, + peptideClientId_: string, + overrides?: NonPayableOverrides & { from?: string } + ): Promise { + return super.getDeployTransaction( + verifier_, + peptideClientId_, + overrides || {} + ); + } + override deploy( + verifier_: AddressLike, + peptideClientId_: string, + overrides?: NonPayableOverrides & { from?: string } + ) { + return super.deploy( + verifier_, + peptideClientId_, + overrides || {} + ) as Promise< + CrossL2Prover & { + deploymentTransaction(): ContractTransactionResponse; + } + >; + } + override connect(runner: ContractRunner | null): CrossL2Prover__factory { + return super.connect(runner) as CrossL2Prover__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): CrossL2ProverInterface { + return new Interface(_abi) as CrossL2ProverInterface; + } + static connect( + address: string, + runner?: ContractRunner | null + ): CrossL2Prover { + return new Contract(address, _abi, runner) as unknown as CrossL2Prover; + } +} diff --git a/src/evm/contracts/factories/Dispatcher__factory.ts b/src/evm/contracts/factories/Dispatcher__factory.ts index 7e7a204c..76b06b59 100644 --- a/src/evm/contracts/factories/Dispatcher__factory.ts +++ b/src/evm/contracts/factories/Dispatcher__factory.ts @@ -2090,7 +2090,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a0604052306080523480156200001557600080fd5b506200002062000026565b620000e7565b600054610100900460ff1615620000935760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000e5576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6080516158d46200011f60003960008181610c1f01528181610c68015281816113c201528181611402015261149501526158d46000f3fe6080604052600436106101c25760003560e01c8063715018a6116100f7578063b12f89be11610095578063c899e27211610064578063c899e2721461051e578063e30c39781461053e578063f2fde38b1461055c578063f90b8e961461057c57600080fd5b8063b12f89be14610486578063ba5a4d25146104a6578063c00fa7c0146104c6578063c3e1155c146104e657600080fd5b80637ab4339d116100d15780637ab4339d1461040857806381bc079b146104285780638da5cb5b146104485780639f59ae711461046657600080fd5b8063715018a6146103bc5780637774a6d3146103d157806379ba5097146103f357600080fd5b8063478222c211610164578063556d51781161013e578063556d51781461033c5780635d7adf961461035c5780636050b5f31461037c5780636b67055e1461039c57600080fd5b8063478222c2146102cd5780634f1ef2861461030657806352d1902d1461031957600080fd5b80633659cfe6116101a05780633659cfe614610240578063418925b71461026057806342852d2414610280578063429446b6146102ad57600080fd5b80631eb9fc86146101c75780632494546b146101e95780632bf5d19d14610220575b600080fd5b3480156101d357600080fd5b506101e76101e2366004613fc6565b61059c565b005b3480156101f557600080fd5b5060fa546102069063ffffffff1681565b60405163ffffffff90911681526020015b60405180910390f35b34801561022c57600080fd5b506101e761023b36600461409c565b610926565b34801561024c57600080fd5b506101e761025b366004614146565b610c15565b34801561026c57600080fd5b506101e761027b3660046141a4565b610cfd565b34801561028c57600080fd5b506102a061029b366004614265565b610db6565b6040516102179190614365565b3480156102b957600080fd5b506101e76102c8366004613fc6565b61110e565b3480156102d957600080fd5b50610105546102ee906001600160a01b031681565b6040516001600160a01b039091168152602001610217565b6101e76103143660046144b8565b6113b8565b34801561032557600080fd5b5061032e611488565b604051908152602001610217565b34801561034857600080fd5b506101e761035736600461451b565b61153b565b34801561036857600080fd5b506101e7610377366004614583565b611553565b34801561038857600080fd5b506101e7610397366004614583565b611863565b3480156103a857600080fd5b506101e76103b7366004614583565b611875565b3480156103c857600080fd5b506101e7611f7e565b3480156103dd57600080fd5b506103e6611f92565b60405161021791906145dc565b3480156103ff57600080fd5b506101e7612020565b34801561041457600080fd5b506101e761042336600461460f565b612097565b34801561043457600080fd5b506101e7610443366004614660565b612220565b34801561045457600080fd5b506033546001600160a01b03166102ee565b34801561047257600080fd5b506101e7610481366004614679565b6122e8565b34801561049257600080fd5b5061032e6104a13660046146ba565b61233d565b3480156104b257600080fd5b506101e76104c1366004614705565b6123f6565b3480156104d257600080fd5b506101e76104e1366004614679565b612932565b3480156104f257600080fd5b506105066105013660046147a9565b61296e565b6040516001600160401b039091168152602001610217565b34801561052a57600080fd5b506101e7610539366004614806565b612ac2565b34801561054a57600080fd5b506065546001600160a01b03166102ee565b34801561056857600080fd5b506101e7610577366004614146565b612b6d565b34801561058857600080fd5b506101e7610597366004614888565b612bde565b6105a461320b565b60028510156105c65760405163af0ba14d60e01b815260040160405180910390fd5b6105ec6105d388806148e0565b60208a01356105e286806148e0565b8760200135613264565b61064e8686600081811061060257610602614926565b905060200281019061061491906148e0565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061329f92505050565b6001600160a01b031663cb535ab58273__$d825222459c46c14afb2efe0967c30e98d$__634f9b0fb36106818c806148e0565b8d602001356040518463ffffffff1660e01b81526004016106a493929190614965565b600060405180830381865af41580156106c1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106e991908101906149d9565b73__$d825222459c46c14afb2efe0967c30e98d$__6325e0dd0e60078a8e806040019061071691906148e0565b8f8f6107228e806148e0565b8f602001356040518a63ffffffff1660e01b815260040161074b99989796959493929190614a62565b600060405180830381865af4158015610768573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261079091908101906149d9565b6040518463ffffffff1660e01b81526004016107ae93929190614b7c565b600060405180830381600087803b1580156107c857600080fd5b505af11580156107dc573d6000803e3d6000fd5b50600092506107f791506107f2905089806148e0565b61331e565b9050600080610869836301d08fc560e71b6020808e01359089013561081f60408b018b6148e0565b6040516024016108329493929190614d2a565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526133b1565b9150915081156108ce57610882838b8b8b8b8b8b61349d565b826001600160a01b03167fcf8be9ab2b5edf8beb2c45abe8e0cc7646318ac19f6c3164ba2e19e93a8a32af8b602001356040516108c191815260200190565b60405180910390a2610910565b826001600160a01b03167f971a4433f5bff5f011728a4123aeeca4b5275ac20b013cf276e65510491ac26f8260405161090791906145dc565b60405180910390a25b50505061091d6001609755565b50505050505050565b61092e61320b565b6002831461094f5760405163af0ba14d60e01b815260040160405180910390fd5b61095c6105d388806148e0565b6109728484600081811061060257610602614926565b6001600160a01b031663cb535ab58273__$d825222459c46c14afb2efe0967c30e98d$__634f9b0fb36109a58c806148e0565b8d602001356040518463ffffffff1660e01b81526004016109c893929190614965565b600060405180830381865af41580156109e5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a0d91908101906149d9565b73__$d825222459c46c14afb2efe0967c30e98d$__6325e0dd0e60068c8e8060400190610a3a91906148e0565b8d8d610a468e806148e0565b8f602001356040518a63ffffffff1660e01b8152600401610a6f99989796959493929190614a62565b600060405180830381865af4158015610a8c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ab491908101906149d9565b6040518463ffffffff1660e01b8152600401610ad293929190614b7c565b600060405180830381600087803b158015610aec57600080fd5b505af1158015610b00573d6000803e3d6000fd5b5060009250610b1691506107f2905089806148e0565b9050600080610b6c83634bdb559760e01b8b8a8a8f602001358b8060000190610b3f91906148e0565b8d602001358e8060400190610b5491906148e0565b60405160240161083299989796959493929190614d97565b915091508115610bdc57826001600160a01b03167ff910705a7a768eb5958f281a5f84cae8bffc5dd811ca5cd303dda140a423698c82806020019051810190610bb59190614dfc565b8b8b8b8b610bc38c806148e0565b8d602001356040516108c1989796959493929190614e44565b826001600160a01b03167f9e2fe55a3b54b57f82334c273f8d048cd7f05ad19c16cf334276a8c1fec4b6fd8260405161090791906145dc565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610c665760405162461bcd60e51b8152600401610c5d90614eaa565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610caf600080516020615858833981519152546001600160a01b031690565b6001600160a01b031614610cd55760405162461bcd60e51b8152600401610c5d90614ef6565b610cde8161373d565b60408051600080825260208201909252610cfa91839190613745565b50565b610d0561320b565b600283141580610d13575080155b15610d3157604051637d6ba8a560e01b815260040160405180910390fd5b6000879003610d535760405163f61bbcf360e01b815260040160405180910390fd5b336001600160a01b03167f20fd8a5856711b18d00def4aa6abafbe00ce6d60795e015cc1cad35eb9b463598989898989898989604051610d9a989796959493929190614f42565b60405180910390a2610dac6001609755565b5050505050505050565b610dfc6040805160e08101909152606081526020810160008152602001600015158152602001606081526020016060815260200160008019168152602001606081525090565b6001600160a01b038316600090815260fb6020908152604080832085845290915290819020815160e08101909252805482908290610e3990614fa2565b80601f0160208091040260200160405190810160405280929190818152602001828054610e6590614fa2565b8015610eb25780601f10610e8757610100808354040283529160200191610eb2565b820191906000526020600020905b815481529060010190602001808311610e9557829003601f168201915b5050509183525050600182015460209091019060ff166002811115610ed957610ed96142e9565b6002811115610eea57610eea6142e9565b81526001820154610100900460ff161515602080830191909152600283018054604080518285028101850182528281529401939260009084015b82821015610fd0578382906000526020600020018054610f4390614fa2565b80601f0160208091040260200160405190810160405280929190818152602001828054610f6f90614fa2565b8015610fbc5780601f10610f9157610100808354040283529160200191610fbc565b820191906000526020600020905b815481529060010190602001808311610f9f57829003601f168201915b505050505081526020019060010190610f24565b505050508152602001600382018054610fe890614fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461101490614fa2565b80156110615780601f1061103657610100808354040283529160200191611061565b820191906000526020600020905b81548152906001019060200180831161104457829003601f168201915b505050505081526020016004820154815260200160058201805461108490614fa2565b80601f01602080910402602001604051908101604052809291908181526020018280546110b090614fa2565b80156110fd5780601f106110d2576101008083540402835291602001916110fd565b820191906000526020600020905b8154815290600101906020018083116110e057829003601f168201915b505050505081525050905092915050565b61111661320b565b60028510156111385760405163af0ba14d60e01b815260040160405180910390fd5b6111456105d388806148e0565b61115b8686600081811061060257610602614926565b6001600160a01b031663cb535ab58273__$d825222459c46c14afb2efe0967c30e98d$__634f9b0fb361118e8c806148e0565b8d602001356040518463ffffffff1660e01b81526004016111b193929190614965565b600060405180830381865af41580156111ce573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111f691908101906149d9565b73__$d825222459c46c14afb2efe0967c30e98d$__6325e0dd0e60088a8e806040019061122391906148e0565b8f8f61122f8e806148e0565b8f602001356040518a63ffffffff1660e01b815260040161125899989796959493929190614a62565b600060405180830381865af4158015611275573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261129d91908101906149d9565b6040518463ffffffff1660e01b81526004016112bb93929190614b7c565b600060405180830381600087803b1580156112d557600080fd5b505af11580156112e9573d6000803e3d6000fd5b50600092506112ff91506107f2905089806148e0565b90506000806113278363fad28a2460e01b8c6020013560405160240161083291815260200190565b91509150811561137f57611340838b8b8b8b8b8b61349d565b826001600160a01b03167fe80f571f70f7cabf9d7ac60ece08421be374117776c311c327a083ca398f802f8b602001356040516108c191815260200190565b826001600160a01b03167ff6a58ef30f66943749e8c29c661c84da143a1c8ed017f5faa92b509e0000875a8260405161090791906145dc565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036114005760405162461bcd60e51b8152600401610c5d90614eaa565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611449600080516020615858833981519152546001600160a01b031690565b6001600160a01b03161461146f5760405162461bcd60e51b8152600401610c5d90614ef6565b6114788261373d565b61148482826001613745565b5050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146115285760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610c5d565b5060008051602061585883398151915290565b6115436138b0565b61154e83838361390a565b505050565b61155b61320b565b61157461156b6020840184614fd6565b602001356139a5565b6001600160a01b031663cb535ab58273__$d825222459c46c14afb2efe0967c30e98d$__634b5728d1866040518263ffffffff1660e01b81526004016115ba9190615058565b600060405180830381865af41580156115d7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526115ff91908101906149d9565b604051637e4794ed60e11b815273__$d825222459c46c14afb2efe0967c30e98d$__9063fc8f29da90611636908990600401615058565b602060405180830381865af4158015611653573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611677919061511a565b60405160200161168991815260200190565b6040516020818303038152906040526040518463ffffffff1660e01b81526004016116b693929190614b7c565b600060405180830381600087803b1580156116d057600080fd5b505af11580156116e4573d6000803e3d6000fd5b5050505060006117078380602001906116fd9190614fd6565b6107f290806148e0565b6001600160a01b0381166000908152610100602090815260408220929350909190829061173690870187614fd6565b602001358152602001908152602001600020600085604001602081019061175d9190615133565b6001600160401b0316815260208101919091526040016000205460ff169050801561179b5760405163066c745760e01b815260040160405180910390fd5b6117c36117ae60e0860160c08701615133565b6117be60c0870160a08801615133565b613a70565b6117e0576040516312c9cc9f60e01b815260040160405180910390fd5b6117ed6020850185614fd6565b602001356001600160a01b0383167fedbcd9eeb09d85c3ea1b5bf002c04478059cb261cab82c903885cefccae374bc61182c6060880160408901615133565b6080880161184060e08a0160c08b01615133565b60405161184f9392919061514e565b60405180910390a350506114846001609755565b61186b61320b565b6114846001609755565b61187d61320b565b61188d61156b6020840184614fd6565b6001600160a01b031663cb535ab58273__$d825222459c46c14afb2efe0967c30e98d$__634b5728d1866040518263ffffffff1660e01b81526004016118d39190615058565b600060405180830381865af41580156118f0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261191891908101906149d9565b604051637e4794ed60e11b815273__$d825222459c46c14afb2efe0967c30e98d$__9063fc8f29da9061194f908990600401615058565b602060405180830381865af415801561196c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611990919061511a565b6040516020016119a291815260200190565b6040516020818303038152906040526040518463ffffffff1660e01b81526004016119cf93929190614b7c565b600060405180830381600087803b1580156119e957600080fd5b505af11580156119fd573d6000803e3d6000fd5b505050506000611a168380602001906116fd9190614fd6565b6001600160a01b03811660009081526101006020908152604082209293509091908290611a4590870187614fd6565b6020013581526020019081526020016000206000856040016020810190611a6c9190615133565b6001600160401b0316815260208101919091526040016000205460ff1690508015611aaa5760405163066c745760e01b815260040160405180910390fd5b6001600160a01b03821660009081526101006020908152604082206001929091611ad690880188614fd6565b6020013581526020019081526020016000206000866040016020810190611afd9190615133565b6001600160401b031681526020810191909152604001600020805460ff191691151591909117905560026001600160a01b038316600090815260fb6020908152604082209190611b4f90880188614fd6565b60209081013582528101919091526040016000206001015460ff166002811115611b7b57611b7b6142e9565b03611c7a576001600160a01b038216600090815260fd6020908152604082209190611ba890870187614fd6565b60209081013582528101919091526040908101600020546001600160401b031690611bd99060608701908701615133565b6001600160401b031614611c005760405163362a414d60e01b815260040160405180910390fd5b611c106060850160408601615133565b611c1b90600161517e565b6001600160a01b038316600090815260fd6020908152604082209190611c4390880188614fd6565b60200135815260200190815260200160002060006101000a8154816001600160401b0302191690836001600160401b031602179055505b611c876020850185614fd6565b602001356001600160a01b0383167fde5b57e6566d68a30b0979431df3d5df6db3b9aa89f8820f595b9315bf86d067611cc66060880160408901615133565b6040516001600160401b03909116815260200160405180910390a3611cf46117ae60e0860160c08701615133565b15611d7757611d066020850185614fd6565b602001356001600160a01b0383167fedbcd9eeb09d85c3ea1b5bf002c04478059cb261cab82c903885cefccae374bc611d456060880160408901615133565b60808801611d5960e08a0160c08b01615133565b604051611d689392919061514e565b60405180910390a3505061186b565b6040805180820190915260008152606060208201526000806000611dae86634dcc0aa660e01b8a6040516024016108329190615268565b915091508115611de75780806020019051810190611dcc91906152f4565b90945092508215611de25750505050505061186b565b611dff565b60408051808201909152600081526020810182905293505b6001600160a01b0386166000908152610101602090815260408220908290611e29908c018c614fd6565b60200135815260200190815260200160002060008a6040016020810190611e509190615133565b6001600160401b0316815260208101919091526040016000205460ff1690508015611e8e57604051637aa549d360e01b815260040160405180910390fd5b6001600160a01b03871660009081526101016020908152604082206001929091611eba908d018d614fd6565b60200135815260200190815260200160002060008b6040016020810190611ee19190615133565b6001600160401b03168152602080820192909252604001600020805460ff191692151592909217909155611f17908a018a614fd6565b602001356001600160a01b0388167fa32e6f42b1d63fb83ad73b009a6dbb9413d1da02e95b1bb08f081815eea8db20611f5660608d0160408e01615133565b88604051611f6592919061535b565b60405180910390a3505050505050506114846001609755565b611f866138b0565b611f906000613abe565b565b60f98054611f9f90614fa2565b80601f0160208091040260200160405190810160405280929190818152602001828054611fcb90614fa2565b80156120185780601f10611fed57610100808354040283529160200191612018565b820191906000526020600020905b815481529060010190602001808311611ffb57829003601f168201915b505050505081565b60655433906001600160a01b0316811461208e5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610c5d565b610cfa81613abe565b600054600290610100900460ff161580156120b9575060005460ff8083169116105b61211c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610c5d565b6000805461ffff191660ff83161761010017905561213861320b565b825160000361215a5760405163e8cf362360e01b815260040160405180910390fd5b6001600160a01b0382166121815760405163cbdd34cf60e01b815260040160405180910390fd5b612189613ad7565b612191613b06565b60f961219d84826153c3565b50825160fa805463ffffffff191663ffffffff90921691909117905561010580546001600160a01b0319166001600160a01b03841617905560016097556000805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b61222861320b565b61223181613b35565b33600090815260fb602090815260408083208484529091528120906122568282613e50565b60018201805461ffff19169055612271600283016000613e8a565b61227f600383016000613e50565b60048201600090556005820160006122979190613e50565b50506000818152610103602052604081206122b191613e50565b604051819033907f21372e37743553ba8e5f61239803174a827c7732d53ec8adcb76c6b3bb2c13f190600090a3610cfa6001609755565b6122f06138b0565b60008190036123125760405163e8cf362360e01b815260040160405180910390fd5b60f961231f828483615482565b5060fa805463ffffffff191663ffffffff9290921691909117905550565b600061237e83838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061329f92505050565b6001600160a01b03166344c9af28856040518263ffffffff1660e01b81526004016123ab91815260200190565b602060405180830381865afa1580156123c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ec919061511a565b90505b9392505050565b6123fe61320b565b600061240d6116fd8680614fd6565b905061241c61156b8680614fd6565b6001600160a01b031663cb535ab58373__$d825222459c46c14afb2efe0967c30e98d$__6311a7a373896040518263ffffffff1660e01b81526004016124629190615058565b600060405180830381865af415801561247f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526124a791908101906149d9565b6040516374e9704560e01b815273__$d825222459c46c14afb2efe0967c30e98d$__906374e97045906124e0908b908b90600401615542565b602060405180830381865af41580156124fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612521919061511a565b60405160200161253391815260200190565b6040516020818303038152906040526040518463ffffffff1660e01b815260040161256093929190614b7c565b600060405180830381600087803b15801561257a57600080fd5b505af115801561258e573d6000803e3d6000fd5b505050506001600160a01b038116600090815260ff60205260408120816125b58880614fd6565b60200135815260200190815260200160002060008760400160208101906125dc9190615133565b6001600160401b0316815260208101919091526040016000205460ff169050806126195760405163ca89746b60e01b815260040160405180910390fd5b6000806126b884637e1d42b560e01b8a73__$d825222459c46c14afb2efe0967c30e98d$__63360b8cd78c8c6040518363ffffffff1660e01b8152600401612662929190615542565b600060405180830381865af415801561267f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526126a79190810190615556565b60405160240161083292919061558a565b9150915081156128dc5760026001600160a01b038516600090815260fb60205260408120906126e78b80614fd6565b60209081013582528101919091526040016000206001015460ff166002811115612713576127136142e9565b03612808576001600160a01b038416600090815260fe602052604081209061273b8a80614fd6565b60209081013582528101919091526040908101600020546001600160401b03169061276c9060608b01908b01615133565b6001600160401b0316146127935760405163362a414d60e01b815260040160405180910390fd5b6127a36060890160408a01615133565b6127ae90600161517e565b6001600160a01b038516600090815260fe60205260408120906127d18b80614fd6565b60200135815260200190815260200160002060006101000a8154816001600160401b0302191690836001600160401b031602179055505b6001600160a01b038416600090815260ff602052604081209061282b8a80614fd6565b60200135815260200190815260200160002060008960400160208101906128529190615133565b6001600160401b031681526020810191909152604001600020805460ff1916905561287d8880614fd6565b602001356001600160a01b0385167fe46f6591236abe528fe47a3b281fb002524dadd3e62b1f317ed285d07273c3b16128bc60608c0160408d01615133565b6040516001600160401b03909116815260200160405180910390a361291e565b836001600160a01b03167f625eea143c9dae6915c809da47016c22d9cd006c3ace7c345c5cbcf57d3aefbc8260405161291591906145dc565b60405180910390a25b5050505061292c6001609755565b50505050565b61293a6138b0565b610104828260405161294d9291906155af565b90815260405190819003602001902080546001600160a01b03191690555050565b600061297861320b565b61298185613b35565b42826001600160401b0316116129aa5760405163551ea0fb60e11b815260040160405180910390fd5b5033600090815260fc602090815260408083208784529091528120546001600160401b0316908190036129f057604051631e510bfb60e21b815260040160405180910390fd5b33600090815260ff6020908152604080832088845282528083206001600160401b03851684529091529020805460ff19166001908117909155612a3490829061517e565b33600081815260fc602090815260408083208a845290915290819020805467ffffffffffffffff19166001600160401b03949094169390931790925590518691907fb5bff96e18da044e4e34510d16df9053b9f1920f6a960732e5aaf22fe9b8013690612aa89088908890879089906155bf565b60405180910390a3612aba6001609755565b949350505050565b612b0182828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061329f92505050565b6001600160a01b03166349ff245e878787876040518563ffffffff1660e01b8152600401612b3294939291906155f4565b600060405180830381600087803b158015612b4c57600080fd5b505af1158015612b60573d6000803e3d6000fd5b505050505b505050505050565b612b756138b0565b606580546001600160a01b0383166001600160a01b03199091168117909155612ba66033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b612be661320b565b6001600160a01b038316612c0d5760405163cbdd34cf60e01b815260040160405180910390fd5b6001600160a01b038316600090815260fb60209081526040808320858452909152808220815160e08101909252805482908290612c4990614fa2565b80601f0160208091040260200160405190810160405280929190818152602001828054612c7590614fa2565b8015612cc25780601f10612c9757610100808354040283529160200191612cc2565b820191906000526020600020905b815481529060010190602001808311612ca557829003601f168201915b5050509183525050600182015460209091019060ff166002811115612ce957612ce96142e9565b6002811115612cfa57612cfa6142e9565b81526001820154610100900460ff161515602080830191909152600283018054604080518285028101850182528281529401939260009084015b82821015612de0578382906000526020600020018054612d5390614fa2565b80601f0160208091040260200160405190810160405280929190818152602001828054612d7f90614fa2565b8015612dcc5780601f10612da157610100808354040283529160200191612dcc565b820191906000526020600020905b815481529060010190602001808311612daf57829003601f168201915b505050505081526020019060010190612d34565b505050508152602001600382018054612df890614fa2565b80601f0160208091040260200160405190810160405280929190818152602001828054612e2490614fa2565b8015612e715780601f10612e4657610100808354040283529160200191612e71565b820191906000526020600020905b815481529060010190602001808311612e5457829003601f168201915b5050505050815260200160048201548152602001600582018054612e9490614fa2565b80601f0160208091040260200160405190810160405280929190818152602001828054612ec090614fa2565b8015612f0d5780601f10612ee257610100808354040283529160200191612f0d565b820191906000526020600020905b815481529060010190602001808311612ef057829003601f168201915b5050509190925250505060a0810151909150612f3c57604051634d93b09d60e11b815260040160405180910390fd5b612f45836139a5565b6001600160a01b031663cb535ab58373__$d825222459c46c14afb2efe0967c30e98d$__636f6547268560c00151886040518363ffffffff1660e01b8152600401612f9192919061561b565b600060405180830381865af4158015612fae573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612fd691908101906149d9565b602085015185516060870151608088015160a0890151604051631f621e1560e31b815273__$d825222459c46c14afb2efe0967c30e98d$__9563fb10f0a89561302c95600995929491939092919060040161563d565b600060405180830381865af4158015613049573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261307191908101906149d9565b6040518463ffffffff1660e01b815260040161308f93929190614b7c565b600060405180830381600087803b1580156130a957600080fd5b505af11580156130bd573d6000803e3d6000fd5b505050506000806130ed86633f9fdbe460e01b8786608001518760a00151604051602401610832939291906156e5565b6001600160a01b038816600090815260fb602090815260408083208a845290915281209294509092506131208282613e50565b60018201805461ffff1916905561313b600283016000613e8a565b613149600383016000613e50565b60048201600090556005820160006131619190613e50565b505060008581526101036020526040812061317b91613e50565b81156131bc5760405185906001600160a01b038816907f5f010dbbd6bf46aec8131c5456301a75cd688d3cca9bc8380c9e26301be2072990600090a36131fe565b856001600160a01b03167fc9d36d7a317cb116925d5cb66f0069fe825822fe23e9cf3f421c38cf444caa30826040516131f591906145dc565b60405180910390a25b50505061154e6001609755565b60026097540361325d5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b6002609755565b84158061326f575081155b80613278575083155b80613281575080155b15612b6557604051637d6ba8a560e01b815260040160405180910390fd5b600081516000036132cd5760405163524e171160e01b81526020600482015260006024820152604401610c5d565b610104826040516132de919061570e565b908152604051908190036020019020546001600160a01b0316905080613319578160405163036c4d8760e11b8152600401610c5d91906145dc565b919050565b60fa5460009073__$f61eb90c6f674e787d51c07f105fa231e2$__9063a1ef9a989061335390859063ffffffff168188615720565b6040518363ffffffff1660e01b8152600401613370929190615542565b602060405180830381865af415801561338d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ef919061574a565b600060606001600160a01b0384163b6133f957505060408051808201909152601481527318d85b1b081d1bc81b9bdb8b58dbdb9d1c9858dd60621b6020820152600090613496565b60005a9050846001600160a01b031684604051613416919061570e565b6000604051808303816000865af19150503d8060008114613453576040519150601f19603f3d011682016040523d82523d6000602084013e613458565b606091505b509093509150821580156134765750613472604082615767565b5a11155b156134945760405163b08ede0960e01b815260040160405180910390fd5b505b9250929050565b6040518060e001604052808780604001906134b891906148e0565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505090825250602001846002811115613504576135046142e9565b8152831515602082015260400161351b8688615789565b815260200161352a83806148e0565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050908252506020838101359082015260400161357888806148e0565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506001600160a01b038a16815260fb602090815260408083208b83013584529091529020825190915081906135e290826153c3565b50602082015160018083018054909160ff199091169083600281111561360a5761360a6142e9565b021790555060408201516001820180549115156101000261ff001990921691909117905560608201518051613649916002840191602090910190613ea8565b506080820151600382019061365e90826153c3565b5060a0820151600482015560c0820151600582019061367d90826153c3565b5050506001600160a01b038716600081815260fc602090815260408083208a8301358085529083528184208054600167ffffffffffffffff19918216811790925586865260fd85528386208387528552838620805482168317905595855260fe845282852091855292528220805490931617909155859085908161370357613703614926565b905060200281019061371591906148e0565b60208089013560009081526101039091526040902091610dac919083615482565b6001609755565b610cfa6138b0565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156137785761154e83613b70565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156137d2575060408051601f3d908101601f191682019092526137cf9181019061511a565b60015b6138355760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610c5d565b60008051602061585883398151915281146138a45760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610c5d565b5061154e838383613c0c565b6033546001600160a01b03163314611f905760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c5d565b60008290036139365760405163524e171160e01b81526020600482015260006024820152604401610c5d565b6001600160a01b03811661395d5760405163cbdd34cf60e01b815260040160405180910390fd5b8061010484846040516139719291906155af565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b0319909216919091179055505050565b60008181526101036020526040812080548291906139c290614fa2565b80601f01602080910402602001604051908101604052809291908181526020018280546139ee90614fa2565b8015613a3b5780601f10613a1057610100808354040283529160200191613a3b565b820191906000526020600020905b815481529060010190602001808311613a1e57829003601f168201915b505050505090508051600003613a67576040516363b99a9d60e11b815260048101849052602401610c5d565b6123ef8161329f565b60006001600160401b03831615801590613a935750826001600160401b03164210155b806123ef57506001600160401b038216158015906123ef5750506001600160401b0316431015919050565b606580546001600160a01b0319169055610cfa81613c31565b600054610100900460ff16613afe5760405162461bcd60e51b8152600401610c5d9061580c565b611f90613c83565b600054610100900460ff16613b2d5760405162461bcd60e51b8152600401610c5d9061580c565b611f90613cb3565b33600090815260fb60209081526040808320848452909152902060040154610cfa57604051631109bfb360e31b815260040160405180910390fd5b6001600160a01b0381163b613bdd5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610c5d565b60008051602061585883398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b613c1583613cda565b600082511180613c225750805b1561154e5761292c8383613d1a565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16613caa5760405162461bcd60e51b8152600401610c5d9061580c565b611f9033613abe565b600054610100900460ff166137365760405162461bcd60e51b8152600401610c5d9061580c565b613ce381613b70565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606123ef8383604051806060016040528060278152602001615878602791396060600080856001600160a01b031685604051613d57919061570e565b600060405180830381855af49150503d8060008114613d92576040519150601f19603f3d011682016040523d82523d6000602084013e613d97565b606091505b5091509150613da886838387613db2565b9695505050505050565b60608315613e21578251600003613e1a576001600160a01b0385163b613e1a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610c5d565b5081612aba565b612aba8383815115613e365781518083602001fd5b8060405162461bcd60e51b8152600401610c5d91906145dc565b508054613e5c90614fa2565b6000825580601f10613e6c575050565b601f016020900490600052602060002090810190610cfa9190613efe565b5080546000825590600052602060002090810190610cfa9190613f13565b828054828255906000526020600020908101928215613eee579160200282015b82811115613eee5782518290613ede90826153c3565b5091602001919060010190613ec8565b50613efa929150613f13565b5090565b5b80821115613efa5760008155600101613eff565b80821115613efa576000613f278282613e50565b50600101613f13565b600060608284031215613f4257600080fd5b50919050565b60008083601f840112613f5a57600080fd5b5081356001600160401b03811115613f7157600080fd5b6020830191508360208260051b850101111561349657600080fd5b80356003811061331957600080fd5b8015158114610cfa57600080fd5b803561331981613f9b565b600060408284031215613f4257600080fd5b600080600080600080600060c0888a031215613fe157600080fd5b87356001600160401b0380821115613ff857600080fd5b6140048b838c01613f30565b985060208a013591508082111561401a57600080fd5b6140268b838c01613f48565b909850965086915061403a60408b01613f8c565b955061404860608b01613fa9565b945060808a013591508082111561405e57600080fd5b61406a8b838c01613f30565b935060a08a013591508082111561408057600080fd5b5061408d8a828b01613fb4565b91505092959891949750929550565b600080600080600080600060c0888a0312156140b757600080fd5b87356001600160401b03808211156140ce57600080fd5b6140da8b838c01613f30565b98506140e860208b01613f8c565b97506140f660408b01613fa9565b965060608a013591508082111561410c57600080fd5b6141188b838c01613f48565b909650945060808a013591508082111561405e57600080fd5b6001600160a01b0381168114610cfa57600080fd5b60006020828403121561415857600080fd5b81356123ef81614131565b60008083601f84011261417557600080fd5b5081356001600160401b0381111561418c57600080fd5b60208301915083602082850101111561349657600080fd5b60008060008060008060008060a0898b0312156141c057600080fd5b88356001600160401b03808211156141d757600080fd5b6141e38c838d01614163565b909a5098508891506141f760208c01613f8c565b975060408b0135915061420982613f9b565b90955060608a0135908082111561421f57600080fd5b61422b8c838d01613f48565b909650945060808b013591508082111561424457600080fd5b506142518b828c01614163565b999c989b5096995094979396929594505050565b6000806040838503121561427857600080fd5b823561428381614131565b946020939093013593505050565b60005b838110156142ac578181015183820152602001614294565b8381111561292c5750506000910152565b600081518084526142d5816020860160208601614291565b601f01601f19169290920160200192915050565b634e487b7160e01b600052602160045260246000fd5b6003811061430f5761430f6142e9565b9052565b6000815180845260208085019450848260051b860182860160005b858110156143585783830389526143468383516142bd565b9885019892509084019060010161432e565b5090979650505050505050565b602081526000825160e060208401526143826101008401826142bd565b9050602084015161439660408501826142ff565b506040840151151560608401526060840151601f19808584030160808601526143bf8383614313565b925060808601519150808584030160a08601526143dc83836142bd565b925060a086015160c086015260c08601519150808584030160e08601525061440482826142bd565b95945050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561444b5761444b61440d565b604052919050565b60006001600160401b0382111561446c5761446c61440d565b50601f01601f191660200190565b600061448d61448884614453565b614423565b90508281528383830111156144a157600080fd5b828260208301376000602084830101529392505050565b600080604083850312156144cb57600080fd5b82356144d681614131565b915060208301356001600160401b038111156144f157600080fd5b8301601f8101851361450257600080fd5b6145118582356020840161447a565b9150509250929050565b60008060006040848603121561453057600080fd5b83356001600160401b0381111561454657600080fd5b61455286828701614163565b909450925050602084013561456681614131565b809150509250925092565b600060e08284031215613f4257600080fd5b6000806040838503121561459657600080fd5b82356001600160401b03808211156145ad57600080fd5b6145b986838701614571565b935060208501359150808211156145cf57600080fd5b5061451185828601613fb4565b6020815260006123ef60208301846142bd565b600082601f83011261460057600080fd5b6123ef8383356020850161447a565b6000806040838503121561462257600080fd5b82356001600160401b0381111561463857600080fd5b614644858286016145ef565b925050602083013561465581614131565b809150509250929050565b60006020828403121561467257600080fd5b5035919050565b6000806020838503121561468c57600080fd5b82356001600160401b038111156146a257600080fd5b6146ae85828601614163565b90969095509350505050565b6000806000604084860312156146cf57600080fd5b8335925060208401356001600160401b038111156146ec57600080fd5b6146f886828701614163565b9497909650939450505050565b6000806000806060858703121561471b57600080fd5b84356001600160401b038082111561473257600080fd5b61473e88838901614571565b9550602087013591508082111561475457600080fd5b61476088838901614163565b9095509350604087013591508082111561477957600080fd5b5061478687828801613fb4565b91505092959194509250565b80356001600160401b038116811461331957600080fd5b600080600080606085870312156147bf57600080fd5b8435935060208501356001600160401b038111156147dc57600080fd5b6147e887828801614163565b90945092506147fb905060408601614792565b905092959194509250565b6000806000806000806080878903121561481f57600080fd5b86356001600160401b038082111561483657600080fd5b6148428a838b01614163565b90985096506020890135955060408901359450606089013591508082111561486957600080fd5b5061487689828a01614163565b979a9699509497509295939492505050565b60008060006060848603121561489d57600080fd5b83356148a881614131565b92506020840135915060408401356001600160401b038111156148ca57600080fd5b6148d686828701613fb4565b9150509250925092565b6000808335601e198436030181126148f757600080fd5b8301803591506001600160401b0382111561491157600080fd5b60200191503681900382131561349657600080fd5b634e487b7160e01b600052603260045260246000fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60408152600061497960408301858761493c565b9050826020830152949350505050565b600061499761448884614453565b90508281528383830111156149ab57600080fd5b6123ef836020830184614291565b600082601f8301126149ca57600080fd5b6123ef83835160208501614989565b6000602082840312156149eb57600080fd5b81516001600160401b03811115614a0157600080fd5b612aba848285016149b9565b600a811061430f5761430f6142e9565b6000808335601e19843603018112614a3457600080fd5b83016020810192503590506001600160401b03811115614a5357600080fd5b80360382131561349657600080fd5b614a6c818b614a0d565b60006020614a7c8184018c6142ff565b60c06040840152614a9160c084018a8c61493c565b8381036060850152878152818101600589901b820183018a60005b8b811015614ae657848303601f19018452614ac7828e614a1d565b614ad285828461493c565b958801959450505090850190600101614aac565b50508581036080870152614afb81898b61493c565b9450505050508260a08301529a9950505050505050505050565b6000808335601e19843603018112614b2c57600080fd5b83016020810192503590506001600160401b03811115614b4b57600080fd5b8060051b360382131561349657600080fd5b60008235603e19833603018112614b7357600080fd5b90910192915050565b6000606080835260a0808401614b928889614b15565b60408786018190529281905260059260c08089019083861b8a01018460005b85811015614cf2578b830360bf19018452813536889003607e19018112614bd757600080fd5b87016080848101614be88380614b15565b928752908290528b860191808c1b87018d0191908160005b82811015614c7057898503609f19018652614c1b8285614b5d565b614c258182614a1d565b8e8852614c358f8901828461493c565b9150506020614c4681840184614a1d565b9350888303828a0152614c5a83858361493c565b9982019998505093909301925050600101614c00565b5050505060209150614c8482840184614a1d565b87830384890152614c9683828461493c565b92505050614ca688840184614a1d565b8783038a890152614cb883828461493c565b92505050614cc88d840184614a1d565b93508682038e880152614cdc82858361493c565b9783019796505050929092019150600101614bb1565b505060208d013560808b015289810360208b0152614d10818d6142bd565b97505050878603818901525050505050613da881856142bd565b848152836020820152606060408201526000613da860608301848661493c565b818352600060208085019450848460051b86018460005b87811015614358578383038952614d788288614a1d565b614d8385828461493c565b9a87019a9450505090840190600101614d61565b614da1818b6142ff565b60c060208201526000614db860c083018a8c614d4a565b8860408401528281036060840152614dd181888a61493c565b905085608084015282810360a0840152614dec81858761493c565b9c9b505050505050505050505050565b600060208284031215614e0e57600080fd5b81516001600160401b03811115614e2457600080fd5b8201601f81018413614e3557600080fd5b612aba84825160208401614989565b60c081526000614e5760c083018b6142bd565b614e64602084018b6142ff565b88151560408401528281036060840152614e7f81888a614d4a565b90508281036080840152614e9481868861493c565b9150508260a08301529998505050505050505050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b60a081526000614f5660a083018a8c61493c565b614f63602084018a6142ff565b87151560408401528281036060840152614f7e818789614d4a565b90508281036080840152614f9381858761493c565b9b9a5050505050505050505050565b600181811c90821680614fb657607f821691505b602082108103613f4257634e487b7160e01b600052602260045260246000fd5b60008235603e19833603018112614fec57600080fd5b9190910192915050565b60006150028283614a1d565b6040855261501460408601828461493c565b915050602083013560208501528091505092915050565b6001600160401b038061503d83614792565b1683528061504d60208401614792565b166020840152505050565b6020815260006150688384614b5d565b60e0602084015261507d610100840182614ff6565b905061508c6020850185614b5d565b601f19808584030160408601526150a38383614ff6565b92506150b160408701614792565b91506001600160401b0380831660608701526150d06060880188614a1d565b9350828786030160808801526150e785858361493c565b9450506150fa60a087016080890161502b565b8061510760c08901614792565b1660e08701525050508091505092915050565b60006020828403121561512c57600080fd5b5051919050565b60006020828403121561514557600080fd5b6123ef82614792565b6001600160401b038481168252608082019061516d602084018661502b565b808416606084015250949350505050565b60006001600160401b038083168185168083038211156151ae57634e487b7160e01b600052601160045260246000fd5b01949350505050565b60006151c38283614b5d565b60e084526151d460e0850182614ff6565b90506151e36020840184614b5d565b84820360208601526151f58282614ff6565b91505061520460408401614792565b6001600160401b0380821660408701526152216060860186614a1d565b9250868403606088015261523684848361493c565b935050615249608087016080870161502b565b8061525660c08701614792565b1660c087015250508091505092915050565b6020815260006123ef60208301846151b7565b60006040828403121561528d57600080fd5b604051604081016001600160401b0382821081831117156152b0576152b061440d565b81604052829350845191506152c482613f9b565b908252602084015190808211156152da57600080fd5b506152e7858286016149b9565b6020830152505092915050565b6000806040838503121561530757600080fd5b82516001600160401b0381111561531d57600080fd5b6153298582860161527b565b925050602083015161465581613f9b565b8051151582526000602082015160406020850152612aba60408501826142bd565b6001600160401b03831681526040602082015260006123ec604083018461533a565b601f82111561154e57600081815260208120601f850160051c810160208610156153a45750805b601f850160051c820191505b81811015612b65578281556001016153b0565b81516001600160401b038111156153dc576153dc61440d565b6153f0816153ea8454614fa2565b8461537d565b602080601f831160018114615425576000841561540d5750858301515b600019600386901b1c1916600185901b178555612b65565b600085815260208120601f198616915b8281101561545457888601518255948401946001909101908401615435565b50858210156154725787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160401b038311156154995761549961440d565b6154ad836154a78354614fa2565b8361537d565b6000601f8411600181146154e157600085156154c95750838201355b600019600387901b1c1916600186901b17835561553b565b600083815260209020601f19861690835b8281101561551257868501358255602094850194600190920191016154f2565b508682101561552f5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b6020815260006123ec60208301848661493c565b60006020828403121561556857600080fd5b81516001600160401b0381111561557e57600080fd5b612aba8482850161527b565b60408152600061559d60408301856151b7565b8281036020840152614404818561533a565b8183823760009101908152919050565b6060815260006155d360608301868861493c565b6001600160401b039485166020840152929093166040909101529392505050565b60608152600061560860608301868861493c565b6020830194909452506040015292915050565b60408152600061562e60408301856142bd565b90508260208301529392505050565b6156478188614a0d565b60006020615657818401896142ff565b60c0604084015261566b60c08401886142bd565b8381036060850152865180825282820190600581901b83018401848a0160005b838110156156b957601f198684030185526156a78383516142bd565b9487019492509086019060010161568b565b505086810360808801526156cd818a6142bd565b955050505050508260a0830152979650505050505050565b8381526060602082015260006156fe60608301856142bd565b9050826040830152949350505050565b60008251614fec818460208701614291565b6000808585111561573057600080fd5b8386111561573d57600080fd5b5050820193919092039150565b60006020828403121561575c57600080fd5b81516123ef81614131565b60008261578457634e487b7160e01b600052601260045260246000fd5b500490565b60006001600160401b03808411156157a3576157a361440d565b8360051b60206157b4818301614423565b8681529185019181810190368411156157cc57600080fd5b865b84811015615800578035868111156157e65760008081fd5b6157f236828b016145ef565b8452509183019183016157ce565b50979650505050505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212203f8f26d60b9aaf3863f5927452254ff0890e5a52ede93e9772d0c793e637860164736f6c634300080f0033"; + "0x60a0604052306080523480156200001557600080fd5b506200002062000026565b620000e7565b600054610100900460ff1615620000935760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000e5576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6080516158d46200011f60003960008181610c1f01528181610c68015281816113c201528181611402015261149501526158d46000f3fe6080604052600436106101c25760003560e01c8063715018a6116100f7578063b12f89be11610095578063c899e27211610064578063c899e2721461051e578063e30c39781461053e578063f2fde38b1461055c578063f90b8e961461057c57600080fd5b8063b12f89be14610486578063ba5a4d25146104a6578063c00fa7c0146104c6578063c3e1155c146104e657600080fd5b80637ab4339d116100d15780637ab4339d1461040857806381bc079b146104285780638da5cb5b146104485780639f59ae711461046657600080fd5b8063715018a6146103bc5780637774a6d3146103d157806379ba5097146103f357600080fd5b8063478222c211610164578063556d51781161013e578063556d51781461033c5780635d7adf961461035c5780636050b5f31461037c5780636b67055e1461039c57600080fd5b8063478222c2146102cd5780634f1ef2861461030657806352d1902d1461031957600080fd5b80633659cfe6116101a05780633659cfe614610240578063418925b71461026057806342852d2414610280578063429446b6146102ad57600080fd5b80631eb9fc86146101c75780632494546b146101e95780632bf5d19d14610220575b600080fd5b3480156101d357600080fd5b506101e76101e2366004613fc6565b61059c565b005b3480156101f557600080fd5b5060fa546102069063ffffffff1681565b60405163ffffffff90911681526020015b60405180910390f35b34801561022c57600080fd5b506101e761023b36600461409c565b610926565b34801561024c57600080fd5b506101e761025b366004614146565b610c15565b34801561026c57600080fd5b506101e761027b3660046141a4565b610cfd565b34801561028c57600080fd5b506102a061029b366004614265565b610db6565b6040516102179190614365565b3480156102b957600080fd5b506101e76102c8366004613fc6565b61110e565b3480156102d957600080fd5b50610105546102ee906001600160a01b031681565b6040516001600160a01b039091168152602001610217565b6101e76103143660046144b8565b6113b8565b34801561032557600080fd5b5061032e611488565b604051908152602001610217565b34801561034857600080fd5b506101e761035736600461451b565b61153b565b34801561036857600080fd5b506101e7610377366004614583565b611553565b34801561038857600080fd5b506101e7610397366004614583565b611863565b3480156103a857600080fd5b506101e76103b7366004614583565b611875565b3480156103c857600080fd5b506101e7611f7e565b3480156103dd57600080fd5b506103e6611f92565b60405161021791906145dc565b3480156103ff57600080fd5b506101e7612020565b34801561041457600080fd5b506101e761042336600461460f565b612097565b34801561043457600080fd5b506101e7610443366004614660565b612220565b34801561045457600080fd5b506033546001600160a01b03166102ee565b34801561047257600080fd5b506101e7610481366004614679565b6122e8565b34801561049257600080fd5b5061032e6104a13660046146ba565b61233d565b3480156104b257600080fd5b506101e76104c1366004614705565b6123f6565b3480156104d257600080fd5b506101e76104e1366004614679565b612932565b3480156104f257600080fd5b506105066105013660046147a9565b61296e565b6040516001600160401b039091168152602001610217565b34801561052a57600080fd5b506101e7610539366004614806565b612ac2565b34801561054a57600080fd5b506065546001600160a01b03166102ee565b34801561056857600080fd5b506101e7610577366004614146565b612b6d565b34801561058857600080fd5b506101e7610597366004614888565b612bde565b6105a461320b565b60028510156105c65760405163af0ba14d60e01b815260040160405180910390fd5b6105ec6105d388806148e0565b60208a01356105e286806148e0565b8760200135613264565b61064e8686600081811061060257610602614926565b905060200281019061061491906148e0565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061329f92505050565b6001600160a01b031663cb535ab58273__$d825222459c46c14afb2efe0967c30e98d$__634f9b0fb36106818c806148e0565b8d602001356040518463ffffffff1660e01b81526004016106a493929190614965565b600060405180830381865af41580156106c1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106e991908101906149d9565b73__$d825222459c46c14afb2efe0967c30e98d$__6325e0dd0e60078a8e806040019061071691906148e0565b8f8f6107228e806148e0565b8f602001356040518a63ffffffff1660e01b815260040161074b99989796959493929190614a62565b600060405180830381865af4158015610768573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261079091908101906149d9565b6040518463ffffffff1660e01b81526004016107ae93929190614b7c565b600060405180830381600087803b1580156107c857600080fd5b505af11580156107dc573d6000803e3d6000fd5b50600092506107f791506107f2905089806148e0565b61331e565b9050600080610869836301d08fc560e71b6020808e01359089013561081f60408b018b6148e0565b6040516024016108329493929190614d2a565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526133b1565b9150915081156108ce57610882838b8b8b8b8b8b61349d565b826001600160a01b03167fcf8be9ab2b5edf8beb2c45abe8e0cc7646318ac19f6c3164ba2e19e93a8a32af8b602001356040516108c191815260200190565b60405180910390a2610910565b826001600160a01b03167f971a4433f5bff5f011728a4123aeeca4b5275ac20b013cf276e65510491ac26f8260405161090791906145dc565b60405180910390a25b50505061091d6001609755565b50505050505050565b61092e61320b565b6002831461094f5760405163af0ba14d60e01b815260040160405180910390fd5b61095c6105d388806148e0565b6109728484600081811061060257610602614926565b6001600160a01b031663cb535ab58273__$d825222459c46c14afb2efe0967c30e98d$__634f9b0fb36109a58c806148e0565b8d602001356040518463ffffffff1660e01b81526004016109c893929190614965565b600060405180830381865af41580156109e5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a0d91908101906149d9565b73__$d825222459c46c14afb2efe0967c30e98d$__6325e0dd0e60068c8e8060400190610a3a91906148e0565b8d8d610a468e806148e0565b8f602001356040518a63ffffffff1660e01b8152600401610a6f99989796959493929190614a62565b600060405180830381865af4158015610a8c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ab491908101906149d9565b6040518463ffffffff1660e01b8152600401610ad293929190614b7c565b600060405180830381600087803b158015610aec57600080fd5b505af1158015610b00573d6000803e3d6000fd5b5060009250610b1691506107f2905089806148e0565b9050600080610b6c83634bdb559760e01b8b8a8a8f602001358b8060000190610b3f91906148e0565b8d602001358e8060400190610b5491906148e0565b60405160240161083299989796959493929190614d97565b915091508115610bdc57826001600160a01b03167ff910705a7a768eb5958f281a5f84cae8bffc5dd811ca5cd303dda140a423698c82806020019051810190610bb59190614dfc565b8b8b8b8b610bc38c806148e0565b8d602001356040516108c1989796959493929190614e44565b826001600160a01b03167f9e2fe55a3b54b57f82334c273f8d048cd7f05ad19c16cf334276a8c1fec4b6fd8260405161090791906145dc565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610c665760405162461bcd60e51b8152600401610c5d90614eaa565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610caf600080516020615858833981519152546001600160a01b031690565b6001600160a01b031614610cd55760405162461bcd60e51b8152600401610c5d90614ef6565b610cde8161373d565b60408051600080825260208201909252610cfa91839190613745565b50565b610d0561320b565b600283141580610d13575080155b15610d3157604051637d6ba8a560e01b815260040160405180910390fd5b6000879003610d535760405163f61bbcf360e01b815260040160405180910390fd5b336001600160a01b03167f20fd8a5856711b18d00def4aa6abafbe00ce6d60795e015cc1cad35eb9b463598989898989898989604051610d9a989796959493929190614f42565b60405180910390a2610dac6001609755565b5050505050505050565b610dfc6040805160e08101909152606081526020810160008152602001600015158152602001606081526020016060815260200160008019168152602001606081525090565b6001600160a01b038316600090815260fb6020908152604080832085845290915290819020815160e08101909252805482908290610e3990614fa2565b80601f0160208091040260200160405190810160405280929190818152602001828054610e6590614fa2565b8015610eb25780601f10610e8757610100808354040283529160200191610eb2565b820191906000526020600020905b815481529060010190602001808311610e9557829003601f168201915b5050509183525050600182015460209091019060ff166002811115610ed957610ed96142e9565b6002811115610eea57610eea6142e9565b81526001820154610100900460ff161515602080830191909152600283018054604080518285028101850182528281529401939260009084015b82821015610fd0578382906000526020600020018054610f4390614fa2565b80601f0160208091040260200160405190810160405280929190818152602001828054610f6f90614fa2565b8015610fbc5780601f10610f9157610100808354040283529160200191610fbc565b820191906000526020600020905b815481529060010190602001808311610f9f57829003601f168201915b505050505081526020019060010190610f24565b505050508152602001600382018054610fe890614fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461101490614fa2565b80156110615780601f1061103657610100808354040283529160200191611061565b820191906000526020600020905b81548152906001019060200180831161104457829003601f168201915b505050505081526020016004820154815260200160058201805461108490614fa2565b80601f01602080910402602001604051908101604052809291908181526020018280546110b090614fa2565b80156110fd5780601f106110d2576101008083540402835291602001916110fd565b820191906000526020600020905b8154815290600101906020018083116110e057829003601f168201915b505050505081525050905092915050565b61111661320b565b60028510156111385760405163af0ba14d60e01b815260040160405180910390fd5b6111456105d388806148e0565b61115b8686600081811061060257610602614926565b6001600160a01b031663cb535ab58273__$d825222459c46c14afb2efe0967c30e98d$__634f9b0fb361118e8c806148e0565b8d602001356040518463ffffffff1660e01b81526004016111b193929190614965565b600060405180830381865af41580156111ce573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111f691908101906149d9565b73__$d825222459c46c14afb2efe0967c30e98d$__6325e0dd0e60088a8e806040019061122391906148e0565b8f8f61122f8e806148e0565b8f602001356040518a63ffffffff1660e01b815260040161125899989796959493929190614a62565b600060405180830381865af4158015611275573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261129d91908101906149d9565b6040518463ffffffff1660e01b81526004016112bb93929190614b7c565b600060405180830381600087803b1580156112d557600080fd5b505af11580156112e9573d6000803e3d6000fd5b50600092506112ff91506107f2905089806148e0565b90506000806113278363fad28a2460e01b8c6020013560405160240161083291815260200190565b91509150811561137f57611340838b8b8b8b8b8b61349d565b826001600160a01b03167fe80f571f70f7cabf9d7ac60ece08421be374117776c311c327a083ca398f802f8b602001356040516108c191815260200190565b826001600160a01b03167ff6a58ef30f66943749e8c29c661c84da143a1c8ed017f5faa92b509e0000875a8260405161090791906145dc565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036114005760405162461bcd60e51b8152600401610c5d90614eaa565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611449600080516020615858833981519152546001600160a01b031690565b6001600160a01b03161461146f5760405162461bcd60e51b8152600401610c5d90614ef6565b6114788261373d565b61148482826001613745565b5050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146115285760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610c5d565b5060008051602061585883398151915290565b6115436138b0565b61154e83838361390a565b505050565b61155b61320b565b61157461156b6020840184614fd6565b602001356139a5565b6001600160a01b031663cb535ab58273__$d825222459c46c14afb2efe0967c30e98d$__634b5728d1866040518263ffffffff1660e01b81526004016115ba9190615058565b600060405180830381865af41580156115d7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526115ff91908101906149d9565b604051637e4794ed60e11b815273__$d825222459c46c14afb2efe0967c30e98d$__9063fc8f29da90611636908990600401615058565b602060405180830381865af4158015611653573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611677919061511a565b60405160200161168991815260200190565b6040516020818303038152906040526040518463ffffffff1660e01b81526004016116b693929190614b7c565b600060405180830381600087803b1580156116d057600080fd5b505af11580156116e4573d6000803e3d6000fd5b5050505060006117078380602001906116fd9190614fd6565b6107f290806148e0565b6001600160a01b0381166000908152610100602090815260408220929350909190829061173690870187614fd6565b602001358152602001908152602001600020600085604001602081019061175d9190615133565b6001600160401b0316815260208101919091526040016000205460ff169050801561179b5760405163066c745760e01b815260040160405180910390fd5b6117c36117ae60e0860160c08701615133565b6117be60c0870160a08801615133565b613a70565b6117e0576040516312c9cc9f60e01b815260040160405180910390fd5b6117ed6020850185614fd6565b602001356001600160a01b0383167fedbcd9eeb09d85c3ea1b5bf002c04478059cb261cab82c903885cefccae374bc61182c6060880160408901615133565b6080880161184060e08a0160c08b01615133565b60405161184f9392919061514e565b60405180910390a350506114846001609755565b61186b61320b565b6114846001609755565b61187d61320b565b61188d61156b6020840184614fd6565b6001600160a01b031663cb535ab58273__$d825222459c46c14afb2efe0967c30e98d$__634b5728d1866040518263ffffffff1660e01b81526004016118d39190615058565b600060405180830381865af41580156118f0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261191891908101906149d9565b604051637e4794ed60e11b815273__$d825222459c46c14afb2efe0967c30e98d$__9063fc8f29da9061194f908990600401615058565b602060405180830381865af415801561196c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611990919061511a565b6040516020016119a291815260200190565b6040516020818303038152906040526040518463ffffffff1660e01b81526004016119cf93929190614b7c565b600060405180830381600087803b1580156119e957600080fd5b505af11580156119fd573d6000803e3d6000fd5b505050506000611a168380602001906116fd9190614fd6565b6001600160a01b03811660009081526101006020908152604082209293509091908290611a4590870187614fd6565b6020013581526020019081526020016000206000856040016020810190611a6c9190615133565b6001600160401b0316815260208101919091526040016000205460ff1690508015611aaa5760405163066c745760e01b815260040160405180910390fd5b6001600160a01b03821660009081526101006020908152604082206001929091611ad690880188614fd6565b6020013581526020019081526020016000206000866040016020810190611afd9190615133565b6001600160401b031681526020810191909152604001600020805460ff191691151591909117905560026001600160a01b038316600090815260fb6020908152604082209190611b4f90880188614fd6565b60209081013582528101919091526040016000206001015460ff166002811115611b7b57611b7b6142e9565b03611c7a576001600160a01b038216600090815260fd6020908152604082209190611ba890870187614fd6565b60209081013582528101919091526040908101600020546001600160401b031690611bd99060608701908701615133565b6001600160401b031614611c005760405163362a414d60e01b815260040160405180910390fd5b611c106060850160408601615133565b611c1b90600161517e565b6001600160a01b038316600090815260fd6020908152604082209190611c4390880188614fd6565b60200135815260200190815260200160002060006101000a8154816001600160401b0302191690836001600160401b031602179055505b611c876020850185614fd6565b602001356001600160a01b0383167fde5b57e6566d68a30b0979431df3d5df6db3b9aa89f8820f595b9315bf86d067611cc66060880160408901615133565b6040516001600160401b03909116815260200160405180910390a3611cf46117ae60e0860160c08701615133565b15611d7757611d066020850185614fd6565b602001356001600160a01b0383167fedbcd9eeb09d85c3ea1b5bf002c04478059cb261cab82c903885cefccae374bc611d456060880160408901615133565b60808801611d5960e08a0160c08b01615133565b604051611d689392919061514e565b60405180910390a3505061186b565b6040805180820190915260008152606060208201526000806000611dae86634dcc0aa660e01b8a6040516024016108329190615268565b915091508115611de75780806020019051810190611dcc91906152f4565b90945092508215611de25750505050505061186b565b611dff565b60408051808201909152600081526020810182905293505b6001600160a01b0386166000908152610101602090815260408220908290611e29908c018c614fd6565b60200135815260200190815260200160002060008a6040016020810190611e509190615133565b6001600160401b0316815260208101919091526040016000205460ff1690508015611e8e57604051637aa549d360e01b815260040160405180910390fd5b6001600160a01b03871660009081526101016020908152604082206001929091611eba908d018d614fd6565b60200135815260200190815260200160002060008b6040016020810190611ee19190615133565b6001600160401b03168152602080820192909252604001600020805460ff191692151592909217909155611f17908a018a614fd6565b602001356001600160a01b0388167fa32e6f42b1d63fb83ad73b009a6dbb9413d1da02e95b1bb08f081815eea8db20611f5660608d0160408e01615133565b88604051611f6592919061535b565b60405180910390a3505050505050506114846001609755565b611f866138b0565b611f906000613abe565b565b60f98054611f9f90614fa2565b80601f0160208091040260200160405190810160405280929190818152602001828054611fcb90614fa2565b80156120185780601f10611fed57610100808354040283529160200191612018565b820191906000526020600020905b815481529060010190602001808311611ffb57829003601f168201915b505050505081565b60655433906001600160a01b0316811461208e5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610c5d565b610cfa81613abe565b600054600290610100900460ff161580156120b9575060005460ff8083169116105b61211c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610c5d565b6000805461ffff191660ff83161761010017905561213861320b565b825160000361215a5760405163e8cf362360e01b815260040160405180910390fd5b6001600160a01b0382166121815760405163cbdd34cf60e01b815260040160405180910390fd5b612189613ad7565b612191613b06565b60f961219d84826153c3565b50825160fa805463ffffffff191663ffffffff90921691909117905561010580546001600160a01b0319166001600160a01b03841617905560016097556000805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b61222861320b565b61223181613b35565b33600090815260fb602090815260408083208484529091528120906122568282613e50565b60018201805461ffff19169055612271600283016000613e8a565b61227f600383016000613e50565b60048201600090556005820160006122979190613e50565b50506000818152610103602052604081206122b191613e50565b604051819033907f21372e37743553ba8e5f61239803174a827c7732d53ec8adcb76c6b3bb2c13f190600090a3610cfa6001609755565b6122f06138b0565b60008190036123125760405163e8cf362360e01b815260040160405180910390fd5b60f961231f828483615482565b5060fa805463ffffffff191663ffffffff9290921691909117905550565b600061237e83838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061329f92505050565b6001600160a01b03166344c9af28856040518263ffffffff1660e01b81526004016123ab91815260200190565b602060405180830381865afa1580156123c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ec919061511a565b90505b9392505050565b6123fe61320b565b600061240d6116fd8680614fd6565b905061241c61156b8680614fd6565b6001600160a01b031663cb535ab58373__$d825222459c46c14afb2efe0967c30e98d$__6311a7a373896040518263ffffffff1660e01b81526004016124629190615058565b600060405180830381865af415801561247f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526124a791908101906149d9565b6040516374e9704560e01b815273__$d825222459c46c14afb2efe0967c30e98d$__906374e97045906124e0908b908b90600401615542565b602060405180830381865af41580156124fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612521919061511a565b60405160200161253391815260200190565b6040516020818303038152906040526040518463ffffffff1660e01b815260040161256093929190614b7c565b600060405180830381600087803b15801561257a57600080fd5b505af115801561258e573d6000803e3d6000fd5b505050506001600160a01b038116600090815260ff60205260408120816125b58880614fd6565b60200135815260200190815260200160002060008760400160208101906125dc9190615133565b6001600160401b0316815260208101919091526040016000205460ff169050806126195760405163ca89746b60e01b815260040160405180910390fd5b6000806126b884637e1d42b560e01b8a73__$d825222459c46c14afb2efe0967c30e98d$__63360b8cd78c8c6040518363ffffffff1660e01b8152600401612662929190615542565b600060405180830381865af415801561267f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526126a79190810190615556565b60405160240161083292919061558a565b9150915081156128dc5760026001600160a01b038516600090815260fb60205260408120906126e78b80614fd6565b60209081013582528101919091526040016000206001015460ff166002811115612713576127136142e9565b03612808576001600160a01b038416600090815260fe602052604081209061273b8a80614fd6565b60209081013582528101919091526040908101600020546001600160401b03169061276c9060608b01908b01615133565b6001600160401b0316146127935760405163362a414d60e01b815260040160405180910390fd5b6127a36060890160408a01615133565b6127ae90600161517e565b6001600160a01b038516600090815260fe60205260408120906127d18b80614fd6565b60200135815260200190815260200160002060006101000a8154816001600160401b0302191690836001600160401b031602179055505b6001600160a01b038416600090815260ff602052604081209061282b8a80614fd6565b60200135815260200190815260200160002060008960400160208101906128529190615133565b6001600160401b031681526020810191909152604001600020805460ff1916905561287d8880614fd6565b602001356001600160a01b0385167fe46f6591236abe528fe47a3b281fb002524dadd3e62b1f317ed285d07273c3b16128bc60608c0160408d01615133565b6040516001600160401b03909116815260200160405180910390a361291e565b836001600160a01b03167f625eea143c9dae6915c809da47016c22d9cd006c3ace7c345c5cbcf57d3aefbc8260405161291591906145dc565b60405180910390a25b5050505061292c6001609755565b50505050565b61293a6138b0565b610104828260405161294d9291906155af565b90815260405190819003602001902080546001600160a01b03191690555050565b600061297861320b565b61298185613b35565b42826001600160401b0316116129aa5760405163551ea0fb60e11b815260040160405180910390fd5b5033600090815260fc602090815260408083208784529091528120546001600160401b0316908190036129f057604051631e510bfb60e21b815260040160405180910390fd5b33600090815260ff6020908152604080832088845282528083206001600160401b03851684529091529020805460ff19166001908117909155612a3490829061517e565b33600081815260fc602090815260408083208a845290915290819020805467ffffffffffffffff19166001600160401b03949094169390931790925590518691907fb5bff96e18da044e4e34510d16df9053b9f1920f6a960732e5aaf22fe9b8013690612aa89088908890879089906155bf565b60405180910390a3612aba6001609755565b949350505050565b612b0182828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061329f92505050565b6001600160a01b03166349ff245e878787876040518563ffffffff1660e01b8152600401612b3294939291906155f4565b600060405180830381600087803b158015612b4c57600080fd5b505af1158015612b60573d6000803e3d6000fd5b505050505b505050505050565b612b756138b0565b606580546001600160a01b0383166001600160a01b03199091168117909155612ba66033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b612be661320b565b6001600160a01b038316612c0d5760405163cbdd34cf60e01b815260040160405180910390fd5b6001600160a01b038316600090815260fb60209081526040808320858452909152808220815160e08101909252805482908290612c4990614fa2565b80601f0160208091040260200160405190810160405280929190818152602001828054612c7590614fa2565b8015612cc25780601f10612c9757610100808354040283529160200191612cc2565b820191906000526020600020905b815481529060010190602001808311612ca557829003601f168201915b5050509183525050600182015460209091019060ff166002811115612ce957612ce96142e9565b6002811115612cfa57612cfa6142e9565b81526001820154610100900460ff161515602080830191909152600283018054604080518285028101850182528281529401939260009084015b82821015612de0578382906000526020600020018054612d5390614fa2565b80601f0160208091040260200160405190810160405280929190818152602001828054612d7f90614fa2565b8015612dcc5780601f10612da157610100808354040283529160200191612dcc565b820191906000526020600020905b815481529060010190602001808311612daf57829003601f168201915b505050505081526020019060010190612d34565b505050508152602001600382018054612df890614fa2565b80601f0160208091040260200160405190810160405280929190818152602001828054612e2490614fa2565b8015612e715780601f10612e4657610100808354040283529160200191612e71565b820191906000526020600020905b815481529060010190602001808311612e5457829003601f168201915b5050505050815260200160048201548152602001600582018054612e9490614fa2565b80601f0160208091040260200160405190810160405280929190818152602001828054612ec090614fa2565b8015612f0d5780601f10612ee257610100808354040283529160200191612f0d565b820191906000526020600020905b815481529060010190602001808311612ef057829003601f168201915b5050509190925250505060a0810151909150612f3c57604051634d93b09d60e11b815260040160405180910390fd5b612f45836139a5565b6001600160a01b031663cb535ab58373__$d825222459c46c14afb2efe0967c30e98d$__636f6547268560c00151886040518363ffffffff1660e01b8152600401612f9192919061561b565b600060405180830381865af4158015612fae573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612fd691908101906149d9565b602085015185516060870151608088015160a0890151604051631f621e1560e31b815273__$d825222459c46c14afb2efe0967c30e98d$__9563fb10f0a89561302c95600995929491939092919060040161563d565b600060405180830381865af4158015613049573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261307191908101906149d9565b6040518463ffffffff1660e01b815260040161308f93929190614b7c565b600060405180830381600087803b1580156130a957600080fd5b505af11580156130bd573d6000803e3d6000fd5b505050506000806130ed86633f9fdbe460e01b8786608001518760a00151604051602401610832939291906156e5565b6001600160a01b038816600090815260fb602090815260408083208a845290915281209294509092506131208282613e50565b60018201805461ffff1916905561313b600283016000613e8a565b613149600383016000613e50565b60048201600090556005820160006131619190613e50565b505060008581526101036020526040812061317b91613e50565b81156131bc5760405185906001600160a01b038816907f5f010dbbd6bf46aec8131c5456301a75cd688d3cca9bc8380c9e26301be2072990600090a36131fe565b856001600160a01b03167fc9d36d7a317cb116925d5cb66f0069fe825822fe23e9cf3f421c38cf444caa30826040516131f591906145dc565b60405180910390a25b50505061154e6001609755565b60026097540361325d5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b6002609755565b84158061326f575081155b80613278575083155b80613281575080155b15612b6557604051637d6ba8a560e01b815260040160405180910390fd5b600081516000036132cd5760405163524e171160e01b81526020600482015260006024820152604401610c5d565b610104826040516132de919061570e565b908152604051908190036020019020546001600160a01b0316905080613319578160405163036c4d8760e11b8152600401610c5d91906145dc565b919050565b60fa5460009073__$f61eb90c6f674e787d51c07f105fa231e2$__9063a1ef9a989061335390859063ffffffff168188615720565b6040518363ffffffff1660e01b8152600401613370929190615542565b602060405180830381865af415801561338d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ef919061574a565b600060606001600160a01b0384163b6133f957505060408051808201909152601481527318d85b1b081d1bc81b9bdb8b58dbdb9d1c9858dd60621b6020820152600090613496565b60005a9050846001600160a01b031684604051613416919061570e565b6000604051808303816000865af19150503d8060008114613453576040519150601f19603f3d011682016040523d82523d6000602084013e613458565b606091505b509093509150821580156134765750613472604082615767565b5a11155b156134945760405163b08ede0960e01b815260040160405180910390fd5b505b9250929050565b6040518060e001604052808780604001906134b891906148e0565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505090825250602001846002811115613504576135046142e9565b8152831515602082015260400161351b8688615789565b815260200161352a83806148e0565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050908252506020838101359082015260400161357888806148e0565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506001600160a01b038a16815260fb602090815260408083208b83013584529091529020825190915081906135e290826153c3565b50602082015160018083018054909160ff199091169083600281111561360a5761360a6142e9565b021790555060408201516001820180549115156101000261ff001990921691909117905560608201518051613649916002840191602090910190613ea8565b506080820151600382019061365e90826153c3565b5060a0820151600482015560c0820151600582019061367d90826153c3565b5050506001600160a01b038716600081815260fc602090815260408083208a8301358085529083528184208054600167ffffffffffffffff19918216811790925586865260fd85528386208387528552838620805482168317905595855260fe845282852091855292528220805490931617909155859085908161370357613703614926565b905060200281019061371591906148e0565b60208089013560009081526101039091526040902091610dac919083615482565b6001609755565b610cfa6138b0565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156137785761154e83613b70565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156137d2575060408051601f3d908101601f191682019092526137cf9181019061511a565b60015b6138355760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610c5d565b60008051602061585883398151915281146138a45760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610c5d565b5061154e838383613c0c565b6033546001600160a01b03163314611f905760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c5d565b60008290036139365760405163524e171160e01b81526020600482015260006024820152604401610c5d565b6001600160a01b03811661395d5760405163cbdd34cf60e01b815260040160405180910390fd5b8061010484846040516139719291906155af565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b0319909216919091179055505050565b60008181526101036020526040812080548291906139c290614fa2565b80601f01602080910402602001604051908101604052809291908181526020018280546139ee90614fa2565b8015613a3b5780601f10613a1057610100808354040283529160200191613a3b565b820191906000526020600020905b815481529060010190602001808311613a1e57829003601f168201915b505050505090508051600003613a67576040516363b99a9d60e11b815260048101849052602401610c5d565b6123ef8161329f565b60006001600160401b03831615801590613a935750826001600160401b03164210155b806123ef57506001600160401b038216158015906123ef5750506001600160401b0316431015919050565b606580546001600160a01b0319169055610cfa81613c31565b600054610100900460ff16613afe5760405162461bcd60e51b8152600401610c5d9061580c565b611f90613c83565b600054610100900460ff16613b2d5760405162461bcd60e51b8152600401610c5d9061580c565b611f90613cb3565b33600090815260fb60209081526040808320848452909152902060040154610cfa57604051631109bfb360e31b815260040160405180910390fd5b6001600160a01b0381163b613bdd5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610c5d565b60008051602061585883398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b613c1583613cda565b600082511180613c225750805b1561154e5761292c8383613d1a565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16613caa5760405162461bcd60e51b8152600401610c5d9061580c565b611f9033613abe565b600054610100900460ff166137365760405162461bcd60e51b8152600401610c5d9061580c565b613ce381613b70565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606123ef8383604051806060016040528060278152602001615878602791396060600080856001600160a01b031685604051613d57919061570e565b600060405180830381855af49150503d8060008114613d92576040519150601f19603f3d011682016040523d82523d6000602084013e613d97565b606091505b5091509150613da886838387613db2565b9695505050505050565b60608315613e21578251600003613e1a576001600160a01b0385163b613e1a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610c5d565b5081612aba565b612aba8383815115613e365781518083602001fd5b8060405162461bcd60e51b8152600401610c5d91906145dc565b508054613e5c90614fa2565b6000825580601f10613e6c575050565b601f016020900490600052602060002090810190610cfa9190613efe565b5080546000825590600052602060002090810190610cfa9190613f13565b828054828255906000526020600020908101928215613eee579160200282015b82811115613eee5782518290613ede90826153c3565b5091602001919060010190613ec8565b50613efa929150613f13565b5090565b5b80821115613efa5760008155600101613eff565b80821115613efa576000613f278282613e50565b50600101613f13565b600060608284031215613f4257600080fd5b50919050565b60008083601f840112613f5a57600080fd5b5081356001600160401b03811115613f7157600080fd5b6020830191508360208260051b850101111561349657600080fd5b80356003811061331957600080fd5b8015158114610cfa57600080fd5b803561331981613f9b565b600060408284031215613f4257600080fd5b600080600080600080600060c0888a031215613fe157600080fd5b87356001600160401b0380821115613ff857600080fd5b6140048b838c01613f30565b985060208a013591508082111561401a57600080fd5b6140268b838c01613f48565b909850965086915061403a60408b01613f8c565b955061404860608b01613fa9565b945060808a013591508082111561405e57600080fd5b61406a8b838c01613f30565b935060a08a013591508082111561408057600080fd5b5061408d8a828b01613fb4565b91505092959891949750929550565b600080600080600080600060c0888a0312156140b757600080fd5b87356001600160401b03808211156140ce57600080fd5b6140da8b838c01613f30565b98506140e860208b01613f8c565b97506140f660408b01613fa9565b965060608a013591508082111561410c57600080fd5b6141188b838c01613f48565b909650945060808a013591508082111561405e57600080fd5b6001600160a01b0381168114610cfa57600080fd5b60006020828403121561415857600080fd5b81356123ef81614131565b60008083601f84011261417557600080fd5b5081356001600160401b0381111561418c57600080fd5b60208301915083602082850101111561349657600080fd5b60008060008060008060008060a0898b0312156141c057600080fd5b88356001600160401b03808211156141d757600080fd5b6141e38c838d01614163565b909a5098508891506141f760208c01613f8c565b975060408b0135915061420982613f9b565b90955060608a0135908082111561421f57600080fd5b61422b8c838d01613f48565b909650945060808b013591508082111561424457600080fd5b506142518b828c01614163565b999c989b5096995094979396929594505050565b6000806040838503121561427857600080fd5b823561428381614131565b946020939093013593505050565b60005b838110156142ac578181015183820152602001614294565b8381111561292c5750506000910152565b600081518084526142d5816020860160208601614291565b601f01601f19169290920160200192915050565b634e487b7160e01b600052602160045260246000fd5b6003811061430f5761430f6142e9565b9052565b6000815180845260208085019450848260051b860182860160005b858110156143585783830389526143468383516142bd565b9885019892509084019060010161432e565b5090979650505050505050565b602081526000825160e060208401526143826101008401826142bd565b9050602084015161439660408501826142ff565b506040840151151560608401526060840151601f19808584030160808601526143bf8383614313565b925060808601519150808584030160a08601526143dc83836142bd565b925060a086015160c086015260c08601519150808584030160e08601525061440482826142bd565b95945050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561444b5761444b61440d565b604052919050565b60006001600160401b0382111561446c5761446c61440d565b50601f01601f191660200190565b600061448d61448884614453565b614423565b90508281528383830111156144a157600080fd5b828260208301376000602084830101529392505050565b600080604083850312156144cb57600080fd5b82356144d681614131565b915060208301356001600160401b038111156144f157600080fd5b8301601f8101851361450257600080fd5b6145118582356020840161447a565b9150509250929050565b60008060006040848603121561453057600080fd5b83356001600160401b0381111561454657600080fd5b61455286828701614163565b909450925050602084013561456681614131565b809150509250925092565b600060e08284031215613f4257600080fd5b6000806040838503121561459657600080fd5b82356001600160401b03808211156145ad57600080fd5b6145b986838701614571565b935060208501359150808211156145cf57600080fd5b5061451185828601613fb4565b6020815260006123ef60208301846142bd565b600082601f83011261460057600080fd5b6123ef8383356020850161447a565b6000806040838503121561462257600080fd5b82356001600160401b0381111561463857600080fd5b614644858286016145ef565b925050602083013561465581614131565b809150509250929050565b60006020828403121561467257600080fd5b5035919050565b6000806020838503121561468c57600080fd5b82356001600160401b038111156146a257600080fd5b6146ae85828601614163565b90969095509350505050565b6000806000604084860312156146cf57600080fd5b8335925060208401356001600160401b038111156146ec57600080fd5b6146f886828701614163565b9497909650939450505050565b6000806000806060858703121561471b57600080fd5b84356001600160401b038082111561473257600080fd5b61473e88838901614571565b9550602087013591508082111561475457600080fd5b61476088838901614163565b9095509350604087013591508082111561477957600080fd5b5061478687828801613fb4565b91505092959194509250565b80356001600160401b038116811461331957600080fd5b600080600080606085870312156147bf57600080fd5b8435935060208501356001600160401b038111156147dc57600080fd5b6147e887828801614163565b90945092506147fb905060408601614792565b905092959194509250565b6000806000806000806080878903121561481f57600080fd5b86356001600160401b038082111561483657600080fd5b6148428a838b01614163565b90985096506020890135955060408901359450606089013591508082111561486957600080fd5b5061487689828a01614163565b979a9699509497509295939492505050565b60008060006060848603121561489d57600080fd5b83356148a881614131565b92506020840135915060408401356001600160401b038111156148ca57600080fd5b6148d686828701613fb4565b9150509250925092565b6000808335601e198436030181126148f757600080fd5b8301803591506001600160401b0382111561491157600080fd5b60200191503681900382131561349657600080fd5b634e487b7160e01b600052603260045260246000fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60408152600061497960408301858761493c565b9050826020830152949350505050565b600061499761448884614453565b90508281528383830111156149ab57600080fd5b6123ef836020830184614291565b600082601f8301126149ca57600080fd5b6123ef83835160208501614989565b6000602082840312156149eb57600080fd5b81516001600160401b03811115614a0157600080fd5b612aba848285016149b9565b600a811061430f5761430f6142e9565b6000808335601e19843603018112614a3457600080fd5b83016020810192503590506001600160401b03811115614a5357600080fd5b80360382131561349657600080fd5b614a6c818b614a0d565b60006020614a7c8184018c6142ff565b60c06040840152614a9160c084018a8c61493c565b8381036060850152878152818101600589901b820183018a60005b8b811015614ae657848303601f19018452614ac7828e614a1d565b614ad285828461493c565b958801959450505090850190600101614aac565b50508581036080870152614afb81898b61493c565b9450505050508260a08301529a9950505050505050505050565b6000808335601e19843603018112614b2c57600080fd5b83016020810192503590506001600160401b03811115614b4b57600080fd5b8060051b360382131561349657600080fd5b60008235603e19833603018112614b7357600080fd5b90910192915050565b6000606080835260a0808401614b928889614b15565b60408786018190529281905260059260c08089019083861b8a01018460005b85811015614cf2578b830360bf19018452813536889003607e19018112614bd757600080fd5b87016080848101614be88380614b15565b928752908290528b860191808c1b87018d0191908160005b82811015614c7057898503609f19018652614c1b8285614b5d565b614c258182614a1d565b8e8852614c358f8901828461493c565b9150506020614c4681840184614a1d565b9350888303828a0152614c5a83858361493c565b9982019998505093909301925050600101614c00565b5050505060209150614c8482840184614a1d565b87830384890152614c9683828461493c565b92505050614ca688840184614a1d565b8783038a890152614cb883828461493c565b92505050614cc88d840184614a1d565b93508682038e880152614cdc82858361493c565b9783019796505050929092019150600101614bb1565b505060208d013560808b015289810360208b0152614d10818d6142bd565b97505050878603818901525050505050613da881856142bd565b848152836020820152606060408201526000613da860608301848661493c565b818352600060208085019450848460051b86018460005b87811015614358578383038952614d788288614a1d565b614d8385828461493c565b9a87019a9450505090840190600101614d61565b614da1818b6142ff565b60c060208201526000614db860c083018a8c614d4a565b8860408401528281036060840152614dd181888a61493c565b905085608084015282810360a0840152614dec81858761493c565b9c9b505050505050505050505050565b600060208284031215614e0e57600080fd5b81516001600160401b03811115614e2457600080fd5b8201601f81018413614e3557600080fd5b612aba84825160208401614989565b60c081526000614e5760c083018b6142bd565b614e64602084018b6142ff565b88151560408401528281036060840152614e7f81888a614d4a565b90508281036080840152614e9481868861493c565b9150508260a08301529998505050505050505050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b60a081526000614f5660a083018a8c61493c565b614f63602084018a6142ff565b87151560408401528281036060840152614f7e818789614d4a565b90508281036080840152614f9381858761493c565b9b9a5050505050505050505050565b600181811c90821680614fb657607f821691505b602082108103613f4257634e487b7160e01b600052602260045260246000fd5b60008235603e19833603018112614fec57600080fd5b9190910192915050565b60006150028283614a1d565b6040855261501460408601828461493c565b915050602083013560208501528091505092915050565b6001600160401b038061503d83614792565b1683528061504d60208401614792565b166020840152505050565b6020815260006150688384614b5d565b60e0602084015261507d610100840182614ff6565b905061508c6020850185614b5d565b601f19808584030160408601526150a38383614ff6565b92506150b160408701614792565b91506001600160401b0380831660608701526150d06060880188614a1d565b9350828786030160808801526150e785858361493c565b9450506150fa60a087016080890161502b565b8061510760c08901614792565b1660e08701525050508091505092915050565b60006020828403121561512c57600080fd5b5051919050565b60006020828403121561514557600080fd5b6123ef82614792565b6001600160401b038481168252608082019061516d602084018661502b565b808416606084015250949350505050565b60006001600160401b038083168185168083038211156151ae57634e487b7160e01b600052601160045260246000fd5b01949350505050565b60006151c38283614b5d565b60e084526151d460e0850182614ff6565b90506151e36020840184614b5d565b84820360208601526151f58282614ff6565b91505061520460408401614792565b6001600160401b0380821660408701526152216060860186614a1d565b9250868403606088015261523684848361493c565b935050615249608087016080870161502b565b8061525660c08701614792565b1660c087015250508091505092915050565b6020815260006123ef60208301846151b7565b60006040828403121561528d57600080fd5b604051604081016001600160401b0382821081831117156152b0576152b061440d565b81604052829350845191506152c482613f9b565b908252602084015190808211156152da57600080fd5b506152e7858286016149b9565b6020830152505092915050565b6000806040838503121561530757600080fd5b82516001600160401b0381111561531d57600080fd5b6153298582860161527b565b925050602083015161465581613f9b565b8051151582526000602082015160406020850152612aba60408501826142bd565b6001600160401b03831681526040602082015260006123ec604083018461533a565b601f82111561154e57600081815260208120601f850160051c810160208610156153a45750805b601f850160051c820191505b81811015612b65578281556001016153b0565b81516001600160401b038111156153dc576153dc61440d565b6153f0816153ea8454614fa2565b8461537d565b602080601f831160018114615425576000841561540d5750858301515b600019600386901b1c1916600185901b178555612b65565b600085815260208120601f198616915b8281101561545457888601518255948401946001909101908401615435565b50858210156154725787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160401b038311156154995761549961440d565b6154ad836154a78354614fa2565b8361537d565b6000601f8411600181146154e157600085156154c95750838201355b600019600387901b1c1916600186901b17835561553b565b600083815260209020601f19861690835b8281101561551257868501358255602094850194600190920191016154f2565b508682101561552f5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b6020815260006123ec60208301848661493c565b60006020828403121561556857600080fd5b81516001600160401b0381111561557e57600080fd5b612aba8482850161527b565b60408152600061559d60408301856151b7565b8281036020840152614404818561533a565b8183823760009101908152919050565b6060815260006155d360608301868861493c565b6001600160401b039485166020840152929093166040909101529392505050565b60608152600061560860608301868861493c565b6020830194909452506040015292915050565b60408152600061562e60408301856142bd565b90508260208301529392505050565b6156478188614a0d565b60006020615657818401896142ff565b60c0604084015261566b60c08401886142bd565b8381036060850152865180825282820190600581901b83018401848a0160005b838110156156b957601f198684030185526156a78383516142bd565b9487019492509086019060010161568b565b505086810360808801526156cd818a6142bd565b955050505050508260a0830152979650505050505050565b8381526060602082015260006156fe60608301856142bd565b9050826040830152949350505050565b60008251614fec818460208701614291565b6000808585111561573057600080fd5b8386111561573d57600080fd5b5050820193919092039150565b60006020828403121561575c57600080fd5b81516123ef81614131565b60008261578457634e487b7160e01b600052601260045260246000fd5b500490565b60006001600160401b03808411156157a3576157a361440d565b8360051b60206157b4818301614423565b8681529185019181810190368411156157cc57600080fd5b865b84811015615800578035868111156157e65760008081fd5b6157f236828b016145ef565b8452509183019183016157ce565b50979650505050505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220f7d6cd3243d9211a9414628a794bea35d0fd54a59e9e0a44dc6284e9de52400464736f6c634300080f0033"; type DispatcherConstructorParams = | [linkLibraryAddresses: DispatcherLibraryAddresses, signer?: Signer] diff --git a/src/evm/contracts/factories/DummyLightClient__factory.ts b/src/evm/contracts/factories/DummyLightClient__factory.ts index df53130e..1ce511df 100644 --- a/src/evm/contracts/factories/DummyLightClient__factory.ts +++ b/src/evm/contracts/factories/DummyLightClient__factory.ts @@ -253,7 +253,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60806040526000805460ff1916905534801561001a57600080fd5b5061040d8061002a6000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c806349ff245e1161005b57806349ff245e146100d957806357c1c5f4146100ef578063cb535ab5146100f7578063fdaab4e51461010a57600080fd5b80631b738a221461008257806336028d2a146100b557806344c9af28146100c5575b600080fd5b6100a2610090366004610170565b60016020526000908152604090205481565b6040519081526020015b60405180910390f35b60005b6040516100ac9190610189565b6100a26100d3366004610170565b50600090565b6100ed6100e73660046101b1565b50505050565b005b6100b8600081565b6100ed6101053660046102eb565b61011d565b6100ed610118366004610373565b610147565b826020013560000361014257604051636cb681eb60e01b815260040160405180910390fd5b505050565b816020013560000361016c57604051631e76ddb960e21b815260040160405180910390fd5b5050565b60006020828403121561018257600080fd5b5035919050565b60208101600383106101ab57634e487b7160e01b600052602160045260246000fd5b91905290565b600080600080606085870312156101c757600080fd5b843567ffffffffffffffff808211156101df57600080fd5b818701915087601f8301126101f357600080fd5b81358181111561020257600080fd5b88602082850101111561021457600080fd5b6020928301999098509187013596604001359550909350505050565b60006040828403121561024257600080fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261026f57600080fd5b813567ffffffffffffffff8082111561028a5761028a610248565b604051601f8301601f19908116603f011681019082821181831017156102b2576102b2610248565b816040528381528660208588010111156102cb57600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060006060848603121561030057600080fd5b833567ffffffffffffffff8082111561031857600080fd5b61032487838801610230565b9450602086013591508082111561033a57600080fd5b6103468783880161025e565b9350604086013591508082111561035c57600080fd5b506103698682870161025e565b9150509250925092565b6000806040838503121561038657600080fd5b823567ffffffffffffffff8082111561039e57600080fd5b6103aa86838701610230565b935060208501359150808211156103c057600080fd5b506103cd8582860161025e565b915050925092905056fea26469706673582212209d3ad59de5e00255b07e3daf87064182bd45e054b915828e5bd54725317284e664736f6c634300080f0033"; + "0x60806040526000805460ff1916905534801561001a57600080fd5b5061040d8061002a6000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c806349ff245e1161005b57806349ff245e146100d957806357c1c5f4146100ef578063cb535ab5146100f7578063fdaab4e51461010a57600080fd5b80631b738a221461008257806336028d2a146100b557806344c9af28146100c5575b600080fd5b6100a2610090366004610170565b60016020526000908152604090205481565b6040519081526020015b60405180910390f35b60005b6040516100ac9190610189565b6100a26100d3366004610170565b50600090565b6100ed6100e73660046101b1565b50505050565b005b6100b8600081565b6100ed6101053660046102eb565b61011d565b6100ed610118366004610373565b610147565b826020013560000361014257604051636cb681eb60e01b815260040160405180910390fd5b505050565b816020013560000361016c57604051631e76ddb960e21b815260040160405180910390fd5b5050565b60006020828403121561018257600080fd5b5035919050565b60208101600483106101ab57634e487b7160e01b600052602160045260246000fd5b91905290565b600080600080606085870312156101c757600080fd5b843567ffffffffffffffff808211156101df57600080fd5b818701915087601f8301126101f357600080fd5b81358181111561020257600080fd5b88602082850101111561021457600080fd5b6020928301999098509187013596604001359550909350505050565b60006040828403121561024257600080fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261026f57600080fd5b813567ffffffffffffffff8082111561028a5761028a610248565b604051601f8301601f19908116603f011681019082821181831017156102b2576102b2610248565b816040528381528660208588010111156102cb57600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060006060848603121561030057600080fd5b833567ffffffffffffffff8082111561031857600080fd5b61032487838801610230565b9450602086013591508082111561033a57600080fd5b6103468783880161025e565b9350604086013591508082111561035c57600080fd5b506103698682870161025e565b9150509250925092565b6000806040838503121561038657600080fd5b823567ffffffffffffffff8082111561039e57600080fd5b6103aa86838701610230565b935060208501359150808211156103c057600080fd5b506103cd8582860161025e565b915050925092905056fea2646970667358221220f5fdd531be48ab9d210a85685201f2cea5eadd016c2f72207b6c2130e5c3764c64736f6c634300080f0033"; type DummyLightClientConstructorParams = | [signer?: Signer] diff --git a/src/evm/contracts/factories/ICrossL2Prover__factory.ts b/src/evm/contracts/factories/ICrossL2Prover__factory.ts new file mode 100644 index 00000000..53bb0337 --- /dev/null +++ b/src/evm/contracts/factories/ICrossL2Prover__factory.ts @@ -0,0 +1,148 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import { Contract, Interface, type ContractRunner } from "ethers"; +import type { + ICrossL2Prover, + ICrossL2ProverInterface, +} from "../ICrossL2Prover"; + +const _abi = [ + { + type: "function", + name: "LIGHT_CLIENT_TYPE", + inputs: [], + outputs: [ + { + name: "", + type: "uint8", + internalType: "enum LightClientType", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "getState", + inputs: [ + { + name: "height", + type: "uint256", + internalType: "uint256", + }, + ], + outputs: [ + { + name: "", + type: "uint256", + internalType: "uint256", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "updateClient", + inputs: [ + { + name: "proof", + type: "bytes", + internalType: "bytes", + }, + { + name: "height", + type: "uint256", + internalType: "uint256", + }, + { + name: "appHash", + type: "uint256", + internalType: "uint256", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "validateEvent", + inputs: [ + { + name: "receiptIndex", + type: "bytes", + internalType: "bytes", + }, + { + name: "receiptRLPEncodedBytes", + type: "bytes", + internalType: "bytes", + }, + { + name: "logIndex", + type: "uint256", + internalType: "uint256", + }, + { + name: "logBytes", + type: "bytes", + internalType: "bytes", + }, + { + name: "proof", + type: "bytes", + internalType: "bytes", + }, + ], + outputs: [ + { + name: "", + type: "bool", + internalType: "bool", + }, + ], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "validateReceipt", + inputs: [ + { + name: "receiptIndex", + type: "bytes", + internalType: "bytes", + }, + { + name: "receiptRLPEncodedBytes", + type: "bytes", + internalType: "bytes", + }, + { + name: "proof", + type: "bytes", + internalType: "bytes", + }, + ], + outputs: [ + { + name: "", + type: "bool", + internalType: "bool", + }, + ], + stateMutability: "nonpayable", + }, +] as const; + +export class ICrossL2Prover__factory { + static readonly abi = _abi; + static createInterface(): ICrossL2ProverInterface { + return new Interface(_abi) as ICrossL2ProverInterface; + } + static connect( + address: string, + runner?: ContractRunner | null + ): ICrossL2Prover { + return new Contract(address, _abi, runner) as unknown as ICrossL2Prover; + } +} diff --git a/src/evm/contracts/factories/ILightClient.sol/IClientUpdates__factory.ts b/src/evm/contracts/factories/ILightClient.sol/IClientUpdates__factory.ts new file mode 100644 index 00000000..5044386a --- /dev/null +++ b/src/evm/contracts/factories/ILightClient.sol/IClientUpdates__factory.ts @@ -0,0 +1,61 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import { Contract, Interface, type ContractRunner } from "ethers"; +import type { + IClientUpdates, + IClientUpdatesInterface, +} from "../../ILightClient.sol/IClientUpdates"; + +const _abi = [ + { + type: "function", + name: "LIGHT_CLIENT_TYPE", + inputs: [], + outputs: [ + { + name: "", + type: "uint8", + internalType: "enum LightClientType", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "updateClient", + inputs: [ + { + name: "proof", + type: "bytes", + internalType: "bytes", + }, + { + name: "height", + type: "uint256", + internalType: "uint256", + }, + { + name: "appHash", + type: "uint256", + internalType: "uint256", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, +] as const; + +export class IClientUpdates__factory { + static readonly abi = _abi; + static createInterface(): IClientUpdatesInterface { + return new Interface(_abi) as IClientUpdatesInterface; + } + static connect( + address: string, + runner?: ContractRunner | null + ): IClientUpdates { + return new Contract(address, _abi, runner) as unknown as IClientUpdates; + } +} diff --git a/src/evm/contracts/factories/ILightClient__factory.ts b/src/evm/contracts/factories/ILightClient.sol/ILightClient__factory.ts similarity index 97% rename from src/evm/contracts/factories/ILightClient__factory.ts rename to src/evm/contracts/factories/ILightClient.sol/ILightClient__factory.ts index 79cd0ecd..6aecc2ad 100644 --- a/src/evm/contracts/factories/ILightClient__factory.ts +++ b/src/evm/contracts/factories/ILightClient.sol/ILightClient__factory.ts @@ -3,7 +3,10 @@ /* eslint-disable */ import { Contract, Interface, type ContractRunner } from "ethers"; -import type { ILightClient, ILightClientInterface } from "../ILightClient"; +import type { + ILightClient, + ILightClientInterface, +} from "../../ILightClient.sol/ILightClient"; const _abi = [ { diff --git a/src/evm/contracts/factories/ILightClient.sol/IMembershipVerifier__factory.ts b/src/evm/contracts/factories/ILightClient.sol/IMembershipVerifier__factory.ts new file mode 100644 index 00000000..b40507d4 --- /dev/null +++ b/src/evm/contracts/factories/ILightClient.sol/IMembershipVerifier__factory.ts @@ -0,0 +1,98 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import { Contract, Interface, type ContractRunner } from "ethers"; +import type { + IMembershipVerifier, + IMembershipVerifierInterface, +} from "../../ILightClient.sol/IMembershipVerifier"; + +const _abi = [ + { + type: "function", + name: "verifyMembership", + inputs: [ + { + name: "proof", + type: "tuple", + internalType: "struct Ics23Proof", + components: [ + { + name: "proof", + type: "tuple[]", + internalType: "struct OpIcs23Proof[]", + components: [ + { + name: "path", + type: "tuple[]", + internalType: "struct OpIcs23ProofPath[]", + components: [ + { + name: "prefix", + type: "bytes", + internalType: "bytes", + }, + { + name: "suffix", + type: "bytes", + internalType: "bytes", + }, + ], + }, + { + name: "key", + type: "bytes", + internalType: "bytes", + }, + { + name: "value", + type: "bytes", + internalType: "bytes", + }, + { + name: "prefix", + type: "bytes", + internalType: "bytes", + }, + ], + }, + { + name: "height", + type: "uint256", + internalType: "uint256", + }, + ], + }, + { + name: "key", + type: "bytes", + internalType: "bytes", + }, + { + name: "expectedValue", + type: "bytes", + internalType: "bytes", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, +] as const; + +export class IMembershipVerifier__factory { + static readonly abi = _abi; + static createInterface(): IMembershipVerifierInterface { + return new Interface(_abi) as IMembershipVerifierInterface; + } + static connect( + address: string, + runner?: ContractRunner | null + ): IMembershipVerifier { + return new Contract( + address, + _abi, + runner + ) as unknown as IMembershipVerifier; + } +} diff --git a/src/evm/contracts/factories/ILightClient.sol/INonMembershipVerifier__factory.ts b/src/evm/contracts/factories/ILightClient.sol/INonMembershipVerifier__factory.ts new file mode 100644 index 00000000..486fc1a8 --- /dev/null +++ b/src/evm/contracts/factories/ILightClient.sol/INonMembershipVerifier__factory.ts @@ -0,0 +1,93 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import { Contract, Interface, type ContractRunner } from "ethers"; +import type { + INonMembershipVerifier, + INonMembershipVerifierInterface, +} from "../../ILightClient.sol/INonMembershipVerifier"; + +const _abi = [ + { + type: "function", + name: "verifyNonMembership", + inputs: [ + { + name: "proof", + type: "tuple", + internalType: "struct Ics23Proof", + components: [ + { + name: "proof", + type: "tuple[]", + internalType: "struct OpIcs23Proof[]", + components: [ + { + name: "path", + type: "tuple[]", + internalType: "struct OpIcs23ProofPath[]", + components: [ + { + name: "prefix", + type: "bytes", + internalType: "bytes", + }, + { + name: "suffix", + type: "bytes", + internalType: "bytes", + }, + ], + }, + { + name: "key", + type: "bytes", + internalType: "bytes", + }, + { + name: "value", + type: "bytes", + internalType: "bytes", + }, + { + name: "prefix", + type: "bytes", + internalType: "bytes", + }, + ], + }, + { + name: "height", + type: "uint256", + internalType: "uint256", + }, + ], + }, + { + name: "key", + type: "bytes", + internalType: "bytes", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, +] as const; + +export class INonMembershipVerifier__factory { + static readonly abi = _abi; + static createInterface(): INonMembershipVerifierInterface { + return new Interface(_abi) as INonMembershipVerifierInterface; + } + static connect( + address: string, + runner?: ContractRunner | null + ): INonMembershipVerifier { + return new Contract( + address, + _abi, + runner + ) as unknown as INonMembershipVerifier; + } +} diff --git a/src/evm/contracts/factories/ILightClient.sol/index.ts b/src/evm/contracts/factories/ILightClient.sol/index.ts new file mode 100644 index 00000000..27e9aee9 --- /dev/null +++ b/src/evm/contracts/factories/ILightClient.sol/index.ts @@ -0,0 +1,7 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export { IClientUpdates__factory } from "./IClientUpdates__factory"; +export { ILightClient__factory } from "./ILightClient__factory"; +export { IMembershipVerifier__factory } from "./IMembershipVerifier__factory"; +export { INonMembershipVerifier__factory } from "./INonMembershipVerifier__factory"; diff --git a/src/evm/contracts/factories/OptimisticLightClient__factory.ts b/src/evm/contracts/factories/OptimisticLightClient__factory.ts index d5fa95cf..bb931bcc 100644 --- a/src/evm/contracts/factories/OptimisticLightClient__factory.ts +++ b/src/evm/contracts/factories/OptimisticLightClient__factory.ts @@ -368,7 +368,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60806040526000805460ff1916600117905534801561001d57600080fd5b5060405161103638038061103683398101604081905261003c91610091565b63ffffffff92909216600355600480546001600160a01b039283166001600160a01b031991821617909155600580549290931691161790556100e7565b6001600160a01b038116811461008e57600080fd5b50565b6000806000606084860312156100a657600080fd5b835163ffffffff811681146100ba57600080fd5b60208501519093506100cb81610079565b60408501519092506100dc81610079565b809150509250925092565b610f40806100f66000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c806363042720116100715780636304272014610181578063b9a1e87b1461018a578063cb535ab5146101ba578063d56ff842146101cd578063eb772058146101fa578063fdaab4e51461020d57600080fd5b80631b738a22146100b95780632b7ac3f3146100ec57806334b80a411461011757806344c9af281461013757806349ff245e1461015757806357c1c5f41461016c575b600080fd5b6100d96100c73660046105bc565b60016020526000908152604090205481565b6040519081526020015b60405180910390f35b6004546100ff906001600160a01b031681565b6040516001600160a01b0390911681526020016100e3565b6100d96101253660046105bc565b60026020526000908152604090205481565b6100d96101453660046105bc565b60009081526001602052604090205490565b61016a61016536600461061d565b610220565b005b610174600181565b6040516100e3919061066d565b6100d960035481565b61019d6101983660046105bc565b6103eb565b6040805193845260208401929092521515908201526060016100e3565b61016a6101c83660046106ad565b610406565b6100d96101db3660046105bc565b6000908152600160209081526040808320548352600290915290205490565b6005546100ff906001600160a01b031681565b61016a61021b366004610741565b6104ca565b60008061022f858701876109c0565b6000868152600160205260408120549294509092508190036103c2576004805460055460408051624dead360e51b815290516001600160a01b0393841694630a1bb8b594899489948c9492909116926309bd5a609282820192602092908290030181865afa1580156102a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102c99190610a73565b600560009054906101000a90046001600160a01b03166001600160a01b0316638381f58a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561031c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103409190610a8c565b6040518663ffffffff1660e01b8152600401610360959493929190610b3e565b60006040518083038186803b15801561037857600080fd5b505afa15801561038c573d6000803e3d6000fd5b5050506000868152600160205260409020859055506003546103ae9042610c0b565b6000858152600260205260409020556103e2565b8381146103e25760405163f0cd4ed960e01b815260040160405180910390fd5b50505050505050565b60008060006103f98461056e565b9250925092509193909250565b60008061042061041b600160208a0135610c23565b61056e565b92505091508061044357604051631234d8dd60e01b815260040160405180910390fd5b600460009054906101000a90046001600160a01b03166001600160a01b031663c2f0329f8360001b888888888d6040518763ffffffff1660e01b815260040161049196959493929190610e92565b60006040518083038186803b1580156104a957600080fd5b505afa1580156104bd573d6000803e3d6000fd5b5050505050505050505050565b6000806104df61041b60016020880135610c23565b92505091508061050257604051631234d8dd60e01b815260040160405180910390fd5b60048054604051630a9b7b5d60e21b81526001600160a01b0390911691632a6ded7491610537918691899189918c9101610ed3565b60006040518083038186803b15801561054f57600080fd5b505afa158015610563573d6000803e3d6000fd5b505050505050505050565b600081815260016020908152604080832054808452600290925282205482918291819081158015906105ae57506000838152600260205260409020544210155b935093509350509193909250565b6000602082840312156105ce57600080fd5b5035919050565b60008083601f8401126105e757600080fd5b5081356001600160401b038111156105fe57600080fd5b60208301915083602082850101111561061657600080fd5b9250929050565b6000806000806060858703121561063357600080fd5b84356001600160401b0381111561064957600080fd5b610655878288016105d5565b90989097506020870135966040013595509350505050565b602081016003831061068f57634e487b7160e01b600052602160045260246000fd5b91905290565b6000604082840312156106a757600080fd5b50919050565b6000806000806000606086880312156106c557600080fd5b85356001600160401b03808211156106dc57600080fd5b6106e889838a01610695565b965060208801359150808211156106fe57600080fd5b61070a89838a016105d5565b9096509450604088013591508082111561072357600080fd5b50610730888289016105d5565b969995985093965092949392505050565b60008060006040848603121561075657600080fd5b83356001600160401b038082111561076d57600080fd5b61077987838801610695565b9450602086013591508082111561078f57600080fd5b5061079c868287016105d5565b9497909650939450505050565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b03811182821017156107e1576107e16107a9565b60405290565b604051601f8201601f191681016001600160401b038111828210171561080f5761080f6107a9565b604052919050565b6000601f838184011261082957600080fd5b823560206001600160401b0380831115610845576108456107a9565b8260051b6108548382016107e7565b938452868101830193838101908986111561086e57600080fd5b84890192505b858310156108fe5782358481111561088c5760008081fd5b8901603f81018b1361089e5760008081fd5b858101356040868211156108b4576108b46107a9565b6108c5828b01601f191689016107e7565b8281528d828486010111156108da5760008081fd5b828285018a8301376000928101890192909252508352509184019190840190610874565b9998505050505050505050565b6001600160401b038116811461092057600080fd5b50565b60006080828403121561093557600080fd5b604051608081016001600160401b038282108183111715610958576109586107a9565b81604052829350843591508082111561097057600080fd5b61097c86838701610817565b8352602085013591508082111561099257600080fd5b5061099f85828601610817565b60208301525060408301356040820152606083013560608201525092915050565b600080604083850312156109d357600080fd5b82356001600160401b03808211156109ea57600080fd5b90840190606082870312156109fe57600080fd5b610a066107bf565b823582811115610a1557600080fd5b610a2188828601610817565b8252506020830135602082015260408301359250610a3e8361090b565b826040820152809450506020850135915080821115610a5c57600080fd5b50610a6985828601610923565b9150509250929050565b600060208284031215610a8557600080fd5b5051919050565b600060208284031215610a9e57600080fd5b8151610aa98161090b565b9392505050565b600081518084526020808501808196508360051b810191508286016000805b86811015610b30578385038a5282518051808752835b81811015610b00578281018901518882018a01528801610ae5565b81811115610b10578489838a0101525b509a87019a601f01601f1916959095018601945091850191600101610acf565b509298975050505050505050565b60a0815260008651606060a0840152610b5b610100840182610ab0565b9050602088015160c08401526001600160401b0360408901511660e08401528281036020840152865160808252610b956080830182610ab0565b905060208801518282036020840152610bae8282610ab0565b91505060408801516040830152606088015160608301528092505050846040830152836060830152610beb60808301846001600160401b03169052565b9695505050505050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610c1e57610c1e610bf5565b500190565b600082821015610c3557610c35610bf5565b500390565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6000808335601e19843603018112610c7a57600080fd5b83016020810192503590506001600160401b03811115610c9957600080fd5b8060051b360382131561061657600080fd5b6000808335601e19843603018112610cc257600080fd5b83016020810192503590506001600160401b03811115610ce157600080fd5b80360382131561061657600080fd5b600060408301610d008384610c63565b604086528281845260608701905060608260051b88010193508260005b83811015610e7957888603605f1901835236859003607e1901823512610d4257600080fd5b8482350160808701610d548283610c63565b60808a528281845260a08b01905060a08260051b8c010193508260005b83811015610df2578c8603609f19018352813536869003603e19018112610d9757600080fd5b8501610da38180610cab565b60408952610db560408a018284610c3a565b915050610dc56020830183610cab565b925088820360208a0152610dda828483610c3a565b98505050602093840193929092019150600101610d71565b5050505050610e046020830183610cab565b89830360208b0152610e17838284610c3a565b92505050610e286040830183610cab565b89830360408b0152610e3b838284610c3a565b92505050610e4c6060830183610cab565b925088820360608a0152610e61828483610c3a565b98505050602093840193929092019150600101610d1d565b5050505050602083013560208501528091505092915050565b868152608060208201526000610eac608083018789610c3a565b8281036040840152610ebf818688610c3a565b905082810360608401526108fe8185610cf0565b848152606060208201526000610eed606083018587610c3a565b8281036040840152610eff8185610cf0565b97965050505050505056fea264697066735822122002704f39522eba69937029ffb29e1a22a80c40ab8029a5a547a981d55cb5e56b64736f6c634300080f0033"; + "0x60806040526000805460ff1916600117905534801561001d57600080fd5b5060405161103638038061103683398101604081905261003c91610091565b63ffffffff92909216600355600480546001600160a01b039283166001600160a01b031991821617909155600580549290931691161790556100e7565b6001600160a01b038116811461008e57600080fd5b50565b6000806000606084860312156100a657600080fd5b835163ffffffff811681146100ba57600080fd5b60208501519093506100cb81610079565b60408501519092506100dc81610079565b809150509250925092565b610f40806100f66000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c806363042720116100715780636304272014610181578063b9a1e87b1461018a578063cb535ab5146101ba578063d56ff842146101cd578063eb772058146101fa578063fdaab4e51461020d57600080fd5b80631b738a22146100b95780632b7ac3f3146100ec57806334b80a411461011757806344c9af281461013757806349ff245e1461015757806357c1c5f41461016c575b600080fd5b6100d96100c73660046105bc565b60016020526000908152604090205481565b6040519081526020015b60405180910390f35b6004546100ff906001600160a01b031681565b6040516001600160a01b0390911681526020016100e3565b6100d96101253660046105bc565b60026020526000908152604090205481565b6100d96101453660046105bc565b60009081526001602052604090205490565b61016a61016536600461061d565b610220565b005b610174600181565b6040516100e3919061066d565b6100d960035481565b61019d6101983660046105bc565b6103eb565b6040805193845260208401929092521515908201526060016100e3565b61016a6101c83660046106ad565b610406565b6100d96101db3660046105bc565b6000908152600160209081526040808320548352600290915290205490565b6005546100ff906001600160a01b031681565b61016a61021b366004610741565b6104ca565b60008061022f858701876109c0565b6000868152600160205260408120549294509092508190036103c2576004805460055460408051624dead360e51b815290516001600160a01b0393841694630a1bb8b594899489948c9492909116926309bd5a609282820192602092908290030181865afa1580156102a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102c99190610a73565b600560009054906101000a90046001600160a01b03166001600160a01b0316638381f58a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561031c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103409190610a8c565b6040518663ffffffff1660e01b8152600401610360959493929190610b3e565b60006040518083038186803b15801561037857600080fd5b505afa15801561038c573d6000803e3d6000fd5b5050506000868152600160205260409020859055506003546103ae9042610c0b565b6000858152600260205260409020556103e2565b8381146103e25760405163f0cd4ed960e01b815260040160405180910390fd5b50505050505050565b60008060006103f98461056e565b9250925092509193909250565b60008061042061041b600160208a0135610c23565b61056e565b92505091508061044357604051631234d8dd60e01b815260040160405180910390fd5b600460009054906101000a90046001600160a01b03166001600160a01b031663c2f0329f8360001b888888888d6040518763ffffffff1660e01b815260040161049196959493929190610e92565b60006040518083038186803b1580156104a957600080fd5b505afa1580156104bd573d6000803e3d6000fd5b5050505050505050505050565b6000806104df61041b60016020880135610c23565b92505091508061050257604051631234d8dd60e01b815260040160405180910390fd5b60048054604051630a9b7b5d60e21b81526001600160a01b0390911691632a6ded7491610537918691899189918c9101610ed3565b60006040518083038186803b15801561054f57600080fd5b505afa158015610563573d6000803e3d6000fd5b505050505050505050565b600081815260016020908152604080832054808452600290925282205482918291819081158015906105ae57506000838152600260205260409020544210155b935093509350509193909250565b6000602082840312156105ce57600080fd5b5035919050565b60008083601f8401126105e757600080fd5b5081356001600160401b038111156105fe57600080fd5b60208301915083602082850101111561061657600080fd5b9250929050565b6000806000806060858703121561063357600080fd5b84356001600160401b0381111561064957600080fd5b610655878288016105d5565b90989097506020870135966040013595509350505050565b602081016004831061068f57634e487b7160e01b600052602160045260246000fd5b91905290565b6000604082840312156106a757600080fd5b50919050565b6000806000806000606086880312156106c557600080fd5b85356001600160401b03808211156106dc57600080fd5b6106e889838a01610695565b965060208801359150808211156106fe57600080fd5b61070a89838a016105d5565b9096509450604088013591508082111561072357600080fd5b50610730888289016105d5565b969995985093965092949392505050565b60008060006040848603121561075657600080fd5b83356001600160401b038082111561076d57600080fd5b61077987838801610695565b9450602086013591508082111561078f57600080fd5b5061079c868287016105d5565b9497909650939450505050565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b03811182821017156107e1576107e16107a9565b60405290565b604051601f8201601f191681016001600160401b038111828210171561080f5761080f6107a9565b604052919050565b6000601f838184011261082957600080fd5b823560206001600160401b0380831115610845576108456107a9565b8260051b6108548382016107e7565b938452868101830193838101908986111561086e57600080fd5b84890192505b858310156108fe5782358481111561088c5760008081fd5b8901603f81018b1361089e5760008081fd5b858101356040868211156108b4576108b46107a9565b6108c5828b01601f191689016107e7565b8281528d828486010111156108da5760008081fd5b828285018a8301376000928101890192909252508352509184019190840190610874565b9998505050505050505050565b6001600160401b038116811461092057600080fd5b50565b60006080828403121561093557600080fd5b604051608081016001600160401b038282108183111715610958576109586107a9565b81604052829350843591508082111561097057600080fd5b61097c86838701610817565b8352602085013591508082111561099257600080fd5b5061099f85828601610817565b60208301525060408301356040820152606083013560608201525092915050565b600080604083850312156109d357600080fd5b82356001600160401b03808211156109ea57600080fd5b90840190606082870312156109fe57600080fd5b610a066107bf565b823582811115610a1557600080fd5b610a2188828601610817565b8252506020830135602082015260408301359250610a3e8361090b565b826040820152809450506020850135915080821115610a5c57600080fd5b50610a6985828601610923565b9150509250929050565b600060208284031215610a8557600080fd5b5051919050565b600060208284031215610a9e57600080fd5b8151610aa98161090b565b9392505050565b600081518084526020808501808196508360051b810191508286016000805b86811015610b30578385038a5282518051808752835b81811015610b00578281018901518882018a01528801610ae5565b81811115610b10578489838a0101525b509a87019a601f01601f1916959095018601945091850191600101610acf565b509298975050505050505050565b60a0815260008651606060a0840152610b5b610100840182610ab0565b9050602088015160c08401526001600160401b0360408901511660e08401528281036020840152865160808252610b956080830182610ab0565b905060208801518282036020840152610bae8282610ab0565b91505060408801516040830152606088015160608301528092505050846040830152836060830152610beb60808301846001600160401b03169052565b9695505050505050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610c1e57610c1e610bf5565b500190565b600082821015610c3557610c35610bf5565b500390565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6000808335601e19843603018112610c7a57600080fd5b83016020810192503590506001600160401b03811115610c9957600080fd5b8060051b360382131561061657600080fd5b6000808335601e19843603018112610cc257600080fd5b83016020810192503590506001600160401b03811115610ce157600080fd5b80360382131561061657600080fd5b600060408301610d008384610c63565b604086528281845260608701905060608260051b88010193508260005b83811015610e7957888603605f1901835236859003607e1901823512610d4257600080fd5b8482350160808701610d548283610c63565b60808a528281845260a08b01905060a08260051b8c010193508260005b83811015610df2578c8603609f19018352813536869003603e19018112610d9757600080fd5b8501610da38180610cab565b60408952610db560408a018284610c3a565b915050610dc56020830183610cab565b925088820360208a0152610dda828483610c3a565b98505050602093840193929092019150600101610d71565b5050505050610e046020830183610cab565b89830360208b0152610e17838284610c3a565b92505050610e286040830183610cab565b89830360408b0152610e3b838284610c3a565b92505050610e4c6060830183610cab565b925088820360608a0152610e61828483610c3a565b98505050602093840193929092019150600101610d1d565b5050505050602083013560208501528091505092915050565b868152608060208201526000610eac608083018789610c3a565b8281036040840152610ebf818688610c3a565b905082810360608401526108fe8185610cf0565b848152606060208201526000610eed606083018587610c3a565b8281036040840152610eff8185610cf0565b97965050505050505056fea26469706673582212207a6fe856e998c1fec10e0a51faf6cd486f66431396a3937518c8c08b53db94ab64736f6c634300080f0033"; type OptimisticLightClientConstructorParams = | [signer?: Signer] diff --git a/src/evm/contracts/factories/OptimisticProofVerifier__factory.ts b/src/evm/contracts/factories/OptimisticProofVerifier__factory.ts index c712f536..6e41e173 100644 --- a/src/evm/contracts/factories/OptimisticProofVerifier__factory.ts +++ b/src/evm/contracts/factories/OptimisticProofVerifier__factory.ts @@ -312,7 +312,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60806040523480156200001157600080fd5b5060405162002df638038062002df683398101604081905262000034916200005a565b600080546001600160a01b0319166001600160a01b03929092169190911790556200008c565b6000602082840312156200006d57600080fd5b81516001600160a01b03811681146200008557600080fd5b9392505050565b612d5a806200009c6000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80630a1bb8b5146100515780632a6ded741461006657806359c1b56b14610079578063c2f0329f146100a8575b600080fd5b61006461005f3660046124f8565b6100bb565b005b6100646100743660046125ec565b6103bb565b60005461008c906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b6100646100b636600461265e565b6103d4565b6100cb60608601604087016126f9565b6001600160401b0316816001600160401b0316146100fc57604051630fd8993960e21b815260040160405180910390fd5b6101176101098680612714565b610112916127a3565b6105be565b80519060200120821461013c5760405162fa512960e01b815260040160405180910390fd5b6101468580612714565b600881811061015757610157612877565b9050602002810190610169919061288d565b6040516101779291906128d3565b60405180910390206101a386604001602081019061019591906126f9565b6001600160401b03166105ff565b80519060200120146101c857604051633395483760e01b815260040160405180910390fd5b6101d28580612714565b60038181106101e3576101e3612877565b90506020028101906101f5919061288d565b6040516102039291906128d3565b6040518091039020610239866020013560405160200161022591815260200190565b604051602081830303815290604052610618565b805190602001201461025e576040516313d643bd60e21b815260040160405180910390fd5b6000805460405160609190911b6bffffffffffffffffffffffff191660208201526102c5906102c0906102bb9060340160408051601f198184030181529190526102a88980612714565b6102b1916127a3565b8a60200135610671565b610694565b6106f0565b9050600061033a86604001356040516020016102e391815260200190565b60408051601f198184030181529190526103006020890189612714565b610309916127a3565b61032c8560028151811061031f5761031f612877565b6020026020010151610913565b610335906128e3565b610671565b905061034d61034882610694565b610913565b610356906128e3565b6040805160006020820181905291810188905260608082019290925290880135608082015260a00160405160208183030381529060405280519060200120146103b2576040516330d26e5760e11b815260040160405180910390fd5b50505050505050565b604051632974974360e01b815260040160405180910390fd5b6103de8180612714565b60008181106103ef576103ef612877565b90506020028101906104019190612907565b61040f90602081019061288d565b60405161041d9291906128d3565b604051809103902085856040516104359291906128d3565b60405180910390201461045b5760405163026a287560e51b815260040160405180910390fd5b6104658180612714565b600081811061047657610476612877565b90506020028101906104889190612907565b61049690604081019061288d565b6040516104a49291906128d3565b604051809103902083836040516104bc9291906128d3565b6040518091039020146104e2576040516310d9300f60e11b815260040160405180910390fd5b6105176104ef8280612714565b600081811061050057610500612877565b90506020028101906105129190612907565b610a36565b6105218280612714565b600181811061053257610532612877565b90506020028101906105449190612907565b61055290604081019061288d565b61055b91612927565b1461057957604051636589f0e160e11b815260040160405180910390fd5b6105976105868280612714565b600181811061050057610500612877565b86146105b6576040516392cb8fbb60e01b815260040160405180910390fd5b505050505050565b60606105c982610c5a565b90506105d7815160c0610d93565b816040516020016105e9929190612980565b6040516020818303038152906040529050919050565b606061061261060d83610f3e565b610618565b92915050565b606081516001148015610645575060808260008151811061063b5761063b612877565b016020015160f81c105b1561064e575090565b61065a82516080610d93565b826040516020016105e9929190612980565b919050565b6060600061067e8561106a565b905061068b818585611086565b95945050505050565b604080518082019091526000808252602082015260008251116106d25760405162461bcd60e51b81526004016106c99061299d565b60405180910390fd5b50604080518082019091528151815260209182019181019190915290565b6060600080600061070085611916565b91945092509050600181600181111561071b5761071b612a0d565b1461078e5760405162461bcd60e51b815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d000000000000000060648201526084016106c9565b845161079a8385612a39565b146108025760405162461bcd60e51b815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e76616044820152713634b2103230ba30903932b6b0b4b73232b960711b60648201526084016106c9565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816108195790505093506000835b86518110156109075760008061088c6040518060400160405280858c600001516108709190612a51565b8152602001858c602001516108859190612a39565b9052611916565b5091509150604051806040016040528083836108a89190612a39565b8152602001848b602001516108bd9190612a39565b8152508885815181106108d2576108d2612877565b60209081029190910101526108e8600185612a39565b93506108f48183612a39565b6108fe9084612a39565b92505050610846565b50845250919392505050565b6060600080600061092385611916565b91945092509050600081600181111561093e5761093e612a0d565b146109b15760405162461bcd60e51b815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d0000000000000060648201526084016106c9565b6109bb8284612a39565b855114610a275760405162461bcd60e51b815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527330b71034b73b30b634b2103932b6b0b4b73232b960611b60648201526084016106c9565b61068b85602001518484611fd9565b6000806002610a48604085018561288d565b604051610a569291906128d3565b602060405180830381855afa158015610a73573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610a969190612a68565b90506002610aa7606085018561288d565b610abe610ab7602088018861288d565b905061206c565b610acb602088018861288d565b610ad5602061206c565b87604051602001610aec9796959493929190612a81565b60408051601f1981840301815290829052610b0691612ac5565b602060405180830381855afa158015610b23573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610b469190612a68565b915060005b610b558480612714565b9050811015610c53576002610b6a8580612714565b83818110610b7a57610b7a612877565b9050602002810190610b8c9190612ad1565b610b96908061288d565b85610ba18880612714565b86818110610bb157610bb1612877565b9050602002810190610bc39190612ad1565b610bd190602081019061288d565b604051602001610be5959493929190612ae7565b60408051601f1981840301815290829052610bff91612ac5565b602060405180830381855afa158015610c1c573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610c3f9190612a68565b925080610c4b81612b0f565b915050610b4b565b5050919050565b60608151600003610c7e5760408051600080825260208201909252905b5092915050565b6000805b8351811015610cc557838181518110610c9d57610c9d612877565b60200260200101515182610cb19190612a39565b915080610cbd81612b0f565b915050610c82565b816001600160401b03811115610cdd57610cdd61275d565b6040519080825280601f01601f191660200182016040528015610d07576020820181803683370190505b50925060009050602083015b8451821015610d8b576000858381518110610d3057610d30612877565b602002602001015190506000602082019050610d4e838284516120db565b868481518110610d6057610d60612877565b60200260200101515183610d749190612a39565b925050508180610d8390612b0f565b925050610d13565b505050919050565b60606038831015610df95760408051600180825281830190925290602082018180368337019050509050610dc78284612b28565b60f81b81600081518110610ddd57610ddd612877565b60200101906001600160f81b031916908160001a905350610612565b600060015b610e088186612b63565b15610e2e5781610e1781612b0f565b9250610e27905061010082612b77565b9050610dfe565b610e39826001612a39565b6001600160401b03811115610e5057610e5061275d565b6040519080825280601f01601f191660200182016040528015610e7a576020820181803683370190505b509250610e878483612b28565b610e92906037612b28565b60f81b83600081518110610ea857610ea8612877565b60200101906001600160f81b031916908160001a905350600190505b818111610f3657610100610ed88284612a51565b610ee490610100612c7a565b610eee9087612b63565b610ef89190612c86565b60f81b838281518110610f0d57610f0d612877565b60200101906001600160f81b031916908160001a90535080610f2e81612b0f565b915050610ec4565b505092915050565b6060600082604051602001610f5591815260200190565b604051602081830303815290604052905060005b6020811015610fac57818181518110610f8457610f84612877565b01602001516001600160f81b031916600003610fac5780610fa481612b0f565b915050610f69565b610fb7816020612a51565b6001600160401b03811115610fce57610fce61275d565b6040519080825280601f01601f191660200182016040528015610ff8576020820181803683370190505b50925060005b8351811015610d8b57828261101281612b0f565b93508151811061102457611024612877565b602001015160f81c60f81b84828151811061104157611041612877565b60200101906001600160f81b031916908160001a9053508061106281612b0f565b915050610ffe565b606081805190602001206040516020016105e991815260200190565b606060008451116110d15760405162461bcd60e51b81526020600482015260156024820152744d65726b6c65547269653a20656d707479206b657960581b60448201526064016106c9565b60006110dc84612138565b905060006110e98661221c565b905060008460405160200161110091815260200190565b60405160208183030381529060405290506000805b84518110156118b857600085828151811061113257611132612877565b6020026020010151905084518311156111a45760405162461bcd60e51b815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201526d0e8c2d840d6caf240d8cadccee8d60931b60648201526084016106c9565b8260000361124357805180516020918201206040516111f2926111cc92910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b61123e5760405162461bcd60e51b815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f74206861736800000060448201526064016106c9565b611339565b8051516020116112c9578051805160209182012060405161126d926111cc92910190815260200190565b61123e5760405162461bcd60e51b815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e6044820152660c2d840d0c2e6d60cb1b60648201526084016106c9565b8051845160208087019190912082519190920120146113395760405162461bcd60e51b815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f646044820152650ca40d0c2e6d60d31b60648201526084016106c9565b61134560106001612a39565b816020015151036114e0578451830361147857611372816020015160108151811061031f5761031f612877565b965060008751116113eb5760405162461bcd60e51b815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e636829000000000060648201526084016106c9565b600186516113f99190612a51565b821461146d5760405162461bcd60e51b815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e63682900000000000060648201526084016106c9565b50505050505061190f565b600085848151811061148c5761148c612877565b602001015160f81c60f81b60f81c9050600082602001518260ff16815181106114b7576114b7612877565b602002602001015190506114ca8161227f565b95506114d7600186612a39565b945050506118a5565b60028160200151510361184c5760006114f8826122a4565b905060008160008151811061150f5761150f612877565b016020015160f81c90506000611526600283612c9a565b611531906002612cbc565b90506000611542848360ff166122c8565b905060006115508a896122c8565b9050600061155e83836122fe565b9050808351146115d65760405162461bcd60e51b815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b657900000000000060648201526084016106c9565b60ff8516600214806115eb575060ff85166003145b1561178c57808251146116665760405162461bcd60e51b815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e64657200000060648201526084016106c9565b611680876020015160018151811061031f5761031f612877565b9c5060008d51116116f95760405162461bcd60e51b815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c656166290000000000000060648201526084016106c9565b60018c516117079190612a51565b881461177b5760405162461bcd60e51b815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c65616629000000000000000060648201526084016106c9565b50505050505050505050505061190f565b60ff8516158061179f575060ff85166001145b156117de576117cb87602001516001815181106117be576117be612877565b602002602001015161227f565b99506117d7818a612a39565b9850611841565b60405162461bcd60e51b815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f64652077697468604482015271040c2dc40eadcd6dcdeeedc40e0e4caccd2f60731b60648201526084016106c9565b5050505050506118a5565b60405162461bcd60e51b815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e706172736561604482015267626c65206e6f646560c01b60648201526084016106c9565b50806118b081612b0f565b915050611115565b5060405162461bcd60e51b815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c656044820152646d656e747360d81b60648201526084016106c9565b9392505050565b60008060008084600001511161193e5760405162461bcd60e51b81526004016106c99061299d565b6020840151805160001a607f8111611963576000600160009450945094505050611fd2565b60b78111611ac0576000611978608083612a51565b9050808760000151116119f85760405162461bcd60e51b815260206004820152604e6024820152600080516020612d0583398151915260448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201526d2873686f727420737472696e672960901b608482015260a4016106c9565b6001838101516001600160f81b0319169082141580611a255750600160ff1b6001600160f81b0319821610155b611aad5760405162461bcd60e51b815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201526c73686f727420737472696e672960981b608482015260a4016106c9565b5060019550935060009250611fd2915050565b60bf8111611d01576000611ad560b783612a51565b905080876000015111611b585760405162461bcd60e51b81526020600482015260516024820152600080516020612d0583398151915260448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527067746820286c6f6e6720737472696e672960781b608482015260a4016106c9565b60018301516001600160f81b0319166000819003611bdf5760405162461bcd60e51b815260206004820152604a6024820152600080516020612d0583398151915260448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f6064820152696e6720737472696e672960b01b608482015260a4016106c9565b600184015160088302610100031c60378111611c625760405162461bcd60e51b81526020600482015260486024820152600080516020612d0583398151915260448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201526720737472696e672960c01b608482015260a4016106c9565b611c6c8184612a39565b895111611ce45760405162461bcd60e51b815260206004820152604c6024820152600080516020612d0583398151915260448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201526b6c6f6e6720737472696e672960a01b608482015260a4016106c9565b611cef836001612a39565b9750955060009450611fd29350505050565b60f78111611da3576000611d1660c083612a51565b905080876000015111611d925760405162461bcd60e51b815260206004820152604a6024820152600080516020612d0583398151915260448201527f742062652067726561746572207468616e206c697374206c656e677468202873606482015269686f7274206c6973742960b01b608482015260a4016106c9565b600195509350849250611fd2915050565b6000611db060f783612a51565b905080876000015111611e2f5760405162461bcd60e51b815260206004820152604d6024820152600080516020612d0583398151915260448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201526c6820286c6f6e67206c6973742960981b608482015260a4016106c9565b60018301516001600160f81b0319166000819003611eb45760405162461bcd60e51b81526020600482015260486024820152600080516020612d0583398151915260448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f6064820152676e67206c6973742960c01b608482015260a4016106c9565b600184015160088302610100031c60378111611f355760405162461bcd60e51b81526020600482015260466024820152600080516020612d0583398151915260448201527f742062652067726561746572207468616e20353520627974657320286c6f6e67606482015265206c6973742960d01b608482015260a4016106c9565b611f3f8184612a39565b895111611fb55760405162461bcd60e51b815260206004820152604a6024820152600080516020612d0583398151915260448201527f742062652067726561746572207468616e20746f74616c206c656e67746820286064820152696c6f6e67206c6973742960b01b608482015260a4016106c9565b611fc0836001612a39565b9750955060019450611fd29350505050565b9193909250565b6060816001600160401b03811115611ff357611ff361275d565b6040519080825280601f01601f19166020018201604052801561201d576020820181803683370190505b509050811561190f5760006120328486612a39565b90506020820160005b8481101561205357828101518282015260200161203b565b84811115612062576000858301525b5050509392505050565b6060805b608083106120ae578083607f1660801760f81b604051602001612094929190612cdf565b60408051601f198184030190525260079290921c91612070565b808360f81b6040516020016120c4929190612cdf565b604051602081830303815290604052915050919050565b8282825b6020811061211757815183526120f6602084612a39565b9250612103602083612a39565b9150612110602082612a51565b90506120df565b905182516020929092036101000a6000190180199091169116179052505050565b8051606090806001600160401b038111156121555761215561275d565b60405190808252806020026020018201604052801561219a57816020015b60408051808201909152606080825260208201528152602001906001900390816121735790505b50915060005b81811015610c535760405180604001604052808583815181106121c5576121c5612877565b602002602001015181526020016121f48684815181106121e7576121e7612877565b602002602001015161237b565b81525083828151811061220957612209612877565b60209081029190910101526001016121a0565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015612274578060011b82018184015160001a8060041c8253600f811660018301535050600101612246565b509295945050505050565b6060602082600001511061229b5761229682610913565b610612565b61061282612389565b60606106126122c3836020015160008151811061031f5761031f612877565b61221c565b6060825182106122e75750604080516020810190915260008152610612565b61190f83838486516122f99190612a51565b61239f565b6000808251845110612311578251612314565b83515b90505b808210801561236b575082828151811061233357612333612877565b602001015160f81c60f81b6001600160f81b03191684838151811061235a5761235a612877565b01602001516001600160f81b031916145b15610c7757816001019150612317565b60606106126102c083610694565b6060610612826020015160008460000151611fd9565b60608182601f0110156123e55760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b60448201526064016106c9565b8282840110156124285760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b60448201526064016106c9565b8183018451101561246f5760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b60448201526064016106c9565b60608215801561248e57604051915060008252602082016040526124d8565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156124c75780518352602092830192016124af565b5050858452601f01601f1916604052505b50949350505050565b80356001600160401b038116811461066c57600080fd5b600080600080600060a0868803121561251057600080fd5b85356001600160401b038082111561252757600080fd5b908701906060828a03121561253b57600080fd5b9095506020870135908082111561255157600080fd5b5086016080818903121561256457600080fd5b93506040860135925060608601359150612580608087016124e1565b90509295509295909350565b60008083601f84011261259e57600080fd5b5081356001600160401b038111156125b557600080fd5b6020830191508360208285010111156125cd57600080fd5b9250929050565b6000604082840312156125e657600080fd5b50919050565b6000806000806060858703121561260257600080fd5b8435935060208501356001600160401b038082111561262057600080fd5b61262c8883890161258c565b9095509350604087013591508082111561264557600080fd5b50612652878288016125d4565b91505092959194509250565b6000806000806000806080878903121561267757600080fd5b8635955060208701356001600160401b038082111561269557600080fd5b6126a18a838b0161258c565b909750955060408901359150808211156126ba57600080fd5b6126c68a838b0161258c565b909550935060608901359150808211156126df57600080fd5b506126ec89828a016125d4565b9150509295509295509295565b60006020828403121561270b57600080fd5b61190f826124e1565b6000808335601e1984360301811261272b57600080fd5b8301803591506001600160401b0382111561274557600080fd5b6020019150600581901b36038213156125cd57600080fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561279b5761279b61275d565b604052919050565b60006001600160401b03808411156127bd576127bd61275d565b8360051b60206127ce818301612773565b8681529185019181810190368411156127e657600080fd5b865b8481101561286b578035868111156128005760008081fd5b8801601f36818301126128135760008081fd5b8135888111156128255761282561275d565b612836818301601f19168801612773565b9150808252368782850101111561284d5760008081fd5b808784018884013760009082018701528452509183019183016127e8565b50979650505050505050565b634e487b7160e01b600052603260045260246000fd5b6000808335601e198436030181126128a457600080fd5b8301803591506001600160401b038211156128be57600080fd5b6020019150368190038213156125cd57600080fd5b8183823760009101908152919050565b805160208083015191908110156125e65760001960209190910360031b1b16919050565b60008235607e1983360301811261291d57600080fd5b9190910192915050565b8035602083101561061257600019602084900360031b1b1692915050565b6000815160005b81811015612966576020818501810151868301520161294c565b81811115612975576000828601525b509290920192915050565b600061299561298f8386612945565b84612945565b949350505050565b6020808252604a908201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60408201527f206d7573742062652067726561746572207468616e207a65726f20746f206265606082015269206465636f6461626c6560b01b608082015260a00190565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008219821115612a4c57612a4c612a23565b500190565b600082821015612a6357612a63612a23565b500390565b600060208284031215612a7a57600080fd5b5051919050565b86888237600087820160008152612a988189612945565b9050858782376000908601908152612ab08186612945565b93845250506020909101979650505050505050565b600061190f8284612945565b60008235603e1983360301811261291d57600080fd5b8486823760008582018581528385602083013760009301602001928352509095945050505050565b600060018201612b2157612b21612a23565b5060010190565b600060ff821660ff84168060ff03821115612b4557612b45612a23565b019392505050565b634e487b7160e01b600052601260045260246000fd5b600082612b7257612b72612b4d565b500490565b6000816000190483118215151615612b9157612b91612a23565b500290565b600181815b80851115612bd1578160001904821115612bb757612bb7612a23565b80851615612bc457918102915b93841c9390800290612b9b565b509250929050565b600082612be857506001610612565b81612bf557506000610612565b8160018114612c0b5760028114612c1557612c31565b6001915050610612565b60ff841115612c2657612c26612a23565b50506001821b610612565b5060208310610133831016604e8410600b8410161715612c54575081810a610612565b612c5e8383612b96565b8060001904821115612c7257612c72612a23565b029392505050565b600061190f8383612bd9565b600082612c9557612c95612b4d565b500690565b600060ff831680612cad57612cad612b4d565b8060ff84160691505092915050565b600060ff821660ff841680821015612cd657612cd6612a23565b90039392505050565b6000612ceb8285612945565b6001600160f81b0319939093168352505060010191905056fe524c505265616465723a206c656e677468206f6620636f6e74656e74206d7573a264697066735822122018830d95528fb2202a63533ce34650d775eea51a38788746ec04f6baeecb141664736f6c634300080f0033"; + "0x60806040523480156200001157600080fd5b5060405162002dbc38038062002dbc83398101604081905262000034916200005a565b600080546001600160a01b0319166001600160a01b03929092169190911790556200008c565b6000602082840312156200006d57600080fd5b81516001600160a01b03811681146200008557600080fd5b9392505050565b612d20806200009c6000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80630a1bb8b5146100515780632a6ded741461006657806359c1b56b14610079578063c2f0329f146100a8575b600080fd5b61006461005f3660046124d6565b6100bb565b005b610064610074366004612582565b6103bb565b60005461008c906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b6100646100b63660046126d7565b6103d4565b6100cb606086016040870161274f565b6001600160401b0316816001600160401b0316146100fc57604051630fd8993960e21b815260040160405180910390fd5b610117610109868061276a565b610112916127ba565b61059c565b80519060200120821461013c5760405162fa512960e01b815260040160405180910390fd5b610146858061276a565b60088181106101575761015761283d565b90506020028101906101699190612853565b604051610177929190612899565b60405180910390206101a3866040016020810190610195919061274f565b6001600160401b03166105dd565b80519060200120146101c857604051633395483760e01b815260040160405180910390fd5b6101d2858061276a565b60038181106101e3576101e361283d565b90506020028101906101f59190612853565b604051610203929190612899565b6040518091039020610239866020013560405160200161022591815260200190565b6040516020818303038152906040526105f6565b805190602001201461025e576040516313d643bd60e21b815260040160405180910390fd5b6000805460405160609190911b6bffffffffffffffffffffffff191660208201526102c5906102c0906102bb9060340160408051601f198184030181529190526102a8898061276a565b6102b1916127ba565b8a6020013561064f565b610672565b6106ce565b9050600061033a86604001356040516020016102e391815260200190565b60408051601f19818403018152919052610300602089018961276a565b610309916127ba565b61032c8560028151811061031f5761031f61283d565b60200260200101516108f1565b610335906128a9565b61064f565b905061034d61034882610672565b6108f1565b610356906128a9565b6040805160006020820181905291810188905260608082019290925290880135608082015260a00160405160208183030381529060405280519060200120146103b2576040516330d26e5760e11b815260040160405180910390fd5b50505050505050565b604051632974974360e01b815260040160405180910390fd5b6103de818061276a565b60008181106103ef576103ef61283d565b905060200281019061040191906128cd565b61040f906020810190612853565b60405161041d929190612899565b604051809103902083805190602001201461044b5760405163026a287560e51b815260040160405180910390fd5b610455818061276a565b60008181106104665761046661283d565b905060200281019061047891906128cd565b610486906040810190612853565b604051610494929190612899565b60405180910390208280519060200120146104c2576040516310d9300f60e11b815260040160405180910390fd5b6104f76104cf828061276a565b60008181106104e0576104e061283d565b90506020028101906104f291906128cd565b610a14565b610501828061276a565b60018181106105125761051261283d565b905060200281019061052491906128cd565b610532906040810190612853565b61053b916128ed565b1461055957604051636589f0e160e11b815260040160405180910390fd5b610577610566828061276a565b60018181106104e0576104e061283d565b8414610596576040516392cb8fbb60e01b815260040160405180910390fd5b50505050565b60606105a782610c38565b90506105b5815160c0610d71565b816040516020016105c7929190612946565b6040516020818303038152906040529050919050565b60606105f06105eb83610f1c565b6105f6565b92915050565b60608151600114801561062357506080826000815181106106195761061961283d565b016020015160f81c105b1561062c575090565b61063882516080610d71565b826040516020016105c7929190612946565b919050565b6060600061065c85611048565b9050610669818585611064565b95945050505050565b604080518082019091526000808252602082015260008251116106b05760405162461bcd60e51b81526004016106a790612963565b60405180910390fd5b50604080518082019091528151815260209182019181019190915290565b606060008060006106de856118f4565b9194509250905060018160018111156106f9576106f96129d3565b1461076c5760405162461bcd60e51b815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d000000000000000060648201526084016106a7565b845161077883856129ff565b146107e05760405162461bcd60e51b815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e76616044820152713634b2103230ba30903932b6b0b4b73232b960711b60648201526084016106a7565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816107f75790505093506000835b86518110156108e55760008061086a6040518060400160405280858c6000015161084e9190612a17565b8152602001858c6020015161086391906129ff565b90526118f4565b50915091506040518060400160405280838361088691906129ff565b8152602001848b6020015161089b91906129ff565b8152508885815181106108b0576108b061283d565b60209081029190910101526108c66001856129ff565b93506108d281836129ff565b6108dc90846129ff565b92505050610824565b50845250919392505050565b60606000806000610901856118f4565b91945092509050600081600181111561091c5761091c6129d3565b1461098f5760405162461bcd60e51b815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d0000000000000060648201526084016106a7565b61099982846129ff565b855114610a055760405162461bcd60e51b815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527330b71034b73b30b634b2103932b6b0b4b73232b960611b60648201526084016106a7565b61066985602001518484611fb7565b6000806002610a266040850185612853565b604051610a34929190612899565b602060405180830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610a749190612a2e565b90506002610a856060850185612853565b610a9c610a956020880188612853565b905061204a565b610aa96020880188612853565b610ab3602061204a565b87604051602001610aca9796959493929190612a47565b60408051601f1981840301815290829052610ae491612a8b565b602060405180830381855afa158015610b01573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610b249190612a2e565b915060005b610b33848061276a565b9050811015610c31576002610b48858061276a565b83818110610b5857610b5861283d565b9050602002810190610b6a9190612a97565b610b749080612853565b85610b7f888061276a565b86818110610b8f57610b8f61283d565b9050602002810190610ba19190612a97565b610baf906020810190612853565b604051602001610bc3959493929190612aad565b60408051601f1981840301815290829052610bdd91612a8b565b602060405180830381855afa158015610bfa573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610c1d9190612a2e565b925080610c2981612ad5565b915050610b29565b5050919050565b60608151600003610c5c5760408051600080825260208201909252905b5092915050565b6000805b8351811015610ca357838181518110610c7b57610c7b61283d565b60200260200101515182610c8f91906129ff565b915080610c9b81612ad5565b915050610c60565b816001600160401b03811115610cbb57610cbb612622565b6040519080825280601f01601f191660200182016040528015610ce5576020820181803683370190505b50925060009050602083015b8451821015610d69576000858381518110610d0e57610d0e61283d565b602002602001015190506000602082019050610d2c838284516120b9565b868481518110610d3e57610d3e61283d565b60200260200101515183610d5291906129ff565b925050508180610d6190612ad5565b925050610cf1565b505050919050565b60606038831015610dd75760408051600180825281830190925290602082018180368337019050509050610da58284612aee565b60f81b81600081518110610dbb57610dbb61283d565b60200101906001600160f81b031916908160001a9053506105f0565b600060015b610de68186612b29565b15610e0c5781610df581612ad5565b9250610e05905061010082612b3d565b9050610ddc565b610e178260016129ff565b6001600160401b03811115610e2e57610e2e612622565b6040519080825280601f01601f191660200182016040528015610e58576020820181803683370190505b509250610e658483612aee565b610e70906037612aee565b60f81b83600081518110610e8657610e8661283d565b60200101906001600160f81b031916908160001a905350600190505b818111610f1457610100610eb68284612a17565b610ec290610100612c40565b610ecc9087612b29565b610ed69190612c4c565b60f81b838281518110610eeb57610eeb61283d565b60200101906001600160f81b031916908160001a90535080610f0c81612ad5565b915050610ea2565b505092915050565b6060600082604051602001610f3391815260200190565b604051602081830303815290604052905060005b6020811015610f8a57818181518110610f6257610f6261283d565b01602001516001600160f81b031916600003610f8a5780610f8281612ad5565b915050610f47565b610f95816020612a17565b6001600160401b03811115610fac57610fac612622565b6040519080825280601f01601f191660200182016040528015610fd6576020820181803683370190505b50925060005b8351811015610d69578282610ff081612ad5565b9350815181106110025761100261283d565b602001015160f81c60f81b84828151811061101f5761101f61283d565b60200101906001600160f81b031916908160001a9053508061104081612ad5565b915050610fdc565b606081805190602001206040516020016105c791815260200190565b606060008451116110af5760405162461bcd60e51b81526020600482015260156024820152744d65726b6c65547269653a20656d707479206b657960581b60448201526064016106a7565b60006110ba84612116565b905060006110c7866121fa565b90506000846040516020016110de91815260200190565b60405160208183030381529060405290506000805b84518110156118965760008582815181106111105761111061283d565b6020026020010151905084518311156111825760405162461bcd60e51b815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201526d0e8c2d840d6caf240d8cadccee8d60931b60648201526084016106a7565b8260000361122157805180516020918201206040516111d0926111aa92910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b61121c5760405162461bcd60e51b815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f74206861736800000060448201526064016106a7565b611317565b8051516020116112a7578051805160209182012060405161124b926111aa92910190815260200190565b61121c5760405162461bcd60e51b815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e6044820152660c2d840d0c2e6d60cb1b60648201526084016106a7565b8051845160208087019190912082519190920120146113175760405162461bcd60e51b815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f646044820152650ca40d0c2e6d60d31b60648201526084016106a7565b611323601060016129ff565b816020015151036114be578451830361145657611350816020015160108151811061031f5761031f61283d565b965060008751116113c95760405162461bcd60e51b815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e636829000000000060648201526084016106a7565b600186516113d79190612a17565b821461144b5760405162461bcd60e51b815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e63682900000000000060648201526084016106a7565b5050505050506118ed565b600085848151811061146a5761146a61283d565b602001015160f81c60f81b60f81c9050600082602001518260ff16815181106114955761149561283d565b602002602001015190506114a88161225d565b95506114b56001866129ff565b94505050611883565b60028160200151510361182a5760006114d682612282565b90506000816000815181106114ed576114ed61283d565b016020015160f81c90506000611504600283612c60565b61150f906002612c82565b90506000611520848360ff166122a6565b9050600061152e8a896122a6565b9050600061153c83836122dc565b9050808351146115b45760405162461bcd60e51b815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b657900000000000060648201526084016106a7565b60ff8516600214806115c9575060ff85166003145b1561176a57808251146116445760405162461bcd60e51b815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e64657200000060648201526084016106a7565b61165e876020015160018151811061031f5761031f61283d565b9c5060008d51116116d75760405162461bcd60e51b815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c656166290000000000000060648201526084016106a7565b60018c516116e59190612a17565b88146117595760405162461bcd60e51b815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c65616629000000000000000060648201526084016106a7565b5050505050505050505050506118ed565b60ff8516158061177d575060ff85166001145b156117bc576117a9876020015160018151811061179c5761179c61283d565b602002602001015161225d565b99506117b5818a6129ff565b985061181f565b60405162461bcd60e51b815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f64652077697468604482015271040c2dc40eadcd6dcdeeedc40e0e4caccd2f60731b60648201526084016106a7565b505050505050611883565b60405162461bcd60e51b815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e706172736561604482015267626c65206e6f646560c01b60648201526084016106a7565b508061188e81612ad5565b9150506110f3565b5060405162461bcd60e51b815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c656044820152646d656e747360d81b60648201526084016106a7565b9392505050565b60008060008084600001511161191c5760405162461bcd60e51b81526004016106a790612963565b6020840151805160001a607f8111611941576000600160009450945094505050611fb0565b60b78111611a9e576000611956608083612a17565b9050808760000151116119d65760405162461bcd60e51b815260206004820152604e6024820152600080516020612ccb83398151915260448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201526d2873686f727420737472696e672960901b608482015260a4016106a7565b6001838101516001600160f81b0319169082141580611a035750600160ff1b6001600160f81b0319821610155b611a8b5760405162461bcd60e51b815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201526c73686f727420737472696e672960981b608482015260a4016106a7565b5060019550935060009250611fb0915050565b60bf8111611cdf576000611ab360b783612a17565b905080876000015111611b365760405162461bcd60e51b81526020600482015260516024820152600080516020612ccb83398151915260448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527067746820286c6f6e6720737472696e672960781b608482015260a4016106a7565b60018301516001600160f81b0319166000819003611bbd5760405162461bcd60e51b815260206004820152604a6024820152600080516020612ccb83398151915260448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f6064820152696e6720737472696e672960b01b608482015260a4016106a7565b600184015160088302610100031c60378111611c405760405162461bcd60e51b81526020600482015260486024820152600080516020612ccb83398151915260448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201526720737472696e672960c01b608482015260a4016106a7565b611c4a81846129ff565b895111611cc25760405162461bcd60e51b815260206004820152604c6024820152600080516020612ccb83398151915260448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201526b6c6f6e6720737472696e672960a01b608482015260a4016106a7565b611ccd8360016129ff565b9750955060009450611fb09350505050565b60f78111611d81576000611cf460c083612a17565b905080876000015111611d705760405162461bcd60e51b815260206004820152604a6024820152600080516020612ccb83398151915260448201527f742062652067726561746572207468616e206c697374206c656e677468202873606482015269686f7274206c6973742960b01b608482015260a4016106a7565b600195509350849250611fb0915050565b6000611d8e60f783612a17565b905080876000015111611e0d5760405162461bcd60e51b815260206004820152604d6024820152600080516020612ccb83398151915260448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201526c6820286c6f6e67206c6973742960981b608482015260a4016106a7565b60018301516001600160f81b0319166000819003611e925760405162461bcd60e51b81526020600482015260486024820152600080516020612ccb83398151915260448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f6064820152676e67206c6973742960c01b608482015260a4016106a7565b600184015160088302610100031c60378111611f135760405162461bcd60e51b81526020600482015260466024820152600080516020612ccb83398151915260448201527f742062652067726561746572207468616e20353520627974657320286c6f6e67606482015265206c6973742960d01b608482015260a4016106a7565b611f1d81846129ff565b895111611f935760405162461bcd60e51b815260206004820152604a6024820152600080516020612ccb83398151915260448201527f742062652067726561746572207468616e20746f74616c206c656e67746820286064820152696c6f6e67206c6973742960b01b608482015260a4016106a7565b611f9e8360016129ff565b9750955060019450611fb09350505050565b9193909250565b6060816001600160401b03811115611fd157611fd1612622565b6040519080825280601f01601f191660200182016040528015611ffb576020820181803683370190505b50905081156118ed57600061201084866129ff565b90506020820160005b84811015612031578281015182820152602001612019565b84811115612040576000858301525b5050509392505050565b6060805b6080831061208c578083607f1660801760f81b604051602001612072929190612ca5565b60408051601f198184030190525260079290921c9161204e565b808360f81b6040516020016120a2929190612ca5565b604051602081830303815290604052915050919050565b8282825b602081106120f557815183526120d46020846129ff565b92506120e16020836129ff565b91506120ee602082612a17565b90506120bd565b905182516020929092036101000a6000190180199091169116179052505050565b8051606090806001600160401b0381111561213357612133612622565b60405190808252806020026020018201604052801561217857816020015b60408051808201909152606080825260208201528152602001906001900390816121515790505b50915060005b81811015610c315760405180604001604052808583815181106121a3576121a361283d565b602002602001015181526020016121d28684815181106121c5576121c561283d565b6020026020010151612359565b8152508382815181106121e7576121e761283d565b602090810291909101015260010161217e565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015612252578060011b82018184015160001a8060041c8253600f811660018301535050600101612224565b509295945050505050565b6060602082600001511061227957612274826108f1565b6105f0565b6105f082612367565b60606105f06122a1836020015160008151811061031f5761031f61283d565b6121fa565b6060825182106122c557506040805160208101909152600081526105f0565b6118ed83838486516122d79190612a17565b61237d565b60008082518451106122ef5782516122f2565b83515b90505b808210801561234957508282815181106123115761231161283d565b602001015160f81c60f81b6001600160f81b0319168483815181106123385761233861283d565b01602001516001600160f81b031916145b15610c55578160010191506122f5565b60606105f06102c083610672565b60606105f0826020015160008460000151611fb7565b60608182601f0110156123c35760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b60448201526064016106a7565b8282840110156124065760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b60448201526064016106a7565b8183018451101561244d5760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b60448201526064016106a7565b60608215801561246c57604051915060008252602082016040526124b6565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156124a557805183526020928301920161248d565b5050858452601f01601f1916604052505b50949350505050565b80356001600160401b038116811461064a57600080fd5b600080600080600060a086880312156124ee57600080fd5b85356001600160401b038082111561250557600080fd5b908701906060828a03121561251957600080fd5b9095506020870135908082111561252f57600080fd5b5086016080818903121561254257600080fd5b9350604086013592506060860135915061255e608087016124bf565b90509295509295909350565b60006040828403121561257c57600080fd5b50919050565b6000806000806060858703121561259857600080fd5b8435935060208501356001600160401b03808211156125b657600080fd5b818701915087601f8301126125ca57600080fd5b8135818111156125d957600080fd5b8860208285010111156125eb57600080fd5b60208301955080945050604087013591508082111561260957600080fd5b506126168782880161256a565b91505092959194509250565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561266057612660612622565b604052919050565b600082601f83011261267957600080fd5b81356001600160401b0381111561269257612692612622565b6126a5601f8201601f1916602001612638565b8181528460208386010111156126ba57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080608085870312156126ed57600080fd5b8435935060208501356001600160401b038082111561270b57600080fd5b61271788838901612668565b9450604087013591508082111561272d57600080fd5b61273988838901612668565b9350606087013591508082111561260957600080fd5b60006020828403121561276157600080fd5b6118ed826124bf565b6000808335601e1984360301811261278157600080fd5b8301803591506001600160401b0382111561279b57600080fd5b6020019150600581901b36038213156127b357600080fd5b9250929050565b60006001600160401b03808411156127d4576127d4612622565b8360051b60206127e5818301612638565b8681529185019181810190368411156127fd57600080fd5b865b84811015612831578035868111156128175760008081fd5b61282336828b01612668565b8452509183019183016127ff565b50979650505050505050565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261286a57600080fd5b8301803591506001600160401b0382111561288457600080fd5b6020019150368190038213156127b357600080fd5b8183823760009101908152919050565b8051602080830151919081101561257c5760001960209190910360031b1b16919050565b60008235607e198336030181126128e357600080fd5b9190910192915050565b803560208310156105f057600019602084900360031b1b1692915050565b6000815160005b8181101561292c5760208185018101518683015201612912565b8181111561293b576000828601525b509290920192915050565b600061295b612955838661290b565b8461290b565b949350505050565b6020808252604a908201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60408201527f206d7573742062652067726561746572207468616e207a65726f20746f206265606082015269206465636f6461626c6560b01b608082015260a00190565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008219821115612a1257612a126129e9565b500190565b600082821015612a2957612a296129e9565b500390565b600060208284031215612a4057600080fd5b5051919050565b86888237600087820160008152612a5e818961290b565b9050858782376000908601908152612a76818661290b565b93845250506020909101979650505050505050565b60006118ed828461290b565b60008235603e198336030181126128e357600080fd5b8486823760008582018581528385602083013760009301602001928352509095945050505050565b600060018201612ae757612ae76129e9565b5060010190565b600060ff821660ff84168060ff03821115612b0b57612b0b6129e9565b019392505050565b634e487b7160e01b600052601260045260246000fd5b600082612b3857612b38612b13565b500490565b6000816000190483118215151615612b5757612b576129e9565b500290565b600181815b80851115612b97578160001904821115612b7d57612b7d6129e9565b80851615612b8a57918102915b93841c9390800290612b61565b509250929050565b600082612bae575060016105f0565b81612bbb575060006105f0565b8160018114612bd15760028114612bdb57612bf7565b60019150506105f0565b60ff841115612bec57612bec6129e9565b50506001821b6105f0565b5060208310610133831016604e8410600b8410161715612c1a575081810a6105f0565b612c248383612b5c565b8060001904821115612c3857612c386129e9565b029392505050565b60006118ed8383612b9f565b600082612c5b57612c5b612b13565b500690565b600060ff831680612c7357612c73612b13565b8060ff84160691505092915050565b600060ff821660ff841680821015612c9c57612c9c6129e9565b90039392505050565b6000612cb1828561290b565b6001600160f81b0319939093168352505060010191905056fe524c505265616465723a206c656e677468206f6620636f6e74656e74206d7573a2646970667358221220fb8e29dff6159739a353fd93595a1fe296c193761fc56f765c8a05f62590e2ad64736f6c634300080f0033"; type OptimisticProofVerifierConstructorParams = | [signer?: Signer] diff --git a/src/evm/contracts/factories/SequencerSignatureVerifier__factory.ts b/src/evm/contracts/factories/SequencerSignatureVerifier__factory.ts index a763ff53..f2fc9b1e 100644 --- a/src/evm/contracts/factories/SequencerSignatureVerifier__factory.ts +++ b/src/evm/contracts/factories/SequencerSignatureVerifier__factory.ts @@ -292,7 +292,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60c060405234801561001057600080fd5b50604051610e39380380610e3983398101604081905261002f91610045565b6001600160a01b0390911660805260a05261007f565b6000806040838503121561005857600080fd5b82516001600160a01b038116811461006f57600080fd5b6020939093015192949293505050565b60805160a051610d896100b06000396000818160ba0152610584015260008181607601526105ee0152610d896000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80632a6ded741461005c57806375fd4ca91461007157806385e1f4d0146100b5578063c2f0329f146100ea578063e8d90039146100fd575b600080fd5b61006f61006a3660046109a3565b610110565b005b6100987f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6100dc7f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020016100ac565b61006f6100f8366004610a16565b610129565b61006f61010b366004610ab2565b610313565b604051632974974360e01b815260040160405180910390fd5b6101338180610b13565b600081811061014457610144610b5d565b90506020028101906101569190610b73565b610164906020810190610b93565b604051610172929190610bda565b6040518091039020858560405161018a929190610bda565b6040518091039020146101b05760405163026a287560e51b815260040160405180910390fd5b6101ba8180610b13565b60008181106101cb576101cb610b5d565b90506020028101906101dd9190610b73565b6101eb906040810190610b93565b6040516101f9929190610bda565b60405180910390208383604051610211929190610bda565b604051809103902014610237576040516310d9300f60e11b815260040160405180910390fd5b61026c6102448280610b13565b600081811061025557610255610b5d565b90506020028101906102679190610b73565b610327565b6102768280610b13565b600181811061028757610287610b5d565b90506020028101906102999190610b73565b6102a7906040810190610b93565b6102b091610bea565b146102ce57604051636589f0e160e11b815260040160405180910390fd5b6102ec6102db8280610b13565b600181811061025557610255610b5d565b861461030b576040516392cb8fbb60e01b815260040160405180910390fd5b505050505050565b610320858585858561054b565b5050505050565b60008060026103396040850185610b93565b604051610347929190610bda565b602060405180830381855afa158015610364573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906103879190610c08565b905060026103986060850185610b93565b6103af6103a86020880188610b93565b9050610659565b6103bc6020880188610b93565b6103c66020610659565b876040516020016103dd9796959493929190610c5c565b60408051601f19818403018152908290526103f791610ca0565b602060405180830381855afa158015610414573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906104379190610c08565b915060005b6104468480610b13565b905081101561054457600261045b8580610b13565b8381811061046b5761046b610b5d565b905060200281019061047d9190610cb3565b6104879080610b93565b856104928880610b13565b868181106104a2576104a2610b5d565b90506020028101906104b49190610cb3565b6104c2906020810190610b93565b6040516020016104d6959493929190610cc9565b60408051601f19818403018152908290526104f091610ca0565b602060405180830381855afa15801561050d573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906105309190610c08565b92508061053c81610cf1565b91505061043c565b5050919050565b604080516020808201889052818301879052606080830187905283518084039091018152608083018452805190820120600060a08401527f000000000000000000000000000000000000000000000000000000000000000060c084015260e080840191909152835180840390910181526101008301808552815191830191909120601f860183900490920283016101209081019094528481526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169361063293879187918291018382808284376000920191909152506106c892505050565b6001600160a01b031614610320576040516339e27c8560e21b815260040160405180910390fd5b6060805b6080831061069b578083607f1660801760f81b604051602001610681929190610d18565b60408051601f198184030190525260079290921c9161065d565b808360f81b6040516020016106b1929190610d18565b604051602081830303815290604052915050919050565b60008060006106d785856106ee565b915091506106e481610733565b5090505b92915050565b60008082516041036107245760208301516040840151606085015160001a61071887828585610885565b9450945050505061072c565b506000905060025b9250929050565b600081600481111561074757610747610d3d565b0361074f5750565b600181600481111561076357610763610d3d565b036107b55760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b60028160048111156107c9576107c9610d3d565b036108165760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016107ac565b600381600481111561082a5761082a610d3d565b036108825760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016107ac565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156108bc5750600090506003610940565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610910573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661093957600060019250925050610940565b9150600090505b94509492505050565b60008083601f84011261095b57600080fd5b50813567ffffffffffffffff81111561097357600080fd5b60208301915083602082850101111561072c57600080fd5b60006040828403121561099d57600080fd5b50919050565b600080600080606085870312156109b957600080fd5b84359350602085013567ffffffffffffffff808211156109d857600080fd5b6109e488838901610949565b909550935060408701359150808211156109fd57600080fd5b50610a0a8782880161098b565b91505092959194509250565b60008060008060008060808789031215610a2f57600080fd5b86359550602087013567ffffffffffffffff80821115610a4e57600080fd5b610a5a8a838b01610949565b90975095506040890135915080821115610a7357600080fd5b610a7f8a838b01610949565b90955093506060890135915080821115610a9857600080fd5b50610aa589828a0161098b565b9150509295509295509295565b600080600080600060808688031215610aca57600080fd5b853594506020860135935060408601359250606086013567ffffffffffffffff811115610af657600080fd5b610b0288828901610949565b969995985093965092949392505050565b6000808335601e19843603018112610b2a57600080fd5b83018035915067ffffffffffffffff821115610b4557600080fd5b6020019150600581901b360382131561072c57600080fd5b634e487b7160e01b600052603260045260246000fd5b60008235607e19833603018112610b8957600080fd5b9190910192915050565b6000808335601e19843603018112610baa57600080fd5b83018035915067ffffffffffffffff821115610bc557600080fd5b60200191503681900382131561072c57600080fd5b8183823760009101908152919050565b803560208310156106e857600019602084900360031b1b1692915050565b600060208284031215610c1a57600080fd5b5051919050565b6000815160005b81811015610c425760208185018101518683015201610c28565b81811115610c51576000828601525b509290920192915050565b86888237600087820160008152610c738189610c21565b9050858782376000908601908152610c8b8186610c21565b93845250506020909101979650505050505050565b6000610cac8284610c21565b9392505050565b60008235603e19833603018112610b8957600080fd5b8486823760008582018581528385602083013760009301602001928352509095945050505050565b600060018201610d1157634e487b7160e01b600052601160045260246000fd5b5060010190565b6000610d248285610c21565b6001600160f81b03199390931683525050600101919050565b634e487b7160e01b600052602160045260246000fdfea2646970667358221220fa89b329a79580f1febe5413c0bb8912ab9cb891a3e8ca344fb2e44cad4b41b464736f6c634300080f0033"; + "0x60c060405234801561001057600080fd5b50604051610e97380380610e9783398101604081905261002f91610045565b6001600160a01b0390911660805260a05261007f565b6000806040838503121561005857600080fd5b82516001600160a01b038116811461006f57600080fd5b6020939093015192949293505050565b60805160a051610de76100b06000396000818160ba0152610562015260008181607601526105cc0152610de76000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80632a6ded741461005c57806375fd4ca91461007157806385e1f4d0146100b5578063c2f0329f146100ea578063e8d90039146100fd575b600080fd5b61006f61006a366004610981565b610110565b005b6100987f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6100dc7f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020016100ac565b61006f6100f8366004610a97565b610129565b61006f61010b366004610b10565b6102f1565b604051632974974360e01b815260040160405180910390fd5b6101338180610b71565b600081811061014457610144610bbb565b90506020028101906101569190610bd1565b610164906020810190610bf1565b604051610172929190610c38565b60405180910390208380519060200120146101a05760405163026a287560e51b815260040160405180910390fd5b6101aa8180610b71565b60008181106101bb576101bb610bbb565b90506020028101906101cd9190610bd1565b6101db906040810190610bf1565b6040516101e9929190610c38565b6040518091039020828051906020012014610217576040516310d9300f60e11b815260040160405180910390fd5b61024c6102248280610b71565b600081811061023557610235610bbb565b90506020028101906102479190610bd1565b610305565b6102568280610b71565b600181811061026757610267610bbb565b90506020028101906102799190610bd1565b610287906040810190610bf1565b61029091610c48565b146102ae57604051636589f0e160e11b815260040160405180910390fd5b6102cc6102bb8280610b71565b600181811061023557610235610bbb565b84146102eb576040516392cb8fbb60e01b815260040160405180910390fd5b50505050565b6102fe8585858585610529565b5050505050565b60008060026103176040850185610bf1565b604051610325929190610c38565b602060405180830381855afa158015610342573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906103659190610c66565b905060026103766060850185610bf1565b61038d6103866020880188610bf1565b9050610637565b61039a6020880188610bf1565b6103a46020610637565b876040516020016103bb9796959493929190610cba565b60408051601f19818403018152908290526103d591610cfe565b602060405180830381855afa1580156103f2573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906104159190610c66565b915060005b6104248480610b71565b90508110156105225760026104398580610b71565b8381811061044957610449610bbb565b905060200281019061045b9190610d11565b6104659080610bf1565b856104708880610b71565b8681811061048057610480610bbb565b90506020028101906104929190610d11565b6104a0906020810190610bf1565b6040516020016104b4959493929190610d27565b60408051601f19818403018152908290526104ce91610cfe565b602060405180830381855afa1580156104eb573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061050e9190610c66565b92508061051a81610d4f565b91505061041a565b5050919050565b604080516020808201889052818301879052606080830187905283518084039091018152608083018452805190820120600060a08401527f000000000000000000000000000000000000000000000000000000000000000060c084015260e080840191909152835180840390910181526101008301808552815191830191909120601f860183900490920283016101209081019094528481526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169361061093879187918291018382808284376000920191909152506106a692505050565b6001600160a01b0316146102fe576040516339e27c8560e21b815260040160405180910390fd5b6060805b60808310610679578083607f1660801760f81b60405160200161065f929190610d76565b60408051601f198184030190525260079290921c9161063b565b808360f81b60405160200161068f929190610d76565b604051602081830303815290604052915050919050565b60008060006106b585856106cc565b915091506106c281610711565b5090505b92915050565b60008082516041036107025760208301516040840151606085015160001a6106f687828585610863565b9450945050505061070a565b506000905060025b9250929050565b600081600481111561072557610725610d9b565b0361072d5750565b600181600481111561074157610741610d9b565b036107935760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b60028160048111156107a7576107a7610d9b565b036107f45760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161078a565b600381600481111561080857610808610d9b565b036108605760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b606482015260840161078a565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561089a575060009050600361091e565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156108ee573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166109175760006001925092505061091e565b9150600090505b94509492505050565b60008083601f84011261093957600080fd5b50813567ffffffffffffffff81111561095157600080fd5b60208301915083602082850101111561070a57600080fd5b60006040828403121561097b57600080fd5b50919050565b6000806000806060858703121561099757600080fd5b84359350602085013567ffffffffffffffff808211156109b657600080fd5b6109c288838901610927565b909550935060408701359150808211156109db57600080fd5b506109e887828801610969565b91505092959194509250565b634e487b7160e01b600052604160045260246000fd5b600082601f830112610a1b57600080fd5b813567ffffffffffffffff80821115610a3657610a366109f4565b604051601f8301601f19908116603f01168101908282118183101715610a5e57610a5e6109f4565b81604052838152866020858801011115610a7757600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060008060808587031215610aad57600080fd5b84359350602085013567ffffffffffffffff80821115610acc57600080fd5b610ad888838901610a0a565b94506040870135915080821115610aee57600080fd5b610afa88838901610a0a565b935060608701359150808211156109db57600080fd5b600080600080600060808688031215610b2857600080fd5b853594506020860135935060408601359250606086013567ffffffffffffffff811115610b5457600080fd5b610b6088828901610927565b969995985093965092949392505050565b6000808335601e19843603018112610b8857600080fd5b83018035915067ffffffffffffffff821115610ba357600080fd5b6020019150600581901b360382131561070a57600080fd5b634e487b7160e01b600052603260045260246000fd5b60008235607e19833603018112610be757600080fd5b9190910192915050565b6000808335601e19843603018112610c0857600080fd5b83018035915067ffffffffffffffff821115610c2357600080fd5b60200191503681900382131561070a57600080fd5b8183823760009101908152919050565b803560208310156106c657600019602084900360031b1b1692915050565b600060208284031215610c7857600080fd5b5051919050565b6000815160005b81811015610ca05760208185018101518683015201610c86565b81811115610caf576000828601525b509290920192915050565b86888237600087820160008152610cd18189610c7f565b9050858782376000908601908152610ce98186610c7f565b93845250506020909101979650505050505050565b6000610d0a8284610c7f565b9392505050565b60008235603e19833603018112610be757600080fd5b8486823760008582018581528385602083013760009301602001928352509095945050505050565b600060018201610d6f57634e487b7160e01b600052601160045260246000fd5b5060010190565b6000610d828285610c7f565b6001600160f81b03199390931683525050600101919050565b634e487b7160e01b600052602160045260246000fdfea26469706673582212204c92df476c295d7ae35dea3637cddf13ac44da4b35b87bc3ab88c3db6aef94bf64736f6c634300080f0033"; type SequencerSignatureVerifierConstructorParams = | [signer?: Signer] diff --git a/src/evm/contracts/factories/SequencerSoloClient__factory.ts b/src/evm/contracts/factories/SequencerSoloClient__factory.ts index 7451976c..f0935ff0 100644 --- a/src/evm/contracts/factories/SequencerSoloClient__factory.ts +++ b/src/evm/contracts/factories/SequencerSoloClient__factory.ts @@ -303,7 +303,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60c06040526000805460ff1916600217905534801561001d57600080fd5b50604051610a88380380610a8883398101604081905261003c9161006b565b6001600160a01b039182166080521660a0526100a5565b6001600160a01b038116811461006857600080fd5b50565b6000806040838503121561007e57600080fd5b825161008981610053565b602084015190925061009a81610053565b809150509250929050565b60805160a0516109aa6100de6000396000818161015401526101b801526000818160c501528181610272015261038701526109aa6000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c806357c1c5f41161005b57806357c1c5f414610127578063cb535ab51461013c578063eb7720581461014f578063fdaab4e51461017657600080fd5b80631b738a221461008d5780632b7ac3f3146100c057806344c9af28146100ff57806349ff245e14610112575b600080fd5b6100ad61009b366004610438565b60016020526000908152604090205481565b6040519081526020015b60405180910390f35b6100e77f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100b7565b6100ad61010d366004610438565b610189565b61012561012036600461049a565b61019f565b005b61012f600281565b6040516100b791906104eb565b61012561014a36600461052b565b610268565b6100e77f000000000000000000000000000000000000000000000000000000000000000081565b6101256101843660046105c0565b61031d565b6000818152600160205260408120545b92915050565b6101ad602060008587610629565b6101b691610653565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166309bd5a606040518163ffffffff1660e01b8152600401602060405180830381865afa158015610214573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102389190610671565b1461025657604051632b56254960e01b815260040160405180910390fd5b61026284848484610336565b50505050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663c2f0329f6102bb6102a9600160208a013561068a565b60009081526001602052604090205490565b6040516001600160e01b031960e084901b1681526102e6919088908890889088908d90600401610767565b60006040518083038186803b1580156102fe57600080fd5b505afa158015610312573d6000803e3d6000fd5b505050505050505050565b604051634dfb272b60e11b815260040160405180910390fd5b6000828152600160205260409020541561037d57600082815260016020526040902054811461037857604051631549535560e01b815260040160405180910390fd5b610262565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663e8d9003983836103bc60206000898b610629565b6103c591610653565b6103d2886020818c610629565b6040518663ffffffff1660e01b81526004016103f2959493929190610943565b600060405180830381600087803b15801561040c57600080fd5b505af1158015610420573d6000803e3d6000fd5b50505060009283525060016020526040909120555050565b60006020828403121561044a57600080fd5b5035919050565b60008083601f84011261046357600080fd5b50813567ffffffffffffffff81111561047b57600080fd5b60208301915083602082850101111561049357600080fd5b9250929050565b600080600080606085870312156104b057600080fd5b843567ffffffffffffffff8111156104c757600080fd5b6104d387828801610451565b90989097506020870135966040013595509350505050565b602081016003831061050d57634e487b7160e01b600052602160045260246000fd5b91905290565b60006040828403121561052557600080fd5b50919050565b60008060008060006060868803121561054357600080fd5b853567ffffffffffffffff8082111561055b57600080fd5b61056789838a01610513565b9650602088013591508082111561057d57600080fd5b61058989838a01610451565b909650945060408801359150808211156105a257600080fd5b506105af88828901610451565b969995985093965092949392505050565b6000806000604084860312156105d557600080fd5b833567ffffffffffffffff808211156105ed57600080fd5b6105f987838801610513565b9450602086013591508082111561060f57600080fd5b5061061c86828701610451565b9497909650939450505050565b6000808585111561063957600080fd5b8386111561064657600080fd5b5050820193919092039150565b8035602083101561019957600019602084900360031b1b1692915050565b60006020828403121561068357600080fd5b5051919050565b6000828210156106aa57634e487b7160e01b600052601160045260246000fd5b500390565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6000808335601e198436030181126106ef57600080fd5b830160208101925035905067ffffffffffffffff81111561070f57600080fd5b8060051b360382131561049357600080fd5b6000808335601e1984360301811261073857600080fd5b830160208101925035905067ffffffffffffffff81111561075857600080fd5b80360382131561049357600080fd5b8681526080602082015260006107816080830187896106af565b82810360408401526107948186886106af565b905082810360608401526107a884856106d8565b604083526040830181815260608401905060608260051b8501018360005b8481101561092457868303605f1901845236869003607e19018235126107eb57600080fd5b858235016107f981826106d8565b608086526080860181815260a08701905060a08260051b8801018360005b8481101561089a57898303609f1901845236869003603e190182351261083c57600080fd5b8582350161084a8182610721565b6040865261085c6040870182846106af565b91505061086c6020830183610721565b925085820360208701526108818284836106af565b6020978801979096509490940193505050600101610817565b50506108a96020860186610721565b9450925087810360208901526108c08185856106af565b93505050506108d26040830183610721565b86830360408801526108e58382846106af565b925050506108f66060830183610721565b9250858203606087015261090b8284836106af565b60209788019790965094909401935050506001016107c6565b5050602088013560208601528095505050505050979650505050505050565b8581528460208201528360408201526080606082015260006109696080830184866106af565b97965050505050505056fea2646970667358221220b47ba4090acd6cbc3c0fdd2515a036c0fb41d8fb506c1f7dcd2d63664ac2065f64736f6c634300080f0033"; + "0x60c06040526000805460ff1916600217905534801561001d57600080fd5b50604051610a88380380610a8883398101604081905261003c9161006b565b6001600160a01b039182166080521660a0526100a5565b6001600160a01b038116811461006857600080fd5b50565b6000806040838503121561007e57600080fd5b825161008981610053565b602084015190925061009a81610053565b809150509250929050565b60805160a0516109aa6100de6000396000818161015401526101b801526000818160c501528181610272015261038701526109aa6000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c806357c1c5f41161005b57806357c1c5f414610127578063cb535ab51461013c578063eb7720581461014f578063fdaab4e51461017657600080fd5b80631b738a221461008d5780632b7ac3f3146100c057806344c9af28146100ff57806349ff245e14610112575b600080fd5b6100ad61009b366004610438565b60016020526000908152604090205481565b6040519081526020015b60405180910390f35b6100e77f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100b7565b6100ad61010d366004610438565b610189565b61012561012036600461049a565b61019f565b005b61012f600281565b6040516100b791906104eb565b61012561014a36600461052b565b610268565b6100e77f000000000000000000000000000000000000000000000000000000000000000081565b6101256101843660046105c0565b61031d565b6000818152600160205260408120545b92915050565b6101ad602060008587610629565b6101b691610653565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166309bd5a606040518163ffffffff1660e01b8152600401602060405180830381865afa158015610214573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102389190610671565b1461025657604051632b56254960e01b815260040160405180910390fd5b61026284848484610336565b50505050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663c2f0329f6102bb6102a9600160208a013561068a565b60009081526001602052604090205490565b6040516001600160e01b031960e084901b1681526102e6919088908890889088908d90600401610767565b60006040518083038186803b1580156102fe57600080fd5b505afa158015610312573d6000803e3d6000fd5b505050505050505050565b604051634dfb272b60e11b815260040160405180910390fd5b6000828152600160205260409020541561037d57600082815260016020526040902054811461037857604051631549535560e01b815260040160405180910390fd5b610262565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663e8d9003983836103bc60206000898b610629565b6103c591610653565b6103d2886020818c610629565b6040518663ffffffff1660e01b81526004016103f2959493929190610943565b600060405180830381600087803b15801561040c57600080fd5b505af1158015610420573d6000803e3d6000fd5b50505060009283525060016020526040909120555050565b60006020828403121561044a57600080fd5b5035919050565b60008083601f84011261046357600080fd5b50813567ffffffffffffffff81111561047b57600080fd5b60208301915083602082850101111561049357600080fd5b9250929050565b600080600080606085870312156104b057600080fd5b843567ffffffffffffffff8111156104c757600080fd5b6104d387828801610451565b90989097506020870135966040013595509350505050565b602081016004831061050d57634e487b7160e01b600052602160045260246000fd5b91905290565b60006040828403121561052557600080fd5b50919050565b60008060008060006060868803121561054357600080fd5b853567ffffffffffffffff8082111561055b57600080fd5b61056789838a01610513565b9650602088013591508082111561057d57600080fd5b61058989838a01610451565b909650945060408801359150808211156105a257600080fd5b506105af88828901610451565b969995985093965092949392505050565b6000806000604084860312156105d557600080fd5b833567ffffffffffffffff808211156105ed57600080fd5b6105f987838801610513565b9450602086013591508082111561060f57600080fd5b5061061c86828701610451565b9497909650939450505050565b6000808585111561063957600080fd5b8386111561064657600080fd5b5050820193919092039150565b8035602083101561019957600019602084900360031b1b1692915050565b60006020828403121561068357600080fd5b5051919050565b6000828210156106aa57634e487b7160e01b600052601160045260246000fd5b500390565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6000808335601e198436030181126106ef57600080fd5b830160208101925035905067ffffffffffffffff81111561070f57600080fd5b8060051b360382131561049357600080fd5b6000808335601e1984360301811261073857600080fd5b830160208101925035905067ffffffffffffffff81111561075857600080fd5b80360382131561049357600080fd5b8681526080602082015260006107816080830187896106af565b82810360408401526107948186886106af565b905082810360608401526107a884856106d8565b604083526040830181815260608401905060608260051b8501018360005b8481101561092457868303605f1901845236869003607e19018235126107eb57600080fd5b858235016107f981826106d8565b608086526080860181815260a08701905060a08260051b8801018360005b8481101561089a57898303609f1901845236869003603e190182351261083c57600080fd5b8582350161084a8182610721565b6040865261085c6040870182846106af565b91505061086c6020830183610721565b925085820360208701526108818284836106af565b6020978801979096509490940193505050600101610817565b50506108a96020860186610721565b9450925087810360208901526108c08185856106af565b93505050506108d26040830183610721565b86830360408801526108e58382846106af565b925050506108f66060830183610721565b9250858203606087015261090b8284836106af565b60209788019790965094909401935050506001016107c6565b5050602088013560208601528095505050505050979650505050505050565b8581528460208201528360408201526080606082015260006109696080830184866106af565b97965050505050505056fea2646970667358221220178d9c71cb5f03aa7d679a7dc3f7607e60e005b50fb7c0389482c8a3f144ee7664736f6c634300080f0033"; type SequencerSoloClientConstructorParams = | [signer?: Signer] diff --git a/src/evm/contracts/factories/index.ts b/src/evm/contracts/factories/index.ts index f833556f..df8c5494 100644 --- a/src/evm/contracts/factories/index.ts +++ b/src/evm/contracts/factories/index.ts @@ -1,18 +1,20 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ +export * as iLightClientSol from "./ILightClient.sol"; export * as iProofVerifierSol from "./IProofVerifier.sol"; export * as ibcDispatcherSol from "./IbcDispatcher.sol"; export * as marsSol from "./Mars.sol"; +export { CrossL2Prover__factory } from "./CrossL2Prover__factory"; export { Dispatcher__factory } from "./Dispatcher__factory"; export { DummyLightClient__factory } from "./DummyLightClient__factory"; export { DummyProofVerifier__factory } from "./DummyProofVerifier__factory"; export { ERC1967Proxy__factory } from "./ERC1967Proxy__factory"; export { Earth__factory } from "./Earth__factory"; export { FeeVault__factory } from "./FeeVault__factory"; +export { ICrossL2Prover__factory } from "./ICrossL2Prover__factory"; export { IDispatcher__factory } from "./IDispatcher__factory"; export { IFeeVault__factory } from "./IFeeVault__factory"; -export { ILightClient__factory } from "./ILightClient__factory"; export { IUniversalChannelHandler__factory } from "./IUniversalChannelHandler__factory"; export { Ibc__factory } from "./Ibc__factory"; export { IbcUtils__factory } from "./IbcUtils__factory"; diff --git a/src/evm/contracts/index.ts b/src/evm/contracts/index.ts index 97073740..7860ce7a 100644 --- a/src/evm/contracts/index.ts +++ b/src/evm/contracts/index.ts @@ -1,21 +1,24 @@ /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ +import type * as iLightClientSol from "./ILightClient.sol"; +export type { iLightClientSol }; import type * as iProofVerifierSol from "./IProofVerifier.sol"; export type { iProofVerifierSol }; import type * as ibcDispatcherSol from "./IbcDispatcher.sol"; export type { ibcDispatcherSol }; import type * as marsSol from "./Mars.sol"; export type { marsSol }; +export type { CrossL2Prover } from "./CrossL2Prover"; export type { Dispatcher } from "./Dispatcher"; export type { DummyLightClient } from "./DummyLightClient"; export type { DummyProofVerifier } from "./DummyProofVerifier"; export type { ERC1967Proxy } from "./ERC1967Proxy"; export type { Earth } from "./Earth"; export type { FeeVault } from "./FeeVault"; +export type { ICrossL2Prover } from "./ICrossL2Prover"; export type { IDispatcher } from "./IDispatcher"; export type { IFeeVault } from "./IFeeVault"; -export type { ILightClient } from "./ILightClient"; export type { IUniversalChannelHandler } from "./IUniversalChannelHandler"; export type { Ibc } from "./Ibc"; export type { IbcUtils } from "./IbcUtils"; @@ -26,6 +29,7 @@ export type { SequencerSignatureVerifier } from "./SequencerSignatureVerifier"; export type { SequencerSoloClient } from "./SequencerSoloClient"; export type { UniversalChannelHandler } from "./UniversalChannelHandler"; export * as factories from "./factories"; +export { CrossL2Prover__factory } from "./factories/CrossL2Prover__factory"; export { Dispatcher__factory } from "./factories/Dispatcher__factory"; export { DummyLightClient__factory } from "./factories/DummyLightClient__factory"; export { DummyProofVerifier__factory } from "./factories/DummyProofVerifier__factory"; @@ -40,9 +44,17 @@ export { IbcEventsEmitter__factory } from "./factories/IbcDispatcher.sol/IbcEven export type { IbcPacketSender } from "./IbcDispatcher.sol/IbcPacketSender"; export { IbcPacketSender__factory } from "./factories/IbcDispatcher.sol/IbcPacketSender__factory"; export { IbcUtils__factory } from "./factories/IbcUtils__factory"; +export { ICrossL2Prover__factory } from "./factories/ICrossL2Prover__factory"; export { IDispatcher__factory } from "./factories/IDispatcher__factory"; export { IFeeVault__factory } from "./factories/IFeeVault__factory"; -export { ILightClient__factory } from "./factories/ILightClient__factory"; +export type { IClientUpdates } from "./ILightClient.sol/IClientUpdates"; +export { IClientUpdates__factory } from "./factories/ILightClient.sol/IClientUpdates__factory"; +export type { ILightClient } from "./ILightClient.sol/ILightClient"; +export { ILightClient__factory } from "./factories/ILightClient.sol/ILightClient__factory"; +export type { IMembershipVerifier } from "./ILightClient.sol/IMembershipVerifier"; +export { IMembershipVerifier__factory } from "./factories/ILightClient.sol/IMembershipVerifier__factory"; +export type { INonMembershipVerifier } from "./ILightClient.sol/INonMembershipVerifier"; +export { INonMembershipVerifier__factory } from "./factories/ILightClient.sol/INonMembershipVerifier__factory"; export type { IAppStateVerifier } from "./IProofVerifier.sol/IAppStateVerifier"; export { IAppStateVerifier__factory } from "./factories/IProofVerifier.sol/IAppStateVerifier__factory"; export type { IProofVerifier } from "./IProofVerifier.sol/IProofVerifier"; diff --git a/test/SequencerSoloClient.t.sol b/test/SequencerSoloClient.t.sol index 056ec52c..1e8ca6ef 100644 --- a/test/SequencerSoloClient.t.sol +++ b/test/SequencerSoloClient.t.sol @@ -5,7 +5,7 @@ import "forge-std/Test.sol"; import {SequencerSoloClient} from "../contracts/core/SequencerSoloClient.sol"; import {SequencerSignatureVerifier, ISignatureVerifier} from "../contracts/core/SequencerSignatureVerifier.sol"; import {ECDSA} from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; -import {SigningBase} from "./utils/SigningClient.base.t.sol"; +import {SigningBase} from "./utils/Signing.base.t.sol"; contract OptimisticLightClientWithRealVerifierTest is SigningBase { SequencerSoloClient sequencerClient; diff --git a/test/SequencerVerifier.t.sol b/test/SequencerVerifier.t.sol index 79ff83dc..f999a2c4 100644 --- a/test/SequencerVerifier.t.sol +++ b/test/SequencerVerifier.t.sol @@ -5,7 +5,7 @@ import "../contracts/core/OptimisticProofVerifier.sol"; import "../contracts/libs/Ibc.sol"; import {IbcUtils} from "../contracts/libs/IbcUtils.sol"; import "forge-std/Test.sol"; -import "./utils/SigningClient.base.t.sol"; +import "./utils/Signing.base.t.sol"; contract SequencerProofVerifierStateUpdate is SigningBase { function test_verify_signature_state_update_sucess() public view { diff --git a/test/proofApi/CrossL2EventProposer.t.sol b/test/proofApi/CrossL2EventProposer.t.sol new file mode 100644 index 00000000..6d4c9486 --- /dev/null +++ b/test/proofApi/CrossL2EventProposer.t.sol @@ -0,0 +1,167 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.0; + +import "forge-std/Test.sol"; +import {SigningBase} from "../utils/Signing.base.t.sol"; +import {CrossL2Prover} from "contracts/core/proofAPI/CrossL2Prover.sol"; + +import {ISignatureVerifier} from "contracts/interfaces/ISignatureVerifier.sol"; +import {ICrossL2Prover} from "contracts/interfaces/ICrossL2Prover.sol"; +import {Ics23Proof} from "contracts/interfaces/IProofVerifier.sol"; +import {MerkleTrie} from "optimism/libraries/trie/MerkleTrie.sol"; + +contract CrossL2InboxBase is SigningBase { + using stdJson for string; + + CrossL2Prover crossProver; + + // Sequencer signing related + bytes invalidSignature; + bytes validAncestorSignature; + + // Proof related + bytes32 receiptRoot; + bytes receiptIdx; + bytes rlpEncodedReceipt; + bytes[] receiptProof; + bytes32 logHash; + uint256 logIdx; + string peptideClientId; + + function setUp() public { + crossProver = new CrossL2Prover(sigVerifier, peptideClientId); + + // Used for l1 origin check tests, represents the child block. + bytes32 ancestorPayloadHash = + keccak256(bytes.concat(bytes32(peptideBlockNumber), peptideAppHash, l1AncestorBlockHash)); + bytes32 ancestorHashToSign = keccak256(bytes.concat(domain, PEPTIDE_CHAIN_ID, ancestorPayloadHash)); + (uint8 v0, bytes32 r0, bytes32 s0) = vm.sign(sequencerPkey, ancestorHashToSign); + validAncestorSignature = abi.encodePacked(r0, s0, v0); // Annoingly, v, r, s are in a different order than those + + (uint8 v1, bytes32 r1, bytes32 s1) = vm.sign(notSequencerPkey, ancestorHashToSign); + invalidSignature = abi.encodePacked(r1, s1, v1); // Annoingly, v, r, s are in a different order than those + + receiptRoot = hex"91de58019987854102326f49d235578cec08f71ddd5333c9e340ed63149d24a4"; + receiptIdx = hex"01"; + + rlpEncodedReceipt = + hex"02f9038801834008fdb9010000000000000001000000000000000000000000000000000000040000000001000000000000000000000000100000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000008000000000010000000000000400000000000000000000000200000000000000000002000000000000000040000000000000000000000001002100000000000020000000000000000000000000000000010000000000400000000000000000000000000000000000000000000000000000000000000000180000200000000000000080000020000002000000000000000000000000000000000000400000000000000000f9027df87a944200000000000000000000000000000000000006f842a0e1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109ca00000000000000000000000006f26bf09b1c792e3228e5467807a900a503c0281a0000000000000000000000000000000000000000000000000051ef38b821e8000f901fe946f26bf09b1c792e3228e5467807a900a503c0281f884a0a123dc29aebf7d0c3322c8eeb5b999e859f39937950ed31056532713d0de396fa00000000000000000000000000000000000000000000000000000000000002105a00000000000000000000000000000000000000000000000000000000000203bfba00000000000000000000000009d3976c25f4defe584ed80bae5a7cef59ba07aa5b9016000000000000000000000000042000000000000000000000000000000000000060000000000000000000000004200000000000000000000000000000000000006000000000000000000000000000000000000000000000000051ef38b821e8000000000000000000000000000000000000000000000000000051ebff283cb65ba00000000000000000000000000000000000000000000000000000000670d39ab00000000000000000000000000000000000000000000000000000000670d8f1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009d3976c25f4defe584ed80bae5a7cef59ba07aa5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000000"; + + logIdx = 1; + receiptProof.push( + hex"f891a0022a3a4141798ccc5b3d76565985c487f80d33c6d84c50681cacee53b7a1178aa05ea06d2cf663de8c05b78213a955c261d00cadd02dc60e5705cf8d7a6301fa7ea0a2cc6ca974174d203b891af5e00478e5f0515a8d0d436bd364958c89ee2b7a9c8080808080a05fa8cd42f989c3e3f4284ed784084e0f76ae0177e0d9efcace1dc6581819a53b8080808080808080" + ); + receiptProof.push( + hex"f90211a0c6d0a721cb31a7891a8fe6523fc8584fccbfdb50be81c0fd01514a6957ed7a1ba0d1a3b1372c1f53ffc668d023c054a227f737d21c5bb6342b30b77768d49aee07a0b4bfeb55218638db2e47dd18adee34ae9e7671790b50cfa0c25e4c91d7063308a0258e54f2e2230e65b0c3bcf0e975c708fa47d0268a6edceb0a8c322a266ddae0a0941a0ad1b44e45c8172a64f4e3e5e19bf47ec9e658515a294e17a52cb06277e2a03ad24c4887b623835a1028075321979578f6f940c442f3a173dd3967d5265bd7a07d1c077612de47ddf1a529ba5121d37db2859152562c57200687e37ad824ca8da0c99732203600dd41c8c247fa02eb7fb36e07627e900503e18dfaa29e653ff41fa0f3fb8db5579d90247fe06e13eb005191c9f33a6c1b418b6158200e3ebb5d0b0da0fcb23b65537675bc4eda2665ff7c58a34674dbaa50a98a6fe96156eb3767789da0250c1b48df8b7f41248441bec7f15e52f4463d0e8f9ae2f309fc10055ed0bfeca08673eba5254e10ddc189815e9e6d2c39d34f7095f40799271422ac796d74171ca02ea80e05b1398bd61f3b2702821dc6bd1f23b421ee943f02feec5fd66f36ae84a0709c2c5a5cbc93c6aff26d96dd867fa7ec57cf6e7daaf39c0918a74fca7b296ba0492df7ac62065ddfdac36054c9dec14539b908a4be45388f6df89aa441df559ba05b66c22bbabcaf4b91e812bce87f23b5d4b2299c5418c6c6e82a4d38d3faad8780" + ); + receiptProof.push( + hex"f9039020b9038c02f9038801834008fdb9010000000000000001000000000000000000000000000000000000040000000001000000000000000000000000100000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000008000000000010000000000000400000000000000000000000200000000000000000002000000000000000040000000000000000000000001002100000000000020000000000000000000000000000000010000000000400000000000000000000000000000000000000000000000000000000000000000180000200000000000000080000020000002000000000000000000000000000000000000400000000000000000f9027df87a944200000000000000000000000000000000000006f842a0e1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109ca00000000000000000000000006f26bf09b1c792e3228e5467807a900a503c0281a0000000000000000000000000000000000000000000000000051ef38b821e8000f901fe946f26bf09b1c792e3228e5467807a900a503c0281f884a0a123dc29aebf7d0c3322c8eeb5b999e859f39937950ed31056532713d0de396fa00000000000000000000000000000000000000000000000000000000000002105a00000000000000000000000000000000000000000000000000000000000203bfba00000000000000000000000009d3976c25f4defe584ed80bae5a7cef59ba07aa5b9016000000000000000000000000042000000000000000000000000000000000000060000000000000000000000004200000000000000000000000000000000000006000000000000000000000000000000000000000000000000051ef38b821e8000000000000000000000000000000000000000000000000000051ebff283cb65ba00000000000000000000000000000000000000000000000000000000670d39ab00000000000000000000000000000000000000000000000000000000670d8f1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009d3976c25f4defe584ed80bae5a7cef59ba07aa5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000000" + ); + } + + // Happy path for CrossEventProver.updateClient() + function test_clientUpdate_success() public { + crossProver.updateClient( + abi.encodePacked(l1AncestorBlockHash, validAncestorSignature), peptideBlockNumber, uint256(peptideAppHash) + ); + assertEq(crossProver.getState(peptideBlockNumber), uint256(peptideAppHash)); + } + + // Happy path for CrossEventProver.validateReceipt() + function test_validate_receipt_success() public { + // TODO: Fill this in once we have relaying to peptide working and that we can generate peptide state proof + // using this tool in relayer code at polymerase/ + // 1.) Run the oprelayer/pkg/encoder/cmd/main.go command to generate hex files (note: this will need to be + // modified to work with receipt proofs instead of channel/packet proofs) + // 2.) load these proof files into the test contracts using the load_proof util, e.g. using something like + // Ics23Proof memory testProof = load_proof("/test/payload/channel_confirm_pending_proof.hex", + // address(dummyLightClient)); + // 3.) Run the validate_receipt call below + vm.skip(true); + + string memory input = vm.readFile(string.concat(rootDir, "/test/payload/packet_ack_proof.hex")); + bytes memory encoded = vm.parseBytes(input); + (, Ics23Proof memory peptideProof) = abi.decode(encoded, (bytes32, Ics23Proof)); + + // proof will be struct EventProof + bytes memory proof = abi.encode(peptideProof, receiptProof, receiptRoot, peptideClientId, peptideBlockNumber); + + crossProver.validateReceipt(receiptIdx, rlpEncodedReceipt, proof); + } + + // Happy path for CrossEventProver.validateEvent() + function test_validate_event_success() public { + // TODO: Fill this in once we have relaying to peptide working and that we can generate peptide state proof + // using this tool in relayer code at polymerase/ + // 1.) Run the oprelayer/pkg/encoder/cmd/main.go command to generate hex files (note: this will need to be + // modified to work with receipt proofs instead of channel/packet proofs) + // 2.) load these proof files into the test contracts using the load_proof util, e.g. using something like + // Ics23Proof memory testProof = load_proof("/test/payload/channel_confirm_pending_proof.hex", + // address(dummyLightClient)); + // 3.) Call the crossProver.validateEvent method to test + + vm.skip(true); + } + + // Test valid peptide proof but invalid MMPT receipt proof + function test_revert_invalidReceiptProof() public { + // TODO: Fill this in once we have relaying to peptide working and that we can generate peptide state proof + // using this tool in relayer code at polymerase/ + // 1.) Run the oprelayer/pkg/encoder/cmd/main.go command to generate hex files (note: this will need to be + // modified to work with receipt proofs instead of channel/packet proofs) + // 2.) load these proof files into the test contracts using the load_proof util, e.g. using something like + // Ics23Proof memory testProof = load_proof("/test/payload/channel_confirm_pending_proof.hex", + // address(dummyLightClient)); + // 3.) Call the crossProver.validateReceipt method to test + + vm.skip(true); + } + + // Test trying to prove with a non-existent peptideApphash that hasn't yet been seen + function test_revert_nonexistingPeptideAppHash() public { + string memory input = vm.readFile(string.concat(rootDir, "/test/payload/packet_ack_proof.hex")); + bytes memory encoded = vm.parseBytes(input); + (, Ics23Proof memory peptideProof) = abi.decode(encoded, (bytes32, Ics23Proof)); + + // proof will be struct EventProof + bytes memory proof = abi.encode(peptideProof, receiptProof, receiptRoot, peptideClientId, peptideBlockNumber); + + vm.expectRevert(); + crossProver.validateReceipt(receiptIdx, rlpEncodedReceipt, proof); + } + + // Test revert to prove a peptide apphash which has been seen but which doesn't prove the MPT receipt root given + function test_revert_invalidReceiptRoot() public { + // TODO: Fill this in once we have relaying to peptide working and that we can generate peptide state proof + // using this tool in relayer code at polymerase/ + // 1.) Run the oprelayer/pkg/encoder/cmd/main.go command to generate hex files (note: this will need to be + // modified to work with receipt proofs instead of channel/packet proofs) + // 2.) load these proof files into the test contracts using the load_proof util, e.g. using something like + // Ics23Proof memory testProof = load_proof("/test/payload/channel_confirm_pending_proof.hex", + // address(dummyLightClient)); + // 3.) Call the crossProver.validateReceipt method to test revert + } + + // Test that a client update will fail if it doesn't have a valid sequencer signature + function test_revert_invalidClentUpdateSignature() public { + vm.expectRevert(ISignatureVerifier.InvalidSequencerSignature.selector); + crossProver.updateClient( + abi.encodePacked(l1AncestorBlockHash, invalidSignature), peptideBlockNumber, uint256(peptideAppHash) + ); + assertEq(crossProver.getState(peptideBlockNumber), 0); + } + + // Test valid receipt proof but invalid event in receipt + function test_invalidEvent() public { + // TODO: Fill this in once we have relaying to peptide working and that we can generate peptide state proof + // using this tool in relayer code at polymerase/ + // 1.) Run the oprelayer/pkg/encoder/cmd/main.go command to generate hex files (note: this will need to be + // modified to work with receipt proofs instead of channel/packet proofs) + // 2.) load these proof files into the test contracts using the load_proof util, e.g. using something like + // Ics23Proof memory testProof = load_proof("/test/payload/channel_confirm_pending_proof.hex", + // address(dummyLightClient)); + // 3.) Call the crossProver.validateEvent method to test revert + + vm.skip(true); + } +} diff --git a/test/utils/SigningClient.base.t.sol b/test/utils/Signing.base.t.sol similarity index 100% rename from test/utils/SigningClient.base.t.sol rename to test/utils/Signing.base.t.sol diff --git a/test/utils/goHelpers/cmd/receiptMMPTProof/EthProof.go b/test/utils/goHelpers/cmd/receiptMMPTProof/EthProof.go new file mode 100644 index 00000000..1c555145 --- /dev/null +++ b/test/utils/goHelpers/cmd/receiptMMPTProof/EthProof.go @@ -0,0 +1,45 @@ +package main + +import "fmt" + +type EthProof map[string][]byte + +// Has returns if the key exists in db. +// Error is always nil. +func (p EthProof) Has(key []byte) (bool, error) { + _, ok := p[string(key)] + return ok, nil +} + +// Get retrieves the value for the given key. +// If key is not found, return invalid key error. +func (p EthProof) Get(key []byte) ([]byte, error) { + if entry, ok := p[string(key)]; ok { + return CopyBytes(entry), nil + } + return nil, fmt.Errorf("invalid key: %v", key) +} + +// Put inserts the given key-value pair. +// Existing key/value is overwritten. +func (p EthProof) Put(key, value []byte) error { + p[string(key)] = CopyBytes(value) + return nil +} + +// Delete removes the key from the key-value store. +// If the key doesn't exist, it's a no-op without error. +func (p EthProof) Delete(key []byte) error { + delete(p, string(key)) + return nil +} + +// CopyBytes returns an exact copy of the provided bytes. +func CopyBytes(b []byte) []byte { + if b == nil { + return nil + } + copiedBytes := make([]byte, len(b)) + copy(copiedBytes, b) + return copiedBytes +} diff --git a/test/utils/goHelpers/cmd/receiptMMPTProof/main.go b/test/utils/goHelpers/cmd/receiptMMPTProof/main.go new file mode 100644 index 00000000..0a9d3c66 --- /dev/null +++ b/test/utils/goHelpers/cmd/receiptMMPTProof/main.go @@ -0,0 +1,87 @@ +package main + +import ( + "bytes" + "context" + "encoding/hex" + "fmt" + "math/big" + "os" + "time" + + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/ethclient" + "github.com/ethereum/go-ethereum/rlp" + "github.com/ethereum/go-ethereum/rpc" + "github.com/ethereum/go-ethereum/trie" + "github.com/ethereum/go-ethereum/triedb" +) + +func main() { + + blockNumber := int64(20221924) + logIdx := uint64(1) + fmt.Println("blockNumber: ", blockNumber) + + rpcUrl := os.Getenv("OP_SEPOLIA_RPC_URL") + alchemyRpc, err := ethclient.Dial(rpcUrl) + if err != nil { + fmt.Println("error dialing alchemyRpc: ", err) + return + } + + client := ethclient.NewClient(alchemyRpc.Client()) + + ctxWithTimeout, _ := context.WithTimeout(context.Background(), 10000*time.Millisecond) + + receipts, err := client.BlockReceipts(ctxWithTimeout, rpc.BlockNumberOrHashWithNumber(rpc.BlockNumber(blockNumber))) + + for i, receipt := range receipts { + fmt.Println("receipt: ", i, receipt.TxHash) + } + + if err != nil { + fmt.Println("error fetching receipts: ", err) + return + } + + ctxWithTimeout, _ = context.WithTimeout(context.Background(), 1000*time.Millisecond) + + block, err := client.HeaderByNumber(ctxWithTimeout, big.NewInt(blockNumber)) + if err != nil { + fmt.Println("error fetching block: ", err) + return + } + + trieFun := trie.NewEmpty(triedb.NewDatabase(rawdb.NewMemoryDatabase(), nil)) + derivableReceipts := types.Receipts(receipts) + receiptTrieRoot := types.DeriveSha(derivableReceipts, trieFun) + + fmt.Println("receiptTrieRoot: from deriveSha ", receiptTrieRoot.Hex()) + fmt.Println("receiptTrieRoot from block ", block.ReceiptHash) + + if !bytes.Equal(receiptTrieRoot.Bytes(), block.ReceiptHash.Bytes()) { + fmt.Println("derived receipt trie root does not match receipt trie root in eth header") + return + } + + // check that the receiptTrieRoot matches the one in the ethHeader + + targetReceiptProof := EthProof{} + + if err := trieFun.Prove(rlp.AppendUint64(nil, logIdx), &targetReceiptProof); err != nil { + fmt.Println("error proving receipt: ", err) + return + } + + for key, value := range targetReceiptProof { + fmt.Println("key:", hex.EncodeToString([]byte(key))) + fmt.Println("value:", hex.EncodeToString(value)) + } + + var buf bytes.Buffer + receipts[0].EncodeRLP(&buf) + hexStr := hex.EncodeToString(buf.Bytes()) + fmt.Println("RLP-encoded receipt (hex):", hexStr) +} diff --git a/test/utils/goHelpers/cmd/receiptMMPTProof/receiptMMPTProof b/test/utils/goHelpers/cmd/receiptMMPTProof/receiptMMPTProof new file mode 100755 index 00000000..71251406 Binary files /dev/null and b/test/utils/goHelpers/cmd/receiptMMPTProof/receiptMMPTProof differ diff --git a/test/utils/goHelpers/go.mod b/test/utils/goHelpers/go.mod new file mode 100644 index 00000000..63898a0d --- /dev/null +++ b/test/utils/goHelpers/go.mod @@ -0,0 +1,80 @@ +module github.com/open-ibc/vibc-core-smart-contracts/test/utils/goHelpers + +go 1.22.7 + +toolchain go1.22.8 + +require github.com/ethereum/go-ethereum v1.14.12 + +require ( + github.com/BurntSushi/toml v1.4.0 // indirect + github.com/DataDog/zstd v1.5.6 // indirect + github.com/Microsoft/go-winio v0.6.2 // indirect + github.com/VictoriaMetrics/fastcache v1.12.2 // indirect + github.com/allegro/bigcache v1.2.1 // indirect + github.com/beorn7/perks v1.0.1 // indirect + github.com/bits-and-blooms/bitset v1.16.0 // indirect + github.com/btcsuite/btcd/btcec/v2 v2.3.4 // indirect + github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 // indirect + github.com/cespare/xxhash/v2 v2.3.0 // indirect + github.com/cockroachdb/errors v1.11.3 // indirect + github.com/cockroachdb/fifo v0.0.0-20240816210425-c5d0cb0b6fc0 // indirect + github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect + github.com/cockroachdb/pebble v1.1.2 // indirect + github.com/cockroachdb/redact v1.1.5 // indirect + github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect + github.com/consensys/bavard v0.1.22 // indirect + github.com/consensys/gnark-crypto v0.14.0 // indirect + github.com/crate-crypto/go-ipa v0.0.0-20240724233137-53bbb0ceb27a // indirect + github.com/crate-crypto/go-kzg-4844 v1.1.0 // indirect + github.com/deckarep/golang-set/v2 v2.6.0 // indirect + github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 // indirect + github.com/ethereum-optimism/superchain-registry/superchain v0.0.0-20241121214935-eeb0f8563c07 // indirect + github.com/ethereum/c-kzg-4844 v1.0.3 // indirect + github.com/ethereum/go-verkle v0.2.2 // indirect + github.com/fsnotify/fsnotify v1.7.0 // indirect + github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08 // indirect + github.com/getsentry/sentry-go v0.29.1 // indirect + github.com/go-ole/go-ole v1.3.0 // indirect + github.com/gofrs/flock v0.12.1 // indirect + github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb // indirect + github.com/gorilla/websocket v1.5.3 // indirect + github.com/hashicorp/go-bexpr v0.1.11 // indirect + github.com/holiman/uint256 v1.3.1 // indirect + github.com/klauspost/compress v1.17.11 // indirect + github.com/kr/pretty v0.3.1 // indirect + github.com/kr/text v0.2.0 // indirect + github.com/mattn/go-runewidth v0.0.16 // indirect + github.com/mitchellh/mapstructure v1.5.0 // indirect + github.com/mmcloughlin/addchain v0.4.0 // indirect + github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect + github.com/olekukonko/tablewriter v0.0.5 // indirect + github.com/onsi/gomega v1.34.1 // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/prometheus/client_golang v1.20.5 // indirect + github.com/prometheus/client_model v0.6.1 // indirect + github.com/prometheus/common v0.60.1 // indirect + github.com/prometheus/procfs v0.15.1 // indirect + github.com/rivo/uniseg v0.4.7 // indirect + github.com/rogpeppe/go-internal v1.13.1 // indirect + github.com/rs/cors v1.11.1 // indirect + github.com/shirou/gopsutil v3.21.11+incompatible // indirect + github.com/supranational/blst v0.3.13 // indirect + github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect + github.com/tklauser/go-sysconf v0.3.14 // indirect + github.com/tklauser/numcpus v0.9.0 // indirect + github.com/urfave/cli/v2 v2.27.4 // indirect + github.com/yusufpapurcu/wmi v1.2.4 // indirect + golang.org/x/crypto v0.29.0 // indirect + golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect + golang.org/x/mod v0.22.0 // indirect + golang.org/x/sync v0.9.0 // indirect + golang.org/x/sys v0.27.0 // indirect + golang.org/x/text v0.20.0 // indirect + golang.org/x/time v0.7.0 // indirect + google.golang.org/protobuf v1.35.2 // indirect + rsc.io/tmplfunc v0.0.3 // indirect +) + +replace github.com/ethereum/go-ethereum v1.14.12 => github.com/ethereum-optimism/op-geth v1.101408.1-0.20241002211323-d5a96613c22b diff --git a/test/utils/goHelpers/go.sum b/test/utils/goHelpers/go.sum new file mode 100644 index 00000000..0c278fb7 --- /dev/null +++ b/test/utils/goHelpers/go.sum @@ -0,0 +1,324 @@ +github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0= +github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= +github.com/DataDog/zstd v1.5.6 h1:LbEglqepa/ipmmQJUDnSsfvA8e8IStVcGaFWDuxvGOY= +github.com/DataDog/zstd v1.5.6/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= +github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= +github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= +github.com/VictoriaMetrics/fastcache v1.12.2 h1:N0y9ASrJ0F6h0QaC3o6uJb3NIZ9VKLjCM7NQbSmF7WI= +github.com/VictoriaMetrics/fastcache v1.12.2/go.mod h1:AmC+Nzz1+3G2eCPapF6UcsnkThDcMsQicp4xDukwJYI= +github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= +github.com/allegro/bigcache v1.2.1 h1:hg1sY1raCwic3Vnsvje6TT7/pnZba83LeFck5NrFKSc= +github.com/allegro/bigcache v1.2.1/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= +github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/bits-and-blooms/bitset v1.16.0 h1:G3lirLlhFTcW/7ym/SLtYYLHQS0hBOcC8fPNJxbTYm4= +github.com/bits-and-blooms/bitset v1.16.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= +github.com/btcsuite/btcd/btcec/v2 v2.3.4 h1:3EJjcN70HCu/mwqlUsGK8GcNVyLVxFDlWurTXGPFfiQ= +github.com/btcsuite/btcd/btcec/v2 v2.3.4/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= +github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 h1:59Kx4K6lzOW5w6nFlA0v5+lk/6sjybR934QNHSJZPTQ= +github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= +github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f h1:otljaYPt5hWxV3MUfO5dFPFiOXg9CyG5/kCfayTqsJ4= +github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= +github.com/cockroachdb/errors v1.11.3 h1:5bA+k2Y6r+oz/6Z/RFlNeVCesGARKuC6YymtcDrbC/I= +github.com/cockroachdb/errors v1.11.3/go.mod h1:m4UIW4CDjx+R5cybPsNrRbreomiFqt8o1h1wUVazSd8= +github.com/cockroachdb/fifo v0.0.0-20240816210425-c5d0cb0b6fc0 h1:pU88SPhIFid6/k0egdR5V6eALQYq2qbSmukrkgIh/0A= +github.com/cockroachdb/fifo v0.0.0-20240816210425-c5d0cb0b6fc0/go.mod h1:9/y3cnZ5GKakj/H4y9r9GTjCvAFta7KLgSHPJJYc52M= +github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= +github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= +github.com/cockroachdb/pebble v1.1.2 h1:CUh2IPtR4swHlEj48Rhfzw6l/d0qA31fItcIszQVIsA= +github.com/cockroachdb/pebble v1.1.2/go.mod h1:4exszw1r40423ZsmkG/09AFEG83I0uDgfujJdbL6kYU= +github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwPJ30= +github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= +github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= +github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= +github.com/consensys/bavard v0.1.22 h1:Uw2CGvbXSZWhqK59X0VG/zOjpTFuOMcPLStrp1ihI0A= +github.com/consensys/bavard v0.1.22/go.mod h1:k/zVjHHC4B+PQy1Pg7fgvG3ALicQw540Crag8qx+dZs= +github.com/consensys/gnark-crypto v0.14.0 h1:DDBdl4HaBtdQsq/wfMwJvZNE80sHidrK3Nfrefatm0E= +github.com/consensys/gnark-crypto v0.14.0/go.mod h1:CU4UijNPsHawiVGNxe9co07FkzCeWHHrb1li/n1XoU0= +github.com/cpuguy83/go-md2man/v2 v2.0.4 h1:wfIWP927BUkWJb2NmU/kNDYIBTh/ziUX91+lVfRxZq4= +github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/crate-crypto/go-ipa v0.0.0-20240724233137-53bbb0ceb27a h1:W8mUrRp6NOVl3J+MYp5kPMoUZPp7aOYHtaua31lwRHg= +github.com/crate-crypto/go-ipa v0.0.0-20240724233137-53bbb0ceb27a/go.mod h1:sTwzHBvIzm2RfVCGNEBZgRyjwK40bVoun3ZnGOCafNM= +github.com/crate-crypto/go-kzg-4844 v1.1.0 h1:EN/u9k2TF6OWSHrCCDBBU6GLNMq88OspHHlMnHfoyU4= +github.com/crate-crypto/go-kzg-4844 v1.1.0/go.mod h1:JolLjpSff1tCCJKaJx4psrlEdlXuJEC996PL3tTAFks= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/deckarep/golang-set/v2 v2.6.0 h1:XfcQbWM1LlMB8BsJ8N9vW5ehnnPVIw0je80NsVHagjM= +github.com/deckarep/golang-set/v2 v2.6.0/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4= +github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5ilcvdfma9wOH6Y= +github.com/decred/dcrd/crypto/blake256 v1.0.1/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 h1:rpfIENRNNilwHwZeG5+P150SMrnNEcHYvcCuK6dPZSg= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= +github.com/ethereum-optimism/op-geth v1.101408.1-0.20241002211323-d5a96613c22b h1:9C6WytqAcqWKXQTMw2Da/S/aIJJmMvT+2MUpFnMdGrg= +github.com/ethereum-optimism/op-geth v1.101408.1-0.20241002211323-d5a96613c22b/go.mod h1:7S4pp8KHBmEmKkRjL1BPOc6jY9hW+64YeMUjR3RVLw4= +github.com/ethereum-optimism/superchain-registry/superchain v0.0.0-20241121214935-eeb0f8563c07 h1:iHLGd/VNBJ3zcNKcVXDYSsRzeFxh8calbqaTH0r9hqU= +github.com/ethereum-optimism/superchain-registry/superchain v0.0.0-20241121214935-eeb0f8563c07/go.mod h1:9feO8jcL5OZ1tvRjEfNAHz4Aggvd6373l+ZxmZZAyZs= +github.com/ethereum/c-kzg-4844 v1.0.3 h1:IEnbOHwjixW2cTvKRUlAAUOeleV7nNM/umJR+qy4WDs= +github.com/ethereum/c-kzg-4844 v1.0.3/go.mod h1:VewdlzQmpT5QSrVhbBuGoCdFJkpaJlO1aQputP83wc0= +github.com/ethereum/go-verkle v0.2.2 h1:I2W0WjnrFUIzzVPwm8ykY+7pL2d4VhlsePn4j7cnFk8= +github.com/ethereum/go-verkle v0.2.2/go.mod h1:M3b90YRnzqKyyzBEWJGqj8Qff4IDeXnzFw0P9bFw3uk= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= +github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= +github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= +github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08 h1:f6D9Hr8xV8uYKlyuj8XIruxlh9WjVjdh1gIicAS7ays= +github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= +github.com/getsentry/sentry-go v0.29.1 h1:DyZuChN8Hz3ARxGVV8ePaNXh1dQ7d76AiB117xcREwA= +github.com/getsentry/sentry-go v0.29.1/go.mod h1:x3AtIzN01d6SiWkderzaH28Tm0lgkafpJ5Bm3li39O0= +github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= +github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= +github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= +github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= +github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= +github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= +github.com/gofrs/flock v0.12.1 h1:MTLVXXHf8ekldpJk3AKicLij9MdwOWkZ+a/jHHZby9E= +github.com/gofrs/flock v0.12.1/go.mod h1:9zxTsyu5xtJ9DK+1tFZyibEV7y3uwDxPPfbxeeHCoD0= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg= +github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb h1:PBC98N2aIaM3XXiurYmW7fx4GZkL8feAMVq7nEjURHk= +github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= +github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/hashicorp/go-bexpr v0.1.11 h1:6DqdA/KBjurGby9yTY0bmkathya0lfwF2SeuubCI7dY= +github.com/hashicorp/go-bexpr v0.1.11/go.mod h1:f03lAo0duBlDIUMGCuad8oLcgejw4m7U+N8T+6Kz1AE= +github.com/holiman/billy v0.0.0-20240216141850-2abb0c79d3c4 h1:X4egAf/gcS1zATw6wn4Ej8vjuVGxeHdan+bRb2ebyv4= +github.com/holiman/billy v0.0.0-20240216141850-2abb0c79d3c4/go.mod h1:5GuXa7vkL8u9FkFuWdVvfR5ix8hRB7DbOAaYULamFpc= +github.com/holiman/bloomfilter/v2 v2.0.3 h1:73e0e/V0tCydx14a0SCYS/EWCxgwLZ18CZcZKVu0fao= +github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA= +github.com/holiman/uint256 v1.3.1 h1:JfTzmih28bittyHM8z360dCjIA9dbPIBlcTI6lmctQs= +github.com/holiman/uint256 v1.3.1/go.mod h1:EOMSn4q6Nyt9P6efbI3bueV4e1b3dGlUCXeiRV4ng7E= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/huin/goupnp v1.3.0 h1:UvLUlWDNpoUdYzb2TCn+MuTWtcjXKSza2n6CBdQ0xXc= +github.com/huin/goupnp v1.3.0/go.mod h1:gnGPsThkYa7bFi/KWmEysQRf48l2dvR5bxr2OFckNX8= +github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= +github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/compress v1.17.11 h1:In6xLpyWOi1+C7tXUUWv2ot1QvBjxevKAaI6IXrJmUc= +github.com/klauspost/compress v1.17.11/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= +github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= +github.com/leanovate/gopter v0.2.11 h1:vRjThO1EKPb/1NsDXuDrzldR28RLkBflWYcU9CvzWu4= +github.com/leanovate/gopter v0.2.11/go.mod h1:aK3tzZP/C+p1m3SPRE4SYZFGP7jjkuSI4f7Xvpt0S9c= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= +github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= +github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/pointerstructure v1.2.1 h1:ZhBBeX8tSlRpu/FFhXH4RC4OJzFlqsQhoHZAz4x7TIw= +github.com/mitchellh/pointerstructure v1.2.1/go.mod h1:BRAsLI5zgXmw97Lf6s25bs8ohIXc3tViBH44KcwB2g4= +github.com/mmcloughlin/addchain v0.4.0 h1:SobOdjm2xLj1KkXN5/n0xTIWyZA2+s99UCY1iPfkHRY= +github.com/mmcloughlin/addchain v0.4.0/go.mod h1:A86O+tHqZLMNO4w6ZZ4FlVQEadcoqkyU72HC5wJ4RlU= +github.com/mmcloughlin/profile v0.1.1/go.mod h1:IhHD7q1ooxgwTgjxQYkACGA77oFTDdFVejUS1/tS/qU= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= +github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= +github.com/nxadm/tail v1.4.11 h1:8feyoE3OzPrcshW5/MJ4sGESc5cqmGkGCWlco4l0bqY= +github.com/nxadm/tail v1.4.11/go.mod h1:OTaG3NK980DZzxbRq6lEuzgU+mug70nY11sMd4JXXHc= +github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= +github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= +github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= +github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= +github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= +github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= +github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= +github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= +github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= +github.com/onsi/gomega v1.34.1 h1:EUMJIKUjM8sKjYbtxQI9A4z2o+rruxnzNvpknOXie6k= +github.com/onsi/gomega v1.34.1/go.mod h1:kU1QgUvBDLXBJq618Xvm2LUX6rSAfRaFRTcdOeDLwwY= +github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= +github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_golang v1.20.5 h1:cxppBPuYhUnsO6yo/aoRol4L7q7UFfdm+bR9r+8l63Y= +github.com/prometheus/client_golang v1.20.5/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE= +github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= +github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= +github.com/prometheus/common v0.60.1 h1:FUas6GcOw66yB/73KC+BOZoFJmbo/1pojoILArPAaSc= +github.com/prometheus/common v0.60.1/go.mod h1:h0LYf1R1deLSKtD4Vdg8gy4RuOvENW2J/h19V5NADQw= +github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= +github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= +github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= +github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= +github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= +github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= +github.com/rs/cors v1.11.1 h1:eU3gRzXLRK57F5rKMGMZURNdIG4EoAmX8k94r9wXWHA= +github.com/rs/cors v1.11.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= +github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKlUeu/erjjvaPEYiI= +github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= +github.com/status-im/keycard-go v0.2.0 h1:QDLFswOQu1r5jsycloeQh3bVU8n/NatHHaZobtDnDzA= +github.com/status-im/keycard-go v0.2.0/go.mod h1:wlp8ZLbsmrF6g6WjugPAx+IzoLrkdf9+mHxBEeo3Hbg= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/supranational/blst v0.3.13 h1:AYeSxdOMacwu7FBmpfloBz5pbFXDmJL33RuwnKtmTjk= +github.com/supranational/blst v0.3.13/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= +github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d h1:vfofYNRScrDdvS342BElfbETmL1Aiz3i2t0zfRj16Hs= +github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d/go.mod h1:RRCYJbIwD5jmqPI9XoAFR0OcDxqUctll6zUj/+B4S48= +github.com/tklauser/go-sysconf v0.3.14 h1:g5vzr9iPFFz24v2KZXs/pvpvh8/V9Fw6vQK5ZZb78yU= +github.com/tklauser/go-sysconf v0.3.14/go.mod h1:1ym4lWMLUOhuBOPGtRcJm7tEGX4SCYNEEEtghGG/8uY= +github.com/tklauser/numcpus v0.9.0 h1:lmyCHtANi8aRUgkckBgoDk1nHCux3n2cgkJLXdQGPDo= +github.com/tklauser/numcpus v0.9.0/go.mod h1:SN6Nq1O3VychhC1npsWostA+oW+VOQTxZrS604NSRyI= +github.com/tyler-smith/go-bip39 v1.1.0 h1:5eUemwrMargf3BSLRRCalXT93Ns6pQJIjYQN2nyfOP8= +github.com/tyler-smith/go-bip39 v1.1.0/go.mod h1:gUYDtqQw1JS3ZJ8UWVcGTGqqr6YIN3CWg+kkNaLt55U= +github.com/urfave/cli/v2 v2.27.4 h1:o1owoI+02Eb+K107p27wEX9Bb8eqIoZCfLXloLUSWJ8= +github.com/urfave/cli/v2 v2.27.4/go.mod h1:m4QzxcD2qpra4z7WhzEGn74WZLViBnMpb1ToCAKdGRQ= +github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 h1:gEOO8jv9F4OT7lGCjxCBTO/36wtF6j2nSip77qHd4x4= +github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1/go.mod h1:Ohn+xnUBiLI6FVj/9LpzZWtj1/D6lUovWYBkxHVV3aM= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0= +github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.29.0 h1:L5SG1JTTXupVV3n6sUqMTeWbjAyfPwoda2DLX8J8FrQ= +golang.org/x/crypto v0.29.0/go.mod h1:+F4F4N5hv6v38hfeYwTdx20oUvLLc+QfrE9Ax9HtgRg= +golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f h1:XdNn9LlyWAhLVp6P/i8QYBW+hlyhrhei9uErw2B5GJo= +golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f/go.mod h1:D5SMRVC3C2/4+F/DB1wZsLRnSNimn2Sp/NPsCrsv8ak= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.22.0 h1:D4nJWe9zXqHOmWqj4VMOJhvzj7bEZg4wEYa759z1pH4= +golang.org/x/mod v0.22.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= +golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= +golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.29.0 h1:5ORfpBpCs4HzDYoodCDBbwHzdR5UrLBZ3sOnUJmFoHo= +golang.org/x/net v0.29.0/go.mod h1:gLkgy8jTGERgjzMic6DS9+SP0ajcu6Xu3Orq/SpETg0= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.9.0 h1:fEo0HyrW1GIgZdpbhCRO0PkJajUS5H9IFUztCgEo2jQ= +golang.org/x/sync v0.9.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= +golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= +golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/time v0.7.0 h1:ntUhktv3OPE6TgYxXWv9vKvUSJyIFJlyohwbkEwPrKQ= +golang.org/x/time v0.7.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.35.2 h1:8Ar7bF+apOIoThw1EdZl0p1oWvMqTHmpA2fRTyZO8io= +google.golang.org/protobuf v1.35.2/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc= +gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +rsc.io/tmplfunc v0.0.3 h1:53XFQh69AfOa8Tw0Jm7t+GV7KZhOi6jzsCzTtKbMvzU= +rsc.io/tmplfunc v0.0.3/go.mod h1:AG3sTPzElb1Io3Yg4voV9AGZJuleGAwaVRxL9M49PhA=