diff --git a/pkg/bindings/BN254CertificateVerifier/binding.go b/pkg/bindings/BN254CertificateVerifier/binding.go index 9e34ff598c..495f9bd162 100644 --- a/pkg/bindings/BN254CertificateVerifier/binding.go +++ b/pkg/bindings/BN254CertificateVerifier/binding.go @@ -86,7 +86,7 @@ type OperatorSet struct { // BN254CertificateVerifierMetaData contains all meta data concerning the BN254CertificateVerifier contract. var BN254CertificateVerifierMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_operatorTableUpdater\",\"type\":\"address\",\"internalType\":\"contractIOperatorTableUpdater\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getOperatorInfo\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"operatorIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIBN254TableCalculatorTypes.BN254OperatorInfo\",\"components\":[{\"name\":\"pubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"weights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorSetInfo\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIBN254TableCalculatorTypes.BN254OperatorSetInfo\",\"components\":[{\"name\":\"operatorInfoTreeRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"numOperators\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"aggregatePubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"totalWeights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorSetOwner\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"latestReferenceTimestamp\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"maxOperatorTableStaleness\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorTableUpdater\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIOperatorTableUpdater\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setMaxStalenessPeriod\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"maxStalenessPeriod\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateOperatorTable\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"operatorSetInfo\",\"type\":\"tuple\",\"internalType\":\"structIBN254TableCalculatorTypes.BN254OperatorSetInfo\",\"components\":[{\"name\":\"operatorInfoTreeRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"numOperators\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"aggregatePubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"totalWeights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"operatorSetConfig\",\"type\":\"tuple\",\"internalType\":\"structICrossChainRegistryTypes.OperatorSetConfig\",\"components\":[{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"maxStalenessPeriod\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"verifyCertificate\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"cert\",\"type\":\"tuple\",\"internalType\":\"structIBN254CertificateVerifierTypes.BN254Certificate\",\"components\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"messageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"signature\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apk\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"nonSignerWitnesses\",\"type\":\"tuple[]\",\"internalType\":\"structIBN254CertificateVerifierTypes.BN254OperatorInfoWitness[]\",\"components\":[{\"name\":\"operatorIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"operatorInfoProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"operatorInfo\",\"type\":\"tuple\",\"internalType\":\"structIBN254TableCalculatorTypes.BN254OperatorInfo\",\"components\":[{\"name\":\"pubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"weights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}]}]}],\"outputs\":[{\"name\":\"signedStakes\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"verifyCertificateNominal\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"cert\",\"type\":\"tuple\",\"internalType\":\"structIBN254CertificateVerifierTypes.BN254Certificate\",\"components\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"messageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"signature\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apk\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"nonSignerWitnesses\",\"type\":\"tuple[]\",\"internalType\":\"structIBN254CertificateVerifierTypes.BN254OperatorInfoWitness[]\",\"components\":[{\"name\":\"operatorIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"operatorInfoProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"operatorInfo\",\"type\":\"tuple\",\"internalType\":\"structIBN254TableCalculatorTypes.BN254OperatorInfo\",\"components\":[{\"name\":\"pubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"weights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}]}]},{\"name\":\"totalStakeNominalThresholds\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"verifyCertificateProportion\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"cert\",\"type\":\"tuple\",\"internalType\":\"structIBN254CertificateVerifierTypes.BN254Certificate\",\"components\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"messageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"signature\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apk\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"nonSignerWitnesses\",\"type\":\"tuple[]\",\"internalType\":\"structIBN254CertificateVerifierTypes.BN254OperatorInfoWitness[]\",\"components\":[{\"name\":\"operatorIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"operatorInfoProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"operatorInfo\",\"type\":\"tuple\",\"internalType\":\"structIBN254TableCalculatorTypes.BN254OperatorInfo\",\"components\":[{\"name\":\"pubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"weights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}]}]},{\"name\":\"totalStakeProportionThresholds\",\"type\":\"uint16[]\",\"internalType\":\"uint16[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MaxStalenessPeriodUpdated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"maxStalenessPeriod\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetOwnerUpdated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"owner\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TableUpdated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"operatorSetInfo\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIBN254TableCalculatorTypes.BN254OperatorSetInfo\",\"components\":[{\"name\":\"operatorInfoTreeRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"numOperators\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"aggregatePubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"totalWeights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CertificateStale\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ECAddFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ECMulFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ECPairingFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpModFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidOperatorIndex\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidProofLength\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyTableUpdater\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReferenceTimestampDoesNotExist\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TableUpdateStale\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"VerificationFailed\",\"inputs\":[]}]", - Bin: "0x60a060405234801561000f575f5ffd5b506040516125c63803806125c683398101604081905261002e91610105565b6001600160a01b038116608052610043610049565b50610132565b5f54610100900460ff16156100b45760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff90811614610103575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b5f60208284031215610115575f5ffd5b81516001600160a01b038116811461012b575f5ffd5b9392505050565b6080516124756101515f395f818161015a015261042b01526124755ff3fe608060405234801561000f575f5ffd5b50600436106100a6575f3560e01c80636738c40b1161006e5780636738c40b1461014257806368d6e081146101555780638481892014610194578063dd2ae1b9146101a7578063e49613fc146101ba578063eb39e68f146101da575f5ffd5b8063017d7974146100aa578063080b7150146100d25780632a610b75146100f25780635ddb9b5b146101075780636141879e1461012f575b5f5ffd5b6100bd6100b8366004611ecc565b6101fa565b60405190151581526020015b60405180910390f35b6100e56100e0366004611fa7565b61038b565b6040516100c99190611ff2565b610105610100366004612029565b6103a0565b005b61011a61011536600461205b565b6103d4565b60405163ffffffff90911681526020016100c9565b61011a61013d36600461205b565b6103fa565b61010561015036600461208b565b610420565b61017c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100c9565b61017c6101a236600461205b565b6105ed565b6100bd6101b536600461214f565b610616565b6101cd6101c83660046121c2565b6106a9565b6040516100c99190612237565b6101ed6101e8366004612029565b610761565b6040516100c991906122b1565b5f5f6102068585610826565b90505f610212866109e6565b5f8181526004602081815260408084208a5163ffffffff1685528252808420815160808101835281548152600182015481850152825180840184526002830154815260038301548186015281840152938101805483518186028101860190945280845296975094959394909360608601938301828280156102b057602002820191905f5260205f20905b81548152602001906001019080831161029c575b50505050508152505090505f8160600151905085518451146102e55760405163512509d360e11b815260040160405180910390fd5b5f5b845181101561037a575f612710888381518110610306576103066122c3565b602002602001015161ffff16848481518110610324576103246122c3565b602002602001015161033691906122eb565b6103409190612316565b905080868381518110610355576103556122c3565b60200260200101511015610371575f9650505050505050610384565b506001016102e7565b5060019450505050505b9392505050565b60606103978383610826565b90505b92915050565b5f6103aa836109e6565b5f908152600260205260409020805463ffffffff191663ffffffff93909316929092179091555050565b5f5f6103df836109e6565b5f9081526003602052604090205463ffffffff169392505050565b5f5f610405836109e6565b5f9081526002602052604090205463ffffffff169392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104695760405163030c1b6b60e11b815260040160405180910390fd5b5f61048161047c3687900387018761205b565b6109e6565b5f8181526003602052604090205490915063ffffffff908116908516116104bb57604051632f20889f60e01b815260040160405180910390fd5b5f81815260046020818152604080842063ffffffff8916855282529283902086518155818701516001820155928601518051600285015581015160038401556060860151805187949361051393908501920190611862565b5050505f818152600360209081526040909120805463ffffffff191663ffffffff871617905561054590830183612329565b5f8281526001602090815260409182902080546001600160a01b0319166001600160a01b03949094169390931790925561058491908401908401612342565b5f8281526002602052604090819020805463ffffffff191663ffffffff9390931692909217909155517f93e6bea1c9b5dce4a5c07b00261e956df2a4a253d9ab6ca070ca2037d72ada9e906105de9087908790879061235b565b60405180910390a15050505050565b5f5f6105f8836109e6565b5f908152600160205260409020546001600160a01b03169392505050565b5f5f6106228585610826565b905082518151146106465760405163512509d360e11b815260040160405180910390fd5b5f5b815181101561069d57838181518110610663576106636122c3565b602002602001015182828151811061067d5761067d6122c3565b60200260200101511015610695575f92505050610384565b600101610648565b50600195945050505050565b6106b16118ab565b5f6106bb856109e6565b5f81815260056020908152604080832063ffffffff89168452825280832087845282529182902082516080810184528154818501908152600183015460608301528152600282018054855181860281018601909652808652959650909491938584019390929083018282801561074e57602002820191905f5260205f20905b81548152602001906001019080831161073a575b5050505050815250509150509392505050565b6107696118d5565b5f610773846109e6565b5f81815260046020818152604080842063ffffffff891685528252928390208351608081018552815481526001820154818401528451808601865260028301548152600383015481850152818601529281018054855181850281018501909652808652959650929490936060860193909290919083018282801561081457602002820191905f5260205f20905b815481526020019060010190808311610800575b50505050508152505091505092915050565b6060610830611907565b610839846109e6565b80825283516108489190610a49565b80515f908152600460208181526040808420875163ffffffff16855282529283902083516080810185528154815260018201548184015284518086018652600283015481526003830154818501528186015292810180548551818502810185019096528086529394919360608601938301828280156108e457602002820191905f5260205f20905b8154815260200190600101908083116108d0575b50505091909252505050602082018190525161091357604051630cad17b760e31b815260040160405180910390fd5b806020015160600151516001600160401b0381111561093457610934611a35565b60405190808252806020026020018201604052801561095d578160200160208202803683370190505b5060408201525f5b816020015160600151518110156109c1578160200151606001518181518110610990576109906122c3565b6020026020010151826040015182815181106109ae576109ae6122c3565b6020908102919091010152600101610965565b506109cc8184610a9b565b60608201526109db8184610bc5565b604001519392505050565b5f815f0151826020015163ffffffff16604051602001610a3192919060609290921b6bffffffffffffffffffffffff1916825260a01b6001600160a01b031916601482015260200190565b60405160208183030381529060405261039a906123a7565b5f8281526002602052604090205463ffffffff16801580610a795750610a6f81836123ca565b63ffffffff164211155b610a965760405163640fcd6b60e11b815260040160405180910390fd5b505050565b6040805180820182525f808252602091820181905282518084019093528083529082018190525b826080015151811015610bbe575f83608001518281518110610ae657610ae66122c3565b60200260200101519050846020015160200151815f015163ffffffff1610610b21576040516301fa53c760e11b815260040160405180910390fd5b845184515f91610b319184610c33565b8051909150610b41908590610da8565b93505f5b816020015151811015610bb357866040015151811015610bab5781602001518181518110610b7557610b756122c3565b602002602001015187604001518281518110610b9357610b936122c3565b60200260200101818151610ba791906123e6565b9052505b600101610b45565b505050600101610ac2565b5092915050565b5f610be5610bd68460600151610e24565b60208501516040015190610da8565b90505f5f610c0184602001518486606001518760400151610eba565b91509150818015610c0f5750805b610c2c5760405163439cc0cd60e01b815260040160405180910390fd5b5050505050565b610c3b6118ab565b5f84815260056020908152604080832063ffffffff80881685529083528184208651909116845290915281208054909190151580610c7c5750600182015415155b905080610d25575f610c9c8787875f015188604001518960200151610edb565b905080610cbc5760405163439cc0cd60e01b815260040160405180910390fd5b6040808601515f8981526005602090815283822063ffffffff808c1684529082528483208a5190911683528152929020815180518255830151600182015582820151805192939192610d149260028501920190611862565b509050508460400151935050610d9f565b6040805160808101825283548183019081526001850154606083015281526002840180548351602082810282018101909552818152929386938186019390929091830182828015610d9357602002820191905f5260205f20905b815481526020019060010190808311610d7f575b50505050508152505092505b50509392505050565b604080518082019091525f8082526020820152610dc361194c565b835181526020808501518183015283516040808401919091529084015160608301525f908360808460066107d05a03fa90508080610dfd57fe5b5080610e1c5760405163d4b68fd760e01b815260040160405180910390fd5b505092915050565b604080518082019091525f80825260208201528151158015610e4857506020820151155b15610e65575050604080518082019091525f808252602082015290565b6040518060400160405280835f015181526020015f5160206124205f395f51905f528460200151610e9691906123f9565b610ead905f5160206124205f395f51905f526123e6565b905292915050565b919050565b5f5f610ece86848787600162061a80610f46565b9150915094509492505050565b5f5f83604051602001610eee9190612237565b60408051601f1981840301815291815281516020928301205f8a81526004845282812063ffffffff808c1683529452919091205490925090610f3a908590839085908a81169061100e16565b98975050505050505050565b5f5f5f610f5289611025565b90505f610f618a89898c6110af565b90505f610f78610f718a84611163565b8b90610da8565b90505f610fba610fb384610fad6040805180820182525f80825260209182015281518083019092526001825260029082015290565b90611163565b8590610da8565b90508715610fdf57610fd682610fce6111cb565b838c8b61128b565b96509450610fff565b610ff282610feb6111cb565b838c61149f565b95508515610fff57600194505b50505050965096945050505050565b5f8361101b8685856116d6565b1495945050505050565b604080518082019091525f80825260208201525f80806110525f5160206124205f395f51905f52866123f9565b90505b61105e8161176d565b90935091505f5160206124205f395f51905f528283098303611096576040805180820190915290815260208101919091529392505050565b5f5160206124205f395f51905f52600182089050611055565b8251602080850151845180519083015186840151805190850151875188870151604080519889018e90528801989098526060870195909552608086019390935260a085019190915260c084015260e08301526101008201526101208101919091525f907f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000019061014001604051602081830303815290604052805190602001205f1c61115a91906123f9565b95945050505050565b604080518082019091525f808252602082015261117e61196a565b835181526020808501519082015260408082018490525f908360608460076107d05a03fa905080806111ac57fe5b5080610e1c57604051632319df1960e11b815260040160405180910390fd5b6111d3611988565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b6040805180820182528681526020808201869052825180840190935286835282018490525f918291906112bc6119a8565b5f5b6002811015611473575f6112d38260066122eb565b90508482600281106112e7576112e76122c3565b602002015151836112f8835f61240c565b600c8110611308576113086122c3565b602002015284826002811061131f5761131f6122c3565b60200201516020015183826001611336919061240c565b600c8110611346576113466122c3565b602002015283826002811061135d5761135d6122c3565b602002015151518361137083600261240c565b600c8110611380576113806122c3565b6020020152838260028110611397576113976122c3565b60200201515160016020020151836113b083600361240c565b600c81106113c0576113c06122c3565b60200201528382600281106113d7576113d76122c3565b6020020151602001515f600281106113f1576113f16122c3565b60200201518361140283600461240c565b600c8110611412576114126122c3565b6020020152838260028110611429576114296122c3565b602002015160200151600160028110611444576114446122c3565b60200201518361145583600561240c565b600c8110611465576114656122c3565b6020020152506001016112be565b5061147c6119c7565b5f6020826101808560088cfa9151919c9115159b50909950505050505050505050565b6040805180820182528581526020808201859052825180840190935285835282018390525f916114cd6119a8565b5f5b6002811015611684575f6114e48260066122eb565b90508482600281106114f8576114f86122c3565b60200201515183611509835f61240c565b600c8110611519576115196122c3565b6020020152848260028110611530576115306122c3565b60200201516020015183826001611547919061240c565b600c8110611557576115576122c3565b602002015283826002811061156e5761156e6122c3565b602002015151518361158183600261240c565b600c8110611591576115916122c3565b60200201528382600281106115a8576115a86122c3565b60200201515160016020020151836115c183600361240c565b600c81106115d1576115d16122c3565b60200201528382600281106115e8576115e86122c3565b6020020151602001515f60028110611602576116026122c3565b60200201518361161383600461240c565b600c8110611623576116236122c3565b602002015283826002811061163a5761163a6122c3565b602002015160200151600160028110611655576116556122c3565b60200201518361166683600561240c565b600c8110611676576116766122c3565b6020020152506001016114cf565b5061168d6119c7565b5f6020826101808560086107d05a03fa905080806116a757fe5b50806116c6576040516324ccc79360e21b815260040160405180910390fd5b5051151598975050505050505050565b5f602084516116e591906123f9565b15611703576040516313717da960e21b815260040160405180910390fd5b8260205b855181116117645761171a6002856123f9565b5f0361173b57815f528086015160205260405f209150600284049350611752565b808601515f528160205260405f2091506002840493505b61175d60208261240c565b9050611707565b50949350505050565b5f80805f5160206124205f395f51905f5260035f5160206124205f395f51905f52865f5160206124205f395f51905f52888909090890505f6117dd827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f525f5160206124205f395f51905f526117e9565b91959194509092505050565b5f5f6117f36119c7565b6117fb6119e5565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa9250828061183857fe5b50826118575760405163d51edae360e01b815260040160405180910390fd5b505195945050505050565b828054828255905f5260205f2090810192821561189b579160200282015b8281111561189b578251825591602001919060010190611880565b506118a7929150611a03565b5090565b604080516080810182525f91810182815260608201929092529081905b8152602001606081525090565b60405180608001604052805f81526020015f81526020016118c860405180604001604052805f81526020015f81525090565b60405180608001604052805f81526020016119206118d5565b81526020016060815260200161194760405180604001604052805f81526020015f81525090565b905290565b60405180608001604052806004906020820280368337509192915050565b60405180606001604052806003906020820280368337509192915050565b604051806040016040528061199b611a17565b8152602001611947611a17565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b5b808211156118a7575f8155600101611a04565b60405180604001604052806002906020820280368337509192915050565b634e487b7160e01b5f52604160045260245ffd5b604080519081016001600160401b0381118282101715611a6b57611a6b611a35565b60405290565b604051606081016001600160401b0381118282101715611a6b57611a6b611a35565b60405160a081016001600160401b0381118282101715611a6b57611a6b611a35565b604051608081016001600160401b0381118282101715611a6b57611a6b611a35565b604051601f8201601f191681016001600160401b0381118282101715611aff57611aff611a35565b604052919050565b80356001600160a01b0381168114610eb5575f5ffd5b803563ffffffff81168114610eb5575f5ffd5b5f60408284031215611b40575f5ffd5b611b48611a49565b9050611b5382611b07565b8152611b6160208301611b1d565b602082015292915050565b5f60408284031215611b7c575f5ffd5b611b84611a49565b823581526020928301359281019290925250919050565b5f82601f830112611baa575f5ffd5b611bb2611a49565b806040840185811115611bc3575f5ffd5b845b81811015611bdd578035845260209384019301611bc5565b509095945050505050565b5f6001600160401b03821115611c0057611c00611a35565b5060051b60200190565b5f82601f830112611c19575f5ffd5b8135611c2c611c2782611be8565b611ad7565b8082825260208201915060208360051b860101925085831115611c4d575f5ffd5b602085015b83811015611c6a578035835260209283019201611c52565b5095945050505050565b5f60608284031215611c84575f5ffd5b611c8c611a49565b9050611c988383611b6c565b815260408201356001600160401b03811115611cb2575f5ffd5b611cbe84828501611c0a565b60208301525092915050565b5f82601f830112611cd9575f5ffd5b8135611ce7611c2782611be8565b8082825260208201915060208360051b860101925085831115611d08575f5ffd5b602085015b83811015611c6a5780356001600160401b03811115611d2a575f5ffd5b86016060818903601f19011215611d3f575f5ffd5b611d47611a71565b611d5360208301611b1d565b815260408201356001600160401b03811115611d6d575f5ffd5b82016020810190603f018a13611d81575f5ffd5b80356001600160401b03811115611d9a57611d9a611a35565b611dad601f8201601f1916602001611ad7565b8181528b6020838501011115611dc1575f5ffd5b816020840160208301375f6020838301015280602085015250505060608201356001600160401b03811115611df4575f5ffd5b611e038a602083860101611c74565b60408301525084525060209283019201611d0d565b5f818303610120811215611e2a575f5ffd5b611e32611a93565b9150611e3d83611b1d565b825260208381013590830152611e568460408501611b6c565b60408301526080607f1982011215611e6c575f5ffd5b50611e75611a49565b611e828460808501611b9b565b8152611e918460c08501611b9b565b602082015260608201526101008201356001600160401b03811115611eb4575f5ffd5b611ec084828501611cca565b60808301525092915050565b5f5f5f60808486031215611ede575f5ffd5b611ee88585611b30565b925060408401356001600160401b03811115611f02575f5ffd5b611f0e86828701611e18565b92505060608401356001600160401b03811115611f29575f5ffd5b8401601f81018613611f39575f5ffd5b8035611f47611c2782611be8565b8082825260208201915060208360051b850101925088831115611f68575f5ffd5b6020840193505b82841015611f9957833561ffff81168114611f88575f5ffd5b825260209384019390910190611f6f565b809450505050509250925092565b5f5f60608385031215611fb8575f5ffd5b611fc28484611b30565b915060408301356001600160401b03811115611fdc575f5ffd5b611fe885828601611e18565b9150509250929050565b602080825282518282018190525f918401906040840190835b81811015611bdd57835183526020938401939092019160010161200b565b5f5f6060838503121561203a575f5ffd5b6120448484611b30565b915061205260408401611b1d565b90509250929050565b5f6040828403121561206b575f5ffd5b6103978383611b30565b5f60408284031215612085575f5ffd5b50919050565b5f5f5f5f60c0858703121561209e575f5ffd5b6120a88686612075565b93506120b660408601611b1d565b925060608501356001600160401b038111156120d0575f5ffd5b850160a081880312156120e1575f5ffd5b6120e9611ab5565b81358152602080830135908201526121048860408401611b6c565b604082015260808201356001600160401b03811115612121575f5ffd5b61212d89828501611c0a565b606083015250925061214490508660808701612075565b905092959194509250565b5f5f5f60808486031215612161575f5ffd5b61216b8585611b30565b925060408401356001600160401b03811115612185575f5ffd5b61219186828701611e18565b92505060608401356001600160401b038111156121ac575f5ffd5b6121b886828701611c0a565b9150509250925092565b5f5f5f608084860312156121d4575f5ffd5b6121de8585611b30565b92506121ec60408501611b1d565b929592945050506060919091013590565b5f8151808452602084019350602083015f5b8281101561222d57815186526020958601959091019060010161220f565b5093949350505050565b60208082528251805183830152015160408201525f602083015160608084015261226460808401826121fd565b949350505050565b80518252602081015160208301525f6040820151612297604085018280518252602090810151910152565b50606082015160a0608085015261226460a08501826121fd565b602081525f610397602083018461226c565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761039a5761039a6122d7565b634e487b7160e01b5f52601260045260245ffd5b5f8261232457612324612302565b500490565b5f60208284031215612339575f5ffd5b61039782611b07565b5f60208284031215612352575f5ffd5b61039782611b1d565b6001600160a01b0361236c85611b07565b16815263ffffffff61238060208601611b1d565b16602082015263ffffffff83166040820152608060608201525f61115a608083018461226c565b80516020808301519190811015612085575f1960209190910360031b1b16919050565b63ffffffff818116838216019081111561039a5761039a6122d7565b8181038181111561039a5761039a6122d7565b5f8261240757612407612302565b500690565b8082018082111561039a5761039a6122d756fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47a26469706673582212202349f2fb559edb068ba330db8fa1a9bd5364ceaf030e690aa0a9776690c7ef5f64736f6c634300081b0033", + Bin: "0x60a060405234801561000f575f5ffd5b506040516125c63803806125c683398101604081905261002e91610105565b6001600160a01b038116608052610043610049565b50610132565b5f54610100900460ff16156100b45760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff90811614610103575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b5f60208284031215610115575f5ffd5b81516001600160a01b038116811461012b575f5ffd5b9392505050565b6080516124756101515f395f818161015a015261042b01526124755ff3fe608060405234801561000f575f5ffd5b50600436106100a6575f3560e01c80636738c40b1161006e5780636738c40b1461014257806368d6e081146101555780638481892014610194578063dd2ae1b9146101a7578063e49613fc146101ba578063eb39e68f146101da575f5ffd5b8063017d7974146100aa578063080b7150146100d25780632a610b75146100f25780635ddb9b5b146101075780636141879e1461012f575b5f5ffd5b6100bd6100b8366004611ecc565b6101fa565b60405190151581526020015b60405180910390f35b6100e56100e0366004611fa7565b61038b565b6040516100c99190611ff2565b610105610100366004612029565b6103a0565b005b61011a61011536600461205b565b6103d4565b60405163ffffffff90911681526020016100c9565b61011a61013d36600461205b565b6103fa565b61010561015036600461208b565b610420565b61017c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100c9565b61017c6101a236600461205b565b6105ed565b6100bd6101b536600461214f565b610616565b6101cd6101c83660046121c2565b6106a9565b6040516100c99190612237565b6101ed6101e8366004612029565b610761565b6040516100c991906122b1565b5f5f6102068585610826565b90505f610212866109e6565b5f8181526004602081815260408084208a5163ffffffff1685528252808420815160808101835281548152600182015481850152825180840184526002830154815260038301548186015281840152938101805483518186028101860190945280845296975094959394909360608601938301828280156102b057602002820191905f5260205f20905b81548152602001906001019080831161029c575b50505050508152505090505f8160600151905085518451146102e55760405163512509d360e11b815260040160405180910390fd5b5f5b845181101561037a575f612710888381518110610306576103066122c3565b602002602001015161ffff16848481518110610324576103246122c3565b602002602001015161033691906122eb565b6103409190612316565b905080868381518110610355576103556122c3565b60200260200101511015610371575f9650505050505050610384565b506001016102e7565b5060019450505050505b9392505050565b60606103978383610826565b90505b92915050565b5f6103aa836109e6565b5f908152600260205260409020805463ffffffff191663ffffffff93909316929092179091555050565b5f5f6103df836109e6565b5f9081526003602052604090205463ffffffff169392505050565b5f5f610405836109e6565b5f9081526002602052604090205463ffffffff169392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104695760405163030c1b6b60e11b815260040160405180910390fd5b5f61048161047c3687900387018761205b565b6109e6565b5f8181526003602052604090205490915063ffffffff908116908516116104bb57604051632f20889f60e01b815260040160405180910390fd5b5f81815260046020818152604080842063ffffffff8916855282529283902086518155818701516001820155928601518051600285015581015160038401556060860151805187949361051393908501920190611862565b5050505f818152600360209081526040909120805463ffffffff191663ffffffff871617905561054590830183612329565b5f8281526001602090815260409182902080546001600160a01b0319166001600160a01b03949094169390931790925561058491908401908401612342565b5f8281526002602052604090819020805463ffffffff191663ffffffff9390931692909217909155517f93e6bea1c9b5dce4a5c07b00261e956df2a4a253d9ab6ca070ca2037d72ada9e906105de9087908790879061235b565b60405180910390a15050505050565b5f5f6105f8836109e6565b5f908152600160205260409020546001600160a01b03169392505050565b5f5f6106228585610826565b905082518151146106465760405163512509d360e11b815260040160405180910390fd5b5f5b815181101561069d57838181518110610663576106636122c3565b602002602001015182828151811061067d5761067d6122c3565b60200260200101511015610695575f92505050610384565b600101610648565b50600195945050505050565b6106b16118ab565b5f6106bb856109e6565b5f81815260056020908152604080832063ffffffff89168452825280832087845282529182902082516080810184528154818501908152600183015460608301528152600282018054855181860281018601909652808652959650909491938584019390929083018282801561074e57602002820191905f5260205f20905b81548152602001906001019080831161073a575b5050505050815250509150509392505050565b6107696118d5565b5f610773846109e6565b5f81815260046020818152604080842063ffffffff891685528252928390208351608081018552815481526001820154818401528451808601865260028301548152600383015481850152818601529281018054855181850281018501909652808652959650929490936060860193909290919083018282801561081457602002820191905f5260205f20905b815481526020019060010190808311610800575b50505050508152505091505092915050565b6060610830611907565b610839846109e6565b80825283516108489190610a49565b80515f908152600460208181526040808420875163ffffffff16855282529283902083516080810185528154815260018201548184015284518086018652600283015481526003830154818501528186015292810180548551818502810185019096528086529394919360608601938301828280156108e457602002820191905f5260205f20905b8154815260200190600101908083116108d0575b50505091909252505050602082018190525161091357604051630cad17b760e31b815260040160405180910390fd5b806020015160600151516001600160401b0381111561093457610934611a35565b60405190808252806020026020018201604052801561095d578160200160208202803683370190505b5060408201525f5b816020015160600151518110156109c1578160200151606001518181518110610990576109906122c3565b6020026020010151826040015182815181106109ae576109ae6122c3565b6020908102919091010152600101610965565b506109cc8184610a9b565b60608201526109db8184610bc5565b604001519392505050565b5f815f0151826020015163ffffffff16604051602001610a3192919060609290921b6bffffffffffffffffffffffff1916825260a01b6001600160a01b031916601482015260200190565b60405160208183030381529060405261039a906123a7565b5f8281526002602052604090205463ffffffff16801580610a795750610a6f81836123ca565b63ffffffff164211155b610a965760405163640fcd6b60e11b815260040160405180910390fd5b505050565b6040805180820182525f808252602091820181905282518084019093528083529082018190525b826080015151811015610bbe575f83608001518281518110610ae657610ae66122c3565b60200260200101519050846020015160200151815f015163ffffffff1610610b21576040516301fa53c760e11b815260040160405180910390fd5b845184515f91610b319184610c33565b8051909150610b41908590610da8565b93505f5b816020015151811015610bb357866040015151811015610bab5781602001518181518110610b7557610b756122c3565b602002602001015187604001518281518110610b9357610b936122c3565b60200260200101818151610ba791906123e6565b9052505b600101610b45565b505050600101610ac2565b5092915050565b5f610be5610bd68460600151610e24565b60208501516040015190610da8565b90505f5f610c0184602001518486606001518760400151610eba565b91509150818015610c0f5750805b610c2c5760405163439cc0cd60e01b815260040160405180910390fd5b5050505050565b610c3b6118ab565b5f84815260056020908152604080832063ffffffff80881685529083528184208651909116845290915281208054909190151580610c7c5750600182015415155b905080610d25575f610c9c8787875f015188604001518960200151610edb565b905080610cbc5760405163439cc0cd60e01b815260040160405180910390fd5b6040808601515f8981526005602090815283822063ffffffff808c1684529082528483208a5190911683528152929020815180518255830151600182015582820151805192939192610d149260028501920190611862565b509050508460400151935050610d9f565b6040805160808101825283548183019081526001850154606083015281526002840180548351602082810282018101909552818152929386938186019390929091830182828015610d9357602002820191905f5260205f20905b815481526020019060010190808311610d7f575b50505050508152505092505b50509392505050565b604080518082019091525f8082526020820152610dc361194c565b835181526020808501518183015283516040808401919091529084015160608301525f908360808460066107d05a03fa90508080610dfd57fe5b5080610e1c5760405163d4b68fd760e01b815260040160405180910390fd5b505092915050565b604080518082019091525f80825260208201528151158015610e4857506020820151155b15610e65575050604080518082019091525f808252602082015290565b6040518060400160405280835f015181526020015f5160206124205f395f51905f528460200151610e9691906123f9565b610ead905f5160206124205f395f51905f526123e6565b905292915050565b919050565b5f5f610ece86848787600162061a80610f46565b9150915094509492505050565b5f5f83604051602001610eee9190612237565b60408051601f1981840301815291815281516020928301205f8a81526004845282812063ffffffff808c1683529452919091205490925090610f3a908590839085908a81169061100e16565b98975050505050505050565b5f5f5f610f5289611025565b90505f610f618a89898c6110af565b90505f610f78610f718a84611163565b8b90610da8565b90505f610fba610fb384610fad6040805180820182525f80825260209182015281518083019092526001825260029082015290565b90611163565b8590610da8565b90508715610fdf57610fd682610fce6111cb565b838c8b61128b565b96509450610fff565b610ff282610feb6111cb565b838c61149f565b95508515610fff57600194505b50505050965096945050505050565b5f8361101b8685856116d6565b1495945050505050565b604080518082019091525f80825260208201525f80806110525f5160206124205f395f51905f52866123f9565b90505b61105e8161176d565b90935091505f5160206124205f395f51905f528283098303611096576040805180820190915290815260208101919091529392505050565b5f5160206124205f395f51905f52600182089050611055565b8251602080850151845180519083015186840151805190850151875188870151604080519889018e90528801989098526060870195909552608086019390935260a085019190915260c084015260e08301526101008201526101208101919091525f907f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000019061014001604051602081830303815290604052805190602001205f1c61115a91906123f9565b95945050505050565b604080518082019091525f808252602082015261117e61196a565b835181526020808501519082015260408082018490525f908360608460076107d05a03fa905080806111ac57fe5b5080610e1c57604051632319df1960e11b815260040160405180910390fd5b6111d3611988565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b6040805180820182528681526020808201869052825180840190935286835282018490525f918291906112bc6119a8565b5f5b6002811015611473575f6112d38260066122eb565b90508482600281106112e7576112e76122c3565b602002015151836112f8835f61240c565b600c8110611308576113086122c3565b602002015284826002811061131f5761131f6122c3565b60200201516020015183826001611336919061240c565b600c8110611346576113466122c3565b602002015283826002811061135d5761135d6122c3565b602002015151518361137083600261240c565b600c8110611380576113806122c3565b6020020152838260028110611397576113976122c3565b60200201515160016020020151836113b083600361240c565b600c81106113c0576113c06122c3565b60200201528382600281106113d7576113d76122c3565b6020020151602001515f600281106113f1576113f16122c3565b60200201518361140283600461240c565b600c8110611412576114126122c3565b6020020152838260028110611429576114296122c3565b602002015160200151600160028110611444576114446122c3565b60200201518361145583600561240c565b600c8110611465576114656122c3565b6020020152506001016112be565b5061147c6119c7565b5f6020826101808560088cfa9151919c9115159b50909950505050505050505050565b6040805180820182528581526020808201859052825180840190935285835282018390525f916114cd6119a8565b5f5b6002811015611684575f6114e48260066122eb565b90508482600281106114f8576114f86122c3565b60200201515183611509835f61240c565b600c8110611519576115196122c3565b6020020152848260028110611530576115306122c3565b60200201516020015183826001611547919061240c565b600c8110611557576115576122c3565b602002015283826002811061156e5761156e6122c3565b602002015151518361158183600261240c565b600c8110611591576115916122c3565b60200201528382600281106115a8576115a86122c3565b60200201515160016020020151836115c183600361240c565b600c81106115d1576115d16122c3565b60200201528382600281106115e8576115e86122c3565b6020020151602001515f60028110611602576116026122c3565b60200201518361161383600461240c565b600c8110611623576116236122c3565b602002015283826002811061163a5761163a6122c3565b602002015160200151600160028110611655576116556122c3565b60200201518361166683600561240c565b600c8110611676576116766122c3565b6020020152506001016114cf565b5061168d6119c7565b5f6020826101808560086107d05a03fa905080806116a757fe5b50806116c6576040516324ccc79360e21b815260040160405180910390fd5b5051151598975050505050505050565b5f602084516116e591906123f9565b15611703576040516313717da960e21b815260040160405180910390fd5b8260205b855181116117645761171a6002856123f9565b5f0361173b57815f528086015160205260405f209150600284049350611752565b808601515f528160205260405f2091506002840493505b61175d60208261240c565b9050611707565b50949350505050565b5f80805f5160206124205f395f51905f5260035f5160206124205f395f51905f52865f5160206124205f395f51905f52888909090890505f6117dd827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f525f5160206124205f395f51905f526117e9565b91959194509092505050565b5f5f6117f36119c7565b6117fb6119e5565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa9250828061183857fe5b50826118575760405163d51edae360e01b815260040160405180910390fd5b505195945050505050565b828054828255905f5260205f2090810192821561189b579160200282015b8281111561189b578251825591602001919060010190611880565b506118a7929150611a03565b5090565b604080516080810182525f91810182815260608201929092529081905b8152602001606081525090565b60405180608001604052805f81526020015f81526020016118c860405180604001604052805f81526020015f81525090565b60405180608001604052805f81526020016119206118d5565b81526020016060815260200161194760405180604001604052805f81526020015f81525090565b905290565b60405180608001604052806004906020820280368337509192915050565b60405180606001604052806003906020820280368337509192915050565b604051806040016040528061199b611a17565b8152602001611947611a17565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b5b808211156118a7575f8155600101611a04565b60405180604001604052806002906020820280368337509192915050565b634e487b7160e01b5f52604160045260245ffd5b604080519081016001600160401b0381118282101715611a6b57611a6b611a35565b60405290565b604051606081016001600160401b0381118282101715611a6b57611a6b611a35565b60405160a081016001600160401b0381118282101715611a6b57611a6b611a35565b604051608081016001600160401b0381118282101715611a6b57611a6b611a35565b604051601f8201601f191681016001600160401b0381118282101715611aff57611aff611a35565b604052919050565b80356001600160a01b0381168114610eb5575f5ffd5b803563ffffffff81168114610eb5575f5ffd5b5f60408284031215611b40575f5ffd5b611b48611a49565b9050611b5382611b07565b8152611b6160208301611b1d565b602082015292915050565b5f60408284031215611b7c575f5ffd5b611b84611a49565b823581526020928301359281019290925250919050565b5f82601f830112611baa575f5ffd5b611bb2611a49565b806040840185811115611bc3575f5ffd5b845b81811015611bdd578035845260209384019301611bc5565b509095945050505050565b5f6001600160401b03821115611c0057611c00611a35565b5060051b60200190565b5f82601f830112611c19575f5ffd5b8135611c2c611c2782611be8565b611ad7565b8082825260208201915060208360051b860101925085831115611c4d575f5ffd5b602085015b83811015611c6a578035835260209283019201611c52565b5095945050505050565b5f60608284031215611c84575f5ffd5b611c8c611a49565b9050611c988383611b6c565b815260408201356001600160401b03811115611cb2575f5ffd5b611cbe84828501611c0a565b60208301525092915050565b5f82601f830112611cd9575f5ffd5b8135611ce7611c2782611be8565b8082825260208201915060208360051b860101925085831115611d08575f5ffd5b602085015b83811015611c6a5780356001600160401b03811115611d2a575f5ffd5b86016060818903601f19011215611d3f575f5ffd5b611d47611a71565b611d5360208301611b1d565b815260408201356001600160401b03811115611d6d575f5ffd5b82016020810190603f018a13611d81575f5ffd5b80356001600160401b03811115611d9a57611d9a611a35565b611dad601f8201601f1916602001611ad7565b8181528b6020838501011115611dc1575f5ffd5b816020840160208301375f6020838301015280602085015250505060608201356001600160401b03811115611df4575f5ffd5b611e038a602083860101611c74565b60408301525084525060209283019201611d0d565b5f818303610120811215611e2a575f5ffd5b611e32611a93565b9150611e3d83611b1d565b825260208381013590830152611e568460408501611b6c565b60408301526080607f1982011215611e6c575f5ffd5b50611e75611a49565b611e828460808501611b9b565b8152611e918460c08501611b9b565b602082015260608201526101008201356001600160401b03811115611eb4575f5ffd5b611ec084828501611cca565b60808301525092915050565b5f5f5f60808486031215611ede575f5ffd5b611ee88585611b30565b925060408401356001600160401b03811115611f02575f5ffd5b611f0e86828701611e18565b92505060608401356001600160401b03811115611f29575f5ffd5b8401601f81018613611f39575f5ffd5b8035611f47611c2782611be8565b8082825260208201915060208360051b850101925088831115611f68575f5ffd5b6020840193505b82841015611f9957833561ffff81168114611f88575f5ffd5b825260209384019390910190611f6f565b809450505050509250925092565b5f5f60608385031215611fb8575f5ffd5b611fc28484611b30565b915060408301356001600160401b03811115611fdc575f5ffd5b611fe885828601611e18565b9150509250929050565b602080825282518282018190525f918401906040840190835b81811015611bdd57835183526020938401939092019160010161200b565b5f5f6060838503121561203a575f5ffd5b6120448484611b30565b915061205260408401611b1d565b90509250929050565b5f6040828403121561206b575f5ffd5b6103978383611b30565b5f60408284031215612085575f5ffd5b50919050565b5f5f5f5f60c0858703121561209e575f5ffd5b6120a88686612075565b93506120b660408601611b1d565b925060608501356001600160401b038111156120d0575f5ffd5b850160a081880312156120e1575f5ffd5b6120e9611ab5565b81358152602080830135908201526121048860408401611b6c565b604082015260808201356001600160401b03811115612121575f5ffd5b61212d89828501611c0a565b606083015250925061214490508660808701612075565b905092959194509250565b5f5f5f60808486031215612161575f5ffd5b61216b8585611b30565b925060408401356001600160401b03811115612185575f5ffd5b61219186828701611e18565b92505060608401356001600160401b038111156121ac575f5ffd5b6121b886828701611c0a565b9150509250925092565b5f5f5f608084860312156121d4575f5ffd5b6121de8585611b30565b92506121ec60408501611b1d565b929592945050506060919091013590565b5f8151808452602084019350602083015f5b8281101561222d57815186526020958601959091019060010161220f565b5093949350505050565b60208082528251805183830152015160408201525f602083015160608084015261226460808401826121fd565b949350505050565b80518252602081015160208301525f6040820151612297604085018280518252602090810151910152565b50606082015160a0608085015261226460a08501826121fd565b602081525f610397602083018461226c565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761039a5761039a6122d7565b634e487b7160e01b5f52601260045260245ffd5b5f8261232457612324612302565b500490565b5f60208284031215612339575f5ffd5b61039782611b07565b5f60208284031215612352575f5ffd5b61039782611b1d565b6001600160a01b0361236c85611b07565b16815263ffffffff61238060208601611b1d565b16602082015263ffffffff83166040820152608060608201525f61115a608083018461226c565b80516020808301519190811015612085575f1960209190910360031b1b16919050565b63ffffffff818116838216019081111561039a5761039a6122d7565b8181038181111561039a5761039a6122d7565b5f8261240757612407612302565b500690565b8082018082111561039a5761039a6122d756fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47a2646970667358221220ddad88839ff42d19084cef812ed56bfe44fbc206dd39914e1aa5f039e8744a0b64736f6c634300081b0033", } // BN254CertificateVerifierABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/BN254TableCalculator/binding.go b/pkg/bindings/BN254TableCalculator/binding.go index 007e9a7849..c7d376e0bf 100644 --- a/pkg/bindings/BN254TableCalculator/binding.go +++ b/pkg/bindings/BN254TableCalculator/binding.go @@ -57,8 +57,8 @@ type OperatorSet struct { // BN254TableCalculatorMetaData contains all meta data concerning the BN254TableCalculator contract. var BN254TableCalculatorMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_keyRegistrar\",\"type\":\"address\",\"internalType\":\"contractIKeyRegistrar\"},{\"name\":\"_allocationManager\",\"type\":\"address\",\"internalType\":\"contractIAllocationManager\"},{\"name\":\"_LOOKAHEAD_BLOCKS\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"LOOKAHEAD_BLOCKS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"allocationManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIAllocationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateOperatorTable\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"operatorSetInfo\",\"type\":\"tuple\",\"internalType\":\"structIBN254TableCalculatorTypes.BN254OperatorSetInfo\",\"components\":[{\"name\":\"operatorInfoTreeRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"numOperators\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"aggregatePubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"totalWeights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateOperatorTableBytes\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"operatorTableBytes\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorInfos\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple[]\",\"internalType\":\"structIBN254TableCalculatorTypes.BN254OperatorInfo[]\",\"components\":[{\"name\":\"pubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"weights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorWeight\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"weight\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorWeights\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"operators\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"weights\",\"type\":\"uint256[][]\",\"internalType\":\"uint256[][]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"keyRegistrar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIKeyRegistrar\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"LookaheadBlocksSet\",\"inputs\":[{\"name\":\"lookaheadBlocks\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ECAddFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LookaheadBlocksTooHigh\",\"inputs\":[]}]", - Bin: "0x60e060405234801561000f575f5ffd5b506040516116d03803806116d083398101604081905261002e91610060565b6001600160a01b03928316608052911660a05260c0526100a0565b6001600160a01b038116811461005d575f5ffd5b50565b5f5f5f60608486031215610072575f5ffd5b835161007d81610049565b602085015190935061008e81610049565b80925050604084015190509250925092565b60805160a05160c0516115cf6101015f395f8181610133015261063401525f818161017b015281816104df0152818161056f015261060701525f818160d401528181610329015281816103d5015281816108d401526109ef01526115cf5ff3fe608060405234801561000f575f5ffd5b5060043610610085575f3560e01c80635e120ffc116100585780635e120ffc1461012e57806371ca71d914610155578063ca8aa7c714610176578063cf2d90ef1461019d575f5ffd5b80631088794a14610089578063124c87e0146100af5780633ec45c7e146100cf57806341ee6d0e1461010e575b5f5ffd5b61009c610097366004610e20565b6101bd565b6040519081526020015b60405180910390f35b6100c26100bd366004610e56565b61025d565b6040516100a69190610eb1565b6100f67f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100a6565b61012161011c366004610e56565b61026e565b6040516100a69190610f04565b61009c7f000000000000000000000000000000000000000000000000000000000000000081565b610168610163366004610e56565b61029f565b6040516100a6929190610f72565b6100f67f000000000000000000000000000000000000000000000000000000000000000081565b6101b06101ab366004610e56565b6102b4565b6040516100a69190611016565b5f5f5f6101c9856104da565b90925090505f5b825181101561025057846001600160a01b03168382815181106101f5576101f5611079565b60200260200101516001600160a01b0316036102485781818151811061021d5761021d611079565b60200260200101515f8151811061023657610236611079565b60200260200101519350505050610257565b6001016101d0565b505f925050505b92915050565b610265610d75565b610257826107ea565b6060610279826107ea565b6040516020016102899190610eb1565b6040516020818303038152906040529050919050565b6060806102ab836104da565b91509150915091565b60605f5f6102c1846104da565b915091505f825167ffffffffffffffff8111156102e0576102e061108d565b60405190808252806020026020018201604052801561031957816020015b610306610db4565b8152602001906001900390816102fe5790505b5090505f5b83518110156104d1577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663bd30a0b98786848151811061036957610369611079565b60200260200101516040518363ffffffff1660e01b815260040161038e9291906110da565b602060405180830381865afa1580156103a9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103cd9190611100565b156104c9575f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639a43e3fb8887858151811061041557610415611079565b60200260200101516040518363ffffffff1660e01b815260040161043a9291906110da565b60c060405180830381865afa158015610455573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061047991906111c6565b509050604051806040016040528082815260200185848151811061049f5761049f611079565b60200260200101518152508383815181106104bc576104bc611079565b6020026020010181905250505b60010161031e565b50949350505050565b6060807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636e875dba846040518263ffffffff1660e01b81526004016105299190611243565b5f60405180830381865afa158015610543573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261056a9190810190611274565b91505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634177a87c856040518263ffffffff1660e01b81526004016105b99190611243565b5f60405180830381865afa1580156105d3573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526105fa9190810190611313565b90505f6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016632bab2c4a8686856106597f0000000000000000000000000000000000000000000000000000000000000000436113b7565b6040518563ffffffff1660e01b815260040161067894939291906113ca565b5f60405180830381865afa158015610692573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526106b99190810190611443565b9050835167ffffffffffffffff8111156106d5576106d561108d565b60405190808252806020026020018201604052801561070857816020015b60608152602001906001900390816106f35790505b5092505f5b84518110156107e25760408051600180825281830190925290602080830190803683370190505084828151811061074657610746611079565b60209081029190910101525f5b83518110156107d95782828151811061076e5761076e611079565b6020026020010151818151811061078757610787611079565b60200260200101518583815181106107a1576107a1611079565b60200260200101515f815181106107ba576107ba611079565b602002602001018181516107ce91906113b7565b905250600101610753565b5060010161070d565b505050915091565b6107f2610d75565b5f5f6107fd846104da565b915091505f815f8151811061081457610814611079565b60200260200101515190505f8167ffffffffffffffff8111156108395761083961108d565b604051908082528060200260200182016040528015610862578160200160208202803683370190505b5090505f845167ffffffffffffffff8111156108805761088061108d565b6040519080825280602002602001820160405280156108a9578160200160208202803683370190505b5090506108c760405180604001604052805f81526020015f81525090565b5f5b8651811015610b1d577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663bd30a0b98a89848151811061091457610914611079565b60200260200101516040518363ffffffff1660e01b81526004016109399291906110da565b602060405180830381865afa158015610954573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109789190611100565b15610b15575f5b858110156109eb5786828151811061099957610999611079565b602002602001015181815181106109b2576109b2611079565b60200260200101518582815181106109cc576109cc611079565b602002602001018181516109e091906113b7565b90525060010161097f565b505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639a43e3fb8b8a8581518110610a2f57610a2f611079565b60200260200101516040518363ffffffff1660e01b8152600401610a549291906110da565b60c060405180830381865afa158015610a6f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a9391906111c6565b5090506040518060400160405280828152602001888481518110610ab957610ab9611079565b6020026020010151815250604051602001610ad49190611551565b60405160208183030381529060405280519060200120848381518110610afc57610afc611079565b6020908102919091010152610b118382610b53565b9250505b6001016108c9565b505f610b2883610bcf565b6040805160808101825291825297516020820152968701919091525050606084015250909392505050565b604080518082019091525f8082526020820152610b6e610dd5565b835181526020808501518183015283516040808401919091529084015160608301525f908360808460066107d05a03fa90508080610ba857fe5b5080610bc75760405163d4b68fd760e01b815260040160405180910390fd5b505092915050565b5f60015b8251811015610bee57610be7600282611563565b9050610bd3565b5f8167ffffffffffffffff811115610c0857610c0861108d565b604051908082528060200260200182016040528015610c31578160200160208202803683370190505b5090505f5b8451811015610c7e57848181518110610c5157610c51611079565b6020026020010151828281518110610c6b57610c6b611079565b6020908102919091010152600101610c36565b505b81600114610d52575f610c9460028461157a565b90505f5b81811015610d4a5782610cac826002611563565b81518110610cbc57610cbc611079565b602002602001015183826002610cd29190611563565b610cdd9060016113b7565b81518110610ced57610ced611079565b6020026020010151604051602001610d0f929190918252602082015260400190565b60405160208183030381529060405280519060200120838281518110610d3757610d37611079565b6020908102919091010152600101610c98565b509150610c80565b805f81518110610d6457610d64611079565b602002602001015192505050919050565b60405180608001604052805f81526020015f8152602001610da760405180604001604052805f81526020015f81525090565b8152602001606081525090565b604080516080810182525f9181018281526060820192909252908190610da7565b60405180608001604052806004906020820280368337509192915050565b5f60408284031215610e03575f5ffd5b50919050565b6001600160a01b0381168114610e1d575f5ffd5b50565b5f5f60608385031215610e31575f5ffd5b610e3b8484610df3565b91506040830135610e4b81610e09565b809150509250929050565b5f60408284031215610e66575f5ffd5b610e708383610df3565b9392505050565b5f8151808452602084019350602083015f5b82811015610ea7578151865260209586019590910190600101610e89565b5093949350505050565b6020815281516020820152602082015160408201525f6040830151610ee3606084018280518252602090810151910152565b50606083015160a080840152610efc60c0840182610e77565b949350505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f8151808452602084019350602083015f5b82811015610ea75781516001600160a01b0316865260209586019590910190600101610f4b565b604081525f610f846040830185610f39565b828103602084015280845180835260208301915060208160051b840101602087015f5b83811015610fd957601f19868403018552610fc3838351610e77565b6020958601959093509190910190600101610fa7565b509098975050505050505050565b610ffc82825180518252602090810151910152565b5f602082015160606040850152610efc6060850182610e77565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561106d57603f19878603018452611058858351610fe7565b9450602093840193919091019060010161103c565b50929695505050505050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52604160045260245ffd5b80356110ac81610e09565b6001600160a01b03168252602081013563ffffffff81168082146110ce575f5ffd5b80602085015250505050565b606081016110e882856110a1565b6001600160a01b039290921660409190910152919050565b5f60208284031215611110575f5ffd5b81518015158114610e70575f5ffd5b6040805190810167ffffffffffffffff811182821017156111425761114261108d565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156111715761117161108d565b604052919050565b5f82601f830112611188575f5ffd5b61119061111f565b8060408401858111156111a1575f5ffd5b845b818110156111bb5780518452602093840193016111a3565b509095945050505050565b5f5f82840360c08112156111d8575f5ffd5b60408112156111e5575f5ffd5b6111ed61111f565b845181526020808601519082015292506080603f198201121561120e575f5ffd5b5061121761111f565b6112248560408601611179565b81526112338560808601611179565b6020820152809150509250929050565b6040810161025782846110a1565b5f67ffffffffffffffff82111561126a5761126a61108d565b5060051b60200190565b5f60208284031215611284575f5ffd5b815167ffffffffffffffff81111561129a575f5ffd5b8201601f810184136112aa575f5ffd5b80516112bd6112b882611251565b611148565b8082825260208201915060208360051b8501019250868311156112de575f5ffd5b6020840193505b828410156113095783516112f881610e09565b8252602093840193909101906112e5565b9695505050505050565b5f60208284031215611323575f5ffd5b815167ffffffffffffffff811115611339575f5ffd5b8201601f81018413611349575f5ffd5b80516113576112b882611251565b8082825260208201915060208360051b850101925086831115611378575f5ffd5b6020840193505b8284101561130957835161139281610e09565b82526020938401939091019061137f565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610257576102576113a3565b6113d481866110a1565b60a060408201525f6113e960a0830186610f39565b8281036060840152845180825260208087019201905f5b818110156114275783516001600160a01b0316835260209384019390920191600101611400565b5050809250505063ffffffff8316608083015295945050505050565b5f60208284031215611453575f5ffd5b815167ffffffffffffffff811115611469575f5ffd5b8201601f81018413611479575f5ffd5b80516114876112b882611251565b8082825260208201915060208360051b8501019250868311156114a8575f5ffd5b602084015b8381101561154657805167ffffffffffffffff8111156114cb575f5ffd5b8501603f810189136114db575f5ffd5b60208101516114ec6112b882611251565b808282526020820191506020808460051b8601010192508b83111561150f575f5ffd5b6040840193505b82841015611531578351825260209384019390910190611516565b865250506020938401939190910190506114ad565b509695505050505050565b602081525f610e706020830184610fe7565b8082028115828204841417610257576102576113a3565b5f8261159457634e487b7160e01b5f52601260045260245ffd5b50049056fea2646970667358221220b107f6a803276bf49886b13eaa27cb8636850339b95aae4eecdc1c6a46f9015564736f6c634300081b0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_keyRegistrar\",\"type\":\"address\",\"internalType\":\"contractIKeyRegistrar\"},{\"name\":\"_allocationManager\",\"type\":\"address\",\"internalType\":\"contractIAllocationManager\"},{\"name\":\"_LOOKAHEAD_BLOCKS\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"LOOKAHEAD_BLOCKS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"allocationManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIAllocationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateOperatorTable\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"operatorSetInfo\",\"type\":\"tuple\",\"internalType\":\"structIBN254TableCalculatorTypes.BN254OperatorSetInfo\",\"components\":[{\"name\":\"operatorInfoTreeRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"numOperators\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"aggregatePubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"totalWeights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateOperatorTableBytes\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"operatorTableBytes\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorInfos\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple[]\",\"internalType\":\"structIBN254TableCalculatorTypes.BN254OperatorInfo[]\",\"components\":[{\"name\":\"pubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"weights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorWeight\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"weight\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorWeights\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"operators\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"weights\",\"type\":\"uint256[][]\",\"internalType\":\"uint256[][]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"keyRegistrar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIKeyRegistrar\"}],\"stateMutability\":\"view\"},{\"type\":\"error\",\"name\":\"ECAddFailed\",\"inputs\":[]}]", + Bin: "0x60e060405234801561000f575f5ffd5b506040516118b23803806118b283398101604081905261002e91610060565b6001600160a01b03928316608052911660a05260c0526100a0565b6001600160a01b038116811461005d575f5ffd5b50565b5f5f5f60608486031215610072575f5ffd5b835161007d81610049565b602085015190935061008e81610049565b80925050604084015190509250925092565b60805160a05160c0516117b16101015f395f8181610133015261063401525f818161017b015281816104df0152818161056f015261060701525f818160d401528181610328015281816103d401528181610a040152610b1f01526117b15ff3fe608060405234801561000f575f5ffd5b5060043610610085575f3560e01c80635e120ffc116100585780635e120ffc1461012e57806371ca71d914610155578063ca8aa7c714610176578063cf2d90ef1461019d575f5ffd5b80631088794a14610089578063124c87e0146100af5780633ec45c7e146100cf57806341ee6d0e1461010e575b5f5ffd5b61009c610097366004610ff1565b6101bd565b6040519081526020015b60405180910390f35b6100c26100bd366004611027565b61025d565b6040516100a69190611082565b6100f67f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100a6565b61012161011c366004611027565b61026e565b6040516100a691906110d5565b61009c7f000000000000000000000000000000000000000000000000000000000000000081565b610168610163366004611027565b61029f565b6040516100a6929190611143565b6100f67f000000000000000000000000000000000000000000000000000000000000000081565b6101b06101ab366004611027565b6102b4565b6040516100a691906111e7565b5f5f5f6101c9856104d9565b90925090505f5b825181101561025057846001600160a01b03168382815181106101f5576101f561124a565b60200260200101516001600160a01b0316036102485781818151811061021d5761021d61124a565b60200260200101515f815181106102365761023661124a565b60200260200101519350505050610257565b6001016101d0565b505f925050505b92915050565b610265610f46565b61025782610894565b606061027982610894565b6040516020016102899190611082565b6040516020818303038152906040529050919050565b6060806102ab836104d9565b91509150915091565b60605f5f6102c1846104d9565b915091505f82516001600160401b038111156102df576102df61125e565b60405190808252806020026020018201604052801561031857816020015b610305610f85565b8152602001906001900390816102fd5790505b5090505f5b83518110156104d0577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663bd30a0b9878684815181106103685761036861124a565b60200260200101516040518363ffffffff1660e01b815260040161038d9291906112ab565b602060405180830381865afa1580156103a8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103cc91906112d1565b156104c8575f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639a43e3fb888785815181106104145761041461124a565b60200260200101516040518363ffffffff1660e01b81526004016104399291906112ab565b60c060405180830381865afa158015610454573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104789190611395565b509050604051806040016040528082815260200185848151811061049e5761049e61124a565b60200260200101518152508383815181106104bb576104bb61124a565b6020026020010181905250505b60010161031d565b50949350505050565b6060805f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636e875dba856040518263ffffffff1660e01b81526004016105299190611412565b5f60405180830381865afa158015610543573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261056a9190810190611442565b90505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634177a87c866040518263ffffffff1660e01b81526004016105b99190611412565b5f60405180830381865afa1580156105d3573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526105fa91908101906114e0565b90505f6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016632bab2c4a8785856106597f000000000000000000000000000000000000000000000000000000000000000043611583565b6040518563ffffffff1660e01b81526004016106789493929190611596565b5f60405180830381865afa158015610692573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526106b9919081019061160f565b905082516001600160401b038111156106d4576106d461125e565b6040519080825280602002602001820160405280156106fd578160200160208202803683370190505b50945082516001600160401b038111156107195761071961125e565b60405190808252806020026020018201604052801561074c57816020015b60608152602001906001900390816107375790505b5093505f805b8451811015610884575f805b85518110156107af578483815181106107795761077961124a565b602002602001015181815181106107925761079261124a565b6020026020010151826107a59190611583565b915060010161075e565b50801561087b576040805160018082528183019092529060208083019080368337019050508784815181106107e6576107e661124a565b6020026020010181905250808784815181106108045761080461124a565b60200260200101515f8151811061081d5761081d61124a565b60200260200101818152505085828151811061083b5761083b61124a565b60200260200101518884815181106108555761085561124a565b6001600160a01b0390921660209283029190910190910152826108778161171b565b9350505b50600101610752565b5080865280855250505050915091565b61089c610f46565b5f5f6108a7846104d9565b9150915080515f036109325760405180608001604052805f5f1b81526020015f815260200160405180604001604052805f81526020015f81525081526020015f6001600160401b038111156108fe576108fe61125e565b604051908082528060200260200182016040528015610927578160200160208202803683370190505b509052949350505050565b5f815f815181106109455761094561124a565b60200260200101515190505f816001600160401b038111156109695761096961125e565b604051908082528060200260200182016040528015610992578160200160208202803683370190505b5090505f84516001600160401b038111156109af576109af61125e565b6040519080825280602002602001820160405280156109d8578160200160208202803683370190505b5090506109f660405180604001604052805f81526020015f81525090565b5f805b8751811015610c5a577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663bd30a0b98b8a8481518110610a4457610a4461124a565b60200260200101516040518363ffffffff1660e01b8152600401610a699291906112ab565b602060405180830381865afa158015610a84573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aa891906112d1565b15610c52575f5b86811015610b1b57878281518110610ac957610ac961124a565b60200260200101518181518110610ae257610ae261124a565b6020026020010151868281518110610afc57610afc61124a565b60200260200101818151610b109190611583565b905250600101610aaf565b505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639a43e3fb8c8b8581518110610b5f57610b5f61124a565b60200260200101516040518363ffffffff1660e01b8152600401610b849291906112ab565b60c060405180830381865afa158015610b9f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bc39190611395565b5090506040518060400160405280828152602001898481518110610be957610be961124a565b6020026020010151815250604051602001610c049190611733565b60405160208183030381529060405280519060200120858381518110610c2c57610c2c61124a565b6020908102919091010152610c418482610d25565b935082610c4d8161171b565b935050505b6001016109f9565b50805f03610ce65760405180608001604052805f5f1b81526020015f815260200160405180604001604052805f81526020015f81525081526020015f6001600160401b03811115610cad57610cad61125e565b604051908082528060200260200182016040528015610cd6578160200160208202803683370190505b5090529998505050505050505050565b8083525f610cf384610da1565b905060405180608001604052808281526020018381526020018481526020018681525098505050505050505050919050565b604080518082019091525f8082526020820152610d40610fa6565b835181526020808501518183015283516040808401919091529084015160608301525f908360808460066107d05a03fa90508080610d7a57fe5b5080610d995760405163d4b68fd760e01b815260040160405180910390fd5b505092915050565b5f60015b8251811015610dc057610db9600282611745565b9050610da5565b5f816001600160401b03811115610dd957610dd961125e565b604051908082528060200260200182016040528015610e02578160200160208202803683370190505b5090505f5b8451811015610e4f57848181518110610e2257610e2261124a565b6020026020010151828281518110610e3c57610e3c61124a565b6020908102919091010152600101610e07565b505b81600114610f23575f610e6560028461175c565b90505f5b81811015610f1b5782610e7d826002611745565b81518110610e8d57610e8d61124a565b602002602001015183826002610ea39190611745565b610eae906001611583565b81518110610ebe57610ebe61124a565b6020026020010151604051602001610ee0929190918252602082015260400190565b60405160208183030381529060405280519060200120838281518110610f0857610f0861124a565b6020908102919091010152600101610e69565b509150610e51565b805f81518110610f3557610f3561124a565b602002602001015192505050919050565b60405180608001604052805f81526020015f8152602001610f7860405180604001604052805f81526020015f81525090565b8152602001606081525090565b604080516080810182525f9181018281526060820192909252908190610f78565b60405180608001604052806004906020820280368337509192915050565b5f60408284031215610fd4575f5ffd5b50919050565b6001600160a01b0381168114610fee575f5ffd5b50565b5f5f60608385031215611002575f5ffd5b61100c8484610fc4565b9150604083013561101c81610fda565b809150509250929050565b5f60408284031215611037575f5ffd5b6110418383610fc4565b9392505050565b5f8151808452602084019350602083015f5b8281101561107857815186526020958601959091019060010161105a565b5093949350505050565b6020815281516020820152602082015160408201525f60408301516110b4606084018280518252602090810151910152565b50606083015160a0808401526110cd60c0840182611048565b949350505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f8151808452602084019350602083015f5b828110156110785781516001600160a01b031686526020958601959091019060010161111c565b604081525f611155604083018561110a565b828103602084015280845180835260208301915060208160051b840101602087015f5b838110156111aa57601f19868403018552611194838351611048565b6020958601959093509190910190600101611178565b509098975050505050505050565b6111cd82825180518252602090810151910152565b5f6020820151606060408501526110cd6060850182611048565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561123e57603f198786030184526112298583516111b8565b9450602093840193919091019060010161120d565b50929695505050505050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52604160045260245ffd5b803561127d81610fda565b6001600160a01b03168252602081013563ffffffff811680821461129f575f5ffd5b80602085015250505050565b606081016112b98285611272565b6001600160a01b039290921660409190910152919050565b5f602082840312156112e1575f5ffd5b81518015158114611041575f5ffd5b604080519081016001600160401b03811182821017156113125761131261125e565b60405290565b604051601f8201601f191681016001600160401b03811182821017156113405761134061125e565b604052919050565b5f82601f830112611357575f5ffd5b61135f6112f0565b806040840185811115611370575f5ffd5b845b8181101561138a578051845260209384019301611372565b509095945050505050565b5f5f82840360c08112156113a7575f5ffd5b60408112156113b4575f5ffd5b6113bc6112f0565b845181526020808601519082015292506080603f19820112156113dd575f5ffd5b506113e66112f0565b6113f38560408601611348565b81526114028560808601611348565b6020820152809150509250929050565b604081016102578284611272565b5f6001600160401b038211156114385761143861125e565b5060051b60200190565b5f60208284031215611452575f5ffd5b81516001600160401b03811115611467575f5ffd5b8201601f81018413611477575f5ffd5b805161148a61148582611420565b611318565b8082825260208201915060208360051b8501019250868311156114ab575f5ffd5b6020840193505b828410156114d65783516114c581610fda565b8252602093840193909101906114b2565b9695505050505050565b5f602082840312156114f0575f5ffd5b81516001600160401b03811115611505575f5ffd5b8201601f81018413611515575f5ffd5b805161152361148582611420565b8082825260208201915060208360051b850101925086831115611544575f5ffd5b6020840193505b828410156114d657835161155e81610fda565b82526020938401939091019061154b565b634e487b7160e01b5f52601160045260245ffd5b808201808211156102575761025761156f565b6115a08186611272565b60a060408201525f6115b560a083018661110a565b8281036060840152845180825260208087019201905f5b818110156115f35783516001600160a01b03168352602093840193909201916001016115cc565b5050809250505063ffffffff8316608083015295945050505050565b5f6020828403121561161f575f5ffd5b81516001600160401b03811115611634575f5ffd5b8201601f81018413611644575f5ffd5b805161165261148582611420565b8082825260208201915060208360051b850101925086831115611673575f5ffd5b602084015b838110156117105780516001600160401b03811115611695575f5ffd5b8501603f810189136116a5575f5ffd5b60208101516116b661148582611420565b808282526020820191506020808460051b8601010192508b8311156116d9575f5ffd5b6040840193505b828410156116fb5783518252602093840193909101906116e0565b86525050602093840193919091019050611678565b509695505050505050565b5f6001820161172c5761172c61156f565b5060010190565b602081525f61104160208301846111b8565b80820281158282048414176102575761025761156f565b5f8261177657634e487b7160e01b5f52601260045260245ffd5b50049056fea2646970667358221220695a7c933cf477198bfc76975745bbd8d2108e7224b16fbbef1c0fb51386995c64736f6c634300081b0033", } // BN254TableCalculatorABI is the input ABI used to generate the binding from. @@ -489,137 +489,3 @@ func (_BN254TableCalculator *BN254TableCalculatorSession) KeyRegistrar() (common func (_BN254TableCalculator *BN254TableCalculatorCallerSession) KeyRegistrar() (common.Address, error) { return _BN254TableCalculator.Contract.KeyRegistrar(&_BN254TableCalculator.CallOpts) } - -// BN254TableCalculatorLookaheadBlocksSetIterator is returned from FilterLookaheadBlocksSet and is used to iterate over the raw logs and unpacked data for LookaheadBlocksSet events raised by the BN254TableCalculator contract. -type BN254TableCalculatorLookaheadBlocksSetIterator struct { - Event *BN254TableCalculatorLookaheadBlocksSet // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *BN254TableCalculatorLookaheadBlocksSetIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(BN254TableCalculatorLookaheadBlocksSet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(BN254TableCalculatorLookaheadBlocksSet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *BN254TableCalculatorLookaheadBlocksSetIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *BN254TableCalculatorLookaheadBlocksSetIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// BN254TableCalculatorLookaheadBlocksSet represents a LookaheadBlocksSet event raised by the BN254TableCalculator contract. -type BN254TableCalculatorLookaheadBlocksSet struct { - LookaheadBlocks *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterLookaheadBlocksSet is a free log retrieval operation binding the contract event 0xa41e64dd47db91b61b43ccea8b57d75abfa496f23efc708c22753c4bc9d68842. -// -// Solidity: event LookaheadBlocksSet(uint256 lookaheadBlocks) -func (_BN254TableCalculator *BN254TableCalculatorFilterer) FilterLookaheadBlocksSet(opts *bind.FilterOpts) (*BN254TableCalculatorLookaheadBlocksSetIterator, error) { - - logs, sub, err := _BN254TableCalculator.contract.FilterLogs(opts, "LookaheadBlocksSet") - if err != nil { - return nil, err - } - return &BN254TableCalculatorLookaheadBlocksSetIterator{contract: _BN254TableCalculator.contract, event: "LookaheadBlocksSet", logs: logs, sub: sub}, nil -} - -// WatchLookaheadBlocksSet is a free log subscription operation binding the contract event 0xa41e64dd47db91b61b43ccea8b57d75abfa496f23efc708c22753c4bc9d68842. -// -// Solidity: event LookaheadBlocksSet(uint256 lookaheadBlocks) -func (_BN254TableCalculator *BN254TableCalculatorFilterer) WatchLookaheadBlocksSet(opts *bind.WatchOpts, sink chan<- *BN254TableCalculatorLookaheadBlocksSet) (event.Subscription, error) { - - logs, sub, err := _BN254TableCalculator.contract.WatchLogs(opts, "LookaheadBlocksSet") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(BN254TableCalculatorLookaheadBlocksSet) - if err := _BN254TableCalculator.contract.UnpackLog(event, "LookaheadBlocksSet", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseLookaheadBlocksSet is a log parse operation binding the contract event 0xa41e64dd47db91b61b43ccea8b57d75abfa496f23efc708c22753c4bc9d68842. -// -// Solidity: event LookaheadBlocksSet(uint256 lookaheadBlocks) -func (_BN254TableCalculator *BN254TableCalculatorFilterer) ParseLookaheadBlocksSet(log types.Log) (*BN254TableCalculatorLookaheadBlocksSet, error) { - event := new(BN254TableCalculatorLookaheadBlocksSet) - if err := _BN254TableCalculator.contract.UnpackLog(event, "LookaheadBlocksSet", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} diff --git a/pkg/bindings/BN254TableCalculatorBase/binding.go b/pkg/bindings/BN254TableCalculatorBase/binding.go new file mode 100644 index 0000000000..24719243bd --- /dev/null +++ b/pkg/bindings/BN254TableCalculatorBase/binding.go @@ -0,0 +1,407 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package BN254TableCalculatorBase + +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 +) + +// BN254G1Point is an auto generated low-level Go binding around an user-defined struct. +type BN254G1Point struct { + X *big.Int + Y *big.Int +} + +// IBN254TableCalculatorTypesBN254OperatorInfo is an auto generated low-level Go binding around an user-defined struct. +type IBN254TableCalculatorTypesBN254OperatorInfo struct { + Pubkey BN254G1Point + Weights []*big.Int +} + +// IBN254TableCalculatorTypesBN254OperatorSetInfo is an auto generated low-level Go binding around an user-defined struct. +type IBN254TableCalculatorTypesBN254OperatorSetInfo struct { + OperatorInfoTreeRoot [32]byte + NumOperators *big.Int + AggregatePubkey BN254G1Point + TotalWeights []*big.Int +} + +// OperatorSet is an auto generated low-level Go binding around an user-defined struct. +type OperatorSet struct { + Avs common.Address + Id uint32 +} + +// BN254TableCalculatorBaseMetaData contains all meta data concerning the BN254TableCalculatorBase contract. +var BN254TableCalculatorBaseMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"function\",\"name\":\"calculateOperatorTable\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"operatorSetInfo\",\"type\":\"tuple\",\"internalType\":\"structIBN254TableCalculatorTypes.BN254OperatorSetInfo\",\"components\":[{\"name\":\"operatorInfoTreeRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"numOperators\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"aggregatePubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"totalWeights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateOperatorTableBytes\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"operatorTableBytes\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorInfos\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple[]\",\"internalType\":\"structIBN254TableCalculatorTypes.BN254OperatorInfo[]\",\"components\":[{\"name\":\"pubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"weights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorWeight\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"weight\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorWeights\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"operators\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"weights\",\"type\":\"uint256[][]\",\"internalType\":\"uint256[][]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"keyRegistrar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIKeyRegistrar\"}],\"stateMutability\":\"view\"},{\"type\":\"error\",\"name\":\"ECAddFailed\",\"inputs\":[]}]", +} + +// BN254TableCalculatorBaseABI is the input ABI used to generate the binding from. +// Deprecated: Use BN254TableCalculatorBaseMetaData.ABI instead. +var BN254TableCalculatorBaseABI = BN254TableCalculatorBaseMetaData.ABI + +// BN254TableCalculatorBase is an auto generated Go binding around an Ethereum contract. +type BN254TableCalculatorBase struct { + BN254TableCalculatorBaseCaller // Read-only binding to the contract + BN254TableCalculatorBaseTransactor // Write-only binding to the contract + BN254TableCalculatorBaseFilterer // Log filterer for contract events +} + +// BN254TableCalculatorBaseCaller is an auto generated read-only Go binding around an Ethereum contract. +type BN254TableCalculatorBaseCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// BN254TableCalculatorBaseTransactor is an auto generated write-only Go binding around an Ethereum contract. +type BN254TableCalculatorBaseTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// BN254TableCalculatorBaseFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type BN254TableCalculatorBaseFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// BN254TableCalculatorBaseSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type BN254TableCalculatorBaseSession struct { + Contract *BN254TableCalculatorBase // 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 +} + +// BN254TableCalculatorBaseCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type BN254TableCalculatorBaseCallerSession struct { + Contract *BN254TableCalculatorBaseCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// BN254TableCalculatorBaseTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type BN254TableCalculatorBaseTransactorSession struct { + Contract *BN254TableCalculatorBaseTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// BN254TableCalculatorBaseRaw is an auto generated low-level Go binding around an Ethereum contract. +type BN254TableCalculatorBaseRaw struct { + Contract *BN254TableCalculatorBase // Generic contract binding to access the raw methods on +} + +// BN254TableCalculatorBaseCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type BN254TableCalculatorBaseCallerRaw struct { + Contract *BN254TableCalculatorBaseCaller // Generic read-only contract binding to access the raw methods on +} + +// BN254TableCalculatorBaseTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type BN254TableCalculatorBaseTransactorRaw struct { + Contract *BN254TableCalculatorBaseTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewBN254TableCalculatorBase creates a new instance of BN254TableCalculatorBase, bound to a specific deployed contract. +func NewBN254TableCalculatorBase(address common.Address, backend bind.ContractBackend) (*BN254TableCalculatorBase, error) { + contract, err := bindBN254TableCalculatorBase(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &BN254TableCalculatorBase{BN254TableCalculatorBaseCaller: BN254TableCalculatorBaseCaller{contract: contract}, BN254TableCalculatorBaseTransactor: BN254TableCalculatorBaseTransactor{contract: contract}, BN254TableCalculatorBaseFilterer: BN254TableCalculatorBaseFilterer{contract: contract}}, nil +} + +// NewBN254TableCalculatorBaseCaller creates a new read-only instance of BN254TableCalculatorBase, bound to a specific deployed contract. +func NewBN254TableCalculatorBaseCaller(address common.Address, caller bind.ContractCaller) (*BN254TableCalculatorBaseCaller, error) { + contract, err := bindBN254TableCalculatorBase(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &BN254TableCalculatorBaseCaller{contract: contract}, nil +} + +// NewBN254TableCalculatorBaseTransactor creates a new write-only instance of BN254TableCalculatorBase, bound to a specific deployed contract. +func NewBN254TableCalculatorBaseTransactor(address common.Address, transactor bind.ContractTransactor) (*BN254TableCalculatorBaseTransactor, error) { + contract, err := bindBN254TableCalculatorBase(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &BN254TableCalculatorBaseTransactor{contract: contract}, nil +} + +// NewBN254TableCalculatorBaseFilterer creates a new log filterer instance of BN254TableCalculatorBase, bound to a specific deployed contract. +func NewBN254TableCalculatorBaseFilterer(address common.Address, filterer bind.ContractFilterer) (*BN254TableCalculatorBaseFilterer, error) { + contract, err := bindBN254TableCalculatorBase(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &BN254TableCalculatorBaseFilterer{contract: contract}, nil +} + +// bindBN254TableCalculatorBase binds a generic wrapper to an already deployed contract. +func bindBN254TableCalculatorBase(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := BN254TableCalculatorBaseMetaData.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 (_BN254TableCalculatorBase *BN254TableCalculatorBaseRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _BN254TableCalculatorBase.Contract.BN254TableCalculatorBaseCaller.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 (_BN254TableCalculatorBase *BN254TableCalculatorBaseRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _BN254TableCalculatorBase.Contract.BN254TableCalculatorBaseTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_BN254TableCalculatorBase *BN254TableCalculatorBaseRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _BN254TableCalculatorBase.Contract.BN254TableCalculatorBaseTransactor.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 (_BN254TableCalculatorBase *BN254TableCalculatorBaseCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _BN254TableCalculatorBase.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 (_BN254TableCalculatorBase *BN254TableCalculatorBaseTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _BN254TableCalculatorBase.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_BN254TableCalculatorBase *BN254TableCalculatorBaseTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _BN254TableCalculatorBase.Contract.contract.Transact(opts, method, params...) +} + +// CalculateOperatorTable is a free data retrieval call binding the contract method 0x124c87e0. +// +// Solidity: function calculateOperatorTable((address,uint32) operatorSet) view returns((bytes32,uint256,(uint256,uint256),uint256[]) operatorSetInfo) +func (_BN254TableCalculatorBase *BN254TableCalculatorBaseCaller) CalculateOperatorTable(opts *bind.CallOpts, operatorSet OperatorSet) (IBN254TableCalculatorTypesBN254OperatorSetInfo, error) { + var out []interface{} + err := _BN254TableCalculatorBase.contract.Call(opts, &out, "calculateOperatorTable", operatorSet) + + if err != nil { + return *new(IBN254TableCalculatorTypesBN254OperatorSetInfo), err + } + + out0 := *abi.ConvertType(out[0], new(IBN254TableCalculatorTypesBN254OperatorSetInfo)).(*IBN254TableCalculatorTypesBN254OperatorSetInfo) + + return out0, err + +} + +// CalculateOperatorTable is a free data retrieval call binding the contract method 0x124c87e0. +// +// Solidity: function calculateOperatorTable((address,uint32) operatorSet) view returns((bytes32,uint256,(uint256,uint256),uint256[]) operatorSetInfo) +func (_BN254TableCalculatorBase *BN254TableCalculatorBaseSession) CalculateOperatorTable(operatorSet OperatorSet) (IBN254TableCalculatorTypesBN254OperatorSetInfo, error) { + return _BN254TableCalculatorBase.Contract.CalculateOperatorTable(&_BN254TableCalculatorBase.CallOpts, operatorSet) +} + +// CalculateOperatorTable is a free data retrieval call binding the contract method 0x124c87e0. +// +// Solidity: function calculateOperatorTable((address,uint32) operatorSet) view returns((bytes32,uint256,(uint256,uint256),uint256[]) operatorSetInfo) +func (_BN254TableCalculatorBase *BN254TableCalculatorBaseCallerSession) CalculateOperatorTable(operatorSet OperatorSet) (IBN254TableCalculatorTypesBN254OperatorSetInfo, error) { + return _BN254TableCalculatorBase.Contract.CalculateOperatorTable(&_BN254TableCalculatorBase.CallOpts, operatorSet) +} + +// CalculateOperatorTableBytes is a free data retrieval call binding the contract method 0x41ee6d0e. +// +// Solidity: function calculateOperatorTableBytes((address,uint32) operatorSet) view returns(bytes operatorTableBytes) +func (_BN254TableCalculatorBase *BN254TableCalculatorBaseCaller) CalculateOperatorTableBytes(opts *bind.CallOpts, operatorSet OperatorSet) ([]byte, error) { + var out []interface{} + err := _BN254TableCalculatorBase.contract.Call(opts, &out, "calculateOperatorTableBytes", operatorSet) + + if err != nil { + return *new([]byte), err + } + + out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte) + + return out0, err + +} + +// CalculateOperatorTableBytes is a free data retrieval call binding the contract method 0x41ee6d0e. +// +// Solidity: function calculateOperatorTableBytes((address,uint32) operatorSet) view returns(bytes operatorTableBytes) +func (_BN254TableCalculatorBase *BN254TableCalculatorBaseSession) CalculateOperatorTableBytes(operatorSet OperatorSet) ([]byte, error) { + return _BN254TableCalculatorBase.Contract.CalculateOperatorTableBytes(&_BN254TableCalculatorBase.CallOpts, operatorSet) +} + +// CalculateOperatorTableBytes is a free data retrieval call binding the contract method 0x41ee6d0e. +// +// Solidity: function calculateOperatorTableBytes((address,uint32) operatorSet) view returns(bytes operatorTableBytes) +func (_BN254TableCalculatorBase *BN254TableCalculatorBaseCallerSession) CalculateOperatorTableBytes(operatorSet OperatorSet) ([]byte, error) { + return _BN254TableCalculatorBase.Contract.CalculateOperatorTableBytes(&_BN254TableCalculatorBase.CallOpts, operatorSet) +} + +// GetOperatorInfos is a free data retrieval call binding the contract method 0xcf2d90ef. +// +// Solidity: function getOperatorInfos((address,uint32) operatorSet) view returns(((uint256,uint256),uint256[])[]) +func (_BN254TableCalculatorBase *BN254TableCalculatorBaseCaller) GetOperatorInfos(opts *bind.CallOpts, operatorSet OperatorSet) ([]IBN254TableCalculatorTypesBN254OperatorInfo, error) { + var out []interface{} + err := _BN254TableCalculatorBase.contract.Call(opts, &out, "getOperatorInfos", operatorSet) + + if err != nil { + return *new([]IBN254TableCalculatorTypesBN254OperatorInfo), err + } + + out0 := *abi.ConvertType(out[0], new([]IBN254TableCalculatorTypesBN254OperatorInfo)).(*[]IBN254TableCalculatorTypesBN254OperatorInfo) + + return out0, err + +} + +// GetOperatorInfos is a free data retrieval call binding the contract method 0xcf2d90ef. +// +// Solidity: function getOperatorInfos((address,uint32) operatorSet) view returns(((uint256,uint256),uint256[])[]) +func (_BN254TableCalculatorBase *BN254TableCalculatorBaseSession) GetOperatorInfos(operatorSet OperatorSet) ([]IBN254TableCalculatorTypesBN254OperatorInfo, error) { + return _BN254TableCalculatorBase.Contract.GetOperatorInfos(&_BN254TableCalculatorBase.CallOpts, operatorSet) +} + +// GetOperatorInfos is a free data retrieval call binding the contract method 0xcf2d90ef. +// +// Solidity: function getOperatorInfos((address,uint32) operatorSet) view returns(((uint256,uint256),uint256[])[]) +func (_BN254TableCalculatorBase *BN254TableCalculatorBaseCallerSession) GetOperatorInfos(operatorSet OperatorSet) ([]IBN254TableCalculatorTypesBN254OperatorInfo, error) { + return _BN254TableCalculatorBase.Contract.GetOperatorInfos(&_BN254TableCalculatorBase.CallOpts, operatorSet) +} + +// GetOperatorWeight is a free data retrieval call binding the contract method 0x1088794a. +// +// Solidity: function getOperatorWeight((address,uint32) operatorSet, address operator) view returns(uint256 weight) +func (_BN254TableCalculatorBase *BN254TableCalculatorBaseCaller) GetOperatorWeight(opts *bind.CallOpts, operatorSet OperatorSet, operator common.Address) (*big.Int, error) { + var out []interface{} + err := _BN254TableCalculatorBase.contract.Call(opts, &out, "getOperatorWeight", operatorSet, operator) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetOperatorWeight is a free data retrieval call binding the contract method 0x1088794a. +// +// Solidity: function getOperatorWeight((address,uint32) operatorSet, address operator) view returns(uint256 weight) +func (_BN254TableCalculatorBase *BN254TableCalculatorBaseSession) GetOperatorWeight(operatorSet OperatorSet, operator common.Address) (*big.Int, error) { + return _BN254TableCalculatorBase.Contract.GetOperatorWeight(&_BN254TableCalculatorBase.CallOpts, operatorSet, operator) +} + +// GetOperatorWeight is a free data retrieval call binding the contract method 0x1088794a. +// +// Solidity: function getOperatorWeight((address,uint32) operatorSet, address operator) view returns(uint256 weight) +func (_BN254TableCalculatorBase *BN254TableCalculatorBaseCallerSession) GetOperatorWeight(operatorSet OperatorSet, operator common.Address) (*big.Int, error) { + return _BN254TableCalculatorBase.Contract.GetOperatorWeight(&_BN254TableCalculatorBase.CallOpts, operatorSet, operator) +} + +// GetOperatorWeights is a free data retrieval call binding the contract method 0x71ca71d9. +// +// Solidity: function getOperatorWeights((address,uint32) operatorSet) view returns(address[] operators, uint256[][] weights) +func (_BN254TableCalculatorBase *BN254TableCalculatorBaseCaller) GetOperatorWeights(opts *bind.CallOpts, operatorSet OperatorSet) (struct { + Operators []common.Address + Weights [][]*big.Int +}, error) { + var out []interface{} + err := _BN254TableCalculatorBase.contract.Call(opts, &out, "getOperatorWeights", operatorSet) + + outstruct := new(struct { + Operators []common.Address + Weights [][]*big.Int + }) + if err != nil { + return *outstruct, err + } + + outstruct.Operators = *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) + outstruct.Weights = *abi.ConvertType(out[1], new([][]*big.Int)).(*[][]*big.Int) + + return *outstruct, err + +} + +// GetOperatorWeights is a free data retrieval call binding the contract method 0x71ca71d9. +// +// Solidity: function getOperatorWeights((address,uint32) operatorSet) view returns(address[] operators, uint256[][] weights) +func (_BN254TableCalculatorBase *BN254TableCalculatorBaseSession) GetOperatorWeights(operatorSet OperatorSet) (struct { + Operators []common.Address + Weights [][]*big.Int +}, error) { + return _BN254TableCalculatorBase.Contract.GetOperatorWeights(&_BN254TableCalculatorBase.CallOpts, operatorSet) +} + +// GetOperatorWeights is a free data retrieval call binding the contract method 0x71ca71d9. +// +// Solidity: function getOperatorWeights((address,uint32) operatorSet) view returns(address[] operators, uint256[][] weights) +func (_BN254TableCalculatorBase *BN254TableCalculatorBaseCallerSession) GetOperatorWeights(operatorSet OperatorSet) (struct { + Operators []common.Address + Weights [][]*big.Int +}, error) { + return _BN254TableCalculatorBase.Contract.GetOperatorWeights(&_BN254TableCalculatorBase.CallOpts, operatorSet) +} + +// KeyRegistrar is a free data retrieval call binding the contract method 0x3ec45c7e. +// +// Solidity: function keyRegistrar() view returns(address) +func (_BN254TableCalculatorBase *BN254TableCalculatorBaseCaller) KeyRegistrar(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _BN254TableCalculatorBase.contract.Call(opts, &out, "keyRegistrar") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// KeyRegistrar is a free data retrieval call binding the contract method 0x3ec45c7e. +// +// Solidity: function keyRegistrar() view returns(address) +func (_BN254TableCalculatorBase *BN254TableCalculatorBaseSession) KeyRegistrar() (common.Address, error) { + return _BN254TableCalculatorBase.Contract.KeyRegistrar(&_BN254TableCalculatorBase.CallOpts) +} + +// KeyRegistrar is a free data retrieval call binding the contract method 0x3ec45c7e. +// +// Solidity: function keyRegistrar() view returns(address) +func (_BN254TableCalculatorBase *BN254TableCalculatorBaseCallerSession) KeyRegistrar() (common.Address, error) { + return _BN254TableCalculatorBase.Contract.KeyRegistrar(&_BN254TableCalculatorBase.CallOpts) +} diff --git a/pkg/bindings/ECDSACertificateVerifier/binding.go b/pkg/bindings/ECDSACertificateVerifier/binding.go index 688c5bb62e..3950da722d 100644 --- a/pkg/bindings/ECDSACertificateVerifier/binding.go +++ b/pkg/bindings/ECDSACertificateVerifier/binding.go @@ -57,7 +57,7 @@ type OperatorSet struct { // ECDSACertificateVerifierMetaData contains all meta data concerning the ECDSACertificateVerifier contract. var ECDSACertificateVerifierMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_operatorTableUpdater\",\"type\":\"address\",\"internalType\":\"contractIOperatorTableUpdater\"},{\"name\":\"_version\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"calculateCertificateDigest\",\"inputs\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"messageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"domainSeparator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorInfos\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple[]\",\"internalType\":\"structIECDSATableCalculatorTypes.ECDSAOperatorInfo[]\",\"components\":[{\"name\":\"pubkey\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"weights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorSetOwner\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"latestReferenceTimestamp\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"maxOperatorTableStaleness\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorTableUpdater\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIOperatorTableUpdater\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"updateOperatorTable\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"operatorInfos\",\"type\":\"tuple[]\",\"internalType\":\"structIECDSATableCalculatorTypes.ECDSAOperatorInfo[]\",\"components\":[{\"name\":\"pubkey\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"weights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"operatorSetConfig\",\"type\":\"tuple\",\"internalType\":\"structICrossChainRegistryTypes.OperatorSetConfig\",\"components\":[{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"maxStalenessPeriod\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"verifyCertificate\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"cert\",\"type\":\"tuple\",\"internalType\":\"structIECDSACertificateVerifierTypes.ECDSACertificate\",\"components\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"messageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"sig\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"verifyCertificateNominal\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"cert\",\"type\":\"tuple\",\"internalType\":\"structIECDSACertificateVerifierTypes.ECDSACertificate\",\"components\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"messageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"sig\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"totalStakeNominalThresholds\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"verifyCertificateProportion\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"cert\",\"type\":\"tuple\",\"internalType\":\"structIECDSACertificateVerifierTypes.ECDSACertificate\",\"components\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"messageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"sig\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"totalStakeProportionThresholds\",\"type\":\"uint16[]\",\"internalType\":\"uint16[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MaxStalenessPeriodUpdated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"maxStalenessPeriod\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetOwnerUpdated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"owner\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TableUpdated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"operatorInfos\",\"type\":\"tuple[]\",\"indexed\":false,\"internalType\":\"structIECDSATableCalculatorTypes.ECDSAOperatorInfo[]\",\"components\":[{\"name\":\"pubkey\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"weights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CertificateStale\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidShortString\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSignature\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSignatureLength\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyTableUpdater\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReferenceTimestampDoesNotExist\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SignatureExpired\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StringTooLong\",\"inputs\":[{\"name\":\"str\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"type\":\"error\",\"name\":\"TableUpdateStale\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"VerificationFailed\",\"inputs\":[]}]", - Bin: "0x60c060405234801561000f575f5ffd5b5060405161210238038061210283398101604081905261002e9161016d565b6001600160a01b03821660805280806100468161005b565b60a0525061005490506100a1565b5050610297565b5f5f829050601f8151111561008e578260405163305a27a960e01b8152600401610085919061023c565b60405180910390fd5b805161009982610271565b179392505050565b5f54610100900460ff16156101085760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b6064820152608401610085565b5f5460ff90811614610157575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b634e487b7160e01b5f52604160045260245ffd5b5f5f6040838503121561017e575f5ffd5b82516001600160a01b0381168114610194575f5ffd5b60208401519092506001600160401b038111156101af575f5ffd5b8301601f810185136101bf575f5ffd5b80516001600160401b038111156101d8576101d8610159565b604051601f8201601f19908116603f011681016001600160401b038111828210171561020657610206610159565b60405281815282820160200187101561021d575f5ffd5b8160208401602083015e5f602083830101528093505050509250929050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80516020808301519190811015610291575f198160200360031b1b821691505b50919050565b60805160a051611e3c6102c65f395f81816102880152610f9f01525f818161014501526102bc0152611e3c5ff3fe608060405234801561000f575f5ffd5b50600436106100b1575f3560e01c80637c85ac4c1161006e5780637c85ac4c1461017f57806380c7d3f31461019f57806384818920146101bf578063be86e0b2146101d2578063c0da2420146101f5578063f698da2514610208575f5ffd5b806318467434146100b557806354fd4d50146100db57806356d482f5146100f05780635ddb9b5b146101055780636141879e1461012d57806368d6e08114610140575b5f5ffd5b6100c86100c33660046114f5565b610210565b6040519081526020015b60405180910390f35b6100e3610281565b6040516100d2919061154b565b6101036100fe3660046115b3565b6102b1565b005b6101186101133660046116dd565b6104b3565b60405163ffffffff90911681526020016100d2565b61011861013b3660046116dd565b6104d9565b6101677f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100d2565b61019261018d3660046116f7565b6104ff565b6040516100d29190611729565b6101b26101ad3660046117e7565b61066d565b6040516100d29190611832565b6101676101cd3660046116dd565b610680565b6101e56101e0366004611874565b6106a9565b60405190151581526020016100d2565b6101e5610203366004611956565b61073c565b6100c8610835565b604080517fda346acb3ce99e7c5132bf8cafb159ad8085970ebfdba78007ef0fe163063d14602082015263ffffffff841691810191909152606081018290525f908190608001604051602081830303815290604052805190602001209050610277816108f5565b9150505b92915050565b60606102ac7f000000000000000000000000000000000000000000000000000000000000000061093b565b905090565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146102fa5760405163030c1b6b60e11b815260040160405180910390fd5b5f61031261030d368890038801886116dd565b610978565b5f8181526003602052604090205490915063ffffffff9081169086161161034c57604051632f20889f60e01b815260040160405180910390fd5b5f81815260046020908152604080832063ffffffff8916845290915281208490555b838110156103d857848482818110610388576103886119cc565b905060200281019061039a91906119e0565b5f83815260056020908152604080832063ffffffff808c168552908352818420908616845290915290206103ce8282611a29565b505060010161036e565b505f818152600360209081526040909120805463ffffffff191663ffffffff881617905561040890830183611b2c565b5f8281526001602090815260409182902080546001600160a01b0319166001600160a01b03949094169390931790925561044791908401908401611b47565b5f8281526002602052604090819020805463ffffffff191663ffffffff9390931692909217909155517f4f588da9ec57976194a79b5594f8f8782923d93013df2b9ed12fe125805011ef906104a3908890889088908890611b60565b60405180910390a1505050505050565b5f5f6104be83610978565b5f9081526003602052604090205463ffffffff169392505050565b5f5f6104e483610978565b5f9081526002602052604090205463ffffffff169392505050565b60605f61050b84610978565b5f81815260046020908152604080832063ffffffff8089168552925282205492935082166001600160401b0381111561054657610546611625565b60405190808252806020026020018201604052801561058b57816020015b604080518082019091525f8152606060208201528152602001906001900390816105645790505b5090505f5b8263ffffffff168163ffffffff161015610663575f84815260056020908152604080832063ffffffff808b16855290835281842090851684528252918290208251808401845281546001600160a01b031681526001820180548551818602810186019096528086529194929385810193929083018282801561062f57602002820191905f5260205f20905b81548152602001906001019080831161061b575b505050505081525050828263ffffffff1681518110610650576106506119cc565b6020908102919091010152600101610590565b5095945050505050565b606061067983836109db565b9392505050565b5f5f61068b83610978565b5f908152600160205260409020546001600160a01b03169392505050565b5f5f6106b585856109db565b905082518151146106d95760405163512509d360e11b815260040160405180910390fd5b5f5b8151811015610730578381815181106106f6576106f66119cc565b6020026020010151828281518110610710576107106119cc565b60200260200101511015610728575f92505050610679565b6001016106db565b50600195945050505050565b5f5f61074886866109db565b90505f6107618761075c6020890189611b47565b610d9c565b825190915084146107855760405163512509d360e11b815260040160405180910390fd5b5f5b8251811015610825575f6127108787848181106107a6576107a66119cc565b90506020020160208101906107bb9190611c93565b61ffff168484815181106107d1576107d16119cc565b60200260200101516107e39190611a12565b6107ed9190611cc8565b905080848381518110610802576108026119cc565b6020026020010151101561081c575f94505050505061082d565b50600101610787565b506001925050505b949350505050565b60408051808201909152600a81526922b4b3b2b72630bcb2b960b11b6020909101525f7f91ab3d17e3a50a9d89e63fd30b92be7f5336b03b287bb946787a83a9d62a27667f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea6108a2610f97565b80516020918201206040516108da949392309101938452602084019290925260408301526001600160a01b0316606082015260800190565b60405160208183030381529060405280519060200120905090565b5f6108fe610835565b60405161190160f01b6020820152602281019190915260428101839052606201604051602081830303815290604052805190602001209050919050565b60605f6109478361100c565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f815f0151826020015163ffffffff166040516020016109c392919060609290921b6bffffffffffffffffffffffff1916825260a01b6001600160a01b031916601482015260200190565b60405160208183030381529060405261027b90611cdb565b60605f6109f061030d368690038601866116dd565b5f8181526002602090815260409091205491925063ffffffff90911690610a1990850185611b47565b610a239190611cfe565b63ffffffff16421115610a495760405163640fcd6b60e11b815260040160405180910390fd5b610a566020840184611b47565b5f8281526003602052604090205463ffffffff908116911614610a8c57604051630cad17b760e31b815260040160405180910390fd5b5f610a9e8561075c6020870187611b47565b90505f81516001600160401b03811115610aba57610aba611625565b604051908082528060200260200182016040528015610ae3578160200160208202803683370190505b5090505f610b01610af76020880188611b47565b8760200135610210565b90505f80610b4f83610b1660408b018b611d1a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061103392505050565b9150915080610b715760405163439cc0cd60e01b815260040160405180910390fd5b5f5b8251811015610d8e575f838281518110610b8f57610b8f6119cc565b602002602001015190505f5f9050610bc260405180604001604052805f6001600160a01b03168152602001606081525090565b5f5b60045f8c81526020019081526020015f205f8e5f016020810190610be89190611b47565b63ffffffff1663ffffffff1681526020019081526020015f2054811015610ced5760055f8c81526020019081526020015f205f8e5f016020810190610c2d9190611b47565b63ffffffff908116825260208083019390935260409182015f90812091851681529083528190208151808301835281546001600160a01b031681526001820180548451818702810187019095528085529194929385840193909290830182828015610cb557602002820191905f5260205f20905b815481526020019060010190808311610ca1575b5050505050815250509150836001600160a01b0316825f01516001600160a01b031603610ce55760019250610ced565b600101610bc4565b5081610d0c5760405163439cc0cd60e01b815260040160405180910390fd5b60208101515f5b815181108015610d235750895181105b15610d7d57818181518110610d3a57610d3a6119cc565b60200260200101518a8281518110610d5457610d546119cc565b60200260200101818151610d689190611d5c565b90525080610d7581611d6f565b915050610d13565b505060019093019250610b73915050565b509298975050505050505050565b60605f610db161030d368690038601866116dd565b5f8181526003602052604090205490915063ffffffff848116911614610dea57604051630cad17b760e31b815260040160405180910390fd5b5f81815260046020908152604080832063ffffffff8716845290915290205480610e2757604051630cad17b760e31b815260040160405180910390fd5b5f82815260056020908152604080832063ffffffff881684528252808320838052909152902060010154806001600160401b03811115610e6957610e69611625565b604051908082528060200260200182016040528015610e92578160200160208202803683370190505b5093505f5b82811015610f8d575f84815260056020908152604080832063ffffffff808b1685529083528184209085168452825280832060010180548251818502810185019093528083529192909190830182828015610f0f57602002820191905f5260205f20905b815481526020019060010190808311610efb575b509394505f93505050505b815181108015610f2957508381105b15610f8357818181518110610f4057610f406119cc565b6020026020010151878281518110610f5a57610f5a6119cc565b60200260200101818151610f6e9190611d5c565b90525080610f7b81611d6f565b915050610f1a565b5050600101610e97565b5050505092915050565b60605f610fc37f000000000000000000000000000000000000000000000000000000000000000061093b565b9050805f81518110610fd757610fd76119cc565b016020908101516040516001600160f81b03199091169181019190915260210160405160208183030381529060405291505090565b5f60ff8216601f81111561027b57604051632cd44ac360e21b815260040160405180910390fd5b60605f604183516110449190611d87565b1561106257604051634be6321b60e01b815260040160405180910390fd5b5f604184516110719190611cc8565b9050806001600160401b0381111561108b5761108b611625565b6040519080825280602002602001820160405280156110b4578160200160208202803683370190505b5092505f5b8181101561123657604080516041808252608082019092525f916020820181803683370190505090505f5b604181101561114f5786816110fa856041611a12565b6111049190611d5c565b81518110611114576111146119cc565b602001015160f81c60f81b828281518110611131576111316119cc565b60200101906001600160f81b03191690815f1a9053506001016110e4565b505f5f61115c8984611244565b90925090505f81600481111561117457611174611d9a565b14158061118857506001600160a01b038216155b1561119b57505f945061123d9350505050565b5f841180156111df5750866111b1600186611dae565b815181106111c1576111c16119cc565b60200260200101516001600160a01b0316826001600160a01b031611155b156111f257505f945061123d9350505050565b6111ff828a855f19611283565b81878581518110611212576112126119cc565b6001600160a01b0392909216602092830291909101909101525050506001016110b9565b5060019150505b9250929050565b5f5f8251604103611278576020830151604084015160608501515f1a61126c878285856112db565b9450945050505061123d565b505f9050600261123d565b428110156112a457604051630819bdcd60e01b815260040160405180910390fd5b6112b86001600160a01b0385168484611398565b6112d557604051638baa579f60e01b815260040160405180910390fd5b50505050565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561131057505f9050600361138f565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611361573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116611389575f6001925092505061138f565b91505f90505b94509492505050565b5f5f5f6113a58585611244565b90925090505f8160048111156113bd576113bd611d9a565b1480156113db5750856001600160a01b0316826001600160a01b0316145b806113ec57506113ec8686866113f6565b9695505050505050565b5f5f5f856001600160a01b0316631626ba7e60e01b868660405160240161141e929190611dc1565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161145c9190611dd9565b5f60405180830381855afa9150503d805f8114611494576040519150601f19603f3d011682016040523d82523d5f602084013e611499565b606091505b50915091508180156114ad57506020815110155b80156113ec57508051630b135d3f60e11b906114d29083016020908101908401611def565b149695505050505050565b803563ffffffff811681146114f0575f5ffd5b919050565b5f5f60408385031215611506575f5ffd5b61150f836114dd565b946020939093013593505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610679602083018461151d565b5f6040828403121561156d575f5ffd5b50919050565b5f5f83601f840112611583575f5ffd5b5081356001600160401b03811115611599575f5ffd5b6020830191508360208260051b850101111561123d575f5ffd5b5f5f5f5f5f60c086880312156115c7575f5ffd5b6115d1878761155d565b94506115df604087016114dd565b935060608601356001600160401b038111156115f9575f5ffd5b61160588828901611573565b90945092506116199050876080880161155d565b90509295509295909350565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b038111828210171561166157611661611625565b604052919050565b6001600160a01b038116811461167d575f5ffd5b50565b5f60408284031215611690575f5ffd5b604080519081016001600160401b03811182821017156116b2576116b2611625565b60405290508082356116c381611669565b81526116d1602084016114dd565b60208201525092915050565b5f604082840312156116ed575f5ffd5b6106798383611680565b5f5f60608385031215611708575f5ffd5b6117128484611680565b9150611720604084016114dd565b90509250929050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b828110156117cb57868503603f19018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101905f9060608801905b808310156117b35783518252602082019150602084019350600183019250611790565b5096505050602093840193919091019060010161174f565b50929695505050505050565b5f6060828403121561156d575f5ffd5b5f5f606083850312156117f8575f5ffd5b611802848461155d565b915060408301356001600160401b0381111561181c575f5ffd5b611828858286016117d7565b9150509250929050565b602080825282518282018190525f918401906040840190835b8181101561186957835183526020938401939092019160010161184b565b509095945050505050565b5f5f5f60808486031215611886575f5ffd5b611890858561155d565b925060408401356001600160401b038111156118aa575f5ffd5b6118b6868287016117d7565b92505060608401356001600160401b038111156118d1575f5ffd5b8401601f810186136118e1575f5ffd5b80356001600160401b038111156118fa576118fa611625565b8060051b61190a60208201611639565b91825260208184018101929081019089841115611925575f5ffd5b6020850194505b8385101561194757843582526020948501949091019061192c565b80955050505050509250925092565b5f5f5f5f60808587031215611969575f5ffd5b611973868661155d565b935060408501356001600160401b0381111561198d575f5ffd5b611999878288016117d7565b93505060608501356001600160401b038111156119b4575f5ffd5b6119c087828801611573565b95989497509550505050565b634e487b7160e01b5f52603260045260245ffd5b5f8235603e198336030181126119f4575f5ffd5b9190910192915050565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761027b5761027b6119fe565b8135611a3481611669565b81546001600160a01b0319166001600160a01b0391909116178155602082013536839003601e19018112611a66575f5ffd5b820180356001600160401b03811115611a7d575f5ffd5b6020820191508060051b3603821315611a94575f5ffd5b600183016001600160401b03821115611aaf57611aaf611625565b68010000000000000000821115611ac857611ac8611625565b805482825580831015611afd575f828152602090208381019082015b80821015611afa575f8255600182019150611ae4565b50505b505f90815260208120905b82811015611b2457833582820155602090930192600101611b08565b505050505050565b5f60208284031215611b3c575f5ffd5b813561067981611669565b5f60208284031215611b57575f5ffd5b610679826114dd565b5f608082018635611b7081611669565b6001600160a01b0316835263ffffffff611b8c602089016114dd565b16602084015263ffffffff861660408401526080606084015283905260a0600584901b83018101908301855f603e1936839003015b87821015611c8457868503609f190184528235818112611bdf575f5ffd5b89018035611bec81611669565b6001600160a01b03168652602081013536829003601e19018112611c0e575f5ffd5b016020810190356001600160401b03811115611c28575f5ffd5b8060051b803603831315611c3a575f5ffd5b60406020890181905288018290526001600160fb1b03821115611c5b575f5ffd5b808360608a01376060818901019750505050602083019250602084019350600182019150611bc1565b50929998505050505050505050565b5f60208284031215611ca3575f5ffd5b813561ffff81168114610679575f5ffd5b634e487b7160e01b5f52601260045260245ffd5b5f82611cd657611cd6611cb4565b500490565b8051602080830151919081101561156d575f1960209190910360031b1b16919050565b63ffffffff818116838216019081111561027b5761027b6119fe565b5f5f8335601e19843603018112611d2f575f5ffd5b8301803591506001600160401b03821115611d48575f5ffd5b60200191503681900382131561123d575f5ffd5b8082018082111561027b5761027b6119fe565b5f60018201611d8057611d806119fe565b5060010190565b5f82611d9557611d95611cb4565b500690565b634e487b7160e01b5f52602160045260245ffd5b8181038181111561027b5761027b6119fe565b828152604060208201525f61082d604083018461151d565b5f82518060208501845e5f920191825250919050565b5f60208284031215611dff575f5ffd5b505191905056fea2646970667358221220f6be8278c3a28beb965735fdaf7a33115b73070ac82330d207e0c049a578689564736f6c634300081b0033", + Bin: "0x60c060405234801561000f575f5ffd5b5060405161210238038061210283398101604081905261002e9161016d565b6001600160a01b03821660805280806100468161005b565b60a0525061005490506100a1565b5050610297565b5f5f829050601f8151111561008e578260405163305a27a960e01b8152600401610085919061023c565b60405180910390fd5b805161009982610271565b179392505050565b5f54610100900460ff16156101085760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b6064820152608401610085565b5f5460ff90811614610157575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b634e487b7160e01b5f52604160045260245ffd5b5f5f6040838503121561017e575f5ffd5b82516001600160a01b0381168114610194575f5ffd5b60208401519092506001600160401b038111156101af575f5ffd5b8301601f810185136101bf575f5ffd5b80516001600160401b038111156101d8576101d8610159565b604051601f8201601f19908116603f011681016001600160401b038111828210171561020657610206610159565b60405281815282820160200187101561021d575f5ffd5b8160208401602083015e5f602083830101528093505050509250929050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80516020808301519190811015610291575f198160200360031b1b821691505b50919050565b60805160a051611e3c6102c65f395f81816102880152610f9f01525f818161014501526102bc0152611e3c5ff3fe608060405234801561000f575f5ffd5b50600436106100b1575f3560e01c80637c85ac4c1161006e5780637c85ac4c1461017f57806380c7d3f31461019f57806384818920146101bf578063be86e0b2146101d2578063c0da2420146101f5578063f698da2514610208575f5ffd5b806318467434146100b557806354fd4d50146100db57806356d482f5146100f05780635ddb9b5b146101055780636141879e1461012d57806368d6e08114610140575b5f5ffd5b6100c86100c33660046114f5565b610210565b6040519081526020015b60405180910390f35b6100e3610281565b6040516100d2919061154b565b6101036100fe3660046115b3565b6102b1565b005b6101186101133660046116dd565b6104b3565b60405163ffffffff90911681526020016100d2565b61011861013b3660046116dd565b6104d9565b6101677f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100d2565b61019261018d3660046116f7565b6104ff565b6040516100d29190611729565b6101b26101ad3660046117e7565b61066d565b6040516100d29190611832565b6101676101cd3660046116dd565b610680565b6101e56101e0366004611874565b6106a9565b60405190151581526020016100d2565b6101e5610203366004611956565b61073c565b6100c8610835565b604080517fda346acb3ce99e7c5132bf8cafb159ad8085970ebfdba78007ef0fe163063d14602082015263ffffffff841691810191909152606081018290525f908190608001604051602081830303815290604052805190602001209050610277816108f5565b9150505b92915050565b60606102ac7f000000000000000000000000000000000000000000000000000000000000000061093b565b905090565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146102fa5760405163030c1b6b60e11b815260040160405180910390fd5b5f61031261030d368890038801886116dd565b610978565b5f8181526003602052604090205490915063ffffffff9081169086161161034c57604051632f20889f60e01b815260040160405180910390fd5b5f81815260046020908152604080832063ffffffff8916845290915281208490555b838110156103d857848482818110610388576103886119cc565b905060200281019061039a91906119e0565b5f83815260056020908152604080832063ffffffff808c168552908352818420908616845290915290206103ce8282611a29565b505060010161036e565b505f818152600360209081526040909120805463ffffffff191663ffffffff881617905561040890830183611b2c565b5f8281526001602090815260409182902080546001600160a01b0319166001600160a01b03949094169390931790925561044791908401908401611b47565b5f8281526002602052604090819020805463ffffffff191663ffffffff9390931692909217909155517f4f588da9ec57976194a79b5594f8f8782923d93013df2b9ed12fe125805011ef906104a3908890889088908890611b60565b60405180910390a1505050505050565b5f5f6104be83610978565b5f9081526003602052604090205463ffffffff169392505050565b5f5f6104e483610978565b5f9081526002602052604090205463ffffffff169392505050565b60605f61050b84610978565b5f81815260046020908152604080832063ffffffff8089168552925282205492935082166001600160401b0381111561054657610546611625565b60405190808252806020026020018201604052801561058b57816020015b604080518082019091525f8152606060208201528152602001906001900390816105645790505b5090505f5b8263ffffffff168163ffffffff161015610663575f84815260056020908152604080832063ffffffff808b16855290835281842090851684528252918290208251808401845281546001600160a01b031681526001820180548551818602810186019096528086529194929385810193929083018282801561062f57602002820191905f5260205f20905b81548152602001906001019080831161061b575b505050505081525050828263ffffffff1681518110610650576106506119cc565b6020908102919091010152600101610590565b5095945050505050565b606061067983836109db565b9392505050565b5f5f61068b83610978565b5f908152600160205260409020546001600160a01b03169392505050565b5f5f6106b585856109db565b905082518151146106d95760405163512509d360e11b815260040160405180910390fd5b5f5b8151811015610730578381815181106106f6576106f66119cc565b6020026020010151828281518110610710576107106119cc565b60200260200101511015610728575f92505050610679565b6001016106db565b50600195945050505050565b5f5f61074886866109db565b90505f6107618761075c6020890189611b47565b610d9c565b825190915084146107855760405163512509d360e11b815260040160405180910390fd5b5f5b8251811015610825575f6127108787848181106107a6576107a66119cc565b90506020020160208101906107bb9190611c93565b61ffff168484815181106107d1576107d16119cc565b60200260200101516107e39190611a12565b6107ed9190611cc8565b905080848381518110610802576108026119cc565b6020026020010151101561081c575f94505050505061082d565b50600101610787565b506001925050505b949350505050565b60408051808201909152600a81526922b4b3b2b72630bcb2b960b11b6020909101525f7f91ab3d17e3a50a9d89e63fd30b92be7f5336b03b287bb946787a83a9d62a27667f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea6108a2610f97565b80516020918201206040516108da949392309101938452602084019290925260408301526001600160a01b0316606082015260800190565b60405160208183030381529060405280519060200120905090565b5f6108fe610835565b60405161190160f01b6020820152602281019190915260428101839052606201604051602081830303815290604052805190602001209050919050565b60605f6109478361100c565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f815f0151826020015163ffffffff166040516020016109c392919060609290921b6bffffffffffffffffffffffff1916825260a01b6001600160a01b031916601482015260200190565b60405160208183030381529060405261027b90611cdb565b60605f6109f061030d368690038601866116dd565b5f8181526002602090815260409091205491925063ffffffff90911690610a1990850185611b47565b610a239190611cfe565b63ffffffff16421115610a495760405163640fcd6b60e11b815260040160405180910390fd5b610a566020840184611b47565b5f8281526003602052604090205463ffffffff908116911614610a8c57604051630cad17b760e31b815260040160405180910390fd5b5f610a9e8561075c6020870187611b47565b90505f81516001600160401b03811115610aba57610aba611625565b604051908082528060200260200182016040528015610ae3578160200160208202803683370190505b5090505f610b01610af76020880188611b47565b8760200135610210565b90505f80610b4f83610b1660408b018b611d1a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061103392505050565b9150915080610b715760405163439cc0cd60e01b815260040160405180910390fd5b5f5b8251811015610d8e575f838281518110610b8f57610b8f6119cc565b602002602001015190505f5f9050610bc260405180604001604052805f6001600160a01b03168152602001606081525090565b5f5b60045f8c81526020019081526020015f205f8e5f016020810190610be89190611b47565b63ffffffff1663ffffffff1681526020019081526020015f2054811015610ced5760055f8c81526020019081526020015f205f8e5f016020810190610c2d9190611b47565b63ffffffff908116825260208083019390935260409182015f90812091851681529083528190208151808301835281546001600160a01b031681526001820180548451818702810187019095528085529194929385840193909290830182828015610cb557602002820191905f5260205f20905b815481526020019060010190808311610ca1575b5050505050815250509150836001600160a01b0316825f01516001600160a01b031603610ce55760019250610ced565b600101610bc4565b5081610d0c5760405163439cc0cd60e01b815260040160405180910390fd5b60208101515f5b815181108015610d235750895181105b15610d7d57818181518110610d3a57610d3a6119cc565b60200260200101518a8281518110610d5457610d546119cc565b60200260200101818151610d689190611d5c565b90525080610d7581611d6f565b915050610d13565b505060019093019250610b73915050565b509298975050505050505050565b60605f610db161030d368690038601866116dd565b5f8181526003602052604090205490915063ffffffff848116911614610dea57604051630cad17b760e31b815260040160405180910390fd5b5f81815260046020908152604080832063ffffffff8716845290915290205480610e2757604051630cad17b760e31b815260040160405180910390fd5b5f82815260056020908152604080832063ffffffff881684528252808320838052909152902060010154806001600160401b03811115610e6957610e69611625565b604051908082528060200260200182016040528015610e92578160200160208202803683370190505b5093505f5b82811015610f8d575f84815260056020908152604080832063ffffffff808b1685529083528184209085168452825280832060010180548251818502810185019093528083529192909190830182828015610f0f57602002820191905f5260205f20905b815481526020019060010190808311610efb575b509394505f93505050505b815181108015610f2957508381105b15610f8357818181518110610f4057610f406119cc565b6020026020010151878281518110610f5a57610f5a6119cc565b60200260200101818151610f6e9190611d5c565b90525080610f7b81611d6f565b915050610f1a565b5050600101610e97565b5050505092915050565b60605f610fc37f000000000000000000000000000000000000000000000000000000000000000061093b565b9050805f81518110610fd757610fd76119cc565b016020908101516040516001600160f81b03199091169181019190915260210160405160208183030381529060405291505090565b5f60ff8216601f81111561027b57604051632cd44ac360e21b815260040160405180910390fd5b60605f604183516110449190611d87565b1561106257604051634be6321b60e01b815260040160405180910390fd5b5f604184516110719190611cc8565b9050806001600160401b0381111561108b5761108b611625565b6040519080825280602002602001820160405280156110b4578160200160208202803683370190505b5092505f5b8181101561123657604080516041808252608082019092525f916020820181803683370190505090505f5b604181101561114f5786816110fa856041611a12565b6111049190611d5c565b81518110611114576111146119cc565b602001015160f81c60f81b828281518110611131576111316119cc565b60200101906001600160f81b03191690815f1a9053506001016110e4565b505f5f61115c8984611244565b90925090505f81600481111561117457611174611d9a565b14158061118857506001600160a01b038216155b1561119b57505f945061123d9350505050565b5f841180156111df5750866111b1600186611dae565b815181106111c1576111c16119cc565b60200260200101516001600160a01b0316826001600160a01b031611155b156111f257505f945061123d9350505050565b6111ff828a855f19611283565b81878581518110611212576112126119cc565b6001600160a01b0392909216602092830291909101909101525050506001016110b9565b5060019150505b9250929050565b5f5f8251604103611278576020830151604084015160608501515f1a61126c878285856112db565b9450945050505061123d565b505f9050600261123d565b428110156112a457604051630819bdcd60e01b815260040160405180910390fd5b6112b86001600160a01b0385168484611398565b6112d557604051638baa579f60e01b815260040160405180910390fd5b50505050565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561131057505f9050600361138f565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611361573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116611389575f6001925092505061138f565b91505f90505b94509492505050565b5f5f5f6113a58585611244565b90925090505f8160048111156113bd576113bd611d9a565b1480156113db5750856001600160a01b0316826001600160a01b0316145b806113ec57506113ec8686866113f6565b9695505050505050565b5f5f5f856001600160a01b0316631626ba7e60e01b868660405160240161141e929190611dc1565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161145c9190611dd9565b5f60405180830381855afa9150503d805f8114611494576040519150601f19603f3d011682016040523d82523d5f602084013e611499565b606091505b50915091508180156114ad57506020815110155b80156113ec57508051630b135d3f60e11b906114d29083016020908101908401611def565b149695505050505050565b803563ffffffff811681146114f0575f5ffd5b919050565b5f5f60408385031215611506575f5ffd5b61150f836114dd565b946020939093013593505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610679602083018461151d565b5f6040828403121561156d575f5ffd5b50919050565b5f5f83601f840112611583575f5ffd5b5081356001600160401b03811115611599575f5ffd5b6020830191508360208260051b850101111561123d575f5ffd5b5f5f5f5f5f60c086880312156115c7575f5ffd5b6115d1878761155d565b94506115df604087016114dd565b935060608601356001600160401b038111156115f9575f5ffd5b61160588828901611573565b90945092506116199050876080880161155d565b90509295509295909350565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b038111828210171561166157611661611625565b604052919050565b6001600160a01b038116811461167d575f5ffd5b50565b5f60408284031215611690575f5ffd5b604080519081016001600160401b03811182821017156116b2576116b2611625565b60405290508082356116c381611669565b81526116d1602084016114dd565b60208201525092915050565b5f604082840312156116ed575f5ffd5b6106798383611680565b5f5f60608385031215611708575f5ffd5b6117128484611680565b9150611720604084016114dd565b90509250929050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b828110156117cb57868503603f19018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101905f9060608801905b808310156117b35783518252602082019150602084019350600183019250611790565b5096505050602093840193919091019060010161174f565b50929695505050505050565b5f6060828403121561156d575f5ffd5b5f5f606083850312156117f8575f5ffd5b611802848461155d565b915060408301356001600160401b0381111561181c575f5ffd5b611828858286016117d7565b9150509250929050565b602080825282518282018190525f918401906040840190835b8181101561186957835183526020938401939092019160010161184b565b509095945050505050565b5f5f5f60808486031215611886575f5ffd5b611890858561155d565b925060408401356001600160401b038111156118aa575f5ffd5b6118b6868287016117d7565b92505060608401356001600160401b038111156118d1575f5ffd5b8401601f810186136118e1575f5ffd5b80356001600160401b038111156118fa576118fa611625565b8060051b61190a60208201611639565b91825260208184018101929081019089841115611925575f5ffd5b6020850194505b8385101561194757843582526020948501949091019061192c565b80955050505050509250925092565b5f5f5f5f60808587031215611969575f5ffd5b611973868661155d565b935060408501356001600160401b0381111561198d575f5ffd5b611999878288016117d7565b93505060608501356001600160401b038111156119b4575f5ffd5b6119c087828801611573565b95989497509550505050565b634e487b7160e01b5f52603260045260245ffd5b5f8235603e198336030181126119f4575f5ffd5b9190910192915050565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761027b5761027b6119fe565b8135611a3481611669565b81546001600160a01b0319166001600160a01b0391909116178155602082013536839003601e19018112611a66575f5ffd5b820180356001600160401b03811115611a7d575f5ffd5b6020820191508060051b3603821315611a94575f5ffd5b600183016001600160401b03821115611aaf57611aaf611625565b68010000000000000000821115611ac857611ac8611625565b805482825580831015611afd575f828152602090208381019082015b80821015611afa575f8255600182019150611ae4565b50505b505f90815260208120905b82811015611b2457833582820155602090930192600101611b08565b505050505050565b5f60208284031215611b3c575f5ffd5b813561067981611669565b5f60208284031215611b57575f5ffd5b610679826114dd565b5f608082018635611b7081611669565b6001600160a01b0316835263ffffffff611b8c602089016114dd565b16602084015263ffffffff861660408401526080606084015283905260a0600584901b83018101908301855f603e1936839003015b87821015611c8457868503609f190184528235818112611bdf575f5ffd5b89018035611bec81611669565b6001600160a01b03168652602081013536829003601e19018112611c0e575f5ffd5b016020810190356001600160401b03811115611c28575f5ffd5b8060051b803603831315611c3a575f5ffd5b60406020890181905288018290526001600160fb1b03821115611c5b575f5ffd5b808360608a01376060818901019750505050602083019250602084019350600182019150611bc1565b50929998505050505050505050565b5f60208284031215611ca3575f5ffd5b813561ffff81168114610679575f5ffd5b634e487b7160e01b5f52601260045260245ffd5b5f82611cd657611cd6611cb4565b500490565b8051602080830151919081101561156d575f1960209190910360031b1b16919050565b63ffffffff818116838216019081111561027b5761027b6119fe565b5f5f8335601e19843603018112611d2f575f5ffd5b8301803591506001600160401b03821115611d48575f5ffd5b60200191503681900382131561123d575f5ffd5b8082018082111561027b5761027b6119fe565b5f60018201611d8057611d806119fe565b5060010190565b5f82611d9557611d95611cb4565b500690565b634e487b7160e01b5f52602160045260245ffd5b8181038181111561027b5761027b6119fe565b828152604060208201525f61082d604083018461151d565b5f82518060208501845e5f920191825250919050565b5f60208284031215611dff575f5ffd5b505191905056fea2646970667358221220af476213d2afa9d15f0a3d127240d1a16633f95a1f6d9b2d146c321e8327642864736f6c634300081b0033", } // ECDSACertificateVerifierABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/IBN254TableCalculator/binding.go b/pkg/bindings/IBN254TableCalculator/binding.go index 85471ef729..9635ffbd55 100644 --- a/pkg/bindings/IBN254TableCalculator/binding.go +++ b/pkg/bindings/IBN254TableCalculator/binding.go @@ -57,7 +57,7 @@ type OperatorSet struct { // IBN254TableCalculatorMetaData contains all meta data concerning the IBN254TableCalculator contract. var IBN254TableCalculatorMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"calculateOperatorTable\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"operatorSetInfo\",\"type\":\"tuple\",\"internalType\":\"structIBN254TableCalculatorTypes.BN254OperatorSetInfo\",\"components\":[{\"name\":\"operatorInfoTreeRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"numOperators\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"aggregatePubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"totalWeights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateOperatorTableBytes\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"operatorTableBytes\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorInfos\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"operatorInfos\",\"type\":\"tuple[]\",\"internalType\":\"structIBN254TableCalculatorTypes.BN254OperatorInfo[]\",\"components\":[{\"name\":\"pubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"weights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorWeight\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"weight\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorWeights\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"operators\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"weights\",\"type\":\"uint256[][]\",\"internalType\":\"uint256[][]\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"LookaheadBlocksSet\",\"inputs\":[{\"name\":\"lookaheadBlocks\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"LookaheadBlocksTooHigh\",\"inputs\":[]}]", + ABI: "[{\"type\":\"function\",\"name\":\"calculateOperatorTable\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"operatorSetInfo\",\"type\":\"tuple\",\"internalType\":\"structIBN254TableCalculatorTypes.BN254OperatorSetInfo\",\"components\":[{\"name\":\"operatorInfoTreeRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"numOperators\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"aggregatePubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"totalWeights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateOperatorTableBytes\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"operatorTableBytes\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorInfos\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"operatorInfos\",\"type\":\"tuple[]\",\"internalType\":\"structIBN254TableCalculatorTypes.BN254OperatorInfo[]\",\"components\":[{\"name\":\"pubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"weights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorWeight\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"weight\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorWeights\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"operators\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"weights\",\"type\":\"uint256[][]\",\"internalType\":\"uint256[][]\"}],\"stateMutability\":\"view\"}]", } // IBN254TableCalculatorABI is the input ABI used to generate the binding from. @@ -374,137 +374,3 @@ func (_IBN254TableCalculator *IBN254TableCalculatorCallerSession) GetOperatorWei }, error) { return _IBN254TableCalculator.Contract.GetOperatorWeights(&_IBN254TableCalculator.CallOpts, operatorSet) } - -// IBN254TableCalculatorLookaheadBlocksSetIterator is returned from FilterLookaheadBlocksSet and is used to iterate over the raw logs and unpacked data for LookaheadBlocksSet events raised by the IBN254TableCalculator contract. -type IBN254TableCalculatorLookaheadBlocksSetIterator struct { - Event *IBN254TableCalculatorLookaheadBlocksSet // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *IBN254TableCalculatorLookaheadBlocksSetIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(IBN254TableCalculatorLookaheadBlocksSet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(IBN254TableCalculatorLookaheadBlocksSet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *IBN254TableCalculatorLookaheadBlocksSetIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *IBN254TableCalculatorLookaheadBlocksSetIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// IBN254TableCalculatorLookaheadBlocksSet represents a LookaheadBlocksSet event raised by the IBN254TableCalculator contract. -type IBN254TableCalculatorLookaheadBlocksSet struct { - LookaheadBlocks *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterLookaheadBlocksSet is a free log retrieval operation binding the contract event 0xa41e64dd47db91b61b43ccea8b57d75abfa496f23efc708c22753c4bc9d68842. -// -// Solidity: event LookaheadBlocksSet(uint256 lookaheadBlocks) -func (_IBN254TableCalculator *IBN254TableCalculatorFilterer) FilterLookaheadBlocksSet(opts *bind.FilterOpts) (*IBN254TableCalculatorLookaheadBlocksSetIterator, error) { - - logs, sub, err := _IBN254TableCalculator.contract.FilterLogs(opts, "LookaheadBlocksSet") - if err != nil { - return nil, err - } - return &IBN254TableCalculatorLookaheadBlocksSetIterator{contract: _IBN254TableCalculator.contract, event: "LookaheadBlocksSet", logs: logs, sub: sub}, nil -} - -// WatchLookaheadBlocksSet is a free log subscription operation binding the contract event 0xa41e64dd47db91b61b43ccea8b57d75abfa496f23efc708c22753c4bc9d68842. -// -// Solidity: event LookaheadBlocksSet(uint256 lookaheadBlocks) -func (_IBN254TableCalculator *IBN254TableCalculatorFilterer) WatchLookaheadBlocksSet(opts *bind.WatchOpts, sink chan<- *IBN254TableCalculatorLookaheadBlocksSet) (event.Subscription, error) { - - logs, sub, err := _IBN254TableCalculator.contract.WatchLogs(opts, "LookaheadBlocksSet") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(IBN254TableCalculatorLookaheadBlocksSet) - if err := _IBN254TableCalculator.contract.UnpackLog(event, "LookaheadBlocksSet", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseLookaheadBlocksSet is a log parse operation binding the contract event 0xa41e64dd47db91b61b43ccea8b57d75abfa496f23efc708c22753c4bc9d68842. -// -// Solidity: event LookaheadBlocksSet(uint256 lookaheadBlocks) -func (_IBN254TableCalculator *IBN254TableCalculatorFilterer) ParseLookaheadBlocksSet(log types.Log) (*IBN254TableCalculatorLookaheadBlocksSet, error) { - event := new(IBN254TableCalculatorLookaheadBlocksSet) - if err := _IBN254TableCalculator.contract.UnpackLog(event, "LookaheadBlocksSet", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} diff --git a/pkg/bindings/IOperatorTableUpdater/binding.go b/pkg/bindings/IOperatorTableUpdater/binding.go index 9780bc9366..ef6ab9e763 100644 --- a/pkg/bindings/IOperatorTableUpdater/binding.go +++ b/pkg/bindings/IOperatorTableUpdater/binding.go @@ -71,7 +71,7 @@ type OperatorSet struct { // IOperatorTableUpdaterMetaData contains all meta data concerning the IOperatorTableUpdater contract. var IOperatorTableUpdaterMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"confirmGlobalTableRoot\",\"inputs\":[{\"name\":\"globalTableRootCert\",\"type\":\"tuple\",\"internalType\":\"structIBN254CertificateVerifierTypes.BN254Certificate\",\"components\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"messageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"signature\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apk\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"nonSignerWitnesses\",\"type\":\"tuple[]\",\"internalType\":\"structIBN254CertificateVerifierTypes.BN254OperatorInfoWitness[]\",\"components\":[{\"name\":\"operatorIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"operatorInfoProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"operatorInfo\",\"type\":\"tuple\",\"internalType\":\"structIBN254TableCalculatorTypes.BN254OperatorInfo\",\"components\":[{\"name\":\"pubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"weights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}]}]},{\"name\":\"globalTableRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"referenceBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getCertificateVerifier\",\"inputs\":[{\"name\":\"curveType\",\"type\":\"uint8\",\"internalType\":\"enumIKeyRegistrarTypes.CurveType\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getCurrentGlobalTableRoot\",\"inputs\":[],\"outputs\":[{\"name\":\"globalTableRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getGlobalConfirmerSetReferenceTimestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getGlobalRootConfirmerSet\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getGlobalTableRootByTimestamp\",\"inputs\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"tableRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getGlobalTableUpdateMessageHash\",\"inputs\":[{\"name\":\"globalTableRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"referenceBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getLatestReferenceBlockNumber\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getLatestReferenceTimestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getReferenceBlockNumber\",\"inputs\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setGlobalRootConfirmationThreshold\",\"inputs\":[{\"name\":\"bps\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGlobalRootConfirmerSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateOperatorTable\",\"inputs\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"globalTableRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"operatorSetIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"operatorTableBytes\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"GlobalRootConfirmationThresholdUpdated\",\"inputs\":[{\"name\":\"bps\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"GlobalRootConfirmerSetUpdated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"NewGlobalTableRoot\",\"inputs\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"indexed\":true,\"internalType\":\"uint32\"},{\"name\":\"globalTableRoot\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CertificateInvalid\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GlobalTableRootInFuture\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GlobalTableRootStale\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidConfirmationThreshold\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidCurveType\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidGlobalTableRoot\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidMessageHash\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidOperatorSetProof\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSignatureLength\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TableUpdateForPastTimestamp\",\"inputs\":[]}]", + ABI: "[{\"type\":\"function\",\"name\":\"confirmGlobalTableRoot\",\"inputs\":[{\"name\":\"globalTableRootCert\",\"type\":\"tuple\",\"internalType\":\"structIBN254CertificateVerifierTypes.BN254Certificate\",\"components\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"messageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"signature\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apk\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"nonSignerWitnesses\",\"type\":\"tuple[]\",\"internalType\":\"structIBN254CertificateVerifierTypes.BN254OperatorInfoWitness[]\",\"components\":[{\"name\":\"operatorIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"operatorInfoProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"operatorInfo\",\"type\":\"tuple\",\"internalType\":\"structIBN254TableCalculatorTypes.BN254OperatorInfo\",\"components\":[{\"name\":\"pubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"weights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}]}]},{\"name\":\"globalTableRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"referenceBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getCertificateVerifier\",\"inputs\":[{\"name\":\"curveType\",\"type\":\"uint8\",\"internalType\":\"enumIKeyRegistrarTypes.CurveType\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getCurrentGlobalTableRoot\",\"inputs\":[],\"outputs\":[{\"name\":\"globalTableRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getGlobalConfirmerSetReferenceTimestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getGlobalRootConfirmerSet\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getGlobalTableRootByTimestamp\",\"inputs\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"tableRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getGlobalTableUpdateMessageHash\",\"inputs\":[{\"name\":\"globalTableRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"referenceBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getLatestReferenceBlockNumber\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getLatestReferenceTimestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getReferenceBlockNumberByTimestamp\",\"inputs\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getReferenceTimestampByBlockNumber\",\"inputs\":[{\"name\":\"referenceBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setGlobalRootConfirmationThreshold\",\"inputs\":[{\"name\":\"bps\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGlobalRootConfirmerSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateOperatorTable\",\"inputs\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"globalTableRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"operatorSetIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"operatorTableBytes\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"GlobalRootConfirmationThresholdUpdated\",\"inputs\":[{\"name\":\"bps\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"GlobalRootConfirmerSetUpdated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"NewGlobalTableRoot\",\"inputs\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"indexed\":true,\"internalType\":\"uint32\"},{\"name\":\"globalTableRoot\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CertificateInvalid\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GlobalTableRootInFuture\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GlobalTableRootStale\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidConfirmationThreshold\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidCurveType\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidGlobalTableRoot\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidMessageHash\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidOperatorSetProof\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSignatureLength\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TableUpdateForPastTimestamp\",\"inputs\":[]}]", } // IOperatorTableUpdaterABI is the input ABI used to generate the binding from. @@ -468,12 +468,12 @@ func (_IOperatorTableUpdater *IOperatorTableUpdaterCallerSession) GetLatestRefer return _IOperatorTableUpdater.Contract.GetLatestReferenceTimestamp(&_IOperatorTableUpdater.CallOpts) } -// GetReferenceBlockNumber is a free data retrieval call binding the contract method 0x95b6bccb. +// GetReferenceBlockNumberByTimestamp is a free data retrieval call binding the contract method 0x23b7b5b2. // -// Solidity: function getReferenceBlockNumber(uint32 referenceTimestamp) view returns(uint32) -func (_IOperatorTableUpdater *IOperatorTableUpdaterCaller) GetReferenceBlockNumber(opts *bind.CallOpts, referenceTimestamp uint32) (uint32, error) { +// Solidity: function getReferenceBlockNumberByTimestamp(uint32 referenceTimestamp) view returns(uint32) +func (_IOperatorTableUpdater *IOperatorTableUpdaterCaller) GetReferenceBlockNumberByTimestamp(opts *bind.CallOpts, referenceTimestamp uint32) (uint32, error) { var out []interface{} - err := _IOperatorTableUpdater.contract.Call(opts, &out, "getReferenceBlockNumber", referenceTimestamp) + err := _IOperatorTableUpdater.contract.Call(opts, &out, "getReferenceBlockNumberByTimestamp", referenceTimestamp) if err != nil { return *new(uint32), err @@ -485,18 +485,49 @@ func (_IOperatorTableUpdater *IOperatorTableUpdaterCaller) GetReferenceBlockNumb } -// GetReferenceBlockNumber is a free data retrieval call binding the contract method 0x95b6bccb. +// GetReferenceBlockNumberByTimestamp is a free data retrieval call binding the contract method 0x23b7b5b2. // -// Solidity: function getReferenceBlockNumber(uint32 referenceTimestamp) view returns(uint32) -func (_IOperatorTableUpdater *IOperatorTableUpdaterSession) GetReferenceBlockNumber(referenceTimestamp uint32) (uint32, error) { - return _IOperatorTableUpdater.Contract.GetReferenceBlockNumber(&_IOperatorTableUpdater.CallOpts, referenceTimestamp) +// Solidity: function getReferenceBlockNumberByTimestamp(uint32 referenceTimestamp) view returns(uint32) +func (_IOperatorTableUpdater *IOperatorTableUpdaterSession) GetReferenceBlockNumberByTimestamp(referenceTimestamp uint32) (uint32, error) { + return _IOperatorTableUpdater.Contract.GetReferenceBlockNumberByTimestamp(&_IOperatorTableUpdater.CallOpts, referenceTimestamp) } -// GetReferenceBlockNumber is a free data retrieval call binding the contract method 0x95b6bccb. +// GetReferenceBlockNumberByTimestamp is a free data retrieval call binding the contract method 0x23b7b5b2. // -// Solidity: function getReferenceBlockNumber(uint32 referenceTimestamp) view returns(uint32) -func (_IOperatorTableUpdater *IOperatorTableUpdaterCallerSession) GetReferenceBlockNumber(referenceTimestamp uint32) (uint32, error) { - return _IOperatorTableUpdater.Contract.GetReferenceBlockNumber(&_IOperatorTableUpdater.CallOpts, referenceTimestamp) +// Solidity: function getReferenceBlockNumberByTimestamp(uint32 referenceTimestamp) view returns(uint32) +func (_IOperatorTableUpdater *IOperatorTableUpdaterCallerSession) GetReferenceBlockNumberByTimestamp(referenceTimestamp uint32) (uint32, error) { + return _IOperatorTableUpdater.Contract.GetReferenceBlockNumberByTimestamp(&_IOperatorTableUpdater.CallOpts, referenceTimestamp) +} + +// GetReferenceTimestampByBlockNumber is a free data retrieval call binding the contract method 0x193b79f3. +// +// Solidity: function getReferenceTimestampByBlockNumber(uint32 referenceBlockNumber) view returns(uint32) +func (_IOperatorTableUpdater *IOperatorTableUpdaterCaller) GetReferenceTimestampByBlockNumber(opts *bind.CallOpts, referenceBlockNumber uint32) (uint32, error) { + var out []interface{} + err := _IOperatorTableUpdater.contract.Call(opts, &out, "getReferenceTimestampByBlockNumber", referenceBlockNumber) + + if err != nil { + return *new(uint32), err + } + + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + + return out0, err + +} + +// GetReferenceTimestampByBlockNumber is a free data retrieval call binding the contract method 0x193b79f3. +// +// Solidity: function getReferenceTimestampByBlockNumber(uint32 referenceBlockNumber) view returns(uint32) +func (_IOperatorTableUpdater *IOperatorTableUpdaterSession) GetReferenceTimestampByBlockNumber(referenceBlockNumber uint32) (uint32, error) { + return _IOperatorTableUpdater.Contract.GetReferenceTimestampByBlockNumber(&_IOperatorTableUpdater.CallOpts, referenceBlockNumber) +} + +// GetReferenceTimestampByBlockNumber is a free data retrieval call binding the contract method 0x193b79f3. +// +// Solidity: function getReferenceTimestampByBlockNumber(uint32 referenceBlockNumber) view returns(uint32) +func (_IOperatorTableUpdater *IOperatorTableUpdaterCallerSession) GetReferenceTimestampByBlockNumber(referenceBlockNumber uint32) (uint32, error) { + return _IOperatorTableUpdater.Contract.GetReferenceTimestampByBlockNumber(&_IOperatorTableUpdater.CallOpts, referenceBlockNumber) } // ConfirmGlobalTableRoot is a paid mutator transaction binding the contract method 0xeaaed9d5. diff --git a/pkg/bindings/IReleaseManager/binding.go b/pkg/bindings/IReleaseManager/binding.go new file mode 100644 index 0000000000..81a8eec8a0 --- /dev/null +++ b/pkg/bindings/IReleaseManager/binding.go @@ -0,0 +1,530 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package IReleaseManager + +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 +) + +// IReleaseManagerTypesArtifact is an auto generated low-level Go binding around an user-defined struct. +type IReleaseManagerTypesArtifact struct { + Digest [32]byte + RegistryUrl string +} + +// IReleaseManagerTypesRelease is an auto generated low-level Go binding around an user-defined struct. +type IReleaseManagerTypesRelease struct { + Artifacts []IReleaseManagerTypesArtifact + UpgradeByTime uint32 +} + +// OperatorSet is an auto generated low-level Go binding around an user-defined struct. +type OperatorSet struct { + Avs common.Address + Id uint32 +} + +// IReleaseManagerMetaData contains all meta data concerning the IReleaseManager contract. +var IReleaseManagerMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"function\",\"name\":\"getLatestRelease\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIReleaseManagerTypes.Release\",\"components\":[{\"name\":\"artifacts\",\"type\":\"tuple[]\",\"internalType\":\"structIReleaseManagerTypes.Artifact[]\",\"components\":[{\"name\":\"digest\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"registryUrl\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"name\":\"upgradeByTime\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getLatestUpgradeByTime\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRelease\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"releaseId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIReleaseManagerTypes.Release\",\"components\":[{\"name\":\"artifacts\",\"type\":\"tuple[]\",\"internalType\":\"structIReleaseManagerTypes.Artifact[]\",\"components\":[{\"name\":\"digest\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"registryUrl\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"name\":\"upgradeByTime\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTotalReleases\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isValidRelease\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"releaseId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"publishRelease\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"release\",\"type\":\"tuple\",\"internalType\":\"structIReleaseManagerTypes.Release\",\"components\":[{\"name\":\"artifacts\",\"type\":\"tuple[]\",\"internalType\":\"structIReleaseManagerTypes.Artifact[]\",\"components\":[{\"name\":\"digest\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"registryUrl\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"name\":\"upgradeByTime\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"releaseId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"ReleasePublished\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":true,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"releaseId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"release\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIReleaseManagerTypes.Release\",\"components\":[{\"name\":\"artifacts\",\"type\":\"tuple[]\",\"internalType\":\"structIReleaseManagerTypes.Artifact[]\",\"components\":[{\"name\":\"digest\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"registryUrl\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"name\":\"upgradeByTime\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"InvalidUpgradeByTime\",\"inputs\":[]}]", +} + +// IReleaseManagerABI is the input ABI used to generate the binding from. +// Deprecated: Use IReleaseManagerMetaData.ABI instead. +var IReleaseManagerABI = IReleaseManagerMetaData.ABI + +// IReleaseManager is an auto generated Go binding around an Ethereum contract. +type IReleaseManager struct { + IReleaseManagerCaller // Read-only binding to the contract + IReleaseManagerTransactor // Write-only binding to the contract + IReleaseManagerFilterer // Log filterer for contract events +} + +// IReleaseManagerCaller is an auto generated read-only Go binding around an Ethereum contract. +type IReleaseManagerCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IReleaseManagerTransactor is an auto generated write-only Go binding around an Ethereum contract. +type IReleaseManagerTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IReleaseManagerFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type IReleaseManagerFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IReleaseManagerSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type IReleaseManagerSession struct { + Contract *IReleaseManager // 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 +} + +// IReleaseManagerCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type IReleaseManagerCallerSession struct { + Contract *IReleaseManagerCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// IReleaseManagerTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type IReleaseManagerTransactorSession struct { + Contract *IReleaseManagerTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IReleaseManagerRaw is an auto generated low-level Go binding around an Ethereum contract. +type IReleaseManagerRaw struct { + Contract *IReleaseManager // Generic contract binding to access the raw methods on +} + +// IReleaseManagerCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type IReleaseManagerCallerRaw struct { + Contract *IReleaseManagerCaller // Generic read-only contract binding to access the raw methods on +} + +// IReleaseManagerTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type IReleaseManagerTransactorRaw struct { + Contract *IReleaseManagerTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewIReleaseManager creates a new instance of IReleaseManager, bound to a specific deployed contract. +func NewIReleaseManager(address common.Address, backend bind.ContractBackend) (*IReleaseManager, error) { + contract, err := bindIReleaseManager(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &IReleaseManager{IReleaseManagerCaller: IReleaseManagerCaller{contract: contract}, IReleaseManagerTransactor: IReleaseManagerTransactor{contract: contract}, IReleaseManagerFilterer: IReleaseManagerFilterer{contract: contract}}, nil +} + +// NewIReleaseManagerCaller creates a new read-only instance of IReleaseManager, bound to a specific deployed contract. +func NewIReleaseManagerCaller(address common.Address, caller bind.ContractCaller) (*IReleaseManagerCaller, error) { + contract, err := bindIReleaseManager(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &IReleaseManagerCaller{contract: contract}, nil +} + +// NewIReleaseManagerTransactor creates a new write-only instance of IReleaseManager, bound to a specific deployed contract. +func NewIReleaseManagerTransactor(address common.Address, transactor bind.ContractTransactor) (*IReleaseManagerTransactor, error) { + contract, err := bindIReleaseManager(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &IReleaseManagerTransactor{contract: contract}, nil +} + +// NewIReleaseManagerFilterer creates a new log filterer instance of IReleaseManager, bound to a specific deployed contract. +func NewIReleaseManagerFilterer(address common.Address, filterer bind.ContractFilterer) (*IReleaseManagerFilterer, error) { + contract, err := bindIReleaseManager(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &IReleaseManagerFilterer{contract: contract}, nil +} + +// bindIReleaseManager binds a generic wrapper to an already deployed contract. +func bindIReleaseManager(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := IReleaseManagerMetaData.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 (_IReleaseManager *IReleaseManagerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IReleaseManager.Contract.IReleaseManagerCaller.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 (_IReleaseManager *IReleaseManagerRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IReleaseManager.Contract.IReleaseManagerTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IReleaseManager *IReleaseManagerRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IReleaseManager.Contract.IReleaseManagerTransactor.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 (_IReleaseManager *IReleaseManagerCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IReleaseManager.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 (_IReleaseManager *IReleaseManagerTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IReleaseManager.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IReleaseManager *IReleaseManagerTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IReleaseManager.Contract.contract.Transact(opts, method, params...) +} + +// GetLatestRelease is a free data retrieval call binding the contract method 0xd30eeb88. +// +// Solidity: function getLatestRelease((address,uint32) operatorSet) view returns(uint256, ((bytes32,string)[],uint32)) +func (_IReleaseManager *IReleaseManagerCaller) GetLatestRelease(opts *bind.CallOpts, operatorSet OperatorSet) (*big.Int, IReleaseManagerTypesRelease, error) { + var out []interface{} + err := _IReleaseManager.contract.Call(opts, &out, "getLatestRelease", operatorSet) + + if err != nil { + return *new(*big.Int), *new(IReleaseManagerTypesRelease), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + out1 := *abi.ConvertType(out[1], new(IReleaseManagerTypesRelease)).(*IReleaseManagerTypesRelease) + + return out0, out1, err + +} + +// GetLatestRelease is a free data retrieval call binding the contract method 0xd30eeb88. +// +// Solidity: function getLatestRelease((address,uint32) operatorSet) view returns(uint256, ((bytes32,string)[],uint32)) +func (_IReleaseManager *IReleaseManagerSession) GetLatestRelease(operatorSet OperatorSet) (*big.Int, IReleaseManagerTypesRelease, error) { + return _IReleaseManager.Contract.GetLatestRelease(&_IReleaseManager.CallOpts, operatorSet) +} + +// GetLatestRelease is a free data retrieval call binding the contract method 0xd30eeb88. +// +// Solidity: function getLatestRelease((address,uint32) operatorSet) view returns(uint256, ((bytes32,string)[],uint32)) +func (_IReleaseManager *IReleaseManagerCallerSession) GetLatestRelease(operatorSet OperatorSet) (*big.Int, IReleaseManagerTypesRelease, error) { + return _IReleaseManager.Contract.GetLatestRelease(&_IReleaseManager.CallOpts, operatorSet) +} + +// GetLatestUpgradeByTime is a free data retrieval call binding the contract method 0xa9e0ed68. +// +// Solidity: function getLatestUpgradeByTime((address,uint32) operatorSet) view returns(uint32) +func (_IReleaseManager *IReleaseManagerCaller) GetLatestUpgradeByTime(opts *bind.CallOpts, operatorSet OperatorSet) (uint32, error) { + var out []interface{} + err := _IReleaseManager.contract.Call(opts, &out, "getLatestUpgradeByTime", operatorSet) + + if err != nil { + return *new(uint32), err + } + + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + + return out0, err + +} + +// GetLatestUpgradeByTime is a free data retrieval call binding the contract method 0xa9e0ed68. +// +// Solidity: function getLatestUpgradeByTime((address,uint32) operatorSet) view returns(uint32) +func (_IReleaseManager *IReleaseManagerSession) GetLatestUpgradeByTime(operatorSet OperatorSet) (uint32, error) { + return _IReleaseManager.Contract.GetLatestUpgradeByTime(&_IReleaseManager.CallOpts, operatorSet) +} + +// GetLatestUpgradeByTime is a free data retrieval call binding the contract method 0xa9e0ed68. +// +// Solidity: function getLatestUpgradeByTime((address,uint32) operatorSet) view returns(uint32) +func (_IReleaseManager *IReleaseManagerCallerSession) GetLatestUpgradeByTime(operatorSet OperatorSet) (uint32, error) { + return _IReleaseManager.Contract.GetLatestUpgradeByTime(&_IReleaseManager.CallOpts, operatorSet) +} + +// GetRelease is a free data retrieval call binding the contract method 0x3acab5fc. +// +// Solidity: function getRelease((address,uint32) operatorSet, uint256 releaseId) view returns(((bytes32,string)[],uint32)) +func (_IReleaseManager *IReleaseManagerCaller) GetRelease(opts *bind.CallOpts, operatorSet OperatorSet, releaseId *big.Int) (IReleaseManagerTypesRelease, error) { + var out []interface{} + err := _IReleaseManager.contract.Call(opts, &out, "getRelease", operatorSet, releaseId) + + if err != nil { + return *new(IReleaseManagerTypesRelease), err + } + + out0 := *abi.ConvertType(out[0], new(IReleaseManagerTypesRelease)).(*IReleaseManagerTypesRelease) + + return out0, err + +} + +// GetRelease is a free data retrieval call binding the contract method 0x3acab5fc. +// +// Solidity: function getRelease((address,uint32) operatorSet, uint256 releaseId) view returns(((bytes32,string)[],uint32)) +func (_IReleaseManager *IReleaseManagerSession) GetRelease(operatorSet OperatorSet, releaseId *big.Int) (IReleaseManagerTypesRelease, error) { + return _IReleaseManager.Contract.GetRelease(&_IReleaseManager.CallOpts, operatorSet, releaseId) +} + +// GetRelease is a free data retrieval call binding the contract method 0x3acab5fc. +// +// Solidity: function getRelease((address,uint32) operatorSet, uint256 releaseId) view returns(((bytes32,string)[],uint32)) +func (_IReleaseManager *IReleaseManagerCallerSession) GetRelease(operatorSet OperatorSet, releaseId *big.Int) (IReleaseManagerTypesRelease, error) { + return _IReleaseManager.Contract.GetRelease(&_IReleaseManager.CallOpts, operatorSet, releaseId) +} + +// GetTotalReleases is a free data retrieval call binding the contract method 0x66f409f7. +// +// Solidity: function getTotalReleases((address,uint32) operatorSet) view returns(uint256) +func (_IReleaseManager *IReleaseManagerCaller) GetTotalReleases(opts *bind.CallOpts, operatorSet OperatorSet) (*big.Int, error) { + var out []interface{} + err := _IReleaseManager.contract.Call(opts, &out, "getTotalReleases", operatorSet) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetTotalReleases is a free data retrieval call binding the contract method 0x66f409f7. +// +// Solidity: function getTotalReleases((address,uint32) operatorSet) view returns(uint256) +func (_IReleaseManager *IReleaseManagerSession) GetTotalReleases(operatorSet OperatorSet) (*big.Int, error) { + return _IReleaseManager.Contract.GetTotalReleases(&_IReleaseManager.CallOpts, operatorSet) +} + +// GetTotalReleases is a free data retrieval call binding the contract method 0x66f409f7. +// +// Solidity: function getTotalReleases((address,uint32) operatorSet) view returns(uint256) +func (_IReleaseManager *IReleaseManagerCallerSession) GetTotalReleases(operatorSet OperatorSet) (*big.Int, error) { + return _IReleaseManager.Contract.GetTotalReleases(&_IReleaseManager.CallOpts, operatorSet) +} + +// IsValidRelease is a free data retrieval call binding the contract method 0x517e4068. +// +// Solidity: function isValidRelease((address,uint32) operatorSet, uint256 releaseId) view returns(bool) +func (_IReleaseManager *IReleaseManagerCaller) IsValidRelease(opts *bind.CallOpts, operatorSet OperatorSet, releaseId *big.Int) (bool, error) { + var out []interface{} + err := _IReleaseManager.contract.Call(opts, &out, "isValidRelease", operatorSet, releaseId) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsValidRelease is a free data retrieval call binding the contract method 0x517e4068. +// +// Solidity: function isValidRelease((address,uint32) operatorSet, uint256 releaseId) view returns(bool) +func (_IReleaseManager *IReleaseManagerSession) IsValidRelease(operatorSet OperatorSet, releaseId *big.Int) (bool, error) { + return _IReleaseManager.Contract.IsValidRelease(&_IReleaseManager.CallOpts, operatorSet, releaseId) +} + +// IsValidRelease is a free data retrieval call binding the contract method 0x517e4068. +// +// Solidity: function isValidRelease((address,uint32) operatorSet, uint256 releaseId) view returns(bool) +func (_IReleaseManager *IReleaseManagerCallerSession) IsValidRelease(operatorSet OperatorSet, releaseId *big.Int) (bool, error) { + return _IReleaseManager.Contract.IsValidRelease(&_IReleaseManager.CallOpts, operatorSet, releaseId) +} + +// PublishRelease is a paid mutator transaction binding the contract method 0x7c09ea82. +// +// Solidity: function publishRelease((address,uint32) operatorSet, ((bytes32,string)[],uint32) release) returns(uint256 releaseId) +func (_IReleaseManager *IReleaseManagerTransactor) PublishRelease(opts *bind.TransactOpts, operatorSet OperatorSet, release IReleaseManagerTypesRelease) (*types.Transaction, error) { + return _IReleaseManager.contract.Transact(opts, "publishRelease", operatorSet, release) +} + +// PublishRelease is a paid mutator transaction binding the contract method 0x7c09ea82. +// +// Solidity: function publishRelease((address,uint32) operatorSet, ((bytes32,string)[],uint32) release) returns(uint256 releaseId) +func (_IReleaseManager *IReleaseManagerSession) PublishRelease(operatorSet OperatorSet, release IReleaseManagerTypesRelease) (*types.Transaction, error) { + return _IReleaseManager.Contract.PublishRelease(&_IReleaseManager.TransactOpts, operatorSet, release) +} + +// PublishRelease is a paid mutator transaction binding the contract method 0x7c09ea82. +// +// Solidity: function publishRelease((address,uint32) operatorSet, ((bytes32,string)[],uint32) release) returns(uint256 releaseId) +func (_IReleaseManager *IReleaseManagerTransactorSession) PublishRelease(operatorSet OperatorSet, release IReleaseManagerTypesRelease) (*types.Transaction, error) { + return _IReleaseManager.Contract.PublishRelease(&_IReleaseManager.TransactOpts, operatorSet, release) +} + +// IReleaseManagerReleasePublishedIterator is returned from FilterReleasePublished and is used to iterate over the raw logs and unpacked data for ReleasePublished events raised by the IReleaseManager contract. +type IReleaseManagerReleasePublishedIterator struct { + Event *IReleaseManagerReleasePublished // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IReleaseManagerReleasePublishedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IReleaseManagerReleasePublished) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IReleaseManagerReleasePublished) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IReleaseManagerReleasePublishedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IReleaseManagerReleasePublishedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IReleaseManagerReleasePublished represents a ReleasePublished event raised by the IReleaseManager contract. +type IReleaseManagerReleasePublished struct { + OperatorSet OperatorSet + ReleaseId *big.Int + Release IReleaseManagerTypesRelease + Raw types.Log // Blockchain specific contextual infos +} + +// FilterReleasePublished is a free log retrieval operation binding the contract event 0x2decd15222f7c4a8c3d4d2e14dcfdc5a0b52eb2d4b81796bfd010ee5cd972fd3. +// +// Solidity: event ReleasePublished((address,uint32) indexed operatorSet, uint256 indexed releaseId, ((bytes32,string)[],uint32) release) +func (_IReleaseManager *IReleaseManagerFilterer) FilterReleasePublished(opts *bind.FilterOpts, operatorSet []OperatorSet, releaseId []*big.Int) (*IReleaseManagerReleasePublishedIterator, error) { + + var operatorSetRule []interface{} + for _, operatorSetItem := range operatorSet { + operatorSetRule = append(operatorSetRule, operatorSetItem) + } + var releaseIdRule []interface{} + for _, releaseIdItem := range releaseId { + releaseIdRule = append(releaseIdRule, releaseIdItem) + } + + logs, sub, err := _IReleaseManager.contract.FilterLogs(opts, "ReleasePublished", operatorSetRule, releaseIdRule) + if err != nil { + return nil, err + } + return &IReleaseManagerReleasePublishedIterator{contract: _IReleaseManager.contract, event: "ReleasePublished", logs: logs, sub: sub}, nil +} + +// WatchReleasePublished is a free log subscription operation binding the contract event 0x2decd15222f7c4a8c3d4d2e14dcfdc5a0b52eb2d4b81796bfd010ee5cd972fd3. +// +// Solidity: event ReleasePublished((address,uint32) indexed operatorSet, uint256 indexed releaseId, ((bytes32,string)[],uint32) release) +func (_IReleaseManager *IReleaseManagerFilterer) WatchReleasePublished(opts *bind.WatchOpts, sink chan<- *IReleaseManagerReleasePublished, operatorSet []OperatorSet, releaseId []*big.Int) (event.Subscription, error) { + + var operatorSetRule []interface{} + for _, operatorSetItem := range operatorSet { + operatorSetRule = append(operatorSetRule, operatorSetItem) + } + var releaseIdRule []interface{} + for _, releaseIdItem := range releaseId { + releaseIdRule = append(releaseIdRule, releaseIdItem) + } + + logs, sub, err := _IReleaseManager.contract.WatchLogs(opts, "ReleasePublished", operatorSetRule, releaseIdRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IReleaseManagerReleasePublished) + if err := _IReleaseManager.contract.UnpackLog(event, "ReleasePublished", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseReleasePublished is a log parse operation binding the contract event 0x2decd15222f7c4a8c3d4d2e14dcfdc5a0b52eb2d4b81796bfd010ee5cd972fd3. +// +// Solidity: event ReleasePublished((address,uint32) indexed operatorSet, uint256 indexed releaseId, ((bytes32,string)[],uint32) release) +func (_IReleaseManager *IReleaseManagerFilterer) ParseReleasePublished(log types.Log) (*IReleaseManagerReleasePublished, error) { + event := new(IReleaseManagerReleasePublished) + if err := _IReleaseManager.contract.UnpackLog(event, "ReleasePublished", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/pkg/bindings/OperatorTableUpdater/binding.go b/pkg/bindings/OperatorTableUpdater/binding.go index c3230d1f81..0ff23d8f3d 100644 --- a/pkg/bindings/OperatorTableUpdater/binding.go +++ b/pkg/bindings/OperatorTableUpdater/binding.go @@ -85,8 +85,8 @@ type OperatorSet struct { // OperatorTableUpdaterMetaData contains all meta data concerning the OperatorTableUpdater contract. var OperatorTableUpdaterMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_bn254CertificateVerifier\",\"type\":\"address\",\"internalType\":\"contractIBN254CertificateVerifier\"},{\"name\":\"_ecdsaCertificateVerifier\",\"type\":\"address\",\"internalType\":\"contractIECDSACertificateVerifier\"},{\"name\":\"_version\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"GLOBAL_TABLE_ROOT_CERT_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_BPS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"bn254CertificateVerifier\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIBN254CertificateVerifier\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"confirmGlobalTableRoot\",\"inputs\":[{\"name\":\"globalTableRootCert\",\"type\":\"tuple\",\"internalType\":\"structIBN254CertificateVerifierTypes.BN254Certificate\",\"components\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"messageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"signature\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apk\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"nonSignerWitnesses\",\"type\":\"tuple[]\",\"internalType\":\"structIBN254CertificateVerifierTypes.BN254OperatorInfoWitness[]\",\"components\":[{\"name\":\"operatorIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"operatorInfoProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"operatorInfo\",\"type\":\"tuple\",\"internalType\":\"structIBN254TableCalculatorTypes.BN254OperatorInfo\",\"components\":[{\"name\":\"pubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"weights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}]}]},{\"name\":\"globalTableRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"referenceBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ecdsaCertificateVerifier\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIECDSACertificateVerifier\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getCertificateVerifier\",\"inputs\":[{\"name\":\"curveType\",\"type\":\"uint8\",\"internalType\":\"enumIKeyRegistrarTypes.CurveType\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getCurrentGlobalTableRoot\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getGlobalConfirmerSetReferenceTimestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getGlobalRootConfirmerSet\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getGlobalTableRootByTimestamp\",\"inputs\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getGlobalTableUpdateMessageHash\",\"inputs\":[{\"name\":\"globalTableRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"referenceBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"getLatestReferenceBlockNumber\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getLatestReferenceTimestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getReferenceBlockNumber\",\"inputs\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"globalRootConfirmationThreshold\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_globalRootConfirmerSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"_globalRootConfirmationThreshold\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"globalRootConfirmerSetInfo\",\"type\":\"tuple\",\"internalType\":\"structIBN254TableCalculatorTypes.BN254OperatorSetInfo\",\"components\":[{\"name\":\"operatorInfoTreeRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"numOperators\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"aggregatePubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"totalWeights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"globalRootConfirmerSetConfig\",\"type\":\"tuple\",\"internalType\":\"structICrossChainRegistryTypes.OperatorSetConfig\",\"components\":[{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"maxStalenessPeriod\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGlobalRootConfirmationThreshold\",\"inputs\":[{\"name\":\"bps\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGlobalRootConfirmerSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateOperatorTable\",\"inputs\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"globalTableRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"operatorSetIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"operatorTableBytes\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"GlobalRootConfirmationThresholdUpdated\",\"inputs\":[{\"name\":\"bps\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"GlobalRootConfirmerSetUpdated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"NewGlobalTableRoot\",\"inputs\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"indexed\":true,\"internalType\":\"uint32\"},{\"name\":\"globalTableRoot\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CertificateInvalid\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GlobalTableRootInFuture\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GlobalTableRootStale\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidConfirmationThreshold\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidCurveType\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidGlobalTableRoot\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidMessageHash\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidOperatorSetProof\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidProofLength\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidShortString\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSignatureLength\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StringTooLong\",\"inputs\":[{\"name\":\"str\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"type\":\"error\",\"name\":\"TableUpdateForPastTimestamp\",\"inputs\":[]}]", - Bin: "0x60e060405234801561000f575f5ffd5b5060405161206638038061206683398101604081905261002e91610188565b6001600160a01b03808416608052821660a0528061004b8161005f565b60c052506100576100a5565b5050506102b9565b5f5f829050601f81511115610092578260405163305a27a960e01b8152600401610089919061025e565b60405180910390fd5b805161009d82610293565b179392505050565b5f54610100900460ff161561010c5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b6064820152608401610089565b5f5460ff9081161461015b575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b0381168114610171575f5ffd5b50565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f6060848603121561019a575f5ffd5b83516101a58161015d565b60208501519093506101b68161015d565b60408501519092506001600160401b038111156101d1575f5ffd5b8401601f810186136101e1575f5ffd5b80516001600160401b038111156101fa576101fa610174565b604051601f8201601f19908116603f011681016001600160401b038111828210171561022857610228610174565b60405281815282820160200188101561023f575f5ffd5b8160208401602083015e5f602083830101528093505050509250925092565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b805160208083015191908110156102b3575f198160200360031b1b821691505b50919050565b60805160a05160c051611d526103145f395f61066a01525f8181610316015281816106eb01526108d901525f818161033d015281816104d9015281816105d8015281816106ab015281816108340152610a930152611d525ff3fe608060405234801561000f575f5ffd5b5060043610610148575f3560e01c8063715018a6116100bf578063c252aa2211610079578063c252aa221461035f578063c3be1e3314610380578063c5916a3914610393578063eaaed9d5146103b8578063f2fde38b146103cb578063fd967f47146103de575f5ffd5b8063715018a6146102bd5780638da5cb5b146102c557806395b6bccb146102d65780639ea94778146102fe578063ad0f958214610311578063b8c1430614610338575f5ffd5b806331a599d21161011057806331a599d2146101d55780633ef6cd7a146101fa5780634624e6a314610221578063462828891461023557806354fd4d501461027d5780636f728c5014610292575f5ffd5b8063021ab4421461014c5780630371406e146101615780630f3f8edd146101745780632370356c1461019657806328522d79146101a9575b5f5ffd5b61015f61015a36600461103c565b6103e7565b005b61015f61016f3660046110d0565b6105ab565b61017c6105bf565b60405163ffffffff90911681526020015b60405180910390f35b61015f6101a43660046110f1565b610652565b60655462010000900463ffffffff165f908152606760205260409020545b60405190815260200161018d565b60655462010000900463ffffffff9081165f908152606860205260409020541661017c565b6101c77fdbbb55ba0f5fdd66c1f17f44359cb4c67628f9dca440a4c104e61189ad4424b981565b60655462010000900463ffffffff1661017c565b6040805180820182525f80825260209182015281518083019092526066546001600160a01b0381168352600160a01b900463ffffffff169082015260405161018d9190611128565b610285610663565b60405161018d9190611136565b6102a56102a0366004611179565b61068e565b6040516001600160a01b03909116815260200161018d565b61015f61072d565b6033546001600160a01b03166102a5565b61017c6102e4366004611192565b63ffffffff9081165f908152606860205260409020541690565b61015f61030c3660046111f1565b610740565b6102a57f000000000000000000000000000000000000000000000000000000000000000081565b6102a57f000000000000000000000000000000000000000000000000000000000000000081565b60655461036d9061ffff1681565b60405161ffff909116815260200161018d565b6101c761038e36600461128c565b61093e565b6101c76103a1366004611192565b63ffffffff165f9081526067602052604090205490565b61015f6103c63660046112cb565b6109a6565b61015f6103d9366004611337565b610bad565b61036d61271081565b5f54610100900460ff161580801561040557505f54600160ff909116105b8061041e5750303b15801561041e57505f5460ff166001145b6104865760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff1916600117905580156104a7575f805461ff0019166101001790555b6104b087610c1f565b6104b986610c70565b6104c285610cba565b604051636738c40b60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636738c40b906105149089908890889088906004016113fb565b5f604051808303815f87803b15801561052b575f5ffd5b505af115801561053d573d5f5f3e3d5ffd5b50506065805465ffffffff000019166201000063ffffffff891602179055505080156105a2575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b6105b3610d25565b6105bc81610c70565b50565b604051635ddb9b5b60e01b81525f906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635ddb9b5b9061060e90606690600401611484565b602060405180830381865afa158015610629573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061064d91906114ab565b905090565b61065a610d25565b6105bc81610cba565b606061064d7f0000000000000000000000000000000000000000000000000000000000000000610d7f565b5f60028260028111156106a3576106a36114c6565b036106cf57507f0000000000000000000000000000000000000000000000000000000000000000919050565b60018260028111156106e3576106e36114c6565b0361070f57507f0000000000000000000000000000000000000000000000000000000000000000919050565b60405163fdea7c0960e01b815260040160405180910390fd5b919050565b610735610d25565b61073e5f610c1f565b565b5f5f5f5f61074e8686610dbc565b935093509350935061075f8361068e565b6001600160a01b0316635ddb9b5b856040518263ffffffff1660e01b815260040161078a9190611128565b602060405180830381865afa1580156107a5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107c991906114ab565b63ffffffff168b63ffffffff16116107f45760405163207617df60e01b815260040160405180910390fd5b6108198b8b8b8b8b8b8b60405161080c9291906114da565b6040518091039020610e03565b600283600281111561082d5761082d6114c6565b036108be577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636738c40b858d61086c85610ea4565b866040518563ffffffff1660e01b815260040161088c9493929190611523565b5f604051808303815f87803b1580156108a3575f5ffd5b505af11580156108b5573d5f5f3e3d5ffd5b50505050610931565b60018360028111156108d2576108d26114c6565b0361070f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166356d482f5858d61091185610ec6565b866040518563ffffffff1660e01b815260040161088c9493929190611596565b5050505050505050505050565b604080517fdbbb55ba0f5fdd66c1f17f44359cb4c67628f9dca440a4c104e61189ad4424b9602082015290810184905263ffffffff8084166060830152821660808201525f9060a0016040516020818303038152906040528051906020012090509392505050565b428263ffffffff1611156109cd57604051635a119db560e11b815260040160405180910390fd5b60655463ffffffff620100009091048116908316116109ff5760405163037fa86b60e31b815260040160405180910390fd5b610a0a83838361093e565b846020013514610a2d57604051638b56642d60e01b815260040160405180910390fd5b6040805160018082528183019092525f91602080830190803683375050606554825192935061ffff16918391505f90610a6857610a6861164f565b61ffff90921660209283029190910190910152604051625f5e5d60e21b81525f906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063017d797490610acd906066908a90879060040161170d565b6020604051808303815f875af1158015610ae9573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b0d919061189a565b905080610b2d57604051633042041f60e21b815260040160405180910390fd5b6065805465ffffffff000019166201000063ffffffff878116918202929092179092555f828152606860209081526040808320805463ffffffff1916948916949094179093556067905281812088905590518792917f010dcbe0d1e019c93357711f7bb6287d543b7ff7de74f29df3fb5ecceec8d36991a3505050505050565b610bb5610d25565b6001600160a01b038116610c1a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161047d565b6105bc815b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b806066610c7d82826118b9565b9050507f20100394950e66014c25009b45d12b675210a6e7a002044a0e3de6544e3c4b3781604051610caf9190611915565b60405180910390a150565b61271061ffff82161115610ce1576040516307336f0360e11b815260040160405180910390fd5b6065805461ffff191661ffff83169081179091556040519081527ff5d1836df8fcd7c1e54047e94ac8773d2855395603e2ef9ba5f5f16905f2259290602001610caf565b6033546001600160a01b0316331461073e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161047d565b60605f610d8b83610edc565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b604080518082019091525f8082526020820152604080518082019091525f80825260208201819052906060610df3858701876119dd565b9299919850965090945092505050565b63ffffffff86165f908152606760205260409020548514610e375760405163639d09b560e11b815260040160405180910390fd5b610e7f83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508992508591505063ffffffff8816610f03565b610e9c5760405163afa42ca760e01b815260040160405180910390fd5b505050505050565b610eac610fb1565b81806020019051810190610ec09190611b2e565b92915050565b606081806020019051810190610ec09190611bdd565b5f60ff8216601f811115610ec057604051632cd44ac360e21b815260040160405180910390fd5b5f83610f10868585610f1a565b1495945050505050565b5f60208451610f299190611cde565b15610f47576040516313717da960e21b815260040160405180910390fd5b8260205b85518111610fa857610f5e600285611cde565b5f03610f7f57815f528086015160205260405f209150600284049350610f96565b808601515f528160205260405f2091506002840493505b610fa1602082611cfd565b9050610f4b565b50949350505050565b60405180608001604052805f81526020015f8152602001610fe360405180604001604052805f81526020015f81525090565b8152602001606081525090565b6001600160a01b03811681146105bc575f5ffd5b5f60408284031215611014575f5ffd5b50919050565b803561ffff81168114610728575f5ffd5b63ffffffff811681146105bc575f5ffd5b5f5f5f5f5f5f6101008789031215611052575f5ffd5b863561105d81610ff0565b955061106c8860208901611004565b945061107a6060880161101a565b9350608087013561108a8161102b565b925060a08701356001600160401b038111156110a4575f5ffd5b870160a0818a0312156110b5575f5ffd5b91506110c48860c08901611004565b90509295509295509295565b5f604082840312156110e0575f5ffd5b6110ea8383611004565b9392505050565b5f60208284031215611101575f5ffd5b6110ea8261101a565b80516001600160a01b0316825260209081015163ffffffff16910152565b60408101610ec0828461110a565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b803560038110610728575f5ffd5b5f60208284031215611189575f5ffd5b6110ea8261116b565b5f602082840312156111a2575f5ffd5b81356110ea8161102b565b5f5f83601f8401126111bd575f5ffd5b5081356001600160401b038111156111d3575f5ffd5b6020830191508360208285010111156111ea575f5ffd5b9250929050565b5f5f5f5f5f5f5f60a0888a031215611207575f5ffd5b87356112128161102b565b96506020880135955060408801356112298161102b565b945060608801356001600160401b03811115611243575f5ffd5b61124f8a828b016111ad565b90955093505060808801356001600160401b0381111561126d575f5ffd5b6112798a828b016111ad565b989b979a50959850939692959293505050565b5f5f5f6060848603121561129e575f5ffd5b8335925060208401356112b08161102b565b915060408401356112c08161102b565b809150509250925092565b5f5f5f5f608085870312156112de575f5ffd5b84356001600160401b038111156112f3575f5ffd5b85016101208188031215611305575f5ffd5b935060208501359250604085013561131c8161102b565b9150606085013561132c8161102b565b939692955090935050565b5f60208284031215611347575f5ffd5b81356110ea81610ff0565b803561135d81610ff0565b6001600160a01b0316825260208101356113768161102b565b63ffffffff81166020840152505050565b5f5f8335601e1984360301811261139c575f5ffd5b83016020810192503590506001600160401b038111156113ba575f5ffd5b8060051b36038213156111ea575f5ffd5b8183525f6001600160fb1b038311156113e2575f5ffd5b8260051b80836020870137939093016020019392505050565b6114058186611352565b63ffffffff841660408281019190915260c06060808401829052853591840191909152602085013560e0840152908401356101008301528301356101208201525f6114536080850185611387565b60a061014085015261146a610160850182846113cb565b9250505061147b6080830184611352565b95945050505050565b60408101610ec08284546001600160a01b038116825260a01c63ffffffff16602090910152565b5f602082840312156114bb575f5ffd5b81516110ea8161102b565b634e487b7160e01b5f52602160045260245ffd5b818382375f9101908152919050565b5f8151808452602084019350602083015f5b828110156115195781518652602095860195909101906001016114fb565b5093949350505050565b61152d818661110a565b63ffffffff8416604082015260c06060820152825160c0820152602083015160e08201525f60408401518051610100840152602081015161012084015250606084015160a06101408401526115866101608401826114e9565b91505061147b608083018461110a565b5f60c082016115a5838861110a565b63ffffffff8616604084015260c0606084015280855180835260e08501915060e08160051b8601019250602087015f5b828110156116265786850360df19018452815180516001600160a01b03168652602090810151604091870182905290611610908701826114e9565b95505060209384019391909101906001016115d5565b505050508091505061147b608083018461110a565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8235605e1983360301811261169f575f5ffd5b90910192915050565b80358252602080820135908301525f6116c46040830183611387565b6060604086015261147b6060860182846113cb565b5f8151808452602084019350602083015f5b8281101561151957815161ffff168652602095860195909101906001016116eb565b6117308185546001600160a01b038116825260a01c63ffffffff16602090910152565b608060408201525f6101a0820184356117488161102b565b63ffffffff166080840152602085013560a0840152604085013560c0840152606085013560e0840152604060808601610100850137604060c08601610140850137611797610100860186611387565b610120610180860152828184526101c0860190506101c08260051b8701019350825f5b83811015611879578786036101bf190183526117d6828661168b565b80356117e18161102b565b63ffffffff168752602081013536829003601e19018112611800575f5ffd5b81016020810190356001600160401b0381111561181b575f5ffd5b803603821315611829575f5ffd5b606060208a015261183e60608a018284611663565b91505061184e604083018361168b565b9150878103604089015261186281836116a8565b9750505060209283019291909101906001016117ba565b5050505050828103606084015261189081856116d9565b9695505050505050565b5f602082840312156118aa575f5ffd5b815180151581146110ea575f5ffd5b81356118c481610ff0565b81546001600160a01b031981166001600160a01b0392909216918217835560208401356118f08161102b565b6001600160c01b03199190911690911760a09190911b63ffffffff60a01b1617905550565b60408101610ec08284611352565b604080519081016001600160401b03811182821017156119455761194561163b565b60405290565b604051608081016001600160401b03811182821017156119455761194561163b565b604051601f8201601f191681016001600160401b03811182821017156119955761199561163b565b604052919050565b5f604082840312156119ad575f5ffd5b6119b5611923565b905081356119c281610ff0565b815260208201356119d28161102b565b602082015292915050565b5f5f5f5f60c085870312156119f0575f5ffd5b6119fa868661199d565b9350611a086040860161116b565b9250611a17866060870161199d565b915060a08501356001600160401b03811115611a31575f5ffd5b8501601f81018713611a41575f5ffd5b80356001600160401b03811115611a5a57611a5a61163b565b611a6d601f8201601f191660200161196d565b818152886020838501011115611a81575f5ffd5b816020840160208301375f6020838301015280935050505092959194509250565b5f6001600160401b03821115611aba57611aba61163b565b5060051b60200190565b5f82601f830112611ad3575f5ffd5b8151611ae6611ae182611aa2565b61196d565b8082825260208201915060208360051b860101925085831115611b07575f5ffd5b602085015b83811015611b24578051835260209283019201611b0c565b5095945050505050565b5f60208284031215611b3e575f5ffd5b81516001600160401b03811115611b53575f5ffd5b820180840360a0811215611b65575f5ffd5b611b6d61194b565b82518152602080840151908201526040603f1983011215611b8c575f5ffd5b611b94611923565b604084810151825260608501516020830152820152608083015191506001600160401b03821115611bc3575f5ffd5b611bcf86838501611ac4565b606082015295945050505050565b5f60208284031215611bed575f5ffd5b81516001600160401b03811115611c02575f5ffd5b8201601f81018413611c12575f5ffd5b8051611c20611ae182611aa2565b8082825260208201915060208360051b850101925086831115611c41575f5ffd5b602084015b83811015611cd35780516001600160401b03811115611c63575f5ffd5b85016040818a03601f19011215611c78575f5ffd5b611c80611923565b6020820151611c8e81610ff0565b815260408201516001600160401b03811115611ca8575f5ffd5b611cb78b602083860101611ac4565b6020830152508085525050602083019250602081019050611c46565b509695505050505050565b5f82611cf857634e487b7160e01b5f52601260045260245ffd5b500690565b80820180821115610ec057634e487b7160e01b5f52601160045260245ffdfea2646970667358221220adcfb10d57d389c90bb5feabd7dbbc72de2f52c61ff3e8b1ef913a5da1f6a77b64736f6c634300081b0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_bn254CertificateVerifier\",\"type\":\"address\",\"internalType\":\"contractIBN254CertificateVerifier\"},{\"name\":\"_ecdsaCertificateVerifier\",\"type\":\"address\",\"internalType\":\"contractIECDSACertificateVerifier\"},{\"name\":\"_version\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"GLOBAL_TABLE_ROOT_CERT_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_BPS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"bn254CertificateVerifier\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIBN254CertificateVerifier\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"confirmGlobalTableRoot\",\"inputs\":[{\"name\":\"globalTableRootCert\",\"type\":\"tuple\",\"internalType\":\"structIBN254CertificateVerifierTypes.BN254Certificate\",\"components\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"messageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"signature\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apk\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"nonSignerWitnesses\",\"type\":\"tuple[]\",\"internalType\":\"structIBN254CertificateVerifierTypes.BN254OperatorInfoWitness[]\",\"components\":[{\"name\":\"operatorIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"operatorInfoProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"operatorInfo\",\"type\":\"tuple\",\"internalType\":\"structIBN254TableCalculatorTypes.BN254OperatorInfo\",\"components\":[{\"name\":\"pubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"weights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}]}]},{\"name\":\"globalTableRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"referenceBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ecdsaCertificateVerifier\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIECDSACertificateVerifier\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getCertificateVerifier\",\"inputs\":[{\"name\":\"curveType\",\"type\":\"uint8\",\"internalType\":\"enumIKeyRegistrarTypes.CurveType\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getCurrentGlobalTableRoot\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getGlobalConfirmerSetReferenceTimestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getGlobalRootConfirmerSet\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getGlobalTableRootByTimestamp\",\"inputs\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getGlobalTableUpdateMessageHash\",\"inputs\":[{\"name\":\"globalTableRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"referenceBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"getLatestReferenceBlockNumber\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getLatestReferenceTimestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getReferenceBlockNumberByTimestamp\",\"inputs\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getReferenceTimestampByBlockNumber\",\"inputs\":[{\"name\":\"referenceBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"globalRootConfirmationThreshold\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_globalRootConfirmerSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"_globalRootConfirmationThreshold\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"globalRootConfirmerSetInfo\",\"type\":\"tuple\",\"internalType\":\"structIBN254TableCalculatorTypes.BN254OperatorSetInfo\",\"components\":[{\"name\":\"operatorInfoTreeRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"numOperators\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"aggregatePubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"totalWeights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"globalRootConfirmerSetConfig\",\"type\":\"tuple\",\"internalType\":\"structICrossChainRegistryTypes.OperatorSetConfig\",\"components\":[{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"maxStalenessPeriod\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGlobalRootConfirmationThreshold\",\"inputs\":[{\"name\":\"bps\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGlobalRootConfirmerSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateOperatorTable\",\"inputs\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"globalTableRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"operatorSetIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"operatorTableBytes\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"GlobalRootConfirmationThresholdUpdated\",\"inputs\":[{\"name\":\"bps\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"GlobalRootConfirmerSetUpdated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"NewGlobalTableRoot\",\"inputs\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"indexed\":true,\"internalType\":\"uint32\"},{\"name\":\"globalTableRoot\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CertificateInvalid\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GlobalTableRootInFuture\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GlobalTableRootStale\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidConfirmationThreshold\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidCurveType\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidGlobalTableRoot\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidMessageHash\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidOperatorSetProof\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidProofLength\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidShortString\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSignatureLength\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StringTooLong\",\"inputs\":[{\"name\":\"str\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"type\":\"error\",\"name\":\"TableUpdateForPastTimestamp\",\"inputs\":[]}]", + Bin: "0x60e060405234801561000f575f5ffd5b506040516120af3803806120af83398101604081905261002e91610188565b6001600160a01b03808416608052821660a0528061004b8161005f565b60c052506100576100a5565b5050506102b9565b5f5f829050601f81511115610092578260405163305a27a960e01b8152600401610089919061025e565b60405180910390fd5b805161009d82610293565b179392505050565b5f54610100900460ff161561010c5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b6064820152608401610089565b5f5460ff9081161461015b575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b0381168114610171575f5ffd5b50565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f6060848603121561019a575f5ffd5b83516101a58161015d565b60208501519093506101b68161015d565b60408501519092506001600160401b038111156101d1575f5ffd5b8401601f810186136101e1575f5ffd5b80516001600160401b038111156101fa576101fa610174565b604051601f8201601f19908116603f011681016001600160401b038111828210171561022857610228610174565b60405281815282820160200188101561023f575f5ffd5b8160208401602083015e5f602083830101528093505050509250925092565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b805160208083015191908110156102b3575f198160200360031b1b821691505b50919050565b60805160a05160c051611d9b6103145f395f61069d01525f81816103490152818161071e015261090c01525f81816103700152818161050c0152818161060b015281816106de015281816108670152610ac60152611d9b5ff3fe608060405234801561000f575f5ffd5b5060043610610153575f3560e01c80636f728c50116100bf578063c252aa2211610079578063c252aa2214610392578063c3be1e33146103b3578063c5916a39146103c6578063eaaed9d5146103eb578063f2fde38b146103fe578063fd967f4714610411575f5ffd5b80636f728c50146102ed578063715018a6146103185780638da5cb5b146103205780639ea9477814610331578063ad0f958214610344578063b8c143061461036b575f5ffd5b806328522d791161011057806328522d791461020457806331a599d2146102305780633ef6cd7a146102555780634624e6a31461027c578063462828891461029057806354fd4d50146102d8575f5ffd5b8063021ab442146101575780630371406e1461016c5780630f3f8edd1461017f578063193b79f3146101a15780632370356c146101c957806323b7b5b2146101dc575b5f5ffd5b61016a610165366004611085565b61041a565b005b61016a61017a366004611119565b6105de565b6101876105f2565b60405163ffffffff90911681526020015b60405180910390f35b6101876101af36600461113a565b63ffffffff9081165f908152606960205260409020541690565b61016a6101d7366004611155565b610685565b6101876101ea36600461113a565b63ffffffff9081165f908152606860205260409020541690565b60655462010000900463ffffffff165f908152606760205260409020545b604051908152602001610198565b60655462010000900463ffffffff9081165f9081526068602052604090205416610187565b6102227fdbbb55ba0f5fdd66c1f17f44359cb4c67628f9dca440a4c104e61189ad4424b981565b60655462010000900463ffffffff16610187565b6040805180820182525f80825260209182015281518083019092526066546001600160a01b0381168352600160a01b900463ffffffff1690820152604051610198919061118c565b6102e0610696565b604051610198919061119a565b6103006102fb3660046111dd565b6106c1565b6040516001600160a01b039091168152602001610198565b61016a610760565b6033546001600160a01b0316610300565b61016a61033f36600461123a565b610773565b6103007f000000000000000000000000000000000000000000000000000000000000000081565b6103007f000000000000000000000000000000000000000000000000000000000000000081565b6065546103a09061ffff1681565b60405161ffff9091168152602001610198565b6102226103c13660046112d5565b610971565b6102226103d436600461113a565b63ffffffff165f9081526067602052604090205490565b61016a6103f9366004611314565b6109d9565b61016a61040c366004611380565b610bf6565b6103a061271081565b5f54610100900460ff161580801561043857505f54600160ff909116105b806104515750303b15801561045157505f5460ff166001145b6104b95760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff1916600117905580156104da575f805461ff0019166101001790555b6104e387610c68565b6104ec86610cb9565b6104f585610d03565b604051636738c40b60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636738c40b90610547908990889088908890600401611444565b5f604051808303815f87803b15801561055e575f5ffd5b505af1158015610570573d5f5f3e3d5ffd5b50506065805465ffffffff000019166201000063ffffffff891602179055505080156105d5575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b6105e6610d6e565b6105ef81610cb9565b50565b604051635ddb9b5b60e01b81525f906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635ddb9b5b90610641906066906004016114cd565b602060405180830381865afa15801561065c573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061068091906114f4565b905090565b61068d610d6e565b6105ef81610d03565b60606106807f0000000000000000000000000000000000000000000000000000000000000000610dc8565b5f60028260028111156106d6576106d661150f565b0361070257507f0000000000000000000000000000000000000000000000000000000000000000919050565b60018260028111156107165761071661150f565b0361074257507f0000000000000000000000000000000000000000000000000000000000000000919050565b60405163fdea7c0960e01b815260040160405180910390fd5b919050565b610768610d6e565b6107715f610c68565b565b5f5f5f5f6107818686610e05565b9350935093509350610792836106c1565b6001600160a01b0316635ddb9b5b856040518263ffffffff1660e01b81526004016107bd919061118c565b602060405180830381865afa1580156107d8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107fc91906114f4565b63ffffffff168b63ffffffff16116108275760405163207617df60e01b815260040160405180910390fd5b61084c8b8b8b8b8b8b8b60405161083f929190611523565b6040518091039020610e4c565b60028360028111156108605761086061150f565b036108f1577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636738c40b858d61089f85610eed565b866040518563ffffffff1660e01b81526004016108bf949392919061156c565b5f604051808303815f87803b1580156108d6575f5ffd5b505af11580156108e8573d5f5f3e3d5ffd5b50505050610964565b60018360028111156109055761090561150f565b03610742577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166356d482f5858d61094485610f0f565b866040518563ffffffff1660e01b81526004016108bf94939291906115df565b5050505050505050505050565b604080517fdbbb55ba0f5fdd66c1f17f44359cb4c67628f9dca440a4c104e61189ad4424b9602082015290810184905263ffffffff8084166060830152821660808201525f9060a0016040516020818303038152906040528051906020012090509392505050565b428263ffffffff161115610a0057604051635a119db560e11b815260040160405180910390fd5b60655463ffffffff62010000909104811690831611610a325760405163037fa86b60e31b815260040160405180910390fd5b610a3d838383610971565b846020013514610a6057604051638b56642d60e01b815260040160405180910390fd5b6040805160018082528183019092525f91602080830190803683375050606554825192935061ffff16918391505f90610a9b57610a9b611698565b61ffff90921660209283029190910190910152604051625f5e5d60e21b81525f906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063017d797490610b00906066908a908790600401611756565b6020604051808303815f875af1158015610b1c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b4091906118e3565b905080610b6057604051633042041f60e21b815260040160405180910390fd5b6065805463ffffffff80871662010000810265ffffffff000019909316929092179092555f818152606860209081526040808320805495891663ffffffff1996871681179091558352606982528083208054909516841790945582825260679052828120889055915187927f010dcbe0d1e019c93357711f7bb6287d543b7ff7de74f29df3fb5ecceec8d36991a3505050505050565b610bfe610d6e565b6001600160a01b038116610c635760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104b0565b6105ef815b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b806066610cc68282611902565b9050507f20100394950e66014c25009b45d12b675210a6e7a002044a0e3de6544e3c4b3781604051610cf8919061195e565b60405180910390a150565b61271061ffff82161115610d2a576040516307336f0360e11b815260040160405180910390fd5b6065805461ffff191661ffff83169081179091556040519081527ff5d1836df8fcd7c1e54047e94ac8773d2855395603e2ef9ba5f5f16905f2259290602001610cf8565b6033546001600160a01b031633146107715760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104b0565b60605f610dd483610f25565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b604080518082019091525f8082526020820152604080518082019091525f80825260208201819052906060610e3c85870187611a26565b9299919850965090945092505050565b63ffffffff86165f908152606760205260409020548514610e805760405163639d09b560e11b815260040160405180910390fd5b610ec883838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508992508591505063ffffffff8816610f4c565b610ee55760405163afa42ca760e01b815260040160405180910390fd5b505050505050565b610ef5610ffa565b81806020019051810190610f099190611b77565b92915050565b606081806020019051810190610f099190611c26565b5f60ff8216601f811115610f0957604051632cd44ac360e21b815260040160405180910390fd5b5f83610f59868585610f63565b1495945050505050565b5f60208451610f729190611d27565b15610f90576040516313717da960e21b815260040160405180910390fd5b8260205b85518111610ff157610fa7600285611d27565b5f03610fc857815f528086015160205260405f209150600284049350610fdf565b808601515f528160205260405f2091506002840493505b610fea602082611d46565b9050610f94565b50949350505050565b60405180608001604052805f81526020015f815260200161102c60405180604001604052805f81526020015f81525090565b8152602001606081525090565b6001600160a01b03811681146105ef575f5ffd5b5f6040828403121561105d575f5ffd5b50919050565b803561ffff8116811461075b575f5ffd5b63ffffffff811681146105ef575f5ffd5b5f5f5f5f5f5f610100878903121561109b575f5ffd5b86356110a681611039565b95506110b5886020890161104d565b94506110c360608801611063565b935060808701356110d381611074565b925060a08701356001600160401b038111156110ed575f5ffd5b870160a0818a0312156110fe575f5ffd5b915061110d8860c0890161104d565b90509295509295509295565b5f60408284031215611129575f5ffd5b611133838361104d565b9392505050565b5f6020828403121561114a575f5ffd5b813561113381611074565b5f60208284031215611165575f5ffd5b61113382611063565b80516001600160a01b0316825260209081015163ffffffff16910152565b60408101610f09828461116e565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80356003811061075b575f5ffd5b5f602082840312156111ed575f5ffd5b611133826111cf565b5f5f83601f840112611206575f5ffd5b5081356001600160401b0381111561121c575f5ffd5b602083019150836020828501011115611233575f5ffd5b9250929050565b5f5f5f5f5f5f5f60a0888a031215611250575f5ffd5b873561125b81611074565b965060208801359550604088013561127281611074565b945060608801356001600160401b0381111561128c575f5ffd5b6112988a828b016111f6565b90955093505060808801356001600160401b038111156112b6575f5ffd5b6112c28a828b016111f6565b989b979a50959850939692959293505050565b5f5f5f606084860312156112e7575f5ffd5b8335925060208401356112f981611074565b9150604084013561130981611074565b809150509250925092565b5f5f5f5f60808587031215611327575f5ffd5b84356001600160401b0381111561133c575f5ffd5b8501610120818803121561134e575f5ffd5b935060208501359250604085013561136581611074565b9150606085013561137581611074565b939692955090935050565b5f60208284031215611390575f5ffd5b813561113381611039565b80356113a681611039565b6001600160a01b0316825260208101356113bf81611074565b63ffffffff81166020840152505050565b5f5f8335601e198436030181126113e5575f5ffd5b83016020810192503590506001600160401b03811115611403575f5ffd5b8060051b3603821315611233575f5ffd5b8183525f6001600160fb1b0383111561142b575f5ffd5b8260051b80836020870137939093016020019392505050565b61144e818661139b565b63ffffffff841660408281019190915260c06060808401829052853591840191909152602085013560e0840152908401356101008301528301356101208201525f61149c60808501856113d0565b60a06101408501526114b361016085018284611414565b925050506114c4608083018461139b565b95945050505050565b60408101610f098284546001600160a01b038116825260a01c63ffffffff16602090910152565b5f60208284031215611504575f5ffd5b815161113381611074565b634e487b7160e01b5f52602160045260245ffd5b818382375f9101908152919050565b5f8151808452602084019350602083015f5b82811015611562578151865260209586019590910190600101611544565b5093949350505050565b611576818661116e565b63ffffffff8416604082015260c06060820152825160c0820152602083015160e08201525f60408401518051610100840152602081015161012084015250606084015160a06101408401526115cf610160840182611532565b9150506114c4608083018461116e565b5f60c082016115ee838861116e565b63ffffffff8616604084015260c0606084015280855180835260e08501915060e08160051b8601019250602087015f5b8281101561166f5786850360df19018452815180516001600160a01b0316865260209081015160409187018290529061165990870182611532565b955050602093840193919091019060010161161e565b50505050809150506114c4608083018461116e565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8235605e198336030181126116e8575f5ffd5b90910192915050565b80358252602080820135908301525f61170d60408301836113d0565b606060408601526114c4606086018284611414565b5f8151808452602084019350602083015f5b8281101561156257815161ffff16865260209586019590910190600101611734565b6117798185546001600160a01b038116825260a01c63ffffffff16602090910152565b608060408201525f6101a08201843561179181611074565b63ffffffff166080840152602085013560a0840152604085013560c0840152606085013560e0840152604060808601610100850137604060c086016101408501376117e06101008601866113d0565b610120610180860152828184526101c0860190506101c08260051b8701019350825f5b838110156118c2578786036101bf1901835261181f82866116d4565b803561182a81611074565b63ffffffff168752602081013536829003601e19018112611849575f5ffd5b81016020810190356001600160401b03811115611864575f5ffd5b803603821315611872575f5ffd5b606060208a015261188760608a0182846116ac565b91505061189760408301836116d4565b915087810360408901526118ab81836116f1565b975050506020928301929190910190600101611803565b505050505082810360608401526118d98185611722565b9695505050505050565b5f602082840312156118f3575f5ffd5b81518015158114611133575f5ffd5b813561190d81611039565b81546001600160a01b031981166001600160a01b03929092169182178355602084013561193981611074565b6001600160c01b03199190911690911760a09190911b63ffffffff60a01b1617905550565b60408101610f09828461139b565b604080519081016001600160401b038111828210171561198e5761198e611684565b60405290565b604051608081016001600160401b038111828210171561198e5761198e611684565b604051601f8201601f191681016001600160401b03811182821017156119de576119de611684565b604052919050565b5f604082840312156119f6575f5ffd5b6119fe61196c565b90508135611a0b81611039565b81526020820135611a1b81611074565b602082015292915050565b5f5f5f5f60c08587031215611a39575f5ffd5b611a4386866119e6565b9350611a51604086016111cf565b9250611a6086606087016119e6565b915060a08501356001600160401b03811115611a7a575f5ffd5b8501601f81018713611a8a575f5ffd5b80356001600160401b03811115611aa357611aa3611684565b611ab6601f8201601f19166020016119b6565b818152886020838501011115611aca575f5ffd5b816020840160208301375f6020838301015280935050505092959194509250565b5f6001600160401b03821115611b0357611b03611684565b5060051b60200190565b5f82601f830112611b1c575f5ffd5b8151611b2f611b2a82611aeb565b6119b6565b8082825260208201915060208360051b860101925085831115611b50575f5ffd5b602085015b83811015611b6d578051835260209283019201611b55565b5095945050505050565b5f60208284031215611b87575f5ffd5b81516001600160401b03811115611b9c575f5ffd5b820180840360a0811215611bae575f5ffd5b611bb6611994565b82518152602080840151908201526040603f1983011215611bd5575f5ffd5b611bdd61196c565b604084810151825260608501516020830152820152608083015191506001600160401b03821115611c0c575f5ffd5b611c1886838501611b0d565b606082015295945050505050565b5f60208284031215611c36575f5ffd5b81516001600160401b03811115611c4b575f5ffd5b8201601f81018413611c5b575f5ffd5b8051611c69611b2a82611aeb565b8082825260208201915060208360051b850101925086831115611c8a575f5ffd5b602084015b83811015611d1c5780516001600160401b03811115611cac575f5ffd5b85016040818a03601f19011215611cc1575f5ffd5b611cc961196c565b6020820151611cd781611039565b815260408201516001600160401b03811115611cf1575f5ffd5b611d008b602083860101611b0d565b6020830152508085525050602083019250602081019050611c8f565b509695505050505050565b5f82611d4157634e487b7160e01b5f52601260045260245ffd5b500690565b80820180821115610f0957634e487b7160e01b5f52601160045260245ffdfea26469706673582212204de089825a5ccf28555be0f796345be432ea66f8e35ce3eef43743053061406864736f6c634300081b0033", } // OperatorTableUpdaterABI is the input ABI used to generate the binding from. @@ -628,12 +628,12 @@ func (_OperatorTableUpdater *OperatorTableUpdaterCallerSession) GetLatestReferen return _OperatorTableUpdater.Contract.GetLatestReferenceTimestamp(&_OperatorTableUpdater.CallOpts) } -// GetReferenceBlockNumber is a free data retrieval call binding the contract method 0x95b6bccb. +// GetReferenceBlockNumberByTimestamp is a free data retrieval call binding the contract method 0x23b7b5b2. // -// Solidity: function getReferenceBlockNumber(uint32 referenceTimestamp) view returns(uint32) -func (_OperatorTableUpdater *OperatorTableUpdaterCaller) GetReferenceBlockNumber(opts *bind.CallOpts, referenceTimestamp uint32) (uint32, error) { +// Solidity: function getReferenceBlockNumberByTimestamp(uint32 referenceTimestamp) view returns(uint32) +func (_OperatorTableUpdater *OperatorTableUpdaterCaller) GetReferenceBlockNumberByTimestamp(opts *bind.CallOpts, referenceTimestamp uint32) (uint32, error) { var out []interface{} - err := _OperatorTableUpdater.contract.Call(opts, &out, "getReferenceBlockNumber", referenceTimestamp) + err := _OperatorTableUpdater.contract.Call(opts, &out, "getReferenceBlockNumberByTimestamp", referenceTimestamp) if err != nil { return *new(uint32), err @@ -645,18 +645,49 @@ func (_OperatorTableUpdater *OperatorTableUpdaterCaller) GetReferenceBlockNumber } -// GetReferenceBlockNumber is a free data retrieval call binding the contract method 0x95b6bccb. +// GetReferenceBlockNumberByTimestamp is a free data retrieval call binding the contract method 0x23b7b5b2. // -// Solidity: function getReferenceBlockNumber(uint32 referenceTimestamp) view returns(uint32) -func (_OperatorTableUpdater *OperatorTableUpdaterSession) GetReferenceBlockNumber(referenceTimestamp uint32) (uint32, error) { - return _OperatorTableUpdater.Contract.GetReferenceBlockNumber(&_OperatorTableUpdater.CallOpts, referenceTimestamp) +// Solidity: function getReferenceBlockNumberByTimestamp(uint32 referenceTimestamp) view returns(uint32) +func (_OperatorTableUpdater *OperatorTableUpdaterSession) GetReferenceBlockNumberByTimestamp(referenceTimestamp uint32) (uint32, error) { + return _OperatorTableUpdater.Contract.GetReferenceBlockNumberByTimestamp(&_OperatorTableUpdater.CallOpts, referenceTimestamp) } -// GetReferenceBlockNumber is a free data retrieval call binding the contract method 0x95b6bccb. +// GetReferenceBlockNumberByTimestamp is a free data retrieval call binding the contract method 0x23b7b5b2. // -// Solidity: function getReferenceBlockNumber(uint32 referenceTimestamp) view returns(uint32) -func (_OperatorTableUpdater *OperatorTableUpdaterCallerSession) GetReferenceBlockNumber(referenceTimestamp uint32) (uint32, error) { - return _OperatorTableUpdater.Contract.GetReferenceBlockNumber(&_OperatorTableUpdater.CallOpts, referenceTimestamp) +// Solidity: function getReferenceBlockNumberByTimestamp(uint32 referenceTimestamp) view returns(uint32) +func (_OperatorTableUpdater *OperatorTableUpdaterCallerSession) GetReferenceBlockNumberByTimestamp(referenceTimestamp uint32) (uint32, error) { + return _OperatorTableUpdater.Contract.GetReferenceBlockNumberByTimestamp(&_OperatorTableUpdater.CallOpts, referenceTimestamp) +} + +// GetReferenceTimestampByBlockNumber is a free data retrieval call binding the contract method 0x193b79f3. +// +// Solidity: function getReferenceTimestampByBlockNumber(uint32 referenceBlockNumber) view returns(uint32) +func (_OperatorTableUpdater *OperatorTableUpdaterCaller) GetReferenceTimestampByBlockNumber(opts *bind.CallOpts, referenceBlockNumber uint32) (uint32, error) { + var out []interface{} + err := _OperatorTableUpdater.contract.Call(opts, &out, "getReferenceTimestampByBlockNumber", referenceBlockNumber) + + if err != nil { + return *new(uint32), err + } + + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + + return out0, err + +} + +// GetReferenceTimestampByBlockNumber is a free data retrieval call binding the contract method 0x193b79f3. +// +// Solidity: function getReferenceTimestampByBlockNumber(uint32 referenceBlockNumber) view returns(uint32) +func (_OperatorTableUpdater *OperatorTableUpdaterSession) GetReferenceTimestampByBlockNumber(referenceBlockNumber uint32) (uint32, error) { + return _OperatorTableUpdater.Contract.GetReferenceTimestampByBlockNumber(&_OperatorTableUpdater.CallOpts, referenceBlockNumber) +} + +// GetReferenceTimestampByBlockNumber is a free data retrieval call binding the contract method 0x193b79f3. +// +// Solidity: function getReferenceTimestampByBlockNumber(uint32 referenceBlockNumber) view returns(uint32) +func (_OperatorTableUpdater *OperatorTableUpdaterCallerSession) GetReferenceTimestampByBlockNumber(referenceBlockNumber uint32) (uint32, error) { + return _OperatorTableUpdater.Contract.GetReferenceTimestampByBlockNumber(&_OperatorTableUpdater.CallOpts, referenceBlockNumber) } // GlobalRootConfirmationThreshold is a free data retrieval call binding the contract method 0xc252aa22. diff --git a/pkg/bindings/OperatorTableUpdaterStorage/binding.go b/pkg/bindings/OperatorTableUpdaterStorage/binding.go index fe73041e20..dbff382bbb 100644 --- a/pkg/bindings/OperatorTableUpdaterStorage/binding.go +++ b/pkg/bindings/OperatorTableUpdaterStorage/binding.go @@ -71,7 +71,7 @@ type OperatorSet struct { // OperatorTableUpdaterStorageMetaData contains all meta data concerning the OperatorTableUpdaterStorage contract. var OperatorTableUpdaterStorageMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"GLOBAL_TABLE_ROOT_CERT_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_BPS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"bn254CertificateVerifier\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIBN254CertificateVerifier\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"confirmGlobalTableRoot\",\"inputs\":[{\"name\":\"globalTableRootCert\",\"type\":\"tuple\",\"internalType\":\"structIBN254CertificateVerifierTypes.BN254Certificate\",\"components\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"messageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"signature\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apk\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"nonSignerWitnesses\",\"type\":\"tuple[]\",\"internalType\":\"structIBN254CertificateVerifierTypes.BN254OperatorInfoWitness[]\",\"components\":[{\"name\":\"operatorIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"operatorInfoProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"operatorInfo\",\"type\":\"tuple\",\"internalType\":\"structIBN254TableCalculatorTypes.BN254OperatorInfo\",\"components\":[{\"name\":\"pubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"weights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}]}]},{\"name\":\"globalTableRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"referenceBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ecdsaCertificateVerifier\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIECDSACertificateVerifier\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getCertificateVerifier\",\"inputs\":[{\"name\":\"curveType\",\"type\":\"uint8\",\"internalType\":\"enumIKeyRegistrarTypes.CurveType\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getCurrentGlobalTableRoot\",\"inputs\":[],\"outputs\":[{\"name\":\"globalTableRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getGlobalConfirmerSetReferenceTimestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getGlobalRootConfirmerSet\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getGlobalTableRootByTimestamp\",\"inputs\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"tableRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getGlobalTableUpdateMessageHash\",\"inputs\":[{\"name\":\"globalTableRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"referenceBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getLatestReferenceBlockNumber\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getLatestReferenceTimestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getReferenceBlockNumber\",\"inputs\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"globalRootConfirmationThreshold\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setGlobalRootConfirmationThreshold\",\"inputs\":[{\"name\":\"bps\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGlobalRootConfirmerSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateOperatorTable\",\"inputs\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"globalTableRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"operatorSetIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"operatorTableBytes\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"GlobalRootConfirmationThresholdUpdated\",\"inputs\":[{\"name\":\"bps\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"GlobalRootConfirmerSetUpdated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"NewGlobalTableRoot\",\"inputs\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"indexed\":true,\"internalType\":\"uint32\"},{\"name\":\"globalTableRoot\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CertificateInvalid\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GlobalTableRootInFuture\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GlobalTableRootStale\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidConfirmationThreshold\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidCurveType\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidGlobalTableRoot\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidMessageHash\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidOperatorSetProof\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSignatureLength\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TableUpdateForPastTimestamp\",\"inputs\":[]}]", + ABI: "[{\"type\":\"function\",\"name\":\"GLOBAL_TABLE_ROOT_CERT_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_BPS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"bn254CertificateVerifier\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIBN254CertificateVerifier\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"confirmGlobalTableRoot\",\"inputs\":[{\"name\":\"globalTableRootCert\",\"type\":\"tuple\",\"internalType\":\"structIBN254CertificateVerifierTypes.BN254Certificate\",\"components\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"messageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"signature\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apk\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"nonSignerWitnesses\",\"type\":\"tuple[]\",\"internalType\":\"structIBN254CertificateVerifierTypes.BN254OperatorInfoWitness[]\",\"components\":[{\"name\":\"operatorIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"operatorInfoProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"operatorInfo\",\"type\":\"tuple\",\"internalType\":\"structIBN254TableCalculatorTypes.BN254OperatorInfo\",\"components\":[{\"name\":\"pubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"weights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}]}]},{\"name\":\"globalTableRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"referenceBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ecdsaCertificateVerifier\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIECDSACertificateVerifier\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getCertificateVerifier\",\"inputs\":[{\"name\":\"curveType\",\"type\":\"uint8\",\"internalType\":\"enumIKeyRegistrarTypes.CurveType\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getCurrentGlobalTableRoot\",\"inputs\":[],\"outputs\":[{\"name\":\"globalTableRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getGlobalConfirmerSetReferenceTimestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getGlobalRootConfirmerSet\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getGlobalTableRootByTimestamp\",\"inputs\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"tableRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getGlobalTableUpdateMessageHash\",\"inputs\":[{\"name\":\"globalTableRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"referenceBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getLatestReferenceBlockNumber\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getLatestReferenceTimestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getReferenceBlockNumberByTimestamp\",\"inputs\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getReferenceTimestampByBlockNumber\",\"inputs\":[{\"name\":\"referenceBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"globalRootConfirmationThreshold\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setGlobalRootConfirmationThreshold\",\"inputs\":[{\"name\":\"bps\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGlobalRootConfirmerSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateOperatorTable\",\"inputs\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"globalTableRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"operatorSetIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"operatorTableBytes\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"GlobalRootConfirmationThresholdUpdated\",\"inputs\":[{\"name\":\"bps\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"GlobalRootConfirmerSetUpdated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"NewGlobalTableRoot\",\"inputs\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"indexed\":true,\"internalType\":\"uint32\"},{\"name\":\"globalTableRoot\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CertificateInvalid\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GlobalTableRootInFuture\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GlobalTableRootStale\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidConfirmationThreshold\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidCurveType\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidGlobalTableRoot\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidMessageHash\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidOperatorSetProof\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSignatureLength\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TableUpdateForPastTimestamp\",\"inputs\":[]}]", } // OperatorTableUpdaterStorageABI is the input ABI used to generate the binding from. @@ -592,12 +592,12 @@ func (_OperatorTableUpdaterStorage *OperatorTableUpdaterStorageCallerSession) Ge return _OperatorTableUpdaterStorage.Contract.GetLatestReferenceTimestamp(&_OperatorTableUpdaterStorage.CallOpts) } -// GetReferenceBlockNumber is a free data retrieval call binding the contract method 0x95b6bccb. +// GetReferenceBlockNumberByTimestamp is a free data retrieval call binding the contract method 0x23b7b5b2. // -// Solidity: function getReferenceBlockNumber(uint32 referenceTimestamp) view returns(uint32) -func (_OperatorTableUpdaterStorage *OperatorTableUpdaterStorageCaller) GetReferenceBlockNumber(opts *bind.CallOpts, referenceTimestamp uint32) (uint32, error) { +// Solidity: function getReferenceBlockNumberByTimestamp(uint32 referenceTimestamp) view returns(uint32) +func (_OperatorTableUpdaterStorage *OperatorTableUpdaterStorageCaller) GetReferenceBlockNumberByTimestamp(opts *bind.CallOpts, referenceTimestamp uint32) (uint32, error) { var out []interface{} - err := _OperatorTableUpdaterStorage.contract.Call(opts, &out, "getReferenceBlockNumber", referenceTimestamp) + err := _OperatorTableUpdaterStorage.contract.Call(opts, &out, "getReferenceBlockNumberByTimestamp", referenceTimestamp) if err != nil { return *new(uint32), err @@ -609,18 +609,49 @@ func (_OperatorTableUpdaterStorage *OperatorTableUpdaterStorageCaller) GetRefere } -// GetReferenceBlockNumber is a free data retrieval call binding the contract method 0x95b6bccb. +// GetReferenceBlockNumberByTimestamp is a free data retrieval call binding the contract method 0x23b7b5b2. // -// Solidity: function getReferenceBlockNumber(uint32 referenceTimestamp) view returns(uint32) -func (_OperatorTableUpdaterStorage *OperatorTableUpdaterStorageSession) GetReferenceBlockNumber(referenceTimestamp uint32) (uint32, error) { - return _OperatorTableUpdaterStorage.Contract.GetReferenceBlockNumber(&_OperatorTableUpdaterStorage.CallOpts, referenceTimestamp) +// Solidity: function getReferenceBlockNumberByTimestamp(uint32 referenceTimestamp) view returns(uint32) +func (_OperatorTableUpdaterStorage *OperatorTableUpdaterStorageSession) GetReferenceBlockNumberByTimestamp(referenceTimestamp uint32) (uint32, error) { + return _OperatorTableUpdaterStorage.Contract.GetReferenceBlockNumberByTimestamp(&_OperatorTableUpdaterStorage.CallOpts, referenceTimestamp) } -// GetReferenceBlockNumber is a free data retrieval call binding the contract method 0x95b6bccb. +// GetReferenceBlockNumberByTimestamp is a free data retrieval call binding the contract method 0x23b7b5b2. // -// Solidity: function getReferenceBlockNumber(uint32 referenceTimestamp) view returns(uint32) -func (_OperatorTableUpdaterStorage *OperatorTableUpdaterStorageCallerSession) GetReferenceBlockNumber(referenceTimestamp uint32) (uint32, error) { - return _OperatorTableUpdaterStorage.Contract.GetReferenceBlockNumber(&_OperatorTableUpdaterStorage.CallOpts, referenceTimestamp) +// Solidity: function getReferenceBlockNumberByTimestamp(uint32 referenceTimestamp) view returns(uint32) +func (_OperatorTableUpdaterStorage *OperatorTableUpdaterStorageCallerSession) GetReferenceBlockNumberByTimestamp(referenceTimestamp uint32) (uint32, error) { + return _OperatorTableUpdaterStorage.Contract.GetReferenceBlockNumberByTimestamp(&_OperatorTableUpdaterStorage.CallOpts, referenceTimestamp) +} + +// GetReferenceTimestampByBlockNumber is a free data retrieval call binding the contract method 0x193b79f3. +// +// Solidity: function getReferenceTimestampByBlockNumber(uint32 referenceBlockNumber) view returns(uint32) +func (_OperatorTableUpdaterStorage *OperatorTableUpdaterStorageCaller) GetReferenceTimestampByBlockNumber(opts *bind.CallOpts, referenceBlockNumber uint32) (uint32, error) { + var out []interface{} + err := _OperatorTableUpdaterStorage.contract.Call(opts, &out, "getReferenceTimestampByBlockNumber", referenceBlockNumber) + + if err != nil { + return *new(uint32), err + } + + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + + return out0, err + +} + +// GetReferenceTimestampByBlockNumber is a free data retrieval call binding the contract method 0x193b79f3. +// +// Solidity: function getReferenceTimestampByBlockNumber(uint32 referenceBlockNumber) view returns(uint32) +func (_OperatorTableUpdaterStorage *OperatorTableUpdaterStorageSession) GetReferenceTimestampByBlockNumber(referenceBlockNumber uint32) (uint32, error) { + return _OperatorTableUpdaterStorage.Contract.GetReferenceTimestampByBlockNumber(&_OperatorTableUpdaterStorage.CallOpts, referenceBlockNumber) +} + +// GetReferenceTimestampByBlockNumber is a free data retrieval call binding the contract method 0x193b79f3. +// +// Solidity: function getReferenceTimestampByBlockNumber(uint32 referenceBlockNumber) view returns(uint32) +func (_OperatorTableUpdaterStorage *OperatorTableUpdaterStorageCallerSession) GetReferenceTimestampByBlockNumber(referenceBlockNumber uint32) (uint32, error) { + return _OperatorTableUpdaterStorage.Contract.GetReferenceTimestampByBlockNumber(&_OperatorTableUpdaterStorage.CallOpts, referenceBlockNumber) } // GlobalRootConfirmationThreshold is a free data retrieval call binding the contract method 0xc252aa22. diff --git a/pkg/bindings/ReleaseManager/binding.go b/pkg/bindings/ReleaseManager/binding.go new file mode 100644 index 0000000000..4f8a4401d4 --- /dev/null +++ b/pkg/bindings/ReleaseManager/binding.go @@ -0,0 +1,748 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package ReleaseManager + +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 +) + +// IReleaseManagerTypesArtifact is an auto generated low-level Go binding around an user-defined struct. +type IReleaseManagerTypesArtifact struct { + Digest [32]byte + RegistryUrl string +} + +// IReleaseManagerTypesRelease is an auto generated low-level Go binding around an user-defined struct. +type IReleaseManagerTypesRelease struct { + Artifacts []IReleaseManagerTypesArtifact + UpgradeByTime uint32 +} + +// OperatorSet is an auto generated low-level Go binding around an user-defined struct. +type OperatorSet struct { + Avs common.Address + Id uint32 +} + +// ReleaseManagerMetaData contains all meta data concerning the ReleaseManager contract. +var ReleaseManagerMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_permissionController\",\"type\":\"address\",\"internalType\":\"contractIPermissionController\"},{\"name\":\"_version\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getLatestRelease\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIReleaseManagerTypes.Release\",\"components\":[{\"name\":\"artifacts\",\"type\":\"tuple[]\",\"internalType\":\"structIReleaseManagerTypes.Artifact[]\",\"components\":[{\"name\":\"digest\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"registryUrl\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"name\":\"upgradeByTime\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getLatestUpgradeByTime\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRelease\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"releaseId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIReleaseManagerTypes.Release\",\"components\":[{\"name\":\"artifacts\",\"type\":\"tuple[]\",\"internalType\":\"structIReleaseManagerTypes.Artifact[]\",\"components\":[{\"name\":\"digest\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"registryUrl\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"name\":\"upgradeByTime\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTotalReleases\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isValidRelease\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"releaseId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"permissionController\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPermissionController\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"publishRelease\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"release\",\"type\":\"tuple\",\"internalType\":\"structIReleaseManagerTypes.Release\",\"components\":[{\"name\":\"artifacts\",\"type\":\"tuple[]\",\"internalType\":\"structIReleaseManagerTypes.Artifact[]\",\"components\":[{\"name\":\"digest\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"registryUrl\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"name\":\"upgradeByTime\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"releaseId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReleasePublished\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":true,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"releaseId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"release\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIReleaseManagerTypes.Release\",\"components\":[{\"name\":\"artifacts\",\"type\":\"tuple[]\",\"internalType\":\"structIReleaseManagerTypes.Artifact[]\",\"components\":[{\"name\":\"digest\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"registryUrl\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"name\":\"upgradeByTime\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"InvalidPermissions\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidShortString\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidUpgradeByTime\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StringTooLong\",\"inputs\":[{\"name\":\"str\",\"type\":\"string\",\"internalType\":\"string\"}]}]", + Bin: "0x60c060405234801561000f575f5ffd5b506040516111df3803806111df83398101604081905261002e9161016a565b6001600160a01b0382166080528061004581610058565b60a0525061005161009e565b5050610294565b5f5f829050601f8151111561008b578260405163305a27a960e01b81526004016100829190610239565b60405180910390fd5b80516100968261026e565b179392505050565b5f54610100900460ff16156101055760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b6064820152608401610082565b5f5460ff90811614610154575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b634e487b7160e01b5f52604160045260245ffd5b5f5f6040838503121561017b575f5ffd5b82516001600160a01b0381168114610191575f5ffd5b60208401519092506001600160401b038111156101ac575f5ffd5b8301601f810185136101bc575f5ffd5b80516001600160401b038111156101d5576101d5610156565b604051601f8201601f19908116603f011681016001600160401b038111828210171561020357610203610156565b60405281815282820160200187101561021a575f5ffd5b8160208401602083015e5f602083830101528093505050509250929050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b8051602080830151919081101561028e575f198160200360031b1b821691505b50919050565b60805160a051610f246102bb5f395f61033001525f818160b7015261081b0152610f245ff3fe608060405234801561000f575f5ffd5b5060043610610085575f3560e01c806366f409f71161005857806366f409f7146101295780637c09ea821461014a578063a9e0ed681461015d578063d30eeb8814610185575f5ffd5b80633acab5fc146100895780634657e26a146100b2578063517e4068146100f157806354fd4d5014610114575b5f5ffd5b61009c610097366004610944565b6101a6565b6040516100a99190610a30565b60405180910390f35b6100d97f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100a9565b6101046100ff366004610944565b61030a565b60405190151581526020016100a9565b61011c610329565b6040516100a99190610a49565b61013c610137366004610a5b565b610359565b6040519081526020016100a9565b61013c610158366004610a8b565b61037c565b61017061016b366004610a5b565b610553565b60405163ffffffff90911681526020016100a9565b610198610193366004610a5b565b6105b7565b6040516100a9929190610ad7565b60408051808201909152606081525f602082015260015f6101c68561073d565b81526020019081526020015f2082815481106101e4576101e4610af7565b905f5260205f2090600202016040518060400160405290815f8201805480602002602001604051908101604052809291908181526020015f905b828210156102e7578382905f5260205f2090600202016040518060400160405290815f820154815260200160018201805461025890610b0b565b80601f016020809104026020016040519081016040528092919081815260200182805461028490610b0b565b80156102cf5780601f106102a6576101008083540402835291602001916102cf565b820191905f5260205f20905b8154815290600101906020018083116102b257829003601f168201915b5050505050815250508152602001906001019061021e565b505050908252506001919091015463ffffffff1660209091015290505b92915050565b5f600161031684610359565b6103209190610b3d565b90911492915050565b60606103547f00000000000000000000000000000000000000000000000000000000000000006107a0565b905090565b5f60015f6103668461073d565b815260208101919091526040015f205492915050565b5f61038a6020840184610b5c565b610393816107dd565b6103b05760405163932d94f760e01b815260040160405180910390fd5b5f6001816103cb6103c636899003890189610a5b565b61073d565b81526020019081526020015f209050428460200160208101906103ee9190610b75565b63ffffffff1610156104135760405163325ec75f60e01b815260040160405180910390fd5b80546001810182555f8281529093505b61042d8580610b8e565b90508110156104ae5781848154811061044857610448610af7565b5f91825260209091206002909102016104618680610b8e565b8381811061047157610471610af7565b90506020028101906104839190610bdb565b81546001810183555f92835260209092209091600202016104a48282610c45565b5050600101610423565b506104bf6040850160208601610b75565b8184815481106104d1576104d1610af7565b905f5260205f2090600202016001015f6101000a81548163ffffffff021916908363ffffffff160217905550828560405161050c9190610d3e565b60405180910390207f2decd15222f7c4a8c3d4d2e14dcfdc5a0b52eb2d4b81796bfd010ee5cd972fd3866040516105439190610d71565b60405180910390a3505092915050565b5f5f60015f6105618561073d565b81526020019081526020015f2090505f600182805490506105829190610b3d565b905081818154811061059657610596610af7565b5f91825260209091206001600290920201015463ffffffff16949350505050565b60408051808201909152606081525f60208201819052905f60015f6105db8661073d565b81526020019081526020015f2090505f600182805490506105fc9190610b3d565b90508082828154811061061157610611610af7565b905f5260205f209060020201806040518060400160405290815f8201805480602002602001604051908101604052809291908181526020015f905b82821015610715578382905f5260205f2090600202016040518060400160405290815f820154815260200160018201805461068690610b0b565b80601f01602080910402602001604051908101604052809291908181526020018280546106b290610b0b565b80156106fd5780601f106106d4576101008083540402835291602001916106fd565b820191905f5260205f20905b8154815290600101906020018083116106e057829003601f168201915b5050505050815250508152602001906001019061064c565b505050908252506001919091015463ffffffff16602090910152919791965090945050505050565b5f815f0151826020015163ffffffff1660405160200161078892919060609290921b6bffffffffffffffffffffffff1916825260a01b6001600160a01b031916601482015260200190565b60405160208183030381529060405261030490610eac565b60605f6107ac83610887565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b604051631beb2b9760e31b81526001600160a01b0382811660048301523360248301523060448301525f80356001600160e01b0319166064840152917f00000000000000000000000000000000000000000000000000000000000000009091169063df595cb8906084016020604051808303815f875af1158015610863573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103049190610ecf565b5f60ff8216601f81111561030457604051632cd44ac360e21b815260040160405180910390fd5b80356001600160a01b03811681146108c4575f5ffd5b919050565b803563ffffffff811681146108c4575f5ffd5b5f604082840312156108ec575f5ffd5b6040516040810181811067ffffffffffffffff8211171561091b57634e487b7160e01b5f52604160045260245ffd5b60405290508061092a836108ae565b8152610938602084016108c9565b60208201525092915050565b5f5f60608385031215610955575f5ffd5b61095f84846108dc565b946040939093013593505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f6040830182516040855281815180845260608701915060608160051b88010193506020830192505f5b81811015610a0d57605f1988860301835283518051865260208101519050604060208701526109f7604087018261096d565b95505060209384019392909201916001016109c5565b505050506020830151610a28602086018263ffffffff169052565b509392505050565b602081525f610a42602083018461099b565b9392505050565b602081525f610a42602083018461096d565b5f60408284031215610a6b575f5ffd5b610a4283836108dc565b5f60408284031215610a85575f5ffd5b50919050565b5f5f60608385031215610a9c575f5ffd5b610aa68484610a75565b9150604083013567ffffffffffffffff811115610ac1575f5ffd5b610acd85828601610a75565b9150509250929050565b828152604060208201525f610aef604083018461099b565b949350505050565b634e487b7160e01b5f52603260045260245ffd5b600181811c90821680610b1f57607f821691505b602082108103610a8557634e487b7160e01b5f52602260045260245ffd5b8181038181111561030457634e487b7160e01b5f52601160045260245ffd5b5f60208284031215610b6c575f5ffd5b610a42826108ae565b5f60208284031215610b85575f5ffd5b610a42826108c9565b5f5f8335601e19843603018112610ba3575f5ffd5b83018035915067ffffffffffffffff821115610bbd575f5ffd5b6020019150600581901b3603821315610bd4575f5ffd5b9250929050565b5f8235603e19833603018112610bef575f5ffd5b9190910192915050565b601f821115610c4057805f5260205f20601f840160051c81016020851015610c1e5750805b601f840160051c820191505b81811015610c3d575f8155600101610c2a565b50505b505050565b81358155600181016020830135601e19843603018112610c63575f5ffd5b8301803567ffffffffffffffff81118015610c7c575f5ffd5b813603602084011315610c8d575f5ffd5b5f905050610ca581610c9f8554610b0b565b85610bf9565b5f601f821160018114610cd9575f8315610cc25750838201602001355b5f19600385901b1c1916600184901b178555610d35565b5f85815260208120601f198516915b82811015610d0a57602085880181013583559485019460019092019101610ce8565b5084821015610d29575f1960f88660031b161c19602085880101351681555b505060018360011b0185555b50505050505050565b6001600160a01b03610d4f836108ae565b16815263ffffffff610d63602084016108c9565b166020820152604001919050565b602081525f606082018335601e19853603018112610d8d575f5ffd5b840180356020820167ffffffffffffffff821115610da9575f5ffd5b8160051b803603821315610dbb575f5ffd5b604060208801529382905260809386018401935f908701605e1936869003015b84831015610e8957888703607f190182528335818112610df9575f5ffd5b860160208101358852604081013536829003603e19018112610e19575f5ffd5b0160408101906020013567ffffffffffffffff811115610e37575f5ffd5b803603821315610e45575f5ffd5b604060208a01528060408a0152808260608b01375f6060828b0101526060601f19601f8301168a010198505050602084019350602082019150600183019250610ddb565b505050505050610e9b602085016108c9565b63ffffffff81166040850152610a28565b80516020808301519190811015610a85575f1960209190910360031b1b16919050565b5f60208284031215610edf575f5ffd5b81518015158114610a42575f5ffdfea26469706673582212205b948e2bb7c86c91dca9f27a088a2a0a65e46b42929ba7eace1c73f7c5ee499a64736f6c634300081b0033", +} + +// ReleaseManagerABI is the input ABI used to generate the binding from. +// Deprecated: Use ReleaseManagerMetaData.ABI instead. +var ReleaseManagerABI = ReleaseManagerMetaData.ABI + +// ReleaseManagerBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use ReleaseManagerMetaData.Bin instead. +var ReleaseManagerBin = ReleaseManagerMetaData.Bin + +// DeployReleaseManager deploys a new Ethereum contract, binding an instance of ReleaseManager to it. +func DeployReleaseManager(auth *bind.TransactOpts, backend bind.ContractBackend, _permissionController common.Address, _version string) (common.Address, *types.Transaction, *ReleaseManager, error) { + parsed, err := ReleaseManagerMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ReleaseManagerBin), backend, _permissionController, _version) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &ReleaseManager{ReleaseManagerCaller: ReleaseManagerCaller{contract: contract}, ReleaseManagerTransactor: ReleaseManagerTransactor{contract: contract}, ReleaseManagerFilterer: ReleaseManagerFilterer{contract: contract}}, nil +} + +// ReleaseManager is an auto generated Go binding around an Ethereum contract. +type ReleaseManager struct { + ReleaseManagerCaller // Read-only binding to the contract + ReleaseManagerTransactor // Write-only binding to the contract + ReleaseManagerFilterer // Log filterer for contract events +} + +// ReleaseManagerCaller is an auto generated read-only Go binding around an Ethereum contract. +type ReleaseManagerCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ReleaseManagerTransactor is an auto generated write-only Go binding around an Ethereum contract. +type ReleaseManagerTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ReleaseManagerFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type ReleaseManagerFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ReleaseManagerSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type ReleaseManagerSession struct { + Contract *ReleaseManager // 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 +} + +// ReleaseManagerCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type ReleaseManagerCallerSession struct { + Contract *ReleaseManagerCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// ReleaseManagerTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type ReleaseManagerTransactorSession struct { + Contract *ReleaseManagerTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ReleaseManagerRaw is an auto generated low-level Go binding around an Ethereum contract. +type ReleaseManagerRaw struct { + Contract *ReleaseManager // Generic contract binding to access the raw methods on +} + +// ReleaseManagerCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type ReleaseManagerCallerRaw struct { + Contract *ReleaseManagerCaller // Generic read-only contract binding to access the raw methods on +} + +// ReleaseManagerTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type ReleaseManagerTransactorRaw struct { + Contract *ReleaseManagerTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewReleaseManager creates a new instance of ReleaseManager, bound to a specific deployed contract. +func NewReleaseManager(address common.Address, backend bind.ContractBackend) (*ReleaseManager, error) { + contract, err := bindReleaseManager(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ReleaseManager{ReleaseManagerCaller: ReleaseManagerCaller{contract: contract}, ReleaseManagerTransactor: ReleaseManagerTransactor{contract: contract}, ReleaseManagerFilterer: ReleaseManagerFilterer{contract: contract}}, nil +} + +// NewReleaseManagerCaller creates a new read-only instance of ReleaseManager, bound to a specific deployed contract. +func NewReleaseManagerCaller(address common.Address, caller bind.ContractCaller) (*ReleaseManagerCaller, error) { + contract, err := bindReleaseManager(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ReleaseManagerCaller{contract: contract}, nil +} + +// NewReleaseManagerTransactor creates a new write-only instance of ReleaseManager, bound to a specific deployed contract. +func NewReleaseManagerTransactor(address common.Address, transactor bind.ContractTransactor) (*ReleaseManagerTransactor, error) { + contract, err := bindReleaseManager(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ReleaseManagerTransactor{contract: contract}, nil +} + +// NewReleaseManagerFilterer creates a new log filterer instance of ReleaseManager, bound to a specific deployed contract. +func NewReleaseManagerFilterer(address common.Address, filterer bind.ContractFilterer) (*ReleaseManagerFilterer, error) { + contract, err := bindReleaseManager(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ReleaseManagerFilterer{contract: contract}, nil +} + +// bindReleaseManager binds a generic wrapper to an already deployed contract. +func bindReleaseManager(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ReleaseManagerMetaData.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 (_ReleaseManager *ReleaseManagerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ReleaseManager.Contract.ReleaseManagerCaller.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 (_ReleaseManager *ReleaseManagerRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ReleaseManager.Contract.ReleaseManagerTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ReleaseManager *ReleaseManagerRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ReleaseManager.Contract.ReleaseManagerTransactor.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 (_ReleaseManager *ReleaseManagerCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ReleaseManager.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 (_ReleaseManager *ReleaseManagerTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ReleaseManager.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ReleaseManager *ReleaseManagerTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ReleaseManager.Contract.contract.Transact(opts, method, params...) +} + +// GetLatestRelease is a free data retrieval call binding the contract method 0xd30eeb88. +// +// Solidity: function getLatestRelease((address,uint32) operatorSet) view returns(uint256, ((bytes32,string)[],uint32)) +func (_ReleaseManager *ReleaseManagerCaller) GetLatestRelease(opts *bind.CallOpts, operatorSet OperatorSet) (*big.Int, IReleaseManagerTypesRelease, error) { + var out []interface{} + err := _ReleaseManager.contract.Call(opts, &out, "getLatestRelease", operatorSet) + + if err != nil { + return *new(*big.Int), *new(IReleaseManagerTypesRelease), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + out1 := *abi.ConvertType(out[1], new(IReleaseManagerTypesRelease)).(*IReleaseManagerTypesRelease) + + return out0, out1, err + +} + +// GetLatestRelease is a free data retrieval call binding the contract method 0xd30eeb88. +// +// Solidity: function getLatestRelease((address,uint32) operatorSet) view returns(uint256, ((bytes32,string)[],uint32)) +func (_ReleaseManager *ReleaseManagerSession) GetLatestRelease(operatorSet OperatorSet) (*big.Int, IReleaseManagerTypesRelease, error) { + return _ReleaseManager.Contract.GetLatestRelease(&_ReleaseManager.CallOpts, operatorSet) +} + +// GetLatestRelease is a free data retrieval call binding the contract method 0xd30eeb88. +// +// Solidity: function getLatestRelease((address,uint32) operatorSet) view returns(uint256, ((bytes32,string)[],uint32)) +func (_ReleaseManager *ReleaseManagerCallerSession) GetLatestRelease(operatorSet OperatorSet) (*big.Int, IReleaseManagerTypesRelease, error) { + return _ReleaseManager.Contract.GetLatestRelease(&_ReleaseManager.CallOpts, operatorSet) +} + +// GetLatestUpgradeByTime is a free data retrieval call binding the contract method 0xa9e0ed68. +// +// Solidity: function getLatestUpgradeByTime((address,uint32) operatorSet) view returns(uint32) +func (_ReleaseManager *ReleaseManagerCaller) GetLatestUpgradeByTime(opts *bind.CallOpts, operatorSet OperatorSet) (uint32, error) { + var out []interface{} + err := _ReleaseManager.contract.Call(opts, &out, "getLatestUpgradeByTime", operatorSet) + + if err != nil { + return *new(uint32), err + } + + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + + return out0, err + +} + +// GetLatestUpgradeByTime is a free data retrieval call binding the contract method 0xa9e0ed68. +// +// Solidity: function getLatestUpgradeByTime((address,uint32) operatorSet) view returns(uint32) +func (_ReleaseManager *ReleaseManagerSession) GetLatestUpgradeByTime(operatorSet OperatorSet) (uint32, error) { + return _ReleaseManager.Contract.GetLatestUpgradeByTime(&_ReleaseManager.CallOpts, operatorSet) +} + +// GetLatestUpgradeByTime is a free data retrieval call binding the contract method 0xa9e0ed68. +// +// Solidity: function getLatestUpgradeByTime((address,uint32) operatorSet) view returns(uint32) +func (_ReleaseManager *ReleaseManagerCallerSession) GetLatestUpgradeByTime(operatorSet OperatorSet) (uint32, error) { + return _ReleaseManager.Contract.GetLatestUpgradeByTime(&_ReleaseManager.CallOpts, operatorSet) +} + +// GetRelease is a free data retrieval call binding the contract method 0x3acab5fc. +// +// Solidity: function getRelease((address,uint32) operatorSet, uint256 releaseId) view returns(((bytes32,string)[],uint32)) +func (_ReleaseManager *ReleaseManagerCaller) GetRelease(opts *bind.CallOpts, operatorSet OperatorSet, releaseId *big.Int) (IReleaseManagerTypesRelease, error) { + var out []interface{} + err := _ReleaseManager.contract.Call(opts, &out, "getRelease", operatorSet, releaseId) + + if err != nil { + return *new(IReleaseManagerTypesRelease), err + } + + out0 := *abi.ConvertType(out[0], new(IReleaseManagerTypesRelease)).(*IReleaseManagerTypesRelease) + + return out0, err + +} + +// GetRelease is a free data retrieval call binding the contract method 0x3acab5fc. +// +// Solidity: function getRelease((address,uint32) operatorSet, uint256 releaseId) view returns(((bytes32,string)[],uint32)) +func (_ReleaseManager *ReleaseManagerSession) GetRelease(operatorSet OperatorSet, releaseId *big.Int) (IReleaseManagerTypesRelease, error) { + return _ReleaseManager.Contract.GetRelease(&_ReleaseManager.CallOpts, operatorSet, releaseId) +} + +// GetRelease is a free data retrieval call binding the contract method 0x3acab5fc. +// +// Solidity: function getRelease((address,uint32) operatorSet, uint256 releaseId) view returns(((bytes32,string)[],uint32)) +func (_ReleaseManager *ReleaseManagerCallerSession) GetRelease(operatorSet OperatorSet, releaseId *big.Int) (IReleaseManagerTypesRelease, error) { + return _ReleaseManager.Contract.GetRelease(&_ReleaseManager.CallOpts, operatorSet, releaseId) +} + +// GetTotalReleases is a free data retrieval call binding the contract method 0x66f409f7. +// +// Solidity: function getTotalReleases((address,uint32) operatorSet) view returns(uint256) +func (_ReleaseManager *ReleaseManagerCaller) GetTotalReleases(opts *bind.CallOpts, operatorSet OperatorSet) (*big.Int, error) { + var out []interface{} + err := _ReleaseManager.contract.Call(opts, &out, "getTotalReleases", operatorSet) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetTotalReleases is a free data retrieval call binding the contract method 0x66f409f7. +// +// Solidity: function getTotalReleases((address,uint32) operatorSet) view returns(uint256) +func (_ReleaseManager *ReleaseManagerSession) GetTotalReleases(operatorSet OperatorSet) (*big.Int, error) { + return _ReleaseManager.Contract.GetTotalReleases(&_ReleaseManager.CallOpts, operatorSet) +} + +// GetTotalReleases is a free data retrieval call binding the contract method 0x66f409f7. +// +// Solidity: function getTotalReleases((address,uint32) operatorSet) view returns(uint256) +func (_ReleaseManager *ReleaseManagerCallerSession) GetTotalReleases(operatorSet OperatorSet) (*big.Int, error) { + return _ReleaseManager.Contract.GetTotalReleases(&_ReleaseManager.CallOpts, operatorSet) +} + +// IsValidRelease is a free data retrieval call binding the contract method 0x517e4068. +// +// Solidity: function isValidRelease((address,uint32) operatorSet, uint256 releaseId) view returns(bool) +func (_ReleaseManager *ReleaseManagerCaller) IsValidRelease(opts *bind.CallOpts, operatorSet OperatorSet, releaseId *big.Int) (bool, error) { + var out []interface{} + err := _ReleaseManager.contract.Call(opts, &out, "isValidRelease", operatorSet, releaseId) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsValidRelease is a free data retrieval call binding the contract method 0x517e4068. +// +// Solidity: function isValidRelease((address,uint32) operatorSet, uint256 releaseId) view returns(bool) +func (_ReleaseManager *ReleaseManagerSession) IsValidRelease(operatorSet OperatorSet, releaseId *big.Int) (bool, error) { + return _ReleaseManager.Contract.IsValidRelease(&_ReleaseManager.CallOpts, operatorSet, releaseId) +} + +// IsValidRelease is a free data retrieval call binding the contract method 0x517e4068. +// +// Solidity: function isValidRelease((address,uint32) operatorSet, uint256 releaseId) view returns(bool) +func (_ReleaseManager *ReleaseManagerCallerSession) IsValidRelease(operatorSet OperatorSet, releaseId *big.Int) (bool, error) { + return _ReleaseManager.Contract.IsValidRelease(&_ReleaseManager.CallOpts, operatorSet, releaseId) +} + +// PermissionController is a free data retrieval call binding the contract method 0x4657e26a. +// +// Solidity: function permissionController() view returns(address) +func (_ReleaseManager *ReleaseManagerCaller) PermissionController(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ReleaseManager.contract.Call(opts, &out, "permissionController") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// PermissionController is a free data retrieval call binding the contract method 0x4657e26a. +// +// Solidity: function permissionController() view returns(address) +func (_ReleaseManager *ReleaseManagerSession) PermissionController() (common.Address, error) { + return _ReleaseManager.Contract.PermissionController(&_ReleaseManager.CallOpts) +} + +// PermissionController is a free data retrieval call binding the contract method 0x4657e26a. +// +// Solidity: function permissionController() view returns(address) +func (_ReleaseManager *ReleaseManagerCallerSession) PermissionController() (common.Address, error) { + return _ReleaseManager.Contract.PermissionController(&_ReleaseManager.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_ReleaseManager *ReleaseManagerCaller) Version(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _ReleaseManager.contract.Call(opts, &out, "version") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_ReleaseManager *ReleaseManagerSession) Version() (string, error) { + return _ReleaseManager.Contract.Version(&_ReleaseManager.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_ReleaseManager *ReleaseManagerCallerSession) Version() (string, error) { + return _ReleaseManager.Contract.Version(&_ReleaseManager.CallOpts) +} + +// PublishRelease is a paid mutator transaction binding the contract method 0x7c09ea82. +// +// Solidity: function publishRelease((address,uint32) operatorSet, ((bytes32,string)[],uint32) release) returns(uint256 releaseId) +func (_ReleaseManager *ReleaseManagerTransactor) PublishRelease(opts *bind.TransactOpts, operatorSet OperatorSet, release IReleaseManagerTypesRelease) (*types.Transaction, error) { + return _ReleaseManager.contract.Transact(opts, "publishRelease", operatorSet, release) +} + +// PublishRelease is a paid mutator transaction binding the contract method 0x7c09ea82. +// +// Solidity: function publishRelease((address,uint32) operatorSet, ((bytes32,string)[],uint32) release) returns(uint256 releaseId) +func (_ReleaseManager *ReleaseManagerSession) PublishRelease(operatorSet OperatorSet, release IReleaseManagerTypesRelease) (*types.Transaction, error) { + return _ReleaseManager.Contract.PublishRelease(&_ReleaseManager.TransactOpts, operatorSet, release) +} + +// PublishRelease is a paid mutator transaction binding the contract method 0x7c09ea82. +// +// Solidity: function publishRelease((address,uint32) operatorSet, ((bytes32,string)[],uint32) release) returns(uint256 releaseId) +func (_ReleaseManager *ReleaseManagerTransactorSession) PublishRelease(operatorSet OperatorSet, release IReleaseManagerTypesRelease) (*types.Transaction, error) { + return _ReleaseManager.Contract.PublishRelease(&_ReleaseManager.TransactOpts, operatorSet, release) +} + +// ReleaseManagerInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the ReleaseManager contract. +type ReleaseManagerInitializedIterator struct { + Event *ReleaseManagerInitialized // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ReleaseManagerInitializedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ReleaseManagerInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ReleaseManagerInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ReleaseManagerInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ReleaseManagerInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ReleaseManagerInitialized represents a Initialized event raised by the ReleaseManager contract. +type ReleaseManagerInitialized struct { + Version uint8 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_ReleaseManager *ReleaseManagerFilterer) FilterInitialized(opts *bind.FilterOpts) (*ReleaseManagerInitializedIterator, error) { + + logs, sub, err := _ReleaseManager.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &ReleaseManagerInitializedIterator{contract: _ReleaseManager.contract, event: "Initialized", logs: logs, sub: sub}, nil +} + +// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_ReleaseManager *ReleaseManagerFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *ReleaseManagerInitialized) (event.Subscription, error) { + + logs, sub, err := _ReleaseManager.contract.WatchLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ReleaseManagerInitialized) + if err := _ReleaseManager.contract.UnpackLog(event, "Initialized", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_ReleaseManager *ReleaseManagerFilterer) ParseInitialized(log types.Log) (*ReleaseManagerInitialized, error) { + event := new(ReleaseManagerInitialized) + if err := _ReleaseManager.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ReleaseManagerReleasePublishedIterator is returned from FilterReleasePublished and is used to iterate over the raw logs and unpacked data for ReleasePublished events raised by the ReleaseManager contract. +type ReleaseManagerReleasePublishedIterator struct { + Event *ReleaseManagerReleasePublished // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ReleaseManagerReleasePublishedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ReleaseManagerReleasePublished) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ReleaseManagerReleasePublished) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ReleaseManagerReleasePublishedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ReleaseManagerReleasePublishedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ReleaseManagerReleasePublished represents a ReleasePublished event raised by the ReleaseManager contract. +type ReleaseManagerReleasePublished struct { + OperatorSet OperatorSet + ReleaseId *big.Int + Release IReleaseManagerTypesRelease + Raw types.Log // Blockchain specific contextual infos +} + +// FilterReleasePublished is a free log retrieval operation binding the contract event 0x2decd15222f7c4a8c3d4d2e14dcfdc5a0b52eb2d4b81796bfd010ee5cd972fd3. +// +// Solidity: event ReleasePublished((address,uint32) indexed operatorSet, uint256 indexed releaseId, ((bytes32,string)[],uint32) release) +func (_ReleaseManager *ReleaseManagerFilterer) FilterReleasePublished(opts *bind.FilterOpts, operatorSet []OperatorSet, releaseId []*big.Int) (*ReleaseManagerReleasePublishedIterator, error) { + + var operatorSetRule []interface{} + for _, operatorSetItem := range operatorSet { + operatorSetRule = append(operatorSetRule, operatorSetItem) + } + var releaseIdRule []interface{} + for _, releaseIdItem := range releaseId { + releaseIdRule = append(releaseIdRule, releaseIdItem) + } + + logs, sub, err := _ReleaseManager.contract.FilterLogs(opts, "ReleasePublished", operatorSetRule, releaseIdRule) + if err != nil { + return nil, err + } + return &ReleaseManagerReleasePublishedIterator{contract: _ReleaseManager.contract, event: "ReleasePublished", logs: logs, sub: sub}, nil +} + +// WatchReleasePublished is a free log subscription operation binding the contract event 0x2decd15222f7c4a8c3d4d2e14dcfdc5a0b52eb2d4b81796bfd010ee5cd972fd3. +// +// Solidity: event ReleasePublished((address,uint32) indexed operatorSet, uint256 indexed releaseId, ((bytes32,string)[],uint32) release) +func (_ReleaseManager *ReleaseManagerFilterer) WatchReleasePublished(opts *bind.WatchOpts, sink chan<- *ReleaseManagerReleasePublished, operatorSet []OperatorSet, releaseId []*big.Int) (event.Subscription, error) { + + var operatorSetRule []interface{} + for _, operatorSetItem := range operatorSet { + operatorSetRule = append(operatorSetRule, operatorSetItem) + } + var releaseIdRule []interface{} + for _, releaseIdItem := range releaseId { + releaseIdRule = append(releaseIdRule, releaseIdItem) + } + + logs, sub, err := _ReleaseManager.contract.WatchLogs(opts, "ReleasePublished", operatorSetRule, releaseIdRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ReleaseManagerReleasePublished) + if err := _ReleaseManager.contract.UnpackLog(event, "ReleasePublished", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseReleasePublished is a log parse operation binding the contract event 0x2decd15222f7c4a8c3d4d2e14dcfdc5a0b52eb2d4b81796bfd010ee5cd972fd3. +// +// Solidity: event ReleasePublished((address,uint32) indexed operatorSet, uint256 indexed releaseId, ((bytes32,string)[],uint32) release) +func (_ReleaseManager *ReleaseManagerFilterer) ParseReleasePublished(log types.Log) (*ReleaseManagerReleasePublished, error) { + event := new(ReleaseManagerReleasePublished) + if err := _ReleaseManager.contract.UnpackLog(event, "ReleasePublished", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/pkg/bindings/ReleaseManagerStorage/binding.go b/pkg/bindings/ReleaseManagerStorage/binding.go new file mode 100644 index 0000000000..13ebf9c204 --- /dev/null +++ b/pkg/bindings/ReleaseManagerStorage/binding.go @@ -0,0 +1,530 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package ReleaseManagerStorage + +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 +) + +// IReleaseManagerTypesArtifact is an auto generated low-level Go binding around an user-defined struct. +type IReleaseManagerTypesArtifact struct { + Digest [32]byte + RegistryUrl string +} + +// IReleaseManagerTypesRelease is an auto generated low-level Go binding around an user-defined struct. +type IReleaseManagerTypesRelease struct { + Artifacts []IReleaseManagerTypesArtifact + UpgradeByTime uint32 +} + +// OperatorSet is an auto generated low-level Go binding around an user-defined struct. +type OperatorSet struct { + Avs common.Address + Id uint32 +} + +// ReleaseManagerStorageMetaData contains all meta data concerning the ReleaseManagerStorage contract. +var ReleaseManagerStorageMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"function\",\"name\":\"getLatestRelease\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIReleaseManagerTypes.Release\",\"components\":[{\"name\":\"artifacts\",\"type\":\"tuple[]\",\"internalType\":\"structIReleaseManagerTypes.Artifact[]\",\"components\":[{\"name\":\"digest\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"registryUrl\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"name\":\"upgradeByTime\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getLatestUpgradeByTime\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRelease\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"releaseId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIReleaseManagerTypes.Release\",\"components\":[{\"name\":\"artifacts\",\"type\":\"tuple[]\",\"internalType\":\"structIReleaseManagerTypes.Artifact[]\",\"components\":[{\"name\":\"digest\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"registryUrl\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"name\":\"upgradeByTime\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTotalReleases\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isValidRelease\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"releaseId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"publishRelease\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"release\",\"type\":\"tuple\",\"internalType\":\"structIReleaseManagerTypes.Release\",\"components\":[{\"name\":\"artifacts\",\"type\":\"tuple[]\",\"internalType\":\"structIReleaseManagerTypes.Artifact[]\",\"components\":[{\"name\":\"digest\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"registryUrl\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"name\":\"upgradeByTime\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"releaseId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"ReleasePublished\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":true,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"releaseId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"release\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIReleaseManagerTypes.Release\",\"components\":[{\"name\":\"artifacts\",\"type\":\"tuple[]\",\"internalType\":\"structIReleaseManagerTypes.Artifact[]\",\"components\":[{\"name\":\"digest\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"registryUrl\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"name\":\"upgradeByTime\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"InvalidUpgradeByTime\",\"inputs\":[]}]", +} + +// ReleaseManagerStorageABI is the input ABI used to generate the binding from. +// Deprecated: Use ReleaseManagerStorageMetaData.ABI instead. +var ReleaseManagerStorageABI = ReleaseManagerStorageMetaData.ABI + +// ReleaseManagerStorage is an auto generated Go binding around an Ethereum contract. +type ReleaseManagerStorage struct { + ReleaseManagerStorageCaller // Read-only binding to the contract + ReleaseManagerStorageTransactor // Write-only binding to the contract + ReleaseManagerStorageFilterer // Log filterer for contract events +} + +// ReleaseManagerStorageCaller is an auto generated read-only Go binding around an Ethereum contract. +type ReleaseManagerStorageCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ReleaseManagerStorageTransactor is an auto generated write-only Go binding around an Ethereum contract. +type ReleaseManagerStorageTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ReleaseManagerStorageFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type ReleaseManagerStorageFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ReleaseManagerStorageSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type ReleaseManagerStorageSession struct { + Contract *ReleaseManagerStorage // 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 +} + +// ReleaseManagerStorageCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type ReleaseManagerStorageCallerSession struct { + Contract *ReleaseManagerStorageCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// ReleaseManagerStorageTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type ReleaseManagerStorageTransactorSession struct { + Contract *ReleaseManagerStorageTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ReleaseManagerStorageRaw is an auto generated low-level Go binding around an Ethereum contract. +type ReleaseManagerStorageRaw struct { + Contract *ReleaseManagerStorage // Generic contract binding to access the raw methods on +} + +// ReleaseManagerStorageCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type ReleaseManagerStorageCallerRaw struct { + Contract *ReleaseManagerStorageCaller // Generic read-only contract binding to access the raw methods on +} + +// ReleaseManagerStorageTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type ReleaseManagerStorageTransactorRaw struct { + Contract *ReleaseManagerStorageTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewReleaseManagerStorage creates a new instance of ReleaseManagerStorage, bound to a specific deployed contract. +func NewReleaseManagerStorage(address common.Address, backend bind.ContractBackend) (*ReleaseManagerStorage, error) { + contract, err := bindReleaseManagerStorage(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ReleaseManagerStorage{ReleaseManagerStorageCaller: ReleaseManagerStorageCaller{contract: contract}, ReleaseManagerStorageTransactor: ReleaseManagerStorageTransactor{contract: contract}, ReleaseManagerStorageFilterer: ReleaseManagerStorageFilterer{contract: contract}}, nil +} + +// NewReleaseManagerStorageCaller creates a new read-only instance of ReleaseManagerStorage, bound to a specific deployed contract. +func NewReleaseManagerStorageCaller(address common.Address, caller bind.ContractCaller) (*ReleaseManagerStorageCaller, error) { + contract, err := bindReleaseManagerStorage(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ReleaseManagerStorageCaller{contract: contract}, nil +} + +// NewReleaseManagerStorageTransactor creates a new write-only instance of ReleaseManagerStorage, bound to a specific deployed contract. +func NewReleaseManagerStorageTransactor(address common.Address, transactor bind.ContractTransactor) (*ReleaseManagerStorageTransactor, error) { + contract, err := bindReleaseManagerStorage(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ReleaseManagerStorageTransactor{contract: contract}, nil +} + +// NewReleaseManagerStorageFilterer creates a new log filterer instance of ReleaseManagerStorage, bound to a specific deployed contract. +func NewReleaseManagerStorageFilterer(address common.Address, filterer bind.ContractFilterer) (*ReleaseManagerStorageFilterer, error) { + contract, err := bindReleaseManagerStorage(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ReleaseManagerStorageFilterer{contract: contract}, nil +} + +// bindReleaseManagerStorage binds a generic wrapper to an already deployed contract. +func bindReleaseManagerStorage(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ReleaseManagerStorageMetaData.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 (_ReleaseManagerStorage *ReleaseManagerStorageRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ReleaseManagerStorage.Contract.ReleaseManagerStorageCaller.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 (_ReleaseManagerStorage *ReleaseManagerStorageRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ReleaseManagerStorage.Contract.ReleaseManagerStorageTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ReleaseManagerStorage *ReleaseManagerStorageRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ReleaseManagerStorage.Contract.ReleaseManagerStorageTransactor.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 (_ReleaseManagerStorage *ReleaseManagerStorageCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ReleaseManagerStorage.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 (_ReleaseManagerStorage *ReleaseManagerStorageTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ReleaseManagerStorage.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ReleaseManagerStorage *ReleaseManagerStorageTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ReleaseManagerStorage.Contract.contract.Transact(opts, method, params...) +} + +// GetLatestRelease is a free data retrieval call binding the contract method 0xd30eeb88. +// +// Solidity: function getLatestRelease((address,uint32) operatorSet) view returns(uint256, ((bytes32,string)[],uint32)) +func (_ReleaseManagerStorage *ReleaseManagerStorageCaller) GetLatestRelease(opts *bind.CallOpts, operatorSet OperatorSet) (*big.Int, IReleaseManagerTypesRelease, error) { + var out []interface{} + err := _ReleaseManagerStorage.contract.Call(opts, &out, "getLatestRelease", operatorSet) + + if err != nil { + return *new(*big.Int), *new(IReleaseManagerTypesRelease), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + out1 := *abi.ConvertType(out[1], new(IReleaseManagerTypesRelease)).(*IReleaseManagerTypesRelease) + + return out0, out1, err + +} + +// GetLatestRelease is a free data retrieval call binding the contract method 0xd30eeb88. +// +// Solidity: function getLatestRelease((address,uint32) operatorSet) view returns(uint256, ((bytes32,string)[],uint32)) +func (_ReleaseManagerStorage *ReleaseManagerStorageSession) GetLatestRelease(operatorSet OperatorSet) (*big.Int, IReleaseManagerTypesRelease, error) { + return _ReleaseManagerStorage.Contract.GetLatestRelease(&_ReleaseManagerStorage.CallOpts, operatorSet) +} + +// GetLatestRelease is a free data retrieval call binding the contract method 0xd30eeb88. +// +// Solidity: function getLatestRelease((address,uint32) operatorSet) view returns(uint256, ((bytes32,string)[],uint32)) +func (_ReleaseManagerStorage *ReleaseManagerStorageCallerSession) GetLatestRelease(operatorSet OperatorSet) (*big.Int, IReleaseManagerTypesRelease, error) { + return _ReleaseManagerStorage.Contract.GetLatestRelease(&_ReleaseManagerStorage.CallOpts, operatorSet) +} + +// GetLatestUpgradeByTime is a free data retrieval call binding the contract method 0xa9e0ed68. +// +// Solidity: function getLatestUpgradeByTime((address,uint32) operatorSet) view returns(uint32) +func (_ReleaseManagerStorage *ReleaseManagerStorageCaller) GetLatestUpgradeByTime(opts *bind.CallOpts, operatorSet OperatorSet) (uint32, error) { + var out []interface{} + err := _ReleaseManagerStorage.contract.Call(opts, &out, "getLatestUpgradeByTime", operatorSet) + + if err != nil { + return *new(uint32), err + } + + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + + return out0, err + +} + +// GetLatestUpgradeByTime is a free data retrieval call binding the contract method 0xa9e0ed68. +// +// Solidity: function getLatestUpgradeByTime((address,uint32) operatorSet) view returns(uint32) +func (_ReleaseManagerStorage *ReleaseManagerStorageSession) GetLatestUpgradeByTime(operatorSet OperatorSet) (uint32, error) { + return _ReleaseManagerStorage.Contract.GetLatestUpgradeByTime(&_ReleaseManagerStorage.CallOpts, operatorSet) +} + +// GetLatestUpgradeByTime is a free data retrieval call binding the contract method 0xa9e0ed68. +// +// Solidity: function getLatestUpgradeByTime((address,uint32) operatorSet) view returns(uint32) +func (_ReleaseManagerStorage *ReleaseManagerStorageCallerSession) GetLatestUpgradeByTime(operatorSet OperatorSet) (uint32, error) { + return _ReleaseManagerStorage.Contract.GetLatestUpgradeByTime(&_ReleaseManagerStorage.CallOpts, operatorSet) +} + +// GetRelease is a free data retrieval call binding the contract method 0x3acab5fc. +// +// Solidity: function getRelease((address,uint32) operatorSet, uint256 releaseId) view returns(((bytes32,string)[],uint32)) +func (_ReleaseManagerStorage *ReleaseManagerStorageCaller) GetRelease(opts *bind.CallOpts, operatorSet OperatorSet, releaseId *big.Int) (IReleaseManagerTypesRelease, error) { + var out []interface{} + err := _ReleaseManagerStorage.contract.Call(opts, &out, "getRelease", operatorSet, releaseId) + + if err != nil { + return *new(IReleaseManagerTypesRelease), err + } + + out0 := *abi.ConvertType(out[0], new(IReleaseManagerTypesRelease)).(*IReleaseManagerTypesRelease) + + return out0, err + +} + +// GetRelease is a free data retrieval call binding the contract method 0x3acab5fc. +// +// Solidity: function getRelease((address,uint32) operatorSet, uint256 releaseId) view returns(((bytes32,string)[],uint32)) +func (_ReleaseManagerStorage *ReleaseManagerStorageSession) GetRelease(operatorSet OperatorSet, releaseId *big.Int) (IReleaseManagerTypesRelease, error) { + return _ReleaseManagerStorage.Contract.GetRelease(&_ReleaseManagerStorage.CallOpts, operatorSet, releaseId) +} + +// GetRelease is a free data retrieval call binding the contract method 0x3acab5fc. +// +// Solidity: function getRelease((address,uint32) operatorSet, uint256 releaseId) view returns(((bytes32,string)[],uint32)) +func (_ReleaseManagerStorage *ReleaseManagerStorageCallerSession) GetRelease(operatorSet OperatorSet, releaseId *big.Int) (IReleaseManagerTypesRelease, error) { + return _ReleaseManagerStorage.Contract.GetRelease(&_ReleaseManagerStorage.CallOpts, operatorSet, releaseId) +} + +// GetTotalReleases is a free data retrieval call binding the contract method 0x66f409f7. +// +// Solidity: function getTotalReleases((address,uint32) operatorSet) view returns(uint256) +func (_ReleaseManagerStorage *ReleaseManagerStorageCaller) GetTotalReleases(opts *bind.CallOpts, operatorSet OperatorSet) (*big.Int, error) { + var out []interface{} + err := _ReleaseManagerStorage.contract.Call(opts, &out, "getTotalReleases", operatorSet) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetTotalReleases is a free data retrieval call binding the contract method 0x66f409f7. +// +// Solidity: function getTotalReleases((address,uint32) operatorSet) view returns(uint256) +func (_ReleaseManagerStorage *ReleaseManagerStorageSession) GetTotalReleases(operatorSet OperatorSet) (*big.Int, error) { + return _ReleaseManagerStorage.Contract.GetTotalReleases(&_ReleaseManagerStorage.CallOpts, operatorSet) +} + +// GetTotalReleases is a free data retrieval call binding the contract method 0x66f409f7. +// +// Solidity: function getTotalReleases((address,uint32) operatorSet) view returns(uint256) +func (_ReleaseManagerStorage *ReleaseManagerStorageCallerSession) GetTotalReleases(operatorSet OperatorSet) (*big.Int, error) { + return _ReleaseManagerStorage.Contract.GetTotalReleases(&_ReleaseManagerStorage.CallOpts, operatorSet) +} + +// IsValidRelease is a free data retrieval call binding the contract method 0x517e4068. +// +// Solidity: function isValidRelease((address,uint32) operatorSet, uint256 releaseId) view returns(bool) +func (_ReleaseManagerStorage *ReleaseManagerStorageCaller) IsValidRelease(opts *bind.CallOpts, operatorSet OperatorSet, releaseId *big.Int) (bool, error) { + var out []interface{} + err := _ReleaseManagerStorage.contract.Call(opts, &out, "isValidRelease", operatorSet, releaseId) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsValidRelease is a free data retrieval call binding the contract method 0x517e4068. +// +// Solidity: function isValidRelease((address,uint32) operatorSet, uint256 releaseId) view returns(bool) +func (_ReleaseManagerStorage *ReleaseManagerStorageSession) IsValidRelease(operatorSet OperatorSet, releaseId *big.Int) (bool, error) { + return _ReleaseManagerStorage.Contract.IsValidRelease(&_ReleaseManagerStorage.CallOpts, operatorSet, releaseId) +} + +// IsValidRelease is a free data retrieval call binding the contract method 0x517e4068. +// +// Solidity: function isValidRelease((address,uint32) operatorSet, uint256 releaseId) view returns(bool) +func (_ReleaseManagerStorage *ReleaseManagerStorageCallerSession) IsValidRelease(operatorSet OperatorSet, releaseId *big.Int) (bool, error) { + return _ReleaseManagerStorage.Contract.IsValidRelease(&_ReleaseManagerStorage.CallOpts, operatorSet, releaseId) +} + +// PublishRelease is a paid mutator transaction binding the contract method 0x7c09ea82. +// +// Solidity: function publishRelease((address,uint32) operatorSet, ((bytes32,string)[],uint32) release) returns(uint256 releaseId) +func (_ReleaseManagerStorage *ReleaseManagerStorageTransactor) PublishRelease(opts *bind.TransactOpts, operatorSet OperatorSet, release IReleaseManagerTypesRelease) (*types.Transaction, error) { + return _ReleaseManagerStorage.contract.Transact(opts, "publishRelease", operatorSet, release) +} + +// PublishRelease is a paid mutator transaction binding the contract method 0x7c09ea82. +// +// Solidity: function publishRelease((address,uint32) operatorSet, ((bytes32,string)[],uint32) release) returns(uint256 releaseId) +func (_ReleaseManagerStorage *ReleaseManagerStorageSession) PublishRelease(operatorSet OperatorSet, release IReleaseManagerTypesRelease) (*types.Transaction, error) { + return _ReleaseManagerStorage.Contract.PublishRelease(&_ReleaseManagerStorage.TransactOpts, operatorSet, release) +} + +// PublishRelease is a paid mutator transaction binding the contract method 0x7c09ea82. +// +// Solidity: function publishRelease((address,uint32) operatorSet, ((bytes32,string)[],uint32) release) returns(uint256 releaseId) +func (_ReleaseManagerStorage *ReleaseManagerStorageTransactorSession) PublishRelease(operatorSet OperatorSet, release IReleaseManagerTypesRelease) (*types.Transaction, error) { + return _ReleaseManagerStorage.Contract.PublishRelease(&_ReleaseManagerStorage.TransactOpts, operatorSet, release) +} + +// ReleaseManagerStorageReleasePublishedIterator is returned from FilterReleasePublished and is used to iterate over the raw logs and unpacked data for ReleasePublished events raised by the ReleaseManagerStorage contract. +type ReleaseManagerStorageReleasePublishedIterator struct { + Event *ReleaseManagerStorageReleasePublished // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ReleaseManagerStorageReleasePublishedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ReleaseManagerStorageReleasePublished) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ReleaseManagerStorageReleasePublished) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ReleaseManagerStorageReleasePublishedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ReleaseManagerStorageReleasePublishedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ReleaseManagerStorageReleasePublished represents a ReleasePublished event raised by the ReleaseManagerStorage contract. +type ReleaseManagerStorageReleasePublished struct { + OperatorSet OperatorSet + ReleaseId *big.Int + Release IReleaseManagerTypesRelease + Raw types.Log // Blockchain specific contextual infos +} + +// FilterReleasePublished is a free log retrieval operation binding the contract event 0x2decd15222f7c4a8c3d4d2e14dcfdc5a0b52eb2d4b81796bfd010ee5cd972fd3. +// +// Solidity: event ReleasePublished((address,uint32) indexed operatorSet, uint256 indexed releaseId, ((bytes32,string)[],uint32) release) +func (_ReleaseManagerStorage *ReleaseManagerStorageFilterer) FilterReleasePublished(opts *bind.FilterOpts, operatorSet []OperatorSet, releaseId []*big.Int) (*ReleaseManagerStorageReleasePublishedIterator, error) { + + var operatorSetRule []interface{} + for _, operatorSetItem := range operatorSet { + operatorSetRule = append(operatorSetRule, operatorSetItem) + } + var releaseIdRule []interface{} + for _, releaseIdItem := range releaseId { + releaseIdRule = append(releaseIdRule, releaseIdItem) + } + + logs, sub, err := _ReleaseManagerStorage.contract.FilterLogs(opts, "ReleasePublished", operatorSetRule, releaseIdRule) + if err != nil { + return nil, err + } + return &ReleaseManagerStorageReleasePublishedIterator{contract: _ReleaseManagerStorage.contract, event: "ReleasePublished", logs: logs, sub: sub}, nil +} + +// WatchReleasePublished is a free log subscription operation binding the contract event 0x2decd15222f7c4a8c3d4d2e14dcfdc5a0b52eb2d4b81796bfd010ee5cd972fd3. +// +// Solidity: event ReleasePublished((address,uint32) indexed operatorSet, uint256 indexed releaseId, ((bytes32,string)[],uint32) release) +func (_ReleaseManagerStorage *ReleaseManagerStorageFilterer) WatchReleasePublished(opts *bind.WatchOpts, sink chan<- *ReleaseManagerStorageReleasePublished, operatorSet []OperatorSet, releaseId []*big.Int) (event.Subscription, error) { + + var operatorSetRule []interface{} + for _, operatorSetItem := range operatorSet { + operatorSetRule = append(operatorSetRule, operatorSetItem) + } + var releaseIdRule []interface{} + for _, releaseIdItem := range releaseId { + releaseIdRule = append(releaseIdRule, releaseIdItem) + } + + logs, sub, err := _ReleaseManagerStorage.contract.WatchLogs(opts, "ReleasePublished", operatorSetRule, releaseIdRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ReleaseManagerStorageReleasePublished) + if err := _ReleaseManagerStorage.contract.UnpackLog(event, "ReleasePublished", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseReleasePublished is a log parse operation binding the contract event 0x2decd15222f7c4a8c3d4d2e14dcfdc5a0b52eb2d4b81796bfd010ee5cd972fd3. +// +// Solidity: event ReleasePublished((address,uint32) indexed operatorSet, uint256 indexed releaseId, ((bytes32,string)[],uint32) release) +func (_ReleaseManagerStorage *ReleaseManagerStorageFilterer) ParseReleasePublished(log types.Log) (*ReleaseManagerStorageReleasePublished, error) { + event := new(ReleaseManagerStorageReleasePublished) + if err := _ReleaseManagerStorage.contract.UnpackLog(event, "ReleasePublished", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/src/contracts/interfaces/IBN254TableCalculator.sol b/src/contracts/interfaces/IBN254TableCalculator.sol index fb007a4d4d..759c972123 100644 --- a/src/contracts/interfaces/IBN254TableCalculator.sol +++ b/src/contracts/interfaces/IBN254TableCalculator.sol @@ -40,22 +40,7 @@ interface IBN254TableCalculatorTypes { } } -interface IBN254TableCalculatorEvents { - /// @notice Emitted when the lookahead blocks are set - event LookaheadBlocksSet(uint256 lookaheadBlocks); -} - -interface IBN254TableCalculatorErrors { - /// @notice Emitted when the lookahead blocks are too high - error LookaheadBlocksTooHigh(); -} - -interface IBN254TableCalculator is - IOperatorTableCalculator, - IBN254TableCalculatorTypes, - IBN254TableCalculatorEvents, - IBN254TableCalculatorErrors -{ +interface IBN254TableCalculator is IOperatorTableCalculator, IBN254TableCalculatorTypes { /** * @notice calculates the operatorInfos for a given operatorSet * @param operatorSet the operatorSet to calculate the operator table for diff --git a/src/contracts/multichain/BN254TableCalculator.sol b/src/contracts/multichain/BN254TableCalculator.sol index 43c899bb0d..eb76694088 100644 --- a/src/contracts/multichain/BN254TableCalculator.sol +++ b/src/contracts/multichain/BN254TableCalculator.sol @@ -1,95 +1,29 @@ // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.27; -import "../interfaces/IBN254TableCalculator.sol"; -import "../interfaces/IKeyRegistrar.sol"; +import "./BN254TableCalculatorBase.sol"; import "../interfaces/IAllocationManager.sol"; -import "../libraries/Merkle.sol"; -import "../libraries/BN254.sol"; /** * @title BN254TableCalculator - * @notice Contract that calculates BN254 operator tables for a given operatorSet - * @dev This contract calculates operator weights and formats them into the required table structure + * @notice Implementation that calculates BN254 operator tables using the sum of the minimum slashable stake weights */ -contract BN254TableCalculator is IBN254TableCalculator { - using Merkle for bytes32[]; - using BN254 for BN254.G1Point; - - // Immutables & Constants - /// @notice KeyRegistrar contract for managing operator keys - IKeyRegistrar public immutable keyRegistrar; +contract BN254TableCalculator is BN254TableCalculatorBase { + // Immutables /// @notice AllocationManager contract for managing operator allocations IAllocationManager public immutable allocationManager; /// @notice The default lookahead blocks for the slashable stake lookup uint256 public immutable LOOKAHEAD_BLOCKS; - constructor(IKeyRegistrar _keyRegistrar, IAllocationManager _allocationManager, uint256 _LOOKAHEAD_BLOCKS) { - keyRegistrar = _keyRegistrar; + constructor( + IKeyRegistrar _keyRegistrar, + IAllocationManager _allocationManager, + uint256 _LOOKAHEAD_BLOCKS + ) BN254TableCalculatorBase(_keyRegistrar) { allocationManager = _allocationManager; LOOKAHEAD_BLOCKS = _LOOKAHEAD_BLOCKS; } - /// @inheritdoc IBN254TableCalculator - function calculateOperatorTable( - OperatorSet calldata operatorSet - ) external view virtual returns (BN254OperatorSetInfo memory operatorSetInfo) { - return _calculateOperatorTable(operatorSet); - } - - /// @inheritdoc IOperatorTableCalculator - function calculateOperatorTableBytes( - OperatorSet calldata operatorSet - ) external view virtual returns (bytes memory operatorTableBytes) { - return abi.encode(_calculateOperatorTable(operatorSet)); - } - - /// @inheritdoc IOperatorTableCalculator - function getOperatorWeights( - OperatorSet calldata operatorSet - ) external view virtual returns (address[] memory operators, uint256[][] memory weights) { - return _getOperatorWeights(operatorSet); - } - - /// @inheritdoc IOperatorTableCalculator - function getOperatorWeight( - OperatorSet calldata operatorSet, - address operator - ) external view virtual returns (uint256 weight) { - (address[] memory operators, uint256[][] memory weights) = _getOperatorWeights(operatorSet); - - // Find the index of the operator in the operators array - for (uint256 i = 0; i < operators.length; i++) { - if (operators[i] == operator) { - return weights[i][0]; - } - } - - return 0; - } - - /// @inheritdoc IBN254TableCalculator - function getOperatorInfos( - OperatorSet calldata operatorSet - ) external view virtual returns (BN254OperatorInfo[] memory) { - // Get the weights for all operators - (address[] memory operators, uint256[][] memory weights) = _getOperatorWeights(operatorSet); - - BN254OperatorInfo[] memory operatorInfos = new BN254OperatorInfo[](operators.length); - - for (uint256 i = 0; i < operators.length; i++) { - // Skip if the operator has not registered their key - if (!keyRegistrar.isRegistered(operatorSet, operators[i])) { - continue; - } - - (BN254.G1Point memory g1Point,) = keyRegistrar.getBN254Key(operatorSet, operators[i]); - operatorInfos[i] = BN254OperatorInfo({pubkey: g1Point, weights: weights[i]}); - } - - return operatorInfos; - } - /** * @notice Get the operator weights for a given operatorSet based on the slashable stake. * @param operatorSet The operatorSet to get the weights for @@ -99,80 +33,47 @@ contract BN254TableCalculator is IBN254TableCalculator { */ function _getOperatorWeights( OperatorSet calldata operatorSet - ) internal view virtual returns (address[] memory operators, uint256[][] memory weights) { + ) internal view override returns (address[] memory operators, uint256[][] memory weights) { // Get all operators & strategies in the operatorSet - operators = allocationManager.getMembers(operatorSet); + address[] memory registeredOperators = allocationManager.getMembers(operatorSet); IStrategy[] memory strategies = allocationManager.getStrategiesInOperatorSet(operatorSet); // Get the minimum slashable stake for each operator uint256[][] memory minSlashableStake = allocationManager.getMinimumSlashableStake({ operatorSet: operatorSet, - operators: operators, + operators: registeredOperators, strategies: strategies, futureBlock: uint32(block.number + LOOKAHEAD_BLOCKS) }); - weights = new uint256[][](operators.length); - for (uint256 operatorIndex = 0; operatorIndex < operators.length; ++operatorIndex) { - // Initialize operator weights array of length 1 just for slashable stake - weights[operatorIndex] = new uint256[](1); - // 1. For the given operator, loop through the strategies and sum together to calculate the operator's weight for the operatorSet + operators = new address[](registeredOperators.length); + weights = new uint256[][](registeredOperators.length); + uint256 operatorCount = 0; + for (uint256 i = 0; i < registeredOperators.length; ++i) { + // For the given operator, loop through the strategies and sum together to calculate the operator's weight for the operatorSet + uint256 totalWeight; for (uint256 stratIndex = 0; stratIndex < strategies.length; ++stratIndex) { - weights[operatorIndex][0] += minSlashableStake[operatorIndex][stratIndex]; + totalWeight += minSlashableStake[i][stratIndex]; } - } - return (operators, weights); - } + // If the operator has nonzero slashable stake, add them to the operators array + if (totalWeight > 0) { + // Initialize operator weights array of length 1 just for slashable stake + weights[operatorCount] = new uint256[](1); + weights[operatorCount][0] = totalWeight; - /** - * @notice Calculates the operator table for a given operatorSet, also calculates the aggregate pubkey for the operatorSet - * @param operatorSet The operatorSet to calculate the operator table for - * @return operatorSetInfo The operator table for the given operatorSet - * @dev This function: - * 1. Gets operator weights from the weight calculator - * 2. Collates weights into total weights - * 3. Creates a merkle tree of operator info - * - assumes that the operator has a registered BN254 key - * 4. Calculates the aggregate public key - */ - function _calculateOperatorTable( - OperatorSet calldata operatorSet - ) internal view returns (BN254OperatorSetInfo memory operatorSetInfo) { - // Get the weights for all operators in the operatorSet - (address[] memory operators, uint256[][] memory weights) = _getOperatorWeights(operatorSet); - - // Collate weights into a single array of total weights - uint256 subArrayLength = weights[0].length; - uint256[] memory totalWeights = new uint256[](subArrayLength); - bytes32[] memory operatorInfoLeaves = new bytes32[](operators.length); - BN254.G1Point memory aggregatePubkey; - - for (uint256 i = 0; i < operators.length; i++) { - // Skip if the operator has not registered their key - if (!keyRegistrar.isRegistered(operatorSet, operators[i])) { - continue; - } - - // Read the weights for the operator and encode them into the operatorInfoLeaves - // for all weights, add them to the total weights. The ith index returns the weights array for the ith operator - for (uint256 j = 0; j < subArrayLength; j++) { - totalWeights[j] += weights[i][j]; + // Add the operator to the operators array + operators[operatorCount] = registeredOperators[i]; + operatorCount++; } - (BN254.G1Point memory g1Point,) = keyRegistrar.getBN254Key(operatorSet, operators[i]); - operatorInfoLeaves[i] = keccak256(abi.encode(BN254OperatorInfo({pubkey: g1Point, weights: weights[i]}))); - - // Add the operator's G1 point to the aggregate pubkey - aggregatePubkey = aggregatePubkey.plus(g1Point); } - bytes32 operatorInfoTreeRoot = operatorInfoLeaves.merkleizeKeccak(); + // Resize arrays to be the size of the number of operators with nonzero slashable stake + assembly { + mstore(operators, operatorCount) + mstore(weights, operatorCount) + } - return BN254OperatorSetInfo({ - operatorInfoTreeRoot: operatorInfoTreeRoot, - numOperators: operators.length, - aggregatePubkey: aggregatePubkey, - totalWeights: totalWeights - }); + return (operators, weights); } } diff --git a/src/contracts/multichain/BN254TableCalculatorBase.sol b/src/contracts/multichain/BN254TableCalculatorBase.sol new file mode 100644 index 0000000000..e19ea70a1b --- /dev/null +++ b/src/contracts/multichain/BN254TableCalculatorBase.sol @@ -0,0 +1,180 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.27; + +import "../interfaces/IBN254TableCalculator.sol"; +import "../interfaces/IKeyRegistrar.sol"; +import "../libraries/Merkle.sol"; +import "../libraries/BN254.sol"; + +/** + * @title BN254TableCalculatorBase + * @notice Abstract contract that provides base functionality for calculating BN254 operator tables + * @dev This contract contains all the core logic for operator table calculations, + * with weight calculation left to be implemented by derived contracts + */ +abstract contract BN254TableCalculatorBase is IBN254TableCalculator { + using Merkle for bytes32[]; + using BN254 for BN254.G1Point; + + // Immutables + /// @notice KeyRegistrar contract for managing operator keys + IKeyRegistrar public immutable keyRegistrar; + + constructor( + IKeyRegistrar _keyRegistrar + ) { + keyRegistrar = _keyRegistrar; + } + + /// @inheritdoc IBN254TableCalculator + function calculateOperatorTable( + OperatorSet calldata operatorSet + ) external view virtual returns (BN254OperatorSetInfo memory operatorSetInfo) { + return _calculateOperatorTable(operatorSet); + } + + /// @inheritdoc IOperatorTableCalculator + function calculateOperatorTableBytes( + OperatorSet calldata operatorSet + ) external view virtual returns (bytes memory operatorTableBytes) { + return abi.encode(_calculateOperatorTable(operatorSet)); + } + + /// @inheritdoc IOperatorTableCalculator + function getOperatorWeights( + OperatorSet calldata operatorSet + ) external view virtual returns (address[] memory operators, uint256[][] memory weights) { + return _getOperatorWeights(operatorSet); + } + + /// @inheritdoc IOperatorTableCalculator + function getOperatorWeight( + OperatorSet calldata operatorSet, + address operator + ) external view virtual returns (uint256 weight) { + (address[] memory operators, uint256[][] memory weights) = _getOperatorWeights(operatorSet); + + // Find the index of the operator in the operators array + for (uint256 i = 0; i < operators.length; i++) { + if (operators[i] == operator) { + return weights[i][0]; + } + } + + return 0; + } + + /// @inheritdoc IBN254TableCalculator + function getOperatorInfos( + OperatorSet calldata operatorSet + ) external view virtual returns (BN254OperatorInfo[] memory) { + // Get the weights for all operators + (address[] memory operators, uint256[][] memory weights) = _getOperatorWeights(operatorSet); + + BN254OperatorInfo[] memory operatorInfos = new BN254OperatorInfo[](operators.length); + + for (uint256 i = 0; i < operators.length; i++) { + // Skip if the operator has not registered their key + if (!keyRegistrar.isRegistered(operatorSet, operators[i])) { + continue; + } + + (BN254.G1Point memory g1Point,) = keyRegistrar.getBN254Key(operatorSet, operators[i]); + operatorInfos[i] = BN254OperatorInfo({pubkey: g1Point, weights: weights[i]}); + } + + return operatorInfos; + } + + /** + * @notice Abstract function to get the operator weights for a given operatorSet + * @param operatorSet The operatorSet to get the weights for + * @return operators The addresses of the operators in the operatorSet + * @return weights The weights for each operator in the operatorSet, this is a 2D array where the first index is the operator + * and the second index is the type of weight + * @dev Must be implemented by derived contracts to define specific weight calculation logic + */ + function _getOperatorWeights( + OperatorSet calldata operatorSet + ) internal view virtual returns (address[] memory operators, uint256[][] memory weights); + + /** + * @notice Calculates the operator table for a given operatorSet, also calculates the aggregate pubkey for the operatorSet + * @param operatorSet The operatorSet to calculate the operator table for + * @return operatorSetInfo The operator table for the given operatorSet + * @dev This function: + * 1. Gets operator weights from the weight calculator + * 2. Collates weights into total weights + * 3. Creates a merkle tree of operator info + * - assumes that the operator has a registered BN254 key + * 4. Calculates the aggregate public key + */ + function _calculateOperatorTable( + OperatorSet calldata operatorSet + ) internal view returns (BN254OperatorSetInfo memory operatorSetInfo) { + // Get the weights for all operators in the operatorSet + (address[] memory operators, uint256[][] memory weights) = _getOperatorWeights(operatorSet); + + // If there are no weights, return an empty operator set info + if (weights.length == 0) { + return BN254OperatorSetInfo({ + operatorInfoTreeRoot: bytes32(0), + numOperators: 0, + aggregatePubkey: BN254.G1Point(0, 0), + totalWeights: new uint256[](0) + }); + } + + // Initialize arrays + uint256 subArrayLength = weights[0].length; + uint256[] memory totalWeights = new uint256[](subArrayLength); + bytes32[] memory operatorInfoLeaves = new bytes32[](operators.length); + BN254.G1Point memory aggregatePubkey; + uint256 operatorCount = 0; + + for (uint256 i = 0; i < operators.length; i++) { + // Skip if the operator has not registered their key + if (!keyRegistrar.isRegistered(operatorSet, operators[i])) { + continue; + } + + // Read the weights for the operator and encode them into the operatorInfoLeaves + // for all weights, add them to the total weights. The ith index returns the weights array for the ith operator + for (uint256 j = 0; j < subArrayLength; j++) { + totalWeights[j] += weights[i][j]; + } + (BN254.G1Point memory g1Point,) = keyRegistrar.getBN254Key(operatorSet, operators[i]); + operatorInfoLeaves[i] = keccak256(abi.encode(BN254OperatorInfo({pubkey: g1Point, weights: weights[i]}))); + + // Add the operator's G1 point to the aggregate pubkey + aggregatePubkey = aggregatePubkey.plus(g1Point); + + // Increment the operator count + operatorCount++; + } + + // If there are no operators, return an empty operator set info + if (operatorCount == 0) { + return BN254OperatorSetInfo({ + operatorInfoTreeRoot: bytes32(0), + numOperators: 0, + aggregatePubkey: BN254.G1Point(0, 0), + totalWeights: new uint256[](0) + }); + } + + // Resize the operatorInfoLeaves array to the number of operators and merkleize + assembly { + mstore(operatorInfoLeaves, operatorCount) + } + + bytes32 operatorInfoTreeRoot = operatorInfoLeaves.merkleizeKeccak(); + + return BN254OperatorSetInfo({ + operatorInfoTreeRoot: operatorInfoTreeRoot, + numOperators: operatorCount, + aggregatePubkey: aggregatePubkey, + totalWeights: totalWeights + }); + } +} diff --git a/src/test/integration/tests/multichain/BN254OperatorSet_CalculateWeights.t.sol b/src/test/integration/tests/multichain/BN254OperatorSet_CalculateWeights.t.sol index b2e5bd5090..315d814cbe 100644 --- a/src/test/integration/tests/multichain/BN254OperatorSet_CalculateWeights.t.sol +++ b/src/test/integration/tests/multichain/BN254OperatorSet_CalculateWeights.t.sol @@ -317,8 +317,8 @@ contract BN254OperatorSet_CalculateWeights is IntegrationCheckUtils { "Operator2 weight should remain unchanged" ); - // Verify aggregate pubkey is still the same even though operator1's weight is 0 - assertEq(operatorSetInfo.aggregatePubkey.X, expectedApk.X, "Aggregate pubkey X should match"); - assertEq(operatorSetInfo.aggregatePubkey.Y, expectedApk.Y, "Aggregate pubkey Y should match"); + // Verify aggregate pubkey has changed + assertEq(operatorSetInfo.aggregatePubkey.X, bn254G1Key2.X, "Aggregate pubkey X should match"); + assertEq(operatorSetInfo.aggregatePubkey.Y, bn254G1Key2.Y, "Aggregate pubkey Y should match"); } } diff --git a/src/test/tree/BN254TableCalculatorBase.tree b/src/test/tree/BN254TableCalculatorBase.tree new file mode 100644 index 0000000000..90b218b5d1 --- /dev/null +++ b/src/test/tree/BN254TableCalculatorBase.tree @@ -0,0 +1,31 @@ +. +└── BN254TableCalculatorBase (**** denotes that integration tests are needed to fully validate path) + ├── when calculateOperatorTable is called + │ ├── given that there are no operators + │ │ └── it should return empty operator table with zero aggregate pubkey + │ ├── given that operators have no registered BN254 keys + │ │ └── it should skip those operators and return table without them + │ ├── given that all operators have registered BN254 keys + │ │ └── it should include all operators in the table and calculate aggregate pubkey + │ ├── given that weights array has multiple weight types + │ │ └── it should correctly sum all weight types in totalWeights + │ └── given that operators have mixed registration status + │ └── it should only include registered operators in calculations + ├── when calculateOperatorTableBytes is called + │ └── it should return the encoded bytes of the operator table + ├── when getOperatorWeights is called + │ └── it should return the result from _getOperatorWeights implementation + ├── when getOperatorWeight is called + │ ├── given that the operator exists in the set + │ │ └── it should return the first weight value for that operator + │ ├── given that the operator does not exist in the set + │ │ └── it should return zero + │ └── given that the operator exists but has empty weights + │ └── it should handle gracefully **** + └── when getOperatorInfos is called + ├── given that no operators are registered + │ └── it should return array with empty operator infos + ├── given that some operators are not registered + │ └── it should skip unregistered operators (leaving empty slots) + └── given that all operators are registered + └── it should return complete operator info for each operator \ No newline at end of file diff --git a/src/test/unit/BN254TableCalculatorBaseUnit.t.sol b/src/test/unit/BN254TableCalculatorBaseUnit.t.sol new file mode 100644 index 0000000000..6fc1a6a04d --- /dev/null +++ b/src/test/unit/BN254TableCalculatorBaseUnit.t.sol @@ -0,0 +1,694 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.27; + +import "forge-std/Test.sol"; +import "src/contracts/multichain/BN254TableCalculatorBase.sol"; +import "src/contracts/permissions/KeyRegistrar.sol"; +import "src/contracts/interfaces/IKeyRegistrar.sol"; +import "src/contracts/interfaces/IOperatorTableCalculator.sol"; +import "src/contracts/interfaces/IBN254TableCalculator.sol"; +import "src/contracts/libraries/BN254.sol"; +import "src/contracts/libraries/OperatorSetLib.sol"; +import "src/test/utils/EigenLayerMultichainUnitTestSetup.sol"; +import "src/test/mocks/AllocationManagerMock.sol"; + +// Mock implementation for testing abstract contract +contract BN254TableCalculatorBaseHarness is BN254TableCalculatorBase { + // Storage for mock weights + mapping(bytes32 => address[]) internal _mockOperators; + mapping(bytes32 => uint[][]) internal _mockWeights; + + constructor(IKeyRegistrar _keyRegistrar) BN254TableCalculatorBase(_keyRegistrar) {} + + function setMockOperatorWeights(OperatorSet calldata operatorSet, address[] memory operators, uint[][] memory weights) external { + bytes32 key = operatorSet.key(); + _mockOperators[key] = operators; + _mockWeights[key] = weights; + } + + function _getOperatorWeights(OperatorSet calldata operatorSet) + internal + view + override + returns (address[] memory operators, uint[][] memory weights) + { + bytes32 key = operatorSet.key(); + operators = _mockOperators[key]; + weights = _mockWeights[key]; + } +} + +/** + * @title BN254TableCalculatorBaseUnitTests + * @notice Base contract for all BN254TableCalculatorBase unit tests + */ +contract BN254TableCalculatorBaseUnitTests is EigenLayerMultichainUnitTestSetup, IBN254TableCalculatorTypes, IKeyRegistrarTypes { + using BN254 for BN254.G1Point; + using OperatorSetLib for OperatorSet; + + // Test contracts + BN254TableCalculatorBaseHarness public calculator; + + // Test addresses + address public avs1 = address(0x1); + address public avs2 = address(0x2); + address public operator1 = address(0x3); + address public operator2 = address(0x4); + address public operator3 = address(0x5); + + // Test operator sets + OperatorSet defaultOperatorSet; + OperatorSet alternativeOperatorSet; + + // BN254 test keys + uint constant BN254_PRIV_KEY_1 = 69; + uint constant BN254_PRIV_KEY_2 = 123; + uint constant BN254_PRIV_KEY_3 = 456; + + BN254.G1Point bn254G1Key1; + BN254.G1Point bn254G1Key2; + BN254.G1Point bn254G1Key3; + BN254.G2Point bn254G2Key1; + BN254.G2Point bn254G2Key2; + BN254.G2Point bn254G2Key3; + + function setUp() public virtual override { + EigenLayerMultichainUnitTestSetup.setUp(); + + // Deploy KeyRegistrar + KeyRegistrar keyRegistrarImpl = new KeyRegistrar(permissionController, IAllocationManager(address(allocationManagerMock)), "1.0.0"); + keyRegistrar = keyRegistrarImpl; + + // Deploy calculator with KeyRegistrar + calculator = new BN254TableCalculatorBaseHarness(IKeyRegistrar(address(keyRegistrar))); + + // Set up operator sets + defaultOperatorSet = OperatorSet({avs: avs1, id: 0}); + alternativeOperatorSet = OperatorSet({avs: avs2, id: 1}); + + // Set up BN254 keys + bn254G1Key1 = BN254.generatorG1().scalar_mul(BN254_PRIV_KEY_1); + bn254G1Key2 = BN254.generatorG1().scalar_mul(BN254_PRIV_KEY_2); + + // Valid G2 points that correspond to the private keys + bn254G2Key1.X[1] = 19_101_821_850_089_705_274_637_533_855_249_918_363_070_101_489_527_618_151_493_230_256_975_900_223_847; + bn254G2Key1.X[0] = 5_334_410_886_741_819_556_325_359_147_377_682_006_012_228_123_419_628_681_352_847_439_302_316_235_957; + bn254G2Key1.Y[1] = 354_176_189_041_917_478_648_604_979_334_478_067_325_821_134_838_555_150_300_539_079_146_482_658_331; + bn254G2Key1.Y[0] = 4_185_483_097_059_047_421_902_184_823_581_361_466_320_657_066_600_218_863_748_375_739_772_335_928_910; + + bn254G2Key2.X[1] = 19_276_105_129_625_393_659_655_050_515_259_006_463_014_579_919_681_138_299_520_812_914_148_935_621_072; + bn254G2Key2.X[0] = 14_066_454_060_412_929_535_985_836_631_817_650_877_381_034_334_390_275_410_072_431_082_437_297_539_867; + bn254G2Key2.Y[1] = 12_642_665_914_920_339_463_975_152_321_804_664_028_480_770_144_655_934_937_445_922_690_262_428_344_269; + bn254G2Key2.Y[0] = 10_109_651_107_942_685_361_120_988_628_892_759_706_059_655_669_161_016_107_907_096_760_613_704_453_218; + + // Configure operator sets in AllocationManager + allocationManagerMock.setAVSRegistrar(avs1, avs1); + allocationManagerMock.setAVSRegistrar(avs2, avs2); + + // Configure operator sets for BN254 + vm.prank(avs1); + keyRegistrar.configureOperatorSet(defaultOperatorSet, IKeyRegistrarTypes.CurveType.BN254); + + vm.prank(avs2); + keyRegistrar.configureOperatorSet(alternativeOperatorSet, IKeyRegistrarTypes.CurveType.BN254); + } + + // Helper functions + function _registerOperatorKey( + address operator, + OperatorSet memory operatorSet, + BN254.G1Point memory g1Key, + BN254.G2Point memory g2Key, + uint privKey + ) internal { + bytes memory pubkey = abi.encode(g1Key.X, g1Key.Y, g2Key.X, g2Key.Y); + bytes memory signature = _generateBN254Signature(operator, operatorSet, pubkey, privKey); + + vm.prank(operator); + keyRegistrar.registerKey(operator, operatorSet, pubkey, signature); + } + + function _generateBN254Signature(address operator, OperatorSet memory operatorSet, bytes memory pubkey, uint privKey) + internal + view + returns (bytes memory) + { + bytes32 structHash = keccak256( + abi.encode(keyRegistrar.BN254_KEY_REGISTRATION_TYPEHASH(), operator, operatorSet.avs, operatorSet.id, keccak256(pubkey)) + ); + bytes32 messageHash = keyRegistrar.domainSeparator(); + messageHash = keccak256(abi.encodePacked("\x19\x01", messageHash, structHash)); + + BN254.G1Point memory msgPoint = BN254.hashToG1(messageHash); + BN254.G1Point memory signature = msgPoint.scalar_mul(privKey); + + return abi.encode(signature.X, signature.Y); + } + + function _createSingleWeightArray(uint weight) internal pure returns (uint[][] memory) { + uint[][] memory weights = new uint[][](1); + weights[0] = new uint[](1); + weights[0][0] = weight; + return weights; + } + + function _createMultiWeightArray(uint[] memory weightValues) internal pure returns (uint[][] memory) { + uint[][] memory weights = new uint[][](1); + weights[0] = weightValues; + return weights; + } + + function _addG1Points(BN254.G1Point memory p1, BN254.G1Point memory p2) internal view returns (BN254.G1Point memory) { + if (p1.X == 0 && p1.Y == 0) return p2; + if (p2.X == 0 && p2.Y == 0) return p1; + return BN254.plus(p1, p2); + } +} + +/** + * @title BN254TableCalculatorBaseUnitTests_calculateOperatorTable + * @notice Unit tests for BN254TableCalculatorBase.calculateOperatorTable + */ +contract BN254TableCalculatorBaseUnitTests_calculateOperatorTable is BN254TableCalculatorBaseUnitTests { + function test_noOperators() public { + // Set empty operators and weights + address[] memory operators = new address[](0); + uint[][] memory weights = new uint[][](0); + calculator.setMockOperatorWeights(defaultOperatorSet, operators, weights); + + BN254OperatorSetInfo memory info = calculator.calculateOperatorTable(defaultOperatorSet); + + assertEq(info.numOperators, 0, "Should have 0 operators"); + assertEq(info.totalWeights.length, 0, "Should have empty total weights"); + assertEq(info.aggregatePubkey.X, 0, "Aggregate pubkey X should be 0"); + assertEq(info.aggregatePubkey.Y, 0, "Aggregate pubkey Y should be 0"); + } + + function test_operatorsWithNoRegisteredKeys() public { + // Set operators without registering their keys + address[] memory operators = new address[](2); + operators[0] = operator1; + operators[1] = operator2; + + uint[][] memory weights = new uint[][](2); + weights[0] = _createSingleWeightArray(100)[0]; + weights[1] = _createSingleWeightArray(200)[0]; + + calculator.setMockOperatorWeights(defaultOperatorSet, operators, weights); + + BN254OperatorSetInfo memory info = calculator.calculateOperatorTable(defaultOperatorSet); + + // When no operators have registered keys, operatorCount should be 0 and return empty table + assertEq(info.numOperators, 0, "Should have 0 operators when none are registered"); + assertEq(info.totalWeights.length, 0, "Should have empty total weights when no operators registered"); + assertEq(info.operatorInfoTreeRoot, bytes32(0), "Should have zero tree root"); + assertEq(info.aggregatePubkey.X, 0, "Aggregate pubkey X should be 0"); + assertEq(info.aggregatePubkey.Y, 0, "Aggregate pubkey Y should be 0"); + } + + function test_allOperatorsRegistered() public { + // Register operators + _registerOperatorKey(operator1, defaultOperatorSet, bn254G1Key1, bn254G2Key1, BN254_PRIV_KEY_1); + _registerOperatorKey(operator2, defaultOperatorSet, bn254G1Key2, bn254G2Key2, BN254_PRIV_KEY_2); + + // Set operators and weights + address[] memory operators = new address[](2); + operators[0] = operator1; + operators[1] = operator2; + + uint[][] memory weights = new uint[][](2); + weights[0] = _createSingleWeightArray(100)[0]; + weights[1] = _createSingleWeightArray(200)[0]; + + calculator.setMockOperatorWeights(defaultOperatorSet, operators, weights); + + BN254OperatorSetInfo memory info = calculator.calculateOperatorTable(defaultOperatorSet); + + assertEq(info.numOperators, 2, "Should have 2 operators"); + assertEq(info.totalWeights.length, 1, "Should have 1 weight type"); + assertEq(info.totalWeights[0], 300, "Total weight should be 300"); + + // Verify aggregate pubkey is correct (sum of G1 points) + BN254.G1Point memory expectedAggregate = _addG1Points(bn254G1Key1, bn254G1Key2); + assertEq(info.aggregatePubkey.X, expectedAggregate.X, "Aggregate pubkey X mismatch"); + assertEq(info.aggregatePubkey.Y, expectedAggregate.Y, "Aggregate pubkey Y mismatch"); + } + + function test_multipleWeightTypes() public { + // Register operators + _registerOperatorKey(operator1, defaultOperatorSet, bn254G1Key1, bn254G2Key1, BN254_PRIV_KEY_1); + _registerOperatorKey(operator2, defaultOperatorSet, bn254G1Key2, bn254G2Key2, BN254_PRIV_KEY_2); + + // Set operators and weights with multiple types + address[] memory operators = new address[](2); + operators[0] = operator1; + operators[1] = operator2; + + uint[][] memory weights = new uint[][](2); + uint[] memory op1Weights = new uint[](3); + op1Weights[0] = 100; + op1Weights[1] = 150; + op1Weights[2] = 50; + weights[0] = op1Weights; + + uint[] memory op2Weights = new uint[](3); + op2Weights[0] = 200; + op2Weights[1] = 250; + op2Weights[2] = 100; + weights[1] = op2Weights; + + calculator.setMockOperatorWeights(defaultOperatorSet, operators, weights); + + BN254OperatorSetInfo memory info = calculator.calculateOperatorTable(defaultOperatorSet); + + assertEq(info.totalWeights.length, 3, "Should have 3 weight types"); + assertEq(info.totalWeights[0], 300, "Total weight[0] should be 300"); + assertEq(info.totalWeights[1], 400, "Total weight[1] should be 400"); + assertEq(info.totalWeights[2], 150, "Total weight[2] should be 150"); + } + + function test_mixedRegistrationStatus() public { + // Register only operator1 + _registerOperatorKey(operator1, defaultOperatorSet, bn254G1Key1, bn254G2Key1, BN254_PRIV_KEY_1); + + // Set operators and weights + address[] memory operators = new address[](3); + operators[0] = operator1; // registered + operators[1] = operator2; // not registered + operators[2] = operator3; // not registered + + uint[][] memory weights = new uint[][](3); + weights[0] = _createSingleWeightArray(100)[0]; + weights[1] = _createSingleWeightArray(200)[0]; + weights[2] = _createSingleWeightArray(300)[0]; + + calculator.setMockOperatorWeights(defaultOperatorSet, operators, weights); + + BN254OperatorSetInfo memory info = calculator.calculateOperatorTable(defaultOperatorSet); + + assertEq(info.numOperators, 1, "Should have 1 operator (only registered ones count)"); + assertEq(info.totalWeights[0], 100, "Total weight should be 100 (only operator1)"); + assertEq(info.aggregatePubkey.X, bn254G1Key1.X, "Aggregate pubkey X should be operator1's"); + assertEq(info.aggregatePubkey.Y, bn254G1Key1.Y, "Aggregate pubkey Y should be operator1's"); + } + + function test_singleOperatorRegistered() public { + // Test with 1 operator, 1 registered + address newOperator = address(uint160(100)); + + address[] memory operators = new address[](1); + operators[0] = newOperator; + uint[][] memory weights = new uint[][](1); + weights[0] = _createSingleWeightArray(100)[0]; + + _registerOperatorKey(newOperator, defaultOperatorSet, bn254G1Key1, bn254G2Key1, BN254_PRIV_KEY_1); + calculator.setMockOperatorWeights(defaultOperatorSet, operators, weights); + + BN254OperatorSetInfo memory info = calculator.calculateOperatorTable(defaultOperatorSet); + assertEq(info.numOperators, 1, "Should have 1 operator"); + assertEq(info.totalWeights[0], 100, "Total weight should be 100"); + assertEq(info.aggregatePubkey.X, bn254G1Key1.X, "Aggregate pubkey X mismatch"); + assertEq(info.aggregatePubkey.Y, bn254G1Key1.Y, "Aggregate pubkey Y mismatch"); + } + + function test_subsetOfOperatorsRegistered() public { + // Register operator1 and operator3, but not operator2 + _registerOperatorKey(operator1, defaultOperatorSet, bn254G1Key1, bn254G2Key1, BN254_PRIV_KEY_1); + + // Set operators and weights + address[] memory operators = new address[](3); + operators[0] = operator1; // registered + operators[1] = operator2; // not registered + + uint[][] memory weights = new uint[][](3); + weights[0] = _createSingleWeightArray(100)[0]; + weights[1] = _createSingleWeightArray(200)[0]; // This weight won't be included + + calculator.setMockOperatorWeights(defaultOperatorSet, operators, weights); + + BN254OperatorSetInfo memory info = calculator.calculateOperatorTable(defaultOperatorSet); + + assertEq(info.numOperators, 1, "Should have 1 operator (only registered ones)"); + assertEq(info.totalWeights[0], 100, "Total weight should be 100 (100 + 300)"); + + // Verify aggregate pubkey is sum of registered operators' keys + BN254.G1Point memory expectedAggregate = bn254G1Key1; + assertEq(info.aggregatePubkey.X, expectedAggregate.X, "Aggregate pubkey X mismatch"); + assertEq(info.aggregatePubkey.Y, expectedAggregate.Y, "Aggregate pubkey Y mismatch"); + + // Verify merkle root is non-zero + assertTrue(info.operatorInfoTreeRoot != bytes32(0), "Merkle root should be non-zero"); + } + + function test_emptyOperatorSetReturnsZeroValues() public { + // Test with operators that exist but none registered + address[] memory operators = new address[](3); + operators[0] = operator1; + operators[1] = operator2; + operators[2] = operator3; + + uint[][] memory weights = new uint[][](3); + weights[0] = _createSingleWeightArray(100)[0]; + weights[1] = _createSingleWeightArray(200)[0]; + weights[2] = _createSingleWeightArray(300)[0]; + + // Don't register any operators + calculator.setMockOperatorWeights(defaultOperatorSet, operators, weights); + + BN254OperatorSetInfo memory info = calculator.calculateOperatorTable(defaultOperatorSet); + + // Verify all values are zero/empty when no operators are registered + assertEq(info.operatorInfoTreeRoot, bytes32(0), "Tree root should be zero"); + assertEq(info.numOperators, 0, "Should have 0 operators"); + assertEq(info.aggregatePubkey.X, 0, "Aggregate pubkey X should be 0"); + assertEq(info.aggregatePubkey.Y, 0, "Aggregate pubkey Y should be 0"); + assertEq(info.totalWeights.length, 0, "Total weights should be empty array"); + } +} + +/** + * @title BN254TableCalculatorBaseUnitTests_calculateOperatorTableBytes + * @notice Unit tests for BN254TableCalculatorBase.calculateOperatorTableBytes + */ +contract BN254TableCalculatorBaseUnitTests_calculateOperatorTableBytes is BN254TableCalculatorBaseUnitTests { + function test_encodesCorrectly() public { + // Register operator + _registerOperatorKey(operator1, defaultOperatorSet, bn254G1Key1, bn254G2Key1, BN254_PRIV_KEY_1); + + // Set operators and weights + address[] memory operators = new address[](1); + operators[0] = operator1; + uint[][] memory weights = _createSingleWeightArray(100); + + calculator.setMockOperatorWeights(defaultOperatorSet, operators, weights); + + bytes memory tableBytes = calculator.calculateOperatorTableBytes(defaultOperatorSet); + + // Decode and verify + BN254OperatorSetInfo memory decodedInfo = abi.decode(tableBytes, (BN254OperatorSetInfo)); + + assertEq(decodedInfo.numOperators, 1, "Should have 1 operator"); + assertEq(decodedInfo.totalWeights[0], 100, "Total weight should be 100"); + assertEq(decodedInfo.aggregatePubkey.X, bn254G1Key1.X, "Aggregate pubkey X mismatch"); + assertEq(decodedInfo.aggregatePubkey.Y, bn254G1Key1.Y, "Aggregate pubkey Y mismatch"); + } + + function testFuzz_encodesCorrectly(uint weight) public { + weight = bound(weight, 1, 1e18); + + // Register operator + _registerOperatorKey(operator1, defaultOperatorSet, bn254G1Key1, bn254G2Key1, BN254_PRIV_KEY_1); + + // Set operators and weights + address[] memory operators = new address[](1); + operators[0] = operator1; + uint[][] memory weights = _createSingleWeightArray(weight); + + calculator.setMockOperatorWeights(defaultOperatorSet, operators, weights); + + bytes memory tableBytes = calculator.calculateOperatorTableBytes(defaultOperatorSet); + + // Decode and verify + BN254OperatorSetInfo memory decodedInfo = abi.decode(tableBytes, (BN254OperatorSetInfo)); + + assertEq(decodedInfo.totalWeights[0], weight, "Weight mismatch"); + } +} + +/** + * @title BN254TableCalculatorBaseUnitTests_getOperatorWeights + * @notice Unit tests for BN254TableCalculatorBase.getOperatorWeights + */ +contract BN254TableCalculatorBaseUnitTests_getOperatorWeights is BN254TableCalculatorBaseUnitTests { + function test_returnsImplementationResult() public { + // Set mock weights + address[] memory expectedOperators = new address[](2); + expectedOperators[0] = operator1; + expectedOperators[1] = operator2; + + uint[][] memory expectedWeights = new uint[][](2); + expectedWeights[0] = _createSingleWeightArray(100)[0]; + expectedWeights[1] = _createSingleWeightArray(200)[0]; + + calculator.setMockOperatorWeights(defaultOperatorSet, expectedOperators, expectedWeights); + + (address[] memory operators, uint[][] memory weights) = calculator.getOperatorWeights(defaultOperatorSet); + + assertEq(operators.length, expectedOperators.length, "Operators length mismatch"); + assertEq(weights.length, expectedWeights.length, "Weights length mismatch"); + + for (uint i = 0; i < operators.length; i++) { + assertEq(operators[i], expectedOperators[i], "Operator address mismatch"); + assertEq(weights[i][0], expectedWeights[i][0], "Weight value mismatch"); + } + } + + function testFuzz_returnsImplementationResult(uint8 numOperators) public { + numOperators = uint8(bound(numOperators, 0, 20)); + + address[] memory expectedOperators = new address[](numOperators); + uint[][] memory expectedWeights = new uint[][](numOperators); + + for (uint i = 0; i < numOperators; i++) { + expectedOperators[i] = address(uint160(i + 100)); + expectedWeights[i] = _createSingleWeightArray((i + 1) * 100)[0]; + } + + calculator.setMockOperatorWeights(defaultOperatorSet, expectedOperators, expectedWeights); + + (address[] memory operators, uint[][] memory weights) = calculator.getOperatorWeights(defaultOperatorSet); + + assertEq(operators.length, numOperators, "Operators length mismatch"); + assertEq(weights.length, numOperators, "Weights length mismatch"); + } +} + +/** + * @title BN254TableCalculatorBaseUnitTests_getOperatorWeight + * @notice Unit tests for BN254TableCalculatorBase.getOperatorWeight + */ +contract BN254TableCalculatorBaseUnitTests_getOperatorWeight is BN254TableCalculatorBaseUnitTests { + function test_operatorExists() public { + // Set operators and weights + address[] memory operators = new address[](3); + operators[0] = operator1; + operators[1] = operator2; + operators[2] = operator3; + + uint[][] memory weights = new uint[][](3); + weights[0] = _createSingleWeightArray(100)[0]; + weights[1] = _createSingleWeightArray(200)[0]; + weights[2] = _createSingleWeightArray(300)[0]; + + calculator.setMockOperatorWeights(defaultOperatorSet, operators, weights); + + assertEq(calculator.getOperatorWeight(defaultOperatorSet, operator1), 100, "Operator1 weight mismatch"); + assertEq(calculator.getOperatorWeight(defaultOperatorSet, operator2), 200, "Operator2 weight mismatch"); + assertEq(calculator.getOperatorWeight(defaultOperatorSet, operator3), 300, "Operator3 weight mismatch"); + } + + function test_operatorDoesNotExist() public { + // Set operators and weights + address[] memory operators = new address[](2); + operators[0] = operator1; + operators[1] = operator2; + + uint[][] memory weights = new uint[][](2); + weights[0] = _createSingleWeightArray(100)[0]; + weights[1] = _createSingleWeightArray(200)[0]; + + calculator.setMockOperatorWeights(defaultOperatorSet, operators, weights); + + assertEq(calculator.getOperatorWeight(defaultOperatorSet, operator3), 0, "Non-existent operator should return 0"); + assertEq(calculator.getOperatorWeight(defaultOperatorSet, address(0xdead)), 0, "Random address should return 0"); + } + + function test_emptyOperatorSet() public { + // Set empty operators and weights + address[] memory operators = new address[](0); + uint[][] memory weights = new uint[][](0); + + calculator.setMockOperatorWeights(defaultOperatorSet, operators, weights); + + assertEq(calculator.getOperatorWeight(defaultOperatorSet, operator1), 0, "Should return 0 for empty set"); + } + + function testFuzz_getOperatorWeight(address operator, uint weight) public { + weight = bound(weight, 0, 1e18); + + // Set single operator + address[] memory operators = new address[](1); + operators[0] = operator; + + uint[][] memory weights = _createSingleWeightArray(weight); + + calculator.setMockOperatorWeights(defaultOperatorSet, operators, weights); + + assertEq(calculator.getOperatorWeight(defaultOperatorSet, operator), weight, "Weight mismatch"); + + // Different operator should return 0 + address differentOperator = address(uint160(uint(uint160(operator)) + 1)); + assertEq(calculator.getOperatorWeight(defaultOperatorSet, differentOperator), 0, "Different operator should return 0"); + } +} + +/** + * @title BN254TableCalculatorBaseUnitTests_getOperatorInfos + * @notice Unit tests for BN254TableCalculatorBase.getOperatorInfos + */ +contract BN254TableCalculatorBaseUnitTests_getOperatorInfos is BN254TableCalculatorBaseUnitTests { + function test_noOperatorsRegistered() public { + // Set operators without registering keys + address[] memory operators = new address[](2); + operators[0] = operator1; + operators[1] = operator2; + + uint[][] memory weights = new uint[][](2); + weights[0] = _createSingleWeightArray(100)[0]; + weights[1] = _createSingleWeightArray(200)[0]; + + calculator.setMockOperatorWeights(defaultOperatorSet, operators, weights); + + BN254OperatorInfo[] memory infos = calculator.getOperatorInfos(defaultOperatorSet); + + assertEq(infos.length, 2, "Should have 2 operator infos"); + + // Both should have zero pubkeys since not registered + for (uint i = 0; i < infos.length; i++) { + assertEq(infos[i].pubkey.X, 0, "Unregistered operator pubkey X should be 0"); + assertEq(infos[i].pubkey.Y, 0, "Unregistered operator pubkey Y should be 0"); + assertEq(infos[i].weights.length, 0, "Unregistered operator weights should be empty"); + } + } + + function test_someOperatorsNotRegistered() public { + // Register only operator1 (skip operator3 to avoid pairing issues) + _registerOperatorKey(operator1, defaultOperatorSet, bn254G1Key1, bn254G2Key1, BN254_PRIV_KEY_1); + + // Set operators and weights + address[] memory operators = new address[](3); + operators[0] = operator1; // registered + operators[1] = operator2; // not registered + operators[2] = operator3; // not registered + + uint[][] memory weights = new uint[][](3); + weights[0] = _createSingleWeightArray(100)[0]; + weights[1] = _createSingleWeightArray(200)[0]; + weights[2] = _createSingleWeightArray(300)[0]; + + calculator.setMockOperatorWeights(defaultOperatorSet, operators, weights); + + BN254OperatorInfo[] memory infos = calculator.getOperatorInfos(defaultOperatorSet); + + assertEq(infos.length, 3, "Should have 3 operator infos"); + + // Check operator1 (registered) + assertEq(infos[0].pubkey.X, bn254G1Key1.X, "Operator1 pubkey X mismatch"); + assertEq(infos[0].pubkey.Y, bn254G1Key1.Y, "Operator1 pubkey Y mismatch"); + assertEq(infos[0].weights[0], 100, "Operator1 weight mismatch"); + + // Check operator2 (not registered) + assertEq(infos[1].pubkey.X, 0, "Operator2 pubkey X should be 0"); + assertEq(infos[1].pubkey.Y, 0, "Operator2 pubkey Y should be 0"); + assertEq(infos[1].weights.length, 0, "Operator2 weights should be empty"); + + // Check operator3 (not registered) + assertEq(infos[2].pubkey.X, 0, "Operator3 pubkey X should be 0"); + assertEq(infos[2].pubkey.Y, 0, "Operator3 pubkey Y should be 0"); + assertEq(infos[2].weights.length, 0, "Operator3 weights should be empty"); + } + + function test_allOperatorsRegistered() public { + // Register all operators + _registerOperatorKey(operator1, defaultOperatorSet, bn254G1Key1, bn254G2Key1, BN254_PRIV_KEY_1); + _registerOperatorKey(operator2, defaultOperatorSet, bn254G1Key2, bn254G2Key2, BN254_PRIV_KEY_2); + + // Set operators and weights + address[] memory operators = new address[](2); + operators[0] = operator1; + operators[1] = operator2; + + uint[][] memory weights = new uint[][](2); + weights[0] = _createSingleWeightArray(100)[0]; + weights[1] = _createSingleWeightArray(200)[0]; + + calculator.setMockOperatorWeights(defaultOperatorSet, operators, weights); + + BN254OperatorInfo[] memory infos = calculator.getOperatorInfos(defaultOperatorSet); + + assertEq(infos.length, 2, "Should have 2 operator infos"); + + // Check operator1 + assertEq(infos[0].pubkey.X, bn254G1Key1.X, "Operator1 pubkey X mismatch"); + assertEq(infos[0].pubkey.Y, bn254G1Key1.Y, "Operator1 pubkey Y mismatch"); + assertEq(infos[0].weights[0], 100, "Operator1 weight mismatch"); + + // Check operator2 + assertEq(infos[1].pubkey.X, bn254G1Key2.X, "Operator2 pubkey X mismatch"); + assertEq(infos[1].pubkey.Y, bn254G1Key2.Y, "Operator2 pubkey Y mismatch"); + assertEq(infos[1].weights[0], 200, "Operator2 weight mismatch"); + } + + function test_multipleWeightTypes() public { + // Register operator + _registerOperatorKey(operator1, defaultOperatorSet, bn254G1Key1, bn254G2Key1, BN254_PRIV_KEY_1); + + // Set operators and weights with multiple types + address[] memory operators = new address[](1); + operators[0] = operator1; + + uint[][] memory weights = new uint[][](1); + uint[] memory multiWeights = new uint[](3); + multiWeights[0] = 100; + multiWeights[1] = 200; + multiWeights[2] = 300; + weights[0] = multiWeights; + + calculator.setMockOperatorWeights(defaultOperatorSet, operators, weights); + + BN254OperatorInfo[] memory infos = calculator.getOperatorInfos(defaultOperatorSet); + + assertEq(infos.length, 1, "Should have 1 operator info"); + assertEq(infos[0].weights.length, 3, "Should have 3 weight types"); + assertEq(infos[0].weights[0], 100, "Weight[0] mismatch"); + assertEq(infos[0].weights[1], 200, "Weight[1] mismatch"); + assertEq(infos[0].weights[2], 300, "Weight[2] mismatch"); + } + + function testFuzz_getOperatorInfos(uint8 numOperators) public { + numOperators = uint8(bound(numOperators, 1, 5)); + + address[] memory operators = new address[](numOperators); + uint[][] memory weights = new uint[][](numOperators); + + // Generate operators and weights + for (uint i = 0; i < numOperators; i++) { + operators[i] = address(uint160(i + 100)); + weights[i] = _createSingleWeightArray((i + 1) * 100)[0]; + } + + // Register some operators with valid keys + if (numOperators >= 1) _registerOperatorKey(operators[0], defaultOperatorSet, bn254G1Key1, bn254G2Key1, BN254_PRIV_KEY_1); + if (numOperators >= 3) _registerOperatorKey(operators[2], defaultOperatorSet, bn254G1Key2, bn254G2Key2, BN254_PRIV_KEY_2); + + calculator.setMockOperatorWeights(defaultOperatorSet, operators, weights); + + BN254OperatorInfo[] memory infos = calculator.getOperatorInfos(defaultOperatorSet); + + assertEq(infos.length, numOperators, "Operator info count mismatch"); + + for (uint i = 0; i < numOperators; i++) { + if ((i == 0 && numOperators >= 1) || (i == 2 && numOperators >= 3)) { + // Registered operators should have weights + assertEq(infos[i].weights.length, 1, "Registered operator should have weights"); + assertEq(infos[i].weights[0], (i + 1) * 100, "Weight value mismatch"); + assertTrue(infos[i].pubkey.X != 0 || infos[i].pubkey.Y != 0, "Registered operator should have pubkey"); + } else { + // Unregistered operators should have empty weights + assertEq(infos[i].weights.length, 0, "Unregistered operator should have empty weights"); + assertEq(infos[i].pubkey.X, 0, "Unregistered operator pubkey X should be 0"); + assertEq(infos[i].pubkey.Y, 0, "Unregistered operator pubkey Y should be 0"); + } + } + } +} diff --git a/src/test/unit/BN254TableCalculatorUnit.t.sol b/src/test/unit/BN254TableCalculatorUnit.t.sol deleted file mode 100644 index 6ded7a8e2c..0000000000 --- a/src/test/unit/BN254TableCalculatorUnit.t.sol +++ /dev/null @@ -1,28 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.27; - -import "src/test/utils/EigenLayerMultichainUnitTestSetup.sol"; -import "src/contracts/multichain/BN254TableCalculator.sol"; - -contract BN254TableCalculatorUnitTests is EigenLayerMultichainUnitTestSetup { - using StdStyle for *; - using ArrayLib for *; - - /// @notice Pointers to the BN254TableCalculator and its implementation - BN254TableCalculator bn254TableCalculator; - - /// @notice The default operatorSet - OperatorSet defaultOperatorSet = OperatorSet({avs: address(this), id: 0}); - - /// @notice The default lookahead blocks for the slashable stake lookup - uint LOOKAHEAD_BLOCKS = 50; - - function setUp() public override { - EigenLayerMultichainUnitTestSetup.setUp(); - - // Deploy BN254TableCalculator (immutable, non-upgradeable) - bn254TableCalculator = new BN254TableCalculator( - IKeyRegistrar(address(keyRegistrar)), IAllocationManager(address(allocationManagerMock)), LOOKAHEAD_BLOCKS - ); - } -}