diff --git a/pkg/bindings/BN254CertificateVerifier/binding.go b/pkg/bindings/BN254CertificateVerifier/binding.go index 78761b7a01..a28138ff6b 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\":\"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\":\"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: "0x60a060405234801561000f575f5ffd5b5060405161232b38038061232b83398101604081905261002e91610105565b6001600160a01b038116608052610043610049565b50610132565b5f54610100900460ff16156100b45760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff90811614610103575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b5f60208284031215610115575f5ffd5b81516001600160a01b038116811461012b575f5ffd5b9392505050565b6080516121da6101515f395f818161013c01526103d901526121da5ff3fe608060405234801561000f575f5ffd5b506004361061009b575f3560e01c806368d6e0811161006357806368d6e081146101375780638481892014610176578063dd2ae1b914610189578063e49613fc1461019c578063eb39e68f146101bc575f5ffd5b8063017d79741461009f578063080b7150146100c75780635ddb9b5b146100e75780636141879e1461010f5780636738c40b14610122575b5f5ffd5b6100b26100ad366004611c28565b6101dc565b60405190151581526020015b60405180910390f35b6100da6100d5366004611d03565b61036d565b6040516100be9190611d4e565b6100fa6100f5366004611d85565b610382565b60405163ffffffff90911681526020016100be565b6100fa61011d366004611d85565b6103a8565b610135610130366004611db5565b6103ce565b005b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100be565b61015e610184366004611d85565b61059b565b6100b2610197366004611e79565b6105c4565b6101af6101aa366004611eec565b610657565b6040516100be9190611f61565b6101cf6101ca366004611f96565b61070f565b6040516100be919061200d565b5f5f6101e885856107d4565b90505f6101f486610994565b5f8181526004602081815260408084208a5163ffffffff16855282528084208151608081018352815481526001820154818501528251808401845260028301548152600383015481860152818401529381018054835181860281018601909452808452969750949593949093606086019383018282801561029257602002820191905f5260205f20905b81548152602001906001019080831161027e575b50505050508152505090505f8160600151905085518451146102c75760405163512509d360e11b815260040160405180910390fd5b5f5b845181101561035c575f6127108883815181106102e8576102e861201f565b602002602001015161ffff168484815181106103065761030661201f565b60200260200101516103189190612047565b6103229190612072565b9050808683815181106103375761033761201f565b60200260200101511015610353575f9650505050505050610366565b506001016102c9565b5060019450505050505b9392505050565b606061037983836107d4565b90505b92915050565b5f5f61038d83610994565b5f9081526003602052604090205463ffffffff169392505050565b5f5f6103b383610994565b5f9081526002602052604090205463ffffffff169392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104175760405163030c1b6b60e11b815260040160405180910390fd5b5f61042f61042a36879003870187611d85565b610994565b5f8181526003602052604090205490915063ffffffff9081169085161161046957604051632f20889f60e01b815260040160405180910390fd5b5f81815260046020818152604080842063ffffffff891685528252928390208651815581870151600182015592860151805160028501558101516003840155606086015180518794936104c1939085019201906115be565b5050505f818152600360209081526040909120805463ffffffff191663ffffffff87161790556104f390830183612085565b5f8281526001602090815260409182902080546001600160a01b0319166001600160a01b0394909416939093179092556105329190840190840161209e565b5f8281526002602052604090819020805463ffffffff191663ffffffff9390931692909217909155517f93e6bea1c9b5dce4a5c07b00261e956df2a4a253d9ab6ca070ca2037d72ada9e9061058c908790879087906120b7565b60405180910390a15050505050565b5f5f6105a683610994565b5f908152600160205260409020546001600160a01b03169392505050565b5f5f6105d085856107d4565b905082518151146105f45760405163512509d360e11b815260040160405180910390fd5b5f5b815181101561064b578381815181106106115761061161201f565b602002602001015182828151811061062b5761062b61201f565b60200260200101511015610643575f92505050610366565b6001016105f6565b50600195945050505050565b61065f611607565b5f61066985610994565b5f81815260056020908152604080832063ffffffff8916845282528083208784528252918290208251608081018452815481850190815260018301546060830152815260028201805485518186028101860190965280865295965090949193858401939092908301828280156106fc57602002820191905f5260205f20905b8154815260200190600101908083116106e8575b5050505050815250509150509392505050565b610717611631565b5f61072184610994565b5f81815260046020818152604080842063ffffffff89168552825292839020835160808101855281548152600182015481840152845180860186526002830154815260038301548185015281860152928101805485518185028101850190965280865295965092949093606086019390929091908301828280156107c257602002820191905f5260205f20905b8154815260200190600101908083116107ae575b50505050508152505091505092915050565b60606107de611663565b6107e784610994565b80825283516107f691906109f7565b80515f908152600460208181526040808420875163ffffffff168552825292839020835160808101855281548152600182015481840152845180860186526002830154815260038301548185015281860152928101805485518185028101850190965280865293949193606086019383018282801561089257602002820191905f5260205f20905b81548152602001906001019080831161087e575b5050509190925250505060208201819052516108c157604051630cad17b760e31b815260040160405180910390fd5b806020015160600151516001600160401b038111156108e2576108e2611791565b60405190808252806020026020018201604052801561090b578160200160208202803683370190505b5060408201525f5b8160200151606001515181101561096f57816020015160600151818151811061093e5761093e61201f565b60200260200101518260400151828151811061095c5761095c61201f565b6020908102919091010152600101610913565b5061097a8184610a49565b60608201526109898184610b73565b604001519392505050565b5f815f0151826020015163ffffffff166040516020016109df92919060609290921b6bffffffffffffffffffffffff1916825260a01b6001600160a01b031916601482015260200190565b60405160208183030381529060405261037c9061210c565b5f8281526002602052604090205463ffffffff16801580610a275750610a1d818361212f565b63ffffffff164211155b610a445760405163640fcd6b60e11b815260040160405180910390fd5b505050565b6040805180820182525f808252602091820181905282518084019093528083529082018190525b826080015151811015610b6c575f83608001518281518110610a9457610a9461201f565b60200260200101519050846020015160200151815f015163ffffffff1610610acf576040516301fa53c760e11b815260040160405180910390fd5b845184515f91610adf9184610be1565b8051909150610aef908590610d56565b93505f5b816020015151811015610b6157866040015151811015610b595781602001518181518110610b2357610b2361201f565b602002602001015187604001518281518110610b4157610b4161201f565b60200260200101818151610b55919061214b565b9052505b600101610af3565b505050600101610a70565b5092915050565b5f610b93610b848460600151610dd2565b60208501516040015190610d56565b90505f5f610baf84602001518486606001518760400151610e68565b91509150818015610bbd5750805b610bda5760405163439cc0cd60e01b815260040160405180910390fd5b5050505050565b610be9611607565b5f84815260056020908152604080832063ffffffff80881685529083528184208651909116845290915281208054909190151580610c2a5750600182015415155b905080610cd3575f610c4a8787875f015188604001518960200151610fea565b905080610c6a5760405163439cc0cd60e01b815260040160405180910390fd5b6040808601515f8981526005602090815283822063ffffffff808c1684529082528483208a5190911683528152929020815180518255830151600182015582820151805192939192610cc292600285019201906115be565b509050508460400151935050610d4d565b6040805160808101825283548183019081526001850154606083015281526002840180548351602082810282018101909552818152929386938186019390929091830182828015610d4157602002820191905f5260205f20905b815481526020019060010190808311610d2d575b50505050508152505092505b50509392505050565b604080518082019091525f8082526020820152610d716116a8565b835181526020808501518183015283516040808401919091529084015160608301525f908360808460066107d05a03fa90508080610dab57fe5b5080610dca5760405163d4b68fd760e01b815260040160405180910390fd5b505092915050565b604080518082019091525f80825260208201528151158015610df657506020820151155b15610e13575050604080518082019091525f808252602082015290565b6040518060400160405280835f015181526020015f5160206121855f395f51905f528460200151610e44919061215e565b610e5b905f5160206121855f395f51905f5261214b565b905292915050565b919050565b5f5f5f7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000187875f01518860200151885f01515f60028110610eab57610eab61201f565b60200201518951600160200201518a602001515f60028110610ecf57610ecf61201f565b60200201518b60200151600160028110610eeb57610eeb61201f565b602090810291909101518c518d830151604051610f489a99989796959401988952602089019790975260408801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200190565b604051602081830303815290604052805190602001205f1c610f6a919061215e565b9050610fdc610f83610f7c8884611055565b8690610d56565b610f8b6110bd565b610fd2610fc385610fbd6040805180820182525f80825260209182015281518083019092526001825260029082015290565b90611055565b610fcc8c61117d565b90610d56565b8862061a80611207565b909890975095505050505050565b5f5f83604051602001610ffd9190611f61565b60408051601f1981840301815291815281516020928301205f8a81526004845282812063ffffffff808c1683529452919091205490925090611049908590839085908a81169061141b16565b98975050505050505050565b604080518082019091525f80825260208201526110706116c6565b835181526020808501519082015260408082018490525f908360608460076107d05a03fa9050808061109e57fe5b5080610dca57604051632319df1960e11b815260040160405180910390fd5b6110c56116e4565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b604080518082019091525f80825260208201525f80806111aa5f5160206121855f395f51905f528661215e565b90505b6111b681611432565b90935091505f5160206121855f395f51905f5282830983036111ee576040805180820190915290815260208101919091529392505050565b5f5160206121855f395f51905f526001820890506111ad565b6040805180820182528681526020808201869052825180840190935286835282018490525f91829190611238611704565b5f5b60028110156113ef575f61124f826006612047565b90508482600281106112635761126361201f565b60200201515183611274835f612171565b600c81106112845761128461201f565b602002015284826002811061129b5761129b61201f565b602002015160200151838260016112b29190612171565b600c81106112c2576112c261201f565b60200201528382600281106112d9576112d961201f565b60200201515151836112ec836002612171565b600c81106112fc576112fc61201f565b60200201528382600281106113135761131361201f565b602002015151600160200201518361132c836003612171565b600c811061133c5761133c61201f565b60200201528382600281106113535761135361201f565b6020020151602001515f6002811061136d5761136d61201f565b60200201518361137e836004612171565b600c811061138e5761138e61201f565b60200201528382600281106113a5576113a561201f565b6020020151602001516001600281106113c0576113c061201f565b6020020151836113d1836005612171565b600c81106113e1576113e161201f565b60200201525060010161123a565b506113f8611723565b5f6020826101808560088cfa9151919c9115159b50909950505050505050505050565b5f836114288685856114ae565b1495945050505050565b5f80805f5160206121855f395f51905f5260035f5160206121855f395f51905f52865f5160206121855f395f51905f52888909090890505f6114a2827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f525f5160206121855f395f51905f52611545565b91959194509092505050565b5f602084516114bd919061215e565b156114db576040516313717da960e21b815260040160405180910390fd5b8260205b8551811161153c576114f260028561215e565b5f0361151357815f528086015160205260405f20915060028404935061152a565b808601515f528160205260405f2091506002840493505b611535602082612171565b90506114df565b50949350505050565b5f5f61154f611723565b611557611741565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa9250828061159457fe5b50826115b35760405163d51edae360e01b815260040160405180910390fd5b505195945050505050565b828054828255905f5260205f209081019282156115f7579160200282015b828111156115f75782518255916020019190600101906115dc565b5061160392915061175f565b5090565b604080516080810182525f91810182815260608201929092529081905b8152602001606081525090565b60405180608001604052805f81526020015f815260200161162460405180604001604052805f81526020015f81525090565b60405180608001604052805f815260200161167c611631565b8152602001606081526020016116a360405180604001604052805f81526020015f81525090565b905290565b60405180608001604052806004906020820280368337509192915050565b60405180606001604052806003906020820280368337509192915050565b60405180604001604052806116f7611773565b81526020016116a3611773565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b5b80821115611603575f8155600101611760565b60405180604001604052806002906020820280368337509192915050565b634e487b7160e01b5f52604160045260245ffd5b604080519081016001600160401b03811182821017156117c7576117c7611791565b60405290565b604051606081016001600160401b03811182821017156117c7576117c7611791565b60405160a081016001600160401b03811182821017156117c7576117c7611791565b604051608081016001600160401b03811182821017156117c7576117c7611791565b604051601f8201601f191681016001600160401b038111828210171561185b5761185b611791565b604052919050565b80356001600160a01b0381168114610e63575f5ffd5b803563ffffffff81168114610e63575f5ffd5b5f6040828403121561189c575f5ffd5b6118a46117a5565b90506118af82611863565b81526118bd60208301611879565b602082015292915050565b5f604082840312156118d8575f5ffd5b6118e06117a5565b823581526020928301359281019290925250919050565b5f82601f830112611906575f5ffd5b61190e6117a5565b80604084018581111561191f575f5ffd5b845b81811015611939578035845260209384019301611921565b509095945050505050565b5f6001600160401b0382111561195c5761195c611791565b5060051b60200190565b5f82601f830112611975575f5ffd5b813561198861198382611944565b611833565b8082825260208201915060208360051b8601019250858311156119a9575f5ffd5b602085015b838110156119c65780358352602092830192016119ae565b5095945050505050565b5f606082840312156119e0575f5ffd5b6119e86117a5565b90506119f483836118c8565b815260408201356001600160401b03811115611a0e575f5ffd5b611a1a84828501611966565b60208301525092915050565b5f82601f830112611a35575f5ffd5b8135611a4361198382611944565b8082825260208201915060208360051b860101925085831115611a64575f5ffd5b602085015b838110156119c65780356001600160401b03811115611a86575f5ffd5b86016060818903601f19011215611a9b575f5ffd5b611aa36117cd565b611aaf60208301611879565b815260408201356001600160401b03811115611ac9575f5ffd5b82016020810190603f018a13611add575f5ffd5b80356001600160401b03811115611af657611af6611791565b611b09601f8201601f1916602001611833565b8181528b6020838501011115611b1d575f5ffd5b816020840160208301375f6020838301015280602085015250505060608201356001600160401b03811115611b50575f5ffd5b611b5f8a6020838601016119d0565b60408301525084525060209283019201611a69565b5f818303610120811215611b86575f5ffd5b611b8e6117ef565b9150611b9983611879565b825260208381013590830152611bb284604085016118c8565b60408301526080607f1982011215611bc8575f5ffd5b50611bd16117a5565b611bde84608085016118f7565b8152611bed8460c085016118f7565b602082015260608201526101008201356001600160401b03811115611c10575f5ffd5b611c1c84828501611a26565b60808301525092915050565b5f5f5f60808486031215611c3a575f5ffd5b611c44858561188c565b925060408401356001600160401b03811115611c5e575f5ffd5b611c6a86828701611b74565b92505060608401356001600160401b03811115611c85575f5ffd5b8401601f81018613611c95575f5ffd5b8035611ca361198382611944565b8082825260208201915060208360051b850101925088831115611cc4575f5ffd5b6020840193505b82841015611cf557833561ffff81168114611ce4575f5ffd5b825260209384019390910190611ccb565b809450505050509250925092565b5f5f60608385031215611d14575f5ffd5b611d1e848461188c565b915060408301356001600160401b03811115611d38575f5ffd5b611d4485828601611b74565b9150509250929050565b602080825282518282018190525f918401906040840190835b81811015611939578351835260209384019390920191600101611d67565b5f60408284031215611d95575f5ffd5b610379838361188c565b5f60408284031215611daf575f5ffd5b50919050565b5f5f5f5f60c08587031215611dc8575f5ffd5b611dd28686611d9f565b9350611de060408601611879565b925060608501356001600160401b03811115611dfa575f5ffd5b850160a08188031215611e0b575f5ffd5b611e13611811565b8135815260208083013590820152611e2e88604084016118c8565b604082015260808201356001600160401b03811115611e4b575f5ffd5b611e5789828501611966565b6060830152509250611e6e90508660808701611d9f565b905092959194509250565b5f5f5f60808486031215611e8b575f5ffd5b611e95858561188c565b925060408401356001600160401b03811115611eaf575f5ffd5b611ebb86828701611b74565b92505060608401356001600160401b03811115611ed6575f5ffd5b611ee286828701611966565b9150509250925092565b5f5f5f60808486031215611efe575f5ffd5b611f08858561188c565b9250611f1660408501611879565b929592945050506060919091013590565b5f8151808452602084019350602083015f5b82811015611f57578151865260209586019590910190600101611f39565b5093949350505050565b60208082528251805183830152015160408201525f6020830151606080840152611f8e6080840182611f27565b949350505050565b5f5f60608385031215611fa7575f5ffd5b611fb1848461188c565b9150611fbf60408401611879565b90509250929050565b80518252602081015160208301525f6040820151611ff3604085018280518252602090810151910152565b50606082015160a06080850152611f8e60a0850182611f27565b602081525f6103796020830184611fc8565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761037c5761037c612033565b634e487b7160e01b5f52601260045260245ffd5b5f826120805761208061205e565b500490565b5f60208284031215612095575f5ffd5b61037982611863565b5f602082840312156120ae575f5ffd5b61037982611879565b6001600160a01b036120c885611863565b16815263ffffffff6120dc60208601611879565b16602082015263ffffffff83166040820152608060608201525f6121036080830184611fc8565b95945050505050565b80516020808301519190811015611daf575f1960209190910360031b1b16919050565b63ffffffff818116838216019081111561037c5761037c612033565b8181038181111561037c5761037c612033565b5f8261216c5761216c61205e565b500690565b8082018082111561037c5761037c61203356fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47a2646970667358221220ce0bdb23d0e647954f8b7d7335bd315ee9ff0c41c13e24612c1f881d59850fd264736f6c634300081b0033", + Bin: "0x60a060405234801561000f575f5ffd5b5060405161232b38038061232b83398101604081905261002e91610105565b6001600160a01b038116608052610043610049565b50610132565b5f54610100900460ff16156100b45760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff90811614610103575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b5f60208284031215610115575f5ffd5b81516001600160a01b038116811461012b575f5ffd5b9392505050565b6080516121da6101515f395f818161013c01526103d901526121da5ff3fe608060405234801561000f575f5ffd5b506004361061009b575f3560e01c806368d6e0811161006357806368d6e081146101375780638481892014610176578063dd2ae1b914610189578063e49613fc1461019c578063eb39e68f146101bc575f5ffd5b8063017d79741461009f578063080b7150146100c75780635ddb9b5b146100e75780636141879e1461010f5780636738c40b14610122575b5f5ffd5b6100b26100ad366004611c28565b6101dc565b60405190151581526020015b60405180910390f35b6100da6100d5366004611d03565b61036d565b6040516100be9190611d4e565b6100fa6100f5366004611d85565b610382565b60405163ffffffff90911681526020016100be565b6100fa61011d366004611d85565b6103a8565b610135610130366004611db5565b6103ce565b005b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100be565b61015e610184366004611d85565b61059b565b6100b2610197366004611e79565b6105c4565b6101af6101aa366004611eec565b610657565b6040516100be9190611f61565b6101cf6101ca366004611f96565b61070f565b6040516100be919061200d565b5f5f6101e885856107d4565b90505f6101f486610994565b5f8181526004602081815260408084208a5163ffffffff16855282528084208151608081018352815481526001820154818501528251808401845260028301548152600383015481860152818401529381018054835181860281018601909452808452969750949593949093606086019383018282801561029257602002820191905f5260205f20905b81548152602001906001019080831161027e575b50505050508152505090505f8160600151905085518451146102c75760405163512509d360e11b815260040160405180910390fd5b5f5b845181101561035c575f6127108883815181106102e8576102e861201f565b602002602001015161ffff168484815181106103065761030661201f565b60200260200101516103189190612047565b6103229190612072565b9050808683815181106103375761033761201f565b60200260200101511015610353575f9650505050505050610366565b506001016102c9565b5060019450505050505b9392505050565b606061037983836107d4565b90505b92915050565b5f5f61038d83610994565b5f9081526003602052604090205463ffffffff169392505050565b5f5f6103b383610994565b5f9081526002602052604090205463ffffffff169392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104175760405163030c1b6b60e11b815260040160405180910390fd5b5f61042f61042a36879003870187611d85565b610994565b5f8181526003602052604090205490915063ffffffff9081169085161161046957604051632f20889f60e01b815260040160405180910390fd5b5f81815260046020818152604080842063ffffffff891685528252928390208651815581870151600182015592860151805160028501558101516003840155606086015180518794936104c1939085019201906115be565b5050505f818152600360209081526040909120805463ffffffff191663ffffffff87161790556104f390830183612085565b5f8281526001602090815260409182902080546001600160a01b0319166001600160a01b0394909416939093179092556105329190840190840161209e565b5f8281526002602052604090819020805463ffffffff191663ffffffff9390931692909217909155517f93e6bea1c9b5dce4a5c07b00261e956df2a4a253d9ab6ca070ca2037d72ada9e9061058c908790879087906120b7565b60405180910390a15050505050565b5f5f6105a683610994565b5f908152600160205260409020546001600160a01b03169392505050565b5f5f6105d085856107d4565b905082518151146105f45760405163512509d360e11b815260040160405180910390fd5b5f5b815181101561064b578381815181106106115761061161201f565b602002602001015182828151811061062b5761062b61201f565b60200260200101511015610643575f92505050610366565b6001016105f6565b50600195945050505050565b61065f611607565b5f61066985610994565b5f81815260056020908152604080832063ffffffff8916845282528083208784528252918290208251608081018452815481850190815260018301546060830152815260028201805485518186028101860190965280865295965090949193858401939092908301828280156106fc57602002820191905f5260205f20905b8154815260200190600101908083116106e8575b5050505050815250509150509392505050565b610717611631565b5f61072184610994565b5f81815260046020818152604080842063ffffffff89168552825292839020835160808101855281548152600182015481840152845180860186526002830154815260038301548185015281860152928101805485518185028101850190965280865295965092949093606086019390929091908301828280156107c257602002820191905f5260205f20905b8154815260200190600101908083116107ae575b50505050508152505091505092915050565b60606107de611663565b6107e784610994565b80825283516107f691906109f7565b80515f908152600460208181526040808420875163ffffffff168552825292839020835160808101855281548152600182015481840152845180860186526002830154815260038301548185015281860152928101805485518185028101850190965280865293949193606086019383018282801561089257602002820191905f5260205f20905b81548152602001906001019080831161087e575b5050509190925250505060208201819052516108c157604051630cad17b760e31b815260040160405180910390fd5b806020015160600151516001600160401b038111156108e2576108e2611791565b60405190808252806020026020018201604052801561090b578160200160208202803683370190505b5060408201525f5b8160200151606001515181101561096f57816020015160600151818151811061093e5761093e61201f565b60200260200101518260400151828151811061095c5761095c61201f565b6020908102919091010152600101610913565b5061097a8184610a49565b60608201526109898184610b73565b604001519392505050565b5f815f0151826020015163ffffffff166040516020016109df92919060609290921b6bffffffffffffffffffffffff1916825260a01b6001600160a01b031916601482015260200190565b60405160208183030381529060405261037c9061210c565b5f8281526002602052604090205463ffffffff16801580610a275750610a1d818361212f565b63ffffffff164211155b610a445760405163640fcd6b60e11b815260040160405180910390fd5b505050565b6040805180820182525f808252602091820181905282518084019093528083529082018190525b826080015151811015610b6c575f83608001518281518110610a9457610a9461201f565b60200260200101519050846020015160200151815f015163ffffffff1610610acf576040516301fa53c760e11b815260040160405180910390fd5b845184515f91610adf9184610be1565b8051909150610aef908590610d56565b93505f5b816020015151811015610b6157866040015151811015610b595781602001518181518110610b2357610b2361201f565b602002602001015187604001518281518110610b4157610b4161201f565b60200260200101818151610b55919061214b565b9052505b600101610af3565b505050600101610a70565b5092915050565b5f610b93610b848460600151610dd2565b60208501516040015190610d56565b90505f5f610baf84602001518486606001518760400151610e68565b91509150818015610bbd5750805b610bda5760405163439cc0cd60e01b815260040160405180910390fd5b5050505050565b610be9611607565b5f84815260056020908152604080832063ffffffff80881685529083528184208651909116845290915281208054909190151580610c2a5750600182015415155b905080610cd3575f610c4a8787875f015188604001518960200151610fea565b905080610c6a5760405163439cc0cd60e01b815260040160405180910390fd5b6040808601515f8981526005602090815283822063ffffffff808c1684529082528483208a5190911683528152929020815180518255830151600182015582820151805192939192610cc292600285019201906115be565b509050508460400151935050610d4d565b6040805160808101825283548183019081526001850154606083015281526002840180548351602082810282018101909552818152929386938186019390929091830182828015610d4157602002820191905f5260205f20905b815481526020019060010190808311610d2d575b50505050508152505092505b50509392505050565b604080518082019091525f8082526020820152610d716116a8565b835181526020808501518183015283516040808401919091529084015160608301525f908360808460066107d05a03fa90508080610dab57fe5b5080610dca5760405163d4b68fd760e01b815260040160405180910390fd5b505092915050565b604080518082019091525f80825260208201528151158015610df657506020820151155b15610e13575050604080518082019091525f808252602082015290565b6040518060400160405280835f015181526020015f5160206121855f395f51905f528460200151610e44919061215e565b610e5b905f5160206121855f395f51905f5261214b565b905292915050565b919050565b5f5f5f7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000187875f01518860200151885f01515f60028110610eab57610eab61201f565b60200201518951600160200201518a602001515f60028110610ecf57610ecf61201f565b60200201518b60200151600160028110610eeb57610eeb61201f565b602090810291909101518c518d830151604051610f489a99989796959401988952602089019790975260408801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200190565b604051602081830303815290604052805190602001205f1c610f6a919061215e565b9050610fdc610f83610f7c8884611055565b8690610d56565b610f8b6110bd565b610fd2610fc385610fbd6040805180820182525f80825260209182015281518083019092526001825260029082015290565b90611055565b610fcc8c61117d565b90610d56565b8862061a80611207565b909890975095505050505050565b5f5f83604051602001610ffd9190611f61565b60408051601f1981840301815291815281516020928301205f8a81526004845282812063ffffffff808c1683529452919091205490925090611049908590839085908a81169061141b16565b98975050505050505050565b604080518082019091525f80825260208201526110706116c6565b835181526020808501519082015260408082018490525f908360608460076107d05a03fa9050808061109e57fe5b5080610dca57604051632319df1960e11b815260040160405180910390fd5b6110c56116e4565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b604080518082019091525f80825260208201525f80806111aa5f5160206121855f395f51905f528661215e565b90505b6111b681611432565b90935091505f5160206121855f395f51905f5282830983036111ee576040805180820190915290815260208101919091529392505050565b5f5160206121855f395f51905f526001820890506111ad565b6040805180820182528681526020808201869052825180840190935286835282018490525f91829190611238611704565b5f5b60028110156113ef575f61124f826006612047565b90508482600281106112635761126361201f565b60200201515183611274835f612171565b600c81106112845761128461201f565b602002015284826002811061129b5761129b61201f565b602002015160200151838260016112b29190612171565b600c81106112c2576112c261201f565b60200201528382600281106112d9576112d961201f565b60200201515151836112ec836002612171565b600c81106112fc576112fc61201f565b60200201528382600281106113135761131361201f565b602002015151600160200201518361132c836003612171565b600c811061133c5761133c61201f565b60200201528382600281106113535761135361201f565b6020020151602001515f6002811061136d5761136d61201f565b60200201518361137e836004612171565b600c811061138e5761138e61201f565b60200201528382600281106113a5576113a561201f565b6020020151602001516001600281106113c0576113c061201f565b6020020151836113d1836005612171565b600c81106113e1576113e161201f565b60200201525060010161123a565b506113f8611723565b5f6020826101808560088cfa9151919c9115159b50909950505050505050505050565b5f836114288685856114ae565b1495945050505050565b5f80805f5160206121855f395f51905f5260035f5160206121855f395f51905f52865f5160206121855f395f51905f52888909090890505f6114a2827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f525f5160206121855f395f51905f52611545565b91959194509092505050565b5f602084516114bd919061215e565b156114db576040516313717da960e21b815260040160405180910390fd5b8260205b8551811161153c576114f260028561215e565b5f0361151357815f528086015160205260405f20915060028404935061152a565b808601515f528160205260405f2091506002840493505b611535602082612171565b90506114df565b50949350505050565b5f5f61154f611723565b611557611741565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa9250828061159457fe5b50826115b35760405163d51edae360e01b815260040160405180910390fd5b505195945050505050565b828054828255905f5260205f209081019282156115f7579160200282015b828111156115f75782518255916020019190600101906115dc565b5061160392915061175f565b5090565b604080516080810182525f91810182815260608201929092529081905b8152602001606081525090565b60405180608001604052805f81526020015f815260200161162460405180604001604052805f81526020015f81525090565b60405180608001604052805f815260200161167c611631565b8152602001606081526020016116a360405180604001604052805f81526020015f81525090565b905290565b60405180608001604052806004906020820280368337509192915050565b60405180606001604052806003906020820280368337509192915050565b60405180604001604052806116f7611773565b81526020016116a3611773565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b5b80821115611603575f8155600101611760565b60405180604001604052806002906020820280368337509192915050565b634e487b7160e01b5f52604160045260245ffd5b604080519081016001600160401b03811182821017156117c7576117c7611791565b60405290565b604051606081016001600160401b03811182821017156117c7576117c7611791565b60405160a081016001600160401b03811182821017156117c7576117c7611791565b604051608081016001600160401b03811182821017156117c7576117c7611791565b604051601f8201601f191681016001600160401b038111828210171561185b5761185b611791565b604052919050565b80356001600160a01b0381168114610e63575f5ffd5b803563ffffffff81168114610e63575f5ffd5b5f6040828403121561189c575f5ffd5b6118a46117a5565b90506118af82611863565b81526118bd60208301611879565b602082015292915050565b5f604082840312156118d8575f5ffd5b6118e06117a5565b823581526020928301359281019290925250919050565b5f82601f830112611906575f5ffd5b61190e6117a5565b80604084018581111561191f575f5ffd5b845b81811015611939578035845260209384019301611921565b509095945050505050565b5f6001600160401b0382111561195c5761195c611791565b5060051b60200190565b5f82601f830112611975575f5ffd5b813561198861198382611944565b611833565b8082825260208201915060208360051b8601019250858311156119a9575f5ffd5b602085015b838110156119c65780358352602092830192016119ae565b5095945050505050565b5f606082840312156119e0575f5ffd5b6119e86117a5565b90506119f483836118c8565b815260408201356001600160401b03811115611a0e575f5ffd5b611a1a84828501611966565b60208301525092915050565b5f82601f830112611a35575f5ffd5b8135611a4361198382611944565b8082825260208201915060208360051b860101925085831115611a64575f5ffd5b602085015b838110156119c65780356001600160401b03811115611a86575f5ffd5b86016060818903601f19011215611a9b575f5ffd5b611aa36117cd565b611aaf60208301611879565b815260408201356001600160401b03811115611ac9575f5ffd5b82016020810190603f018a13611add575f5ffd5b80356001600160401b03811115611af657611af6611791565b611b09601f8201601f1916602001611833565b8181528b6020838501011115611b1d575f5ffd5b816020840160208301375f6020838301015280602085015250505060608201356001600160401b03811115611b50575f5ffd5b611b5f8a6020838601016119d0565b60408301525084525060209283019201611a69565b5f818303610120811215611b86575f5ffd5b611b8e6117ef565b9150611b9983611879565b825260208381013590830152611bb284604085016118c8565b60408301526080607f1982011215611bc8575f5ffd5b50611bd16117a5565b611bde84608085016118f7565b8152611bed8460c085016118f7565b602082015260608201526101008201356001600160401b03811115611c10575f5ffd5b611c1c84828501611a26565b60808301525092915050565b5f5f5f60808486031215611c3a575f5ffd5b611c44858561188c565b925060408401356001600160401b03811115611c5e575f5ffd5b611c6a86828701611b74565b92505060608401356001600160401b03811115611c85575f5ffd5b8401601f81018613611c95575f5ffd5b8035611ca361198382611944565b8082825260208201915060208360051b850101925088831115611cc4575f5ffd5b6020840193505b82841015611cf557833561ffff81168114611ce4575f5ffd5b825260209384019390910190611ccb565b809450505050509250925092565b5f5f60608385031215611d14575f5ffd5b611d1e848461188c565b915060408301356001600160401b03811115611d38575f5ffd5b611d4485828601611b74565b9150509250929050565b602080825282518282018190525f918401906040840190835b81811015611939578351835260209384019390920191600101611d67565b5f60408284031215611d95575f5ffd5b610379838361188c565b5f60408284031215611daf575f5ffd5b50919050565b5f5f5f5f60c08587031215611dc8575f5ffd5b611dd28686611d9f565b9350611de060408601611879565b925060608501356001600160401b03811115611dfa575f5ffd5b850160a08188031215611e0b575f5ffd5b611e13611811565b8135815260208083013590820152611e2e88604084016118c8565b604082015260808201356001600160401b03811115611e4b575f5ffd5b611e5789828501611966565b6060830152509250611e6e90508660808701611d9f565b905092959194509250565b5f5f5f60808486031215611e8b575f5ffd5b611e95858561188c565b925060408401356001600160401b03811115611eaf575f5ffd5b611ebb86828701611b74565b92505060608401356001600160401b03811115611ed6575f5ffd5b611ee286828701611966565b9150509250925092565b5f5f5f60808486031215611efe575f5ffd5b611f08858561188c565b9250611f1660408501611879565b929592945050506060919091013590565b5f8151808452602084019350602083015f5b82811015611f57578151865260209586019590910190600101611f39565b5093949350505050565b60208082528251805183830152015160408201525f6020830151606080840152611f8e6080840182611f27565b949350505050565b5f5f60608385031215611fa7575f5ffd5b611fb1848461188c565b9150611fbf60408401611879565b90509250929050565b80518252602081015160208301525f6040820151611ff3604085018280518252602090810151910152565b50606082015160a06080850152611f8e60a0850182611f27565b602081525f6103796020830184611fc8565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761037c5761037c612033565b634e487b7160e01b5f52601260045260245ffd5b5f826120805761208061205e565b500490565b5f60208284031215612095575f5ffd5b61037982611863565b5f602082840312156120ae575f5ffd5b61037982611879565b6001600160a01b036120c885611863565b16815263ffffffff6120dc60208601611879565b16602082015263ffffffff83166040820152608060608201525f6121036080830184611fc8565b95945050505050565b80516020808301519190811015611daf575f1960209190910360031b1b16919050565b63ffffffff818116838216019081111561037c5761037c612033565b8181038181111561037c5761037c612033565b5f8261216c5761216c61205e565b500690565b8082018082111561037c5761037c61203356fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47a2646970667358221220f6c03ec5f38d3ed4d9f0182a0319f0502da0f9e64a11006556a88af8f5d797f164736f6c634300081b0033", } // BN254CertificateVerifierABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/IOperatorTableUpdater/binding.go b/pkg/bindings/IOperatorTableUpdater/binding.go index edecee7c77..314cb1bfb4 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\"}],\"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\":\"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\":\"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\":\"InvalidOperatorSetProof\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TableRootNotInCertificate\",\"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\"}],\"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\":\"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\":\"getLatestReferenceTimestamp\",\"inputs\":[],\"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\":\"InvalidOperatorSetProof\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TableRootNotInCertificate\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TableUpdateForPastTimestamp\",\"inputs\":[]}]", } // IOperatorTableUpdaterABI is the input ABI used to generate the binding from. @@ -344,6 +344,37 @@ func (_IOperatorTableUpdater *IOperatorTableUpdaterCallerSession) GetGlobalTable return _IOperatorTableUpdater.Contract.GetGlobalTableRootByTimestamp(&_IOperatorTableUpdater.CallOpts, referenceTimestamp) } +// GetLatestReferenceTimestamp is a free data retrieval call binding the contract method 0x4624e6a3. +// +// Solidity: function getLatestReferenceTimestamp() view returns(uint32) +func (_IOperatorTableUpdater *IOperatorTableUpdaterCaller) GetLatestReferenceTimestamp(opts *bind.CallOpts) (uint32, error) { + var out []interface{} + err := _IOperatorTableUpdater.contract.Call(opts, &out, "getLatestReferenceTimestamp") + + if err != nil { + return *new(uint32), err + } + + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + + return out0, err + +} + +// GetLatestReferenceTimestamp is a free data retrieval call binding the contract method 0x4624e6a3. +// +// Solidity: function getLatestReferenceTimestamp() view returns(uint32) +func (_IOperatorTableUpdater *IOperatorTableUpdaterSession) GetLatestReferenceTimestamp() (uint32, error) { + return _IOperatorTableUpdater.Contract.GetLatestReferenceTimestamp(&_IOperatorTableUpdater.CallOpts) +} + +// GetLatestReferenceTimestamp is a free data retrieval call binding the contract method 0x4624e6a3. +// +// Solidity: function getLatestReferenceTimestamp() view returns(uint32) +func (_IOperatorTableUpdater *IOperatorTableUpdaterCallerSession) GetLatestReferenceTimestamp() (uint32, error) { + return _IOperatorTableUpdater.Contract.GetLatestReferenceTimestamp(&_IOperatorTableUpdater.CallOpts) +} + // ConfirmGlobalTableRoot is a paid mutator transaction binding the contract method 0x6ab40904. // // Solidity: function confirmGlobalTableRoot((uint32,bytes32,(uint256,uint256),(uint256[2],uint256[2]),(uint32,bytes,((uint256,uint256),uint256[]))[]) globalTableRootCert, bytes32 globalTableRoot, uint32 referenceTimestamp) returns() diff --git a/pkg/bindings/OperatorTableUpdater/binding.go b/pkg/bindings/OperatorTableUpdater/binding.go index 3fd2b47c38..db4a976a27 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\":\"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\"}],\"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\":\"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\":\"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\":\"latestReferenceTimestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"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\":\"InvalidOperatorSetProof\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidProofLength\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidShortString\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StringTooLong\",\"inputs\":[{\"name\":\"str\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"type\":\"error\",\"name\":\"TableRootNotInCertificate\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TableUpdateForPastTimestamp\",\"inputs\":[]}]", - Bin: "0x60e060405234801561000f575f5ffd5b50604051611db0380380611db083398101604081905261002e91610188565b6001600160a01b03808416608052821660a0528061004b8161005f565b60c052506100576100a5565b5050506102b9565b5f5f829050601f81511115610092578260405163305a27a960e01b8152600401610089919061025e565b60405180910390fd5b805161009d82610293565b179392505050565b5f54610100900460ff161561010c5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b6064820152608401610089565b5f5460ff9081161461015b575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b0381168114610171575f5ffd5b50565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f6060848603121561019a575f5ffd5b83516101a58161015d565b60208501519093506101b68161015d565b60408501519092506001600160401b038111156101d1575f5ffd5b8401601f810186136101e1575f5ffd5b80516001600160401b038111156101fa576101fa610174565b604051601f8201601f19908116603f011681016001600160401b038111828210171561022857610228610174565b60405281815282820160200188101561023f575f5ffd5b8160208401602083015e5f602083830101528093505050509250925092565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b805160208083015191908110156102b3575f198160200360031b1b821691505b50919050565b60805160a05160c051611aa361030d5f395f6104f701525f81816102780152818161075b015261094801525f818161029f01528181610415015281816106030152818161071b01526108a20152611aa35ff3fe608060405234801561000f575f5ffd5b5060043610610111575f3560e01c80638da5cb5b1161009e578063b8c143061161006e578063b8c143061461029a578063c252aa22146102c1578063c5916a39146102e2578063f2fde38b14610307578063fd967f471461031a575f5ffd5b80638da5cb5b146102245780639ea9477814610235578063a6ff593614610248578063ad0f958214610273575f5ffd5b806346282889116100e4578063462828891461018157806354fd4d50146101c95780636ab40904146101de5780636f728c50146101f1578063715018a61461021c575f5ffd5b8063021ab442146101155780630371406e1461012a5780632370356c1461013d57806328522d7914610150575b5f5ffd5b610128610123366004610e32565b610323565b005b610128610138366004610ec6565b6104cb565b61012861014b366004610ee7565b6104df565b60655462010000900463ffffffff165f908152606760205260409020545b6040519081526020015b60405180910390f35b6040805180820182525f80825260209182015281518083019092526066546001600160a01b0381168352600160a01b900463ffffffff16908201526040516101789190610f1e565b6101d16104f0565b6040516101789190610f2c565b6101286101ec366004610f61565b610520565b6102046101ff366004610fca565b6106fe565b6040516001600160a01b039091168152602001610178565b61012861079d565b6033546001600160a01b0316610204565b610128610243366004611027565b6107b0565b60655461025e9062010000900463ffffffff1681565b60405163ffffffff9091168152602001610178565b6102047f000000000000000000000000000000000000000000000000000000000000000081565b6102047f000000000000000000000000000000000000000000000000000000000000000081565b6065546102cf9061ffff1681565b60405161ffff9091168152602001610178565b61016e6102f03660046110c2565b63ffffffff165f9081526067602052604090205490565b6101286103153660046110dd565b6109ad565b6102cf61271081565b5f54610100900460ff161580801561034157505f54600160ff909116105b8061035a5750303b15801561035a57505f5460ff166001145b6103c25760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff1916600117905580156103e3575f805461ff0019166101001790555b6103ec87610a1f565b6103f586610a70565b6103fe85610aba565b604051636738c40b60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636738c40b906104509089908890889088906004016111a1565b5f604051808303815f87803b158015610467575f5ffd5b505af1158015610479573d5f5f3e3d5ffd5b5050505080156104c2575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b6104d3610b25565b6104dc81610a70565b50565b6104e7610b25565b6104dc81610aba565b606061051b7f0000000000000000000000000000000000000000000000000000000000000000610b7f565b905090565b428163ffffffff16111561054757604051635a119db560e11b815260040160405180910390fd5b60655463ffffffff620100009091048116908216116105795760405163037fa86b60e31b815260040160405180910390fd5b8260200135821461059d5760405163327f9d0760e21b815260040160405180910390fd5b6040805160018082528183019092525f91602080830190803683375050606554825192935061ffff16918391505f906105d8576105d861123e565b61ffff90921660209283029190910190910152604051625f5e5d60e21b81525f906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063017d79749061063d9060669089908790600401611306565b6020604051808303815f875af1158015610659573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061067d9190611482565b90508061069d57604051633042041f60e21b815260040160405180910390fd5b6065805465ffffffff000019166201000063ffffffff8616908102919091179091555f81815260676020526040808220879055518692917f010dcbe0d1e019c93357711f7bb6287d543b7ff7de74f29df3fb5ecceec8d36991a35050505050565b5f6002826002811115610713576107136114a1565b0361073f57507f0000000000000000000000000000000000000000000000000000000000000000919050565b6001826002811115610753576107536114a1565b0361077f57507f0000000000000000000000000000000000000000000000000000000000000000919050565b60405163fdea7c0960e01b815260040160405180910390fd5b919050565b6107a5610b25565b6107ae5f610a1f565b565b5f5f5f6107bd8585610bbc565b9250925092506107cc826106fe565b6001600160a01b0316635ddb9b5b846040518263ffffffff1660e01b81526004016107f79190610f1e565b6020604051808303815f875af1158015610813573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061083791906114b5565b63ffffffff168a63ffffffff16116108625760405163207617df60e01b815260040160405180910390fd5b6108878a8a8a8a8a8a8a60405161087a9291906114d0565b6040518091039020610bff565b600282600281111561089b5761089b6114a1565b0361092d577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636738c40b848c6108db8989610ca0565b856040518563ffffffff1660e01b81526004016108fb949392919061150f565b5f604051808303815f87803b158015610912575f5ffd5b505af1158015610924573d5f5f3e3d5ffd5b505050506109a1565b6001826002811115610941576109416114a1565b0361077f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166356d482f5848c6109818989610cbe565b856040518563ffffffff1660e01b81526004016108fb9493929190611582565b50505050505050505050565b6109b5610b25565b6001600160a01b038116610a1a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103b9565b6104dc815b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b806066610a7d8282611627565b9050507f20100394950e66014c25009b45d12b675210a6e7a002044a0e3de6544e3c4b3781604051610aaf9190611683565b60405180910390a150565b61271061ffff82161115610ae1576040516307336f0360e11b815260040160405180910390fd5b6065805461ffff191661ffff83169081179091556040519081527ff5d1836df8fcd7c1e54047e94ac8773d2855395603e2ef9ba5f5f16905f2259290602001610aaf565b6033546001600160a01b031633146107ae5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103b9565b60605f610b8b83610ccc565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b604080518082019091525f8082526020820152604080518082019091525f8082526020820181905290610bf18486018661174b565b919790965090945092505050565b63ffffffff86165f908152606760205260409020548514610c335760405163639d09b560e11b815260040160405180910390fd5b610c7b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508992508591505063ffffffff8816610cf9565b610c985760405163afa42ca760e01b815260040160405180910390fd5b505050505050565b610ca8610da7565b610cb482840184611819565b9695505050505050565b6060610cb4828401846118fb565b5f60ff8216601f811115610cf357604051632cd44ac360e21b815260040160405180910390fd5b92915050565b5f83610d06868585610d10565b1495945050505050565b5f60208451610d1f9190611a2f565b15610d3d576040516313717da960e21b815260040160405180910390fd5b8260205b85518111610d9e57610d54600285611a2f565b5f03610d7557815f528086015160205260405f209150600284049350610d8c565b808601515f528160205260405f2091506002840493505b610d97602082611a4e565b9050610d41565b50949350505050565b60405180608001604052805f81526020015f8152602001610dd960405180604001604052805f81526020015f81525090565b8152602001606081525090565b6001600160a01b03811681146104dc575f5ffd5b5f60408284031215610e0a575f5ffd5b50919050565b803561ffff81168114610798575f5ffd5b63ffffffff811681146104dc575f5ffd5b5f5f5f5f5f5f6101008789031215610e48575f5ffd5b8635610e5381610de6565b9550610e628860208901610dfa565b9450610e7060608801610e10565b93506080870135610e8081610e21565b925060a08701356001600160401b03811115610e9a575f5ffd5b870160a0818a031215610eab575f5ffd5b9150610eba8860c08901610dfa565b90509295509295509295565b5f60408284031215610ed6575f5ffd5b610ee08383610dfa565b9392505050565b5f60208284031215610ef7575f5ffd5b610ee082610e10565b80516001600160a01b0316825260209081015163ffffffff16910152565b60408101610cf38284610f00565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f5f5f60608486031215610f73575f5ffd5b83356001600160401b03811115610f88575f5ffd5b84016101208187031215610f9a575f5ffd5b9250602084013591506040840135610fb181610e21565b809150509250925092565b803560038110610798575f5ffd5b5f60208284031215610fda575f5ffd5b610ee082610fbc565b5f5f83601f840112610ff3575f5ffd5b5081356001600160401b03811115611009575f5ffd5b602083019150836020828501011115611020575f5ffd5b9250929050565b5f5f5f5f5f5f5f60a0888a03121561103d575f5ffd5b873561104881610e21565b965060208801359550604088013561105f81610e21565b945060608801356001600160401b03811115611079575f5ffd5b6110858a828b01610fe3565b90955093505060808801356001600160401b038111156110a3575f5ffd5b6110af8a828b01610fe3565b989b979a50959850939692959293505050565b5f602082840312156110d2575f5ffd5b8135610ee081610e21565b5f602082840312156110ed575f5ffd5b8135610ee081610de6565b803561110381610de6565b6001600160a01b03168252602081013561111c81610e21565b63ffffffff81166020840152505050565b5f5f8335601e19843603018112611142575f5ffd5b83016020810192503590506001600160401b03811115611160575f5ffd5b8060051b3603821315611020575f5ffd5b8183525f6001600160fb1b03831115611188575f5ffd5b8260051b80836020870137939093016020019392505050565b6111ab81866110f8565b63ffffffff841660408281019190915260c06060808401829052853591840191909152602085013560e0840152908401356101008301528301356101208201525f6111f9608085018561112d565b60a061014085015261121061016085018284611171565b9250505061122160808301846110f8565b95945050505050565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8235605e1983360301811261128e575f5ffd5b90910192915050565b80358252602080820135908301525f6112b3604083018361112d565b60606040860152611221606086018284611171565b5f8151808452602084019350602083015f5b828110156112fc57815161ffff168652602095860195909101906001016112da565b5093949350505050565b83546001600160a01b038116825260a01c63ffffffff166020820152608060408201525f6101a08201843561133a81610e21565b63ffffffff166080840152602085013560a0840152604085013560c0840152606085013560e0840152604060808601610100850137604060c0860161014085013761138961010086018661112d565b610120610180860152828184526101c0860190506101c08260051b8701019350825f5b8381101561146b578786036101bf190183526113c8828661127a565b80356113d381610e21565b63ffffffff168752602081013536829003601e190181126113f2575f5ffd5b81016020810190356001600160401b0381111561140d575f5ffd5b80360382131561141b575f5ffd5b606060208a015261143060608a018284611252565b915050611440604083018361127a565b915087810360408901526114548183611297565b9750505060209283019291909101906001016113ac565b50505050508281036060840152610cb481856112c8565b5f60208284031215611492575f5ffd5b81518015158114610ee0575f5ffd5b634e487b7160e01b5f52602160045260245ffd5b5f602082840312156114c5575f5ffd5b8151610ee081610e21565b818382375f9101908152919050565b5f8151808452602084019350602083015f5b828110156112fc5781518652602095860195909101906001016114f1565b6115198186610f00565b63ffffffff8416604082015260c06060820152825160c0820152602083015160e08201525f60408401518051610100840152602081015161012084015250606084015160a06101408401526115726101608401826114df565b9150506112216080830184610f00565b5f60c082016115918388610f00565b63ffffffff8616604084015260c0606084015280855180835260e08501915060e08160051b8601019250602087015f5b828110156116125786850360df19018452815180516001600160a01b031686526020908101516040918701829052906115fc908701826114df565b95505060209384019391909101906001016115c1565b50505050809150506112216080830184610f00565b813561163281610de6565b81546001600160a01b031981166001600160a01b03929092169182178355602084013561165e81610e21565b6001600160c01b03199190911690911760a09190911b63ffffffff60a01b1617905550565b60408101610cf382846110f8565b604080519081016001600160401b03811182821017156116b3576116b361122a565b60405290565b604051608081016001600160401b03811182821017156116b3576116b361122a565b604051601f8201601f191681016001600160401b03811182821017156117035761170361122a565b604052919050565b5f6040828403121561171b575f5ffd5b611723611691565b9050813561173081610de6565b8152602082013561174081610e21565b602082015292915050565b5f5f5f60a0848603121561175d575f5ffd5b611767858561170b565b925061177560408501610fbc565b9150611784856060860161170b565b90509250925092565b5f6001600160401b038211156117a5576117a561122a565b5060051b60200190565b5f82601f8301126117be575f5ffd5b81356117d16117cc8261178d565b6116db565b8082825260208201915060208360051b8601019250858311156117f2575f5ffd5b602085015b8381101561180f5780358352602092830192016117f7565b5095945050505050565b5f5f5f5f60c0858703121561182c575f5ffd5b611836868661170b565b935061184460408601610fbc565b9250611853866060870161170b565b915060a08501356001600160401b0381111561186d575f5ffd5b850180870360a081121561187f575f5ffd5b6118876116b9565b82358152602080840135908201526040603f19830112156118a6575f5ffd5b6118ae611691565b604084810135825260608501356020830152820152608083013591506001600160401b038211156118dd575f5ffd5b6118e9898385016117af565b60608201529598949750929550505050565b5f5f5f5f60c0858703121561190e575f5ffd5b611918868661170b565b935061192660408601610fbc565b9250611935866060870161170b565b915060a08501356001600160401b0381111561194f575f5ffd5b8501601f8101871361195f575f5ffd5b803561196d6117cc8261178d565b8082825260208201915060208360051b85010192508983111561198e575f5ffd5b602084015b83811015611a205780356001600160401b038111156119b0575f5ffd5b85016040818d03601f190112156119c5575f5ffd5b6119cd611691565b60208201356119db81610de6565b815260408201356001600160401b038111156119f5575f5ffd5b611a048e6020838601016117af565b6020830152508085525050602083019250602081019050611993565b50969995985093965050505050565b5f82611a4957634e487b7160e01b5f52601260045260245ffd5b500690565b80820180821115610cf357634e487b7160e01b5f52601160045260245ffdfea264697066735822122096b48a8e0583fdc110a186875764082d56a1f9dfe4b4bf6ced87f12458f5782d64736f6c634300081b0033", + 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\":\"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\"}],\"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\":\"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\":\"getLatestReferenceTimestamp\",\"inputs\":[],\"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\":\"InvalidOperatorSetProof\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidProofLength\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidShortString\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StringTooLong\",\"inputs\":[{\"name\":\"str\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"type\":\"error\",\"name\":\"TableRootNotInCertificate\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TableUpdateForPastTimestamp\",\"inputs\":[]}]", + Bin: "0x60e060405234801561000f575f5ffd5b50604051611dc5380380611dc583398101604081905261002e91610188565b6001600160a01b03808416608052821660a0528061004b8161005f565b60c052506100576100a5565b5050506102b9565b5f5f829050601f81511115610092578260405163305a27a960e01b8152600401610089919061025e565b60405180910390fd5b805161009d82610293565b179392505050565b5f54610100900460ff161561010c5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b6064820152608401610089565b5f5460ff9081161461015b575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b0381168114610171575f5ffd5b50565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f6060848603121561019a575f5ffd5b83516101a58161015d565b60208501519093506101b68161015d565b60408501519092506001600160401b038111156101d1575f5ffd5b8401601f810186136101e1575f5ffd5b80516001600160401b038111156101fa576101fa610174565b604051601f8201601f19908116603f011681016001600160401b038111828210171561022857610228610174565b60405281815282820160200188101561023f575f5ffd5b8160208401602083015e5f602083830101528093505050509250925092565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b805160208083015191908110156102b3575f198160200360031b1b821691505b50919050565b60805160a05160c051611ab861030d5f395f61050c01525f818161027101528181610770015261095d01525f81816102980152818161040e015281816106180152818161073001526108b70152611ab85ff3fe608060405234801561000f575f5ffd5b5060043610610111575f3560e01c8063715018a61161009e578063b8c143061161006e578063b8c1430614610293578063c252aa22146102ba578063c5916a39146102db578063f2fde38b14610300578063fd967f4714610313575f5ffd5b8063715018a6146102405780638da5cb5b146102485780639ea9477814610259578063ad0f95821461026c575f5ffd5b80634624e6a3116100e45780634624e6a31461018157806346282889146101a557806354fd4d50146101ed5780636ab40904146102025780636f728c5014610215575f5ffd5b8063021ab442146101155780630371406e1461012a5780632370356c1461013d57806328522d7914610150575b5f5ffd5b610128610123366004610e47565b61031c565b005b610128610138366004610edb565b6104e0565b61012861014b366004610efc565b6104f4565b60655462010000900463ffffffff165f908152606760205260409020545b6040519081526020015b60405180910390f35b60655462010000900463ffffffff1660405163ffffffff9091168152602001610178565b6040805180820182525f80825260209182015281518083019092526066546001600160a01b0381168352600160a01b900463ffffffff16908201526040516101789190610f33565b6101f5610505565b6040516101789190610f41565b610128610210366004610f76565b610535565b610228610223366004610fdf565b610713565b6040516001600160a01b039091168152602001610178565b6101286107b2565b6033546001600160a01b0316610228565b61012861026736600461103c565b6107c5565b6102287f000000000000000000000000000000000000000000000000000000000000000081565b6102287f000000000000000000000000000000000000000000000000000000000000000081565b6065546102c89061ffff1681565b60405161ffff9091168152602001610178565b61016e6102e93660046110d7565b63ffffffff165f9081526067602052604090205490565b61012861030e3660046110f2565b6109c2565b6102c861271081565b5f54610100900460ff161580801561033a57505f54600160ff909116105b806103535750303b15801561035357505f5460ff166001145b6103bb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff1916600117905580156103dc575f805461ff0019166101001790555b6103e587610a34565b6103ee86610a85565b6103f785610acf565b604051636738c40b60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636738c40b906104499089908890889088906004016111b6565b5f604051808303815f87803b158015610460575f5ffd5b505af1158015610472573d5f5f3e3d5ffd5b50506065805465ffffffff000019166201000063ffffffff891602179055505080156104d7575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b6104e8610b3a565b6104f181610a85565b50565b6104fc610b3a565b6104f181610acf565b60606105307f0000000000000000000000000000000000000000000000000000000000000000610b94565b905090565b428163ffffffff16111561055c57604051635a119db560e11b815260040160405180910390fd5b60655463ffffffff6201000090910481169082161161058e5760405163037fa86b60e31b815260040160405180910390fd5b826020013582146105b25760405163327f9d0760e21b815260040160405180910390fd5b6040805160018082528183019092525f91602080830190803683375050606554825192935061ffff16918391505f906105ed576105ed611253565b61ffff90921660209283029190910190910152604051625f5e5d60e21b81525f906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063017d797490610652906066908990879060040161131b565b6020604051808303815f875af115801561066e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106929190611497565b9050806106b257604051633042041f60e21b815260040160405180910390fd5b6065805465ffffffff000019166201000063ffffffff8616908102919091179091555f81815260676020526040808220879055518692917f010dcbe0d1e019c93357711f7bb6287d543b7ff7de74f29df3fb5ecceec8d36991a35050505050565b5f6002826002811115610728576107286114b6565b0361075457507f0000000000000000000000000000000000000000000000000000000000000000919050565b6001826002811115610768576107686114b6565b0361079457507f0000000000000000000000000000000000000000000000000000000000000000919050565b60405163fdea7c0960e01b815260040160405180910390fd5b919050565b6107ba610b3a565b6107c35f610a34565b565b5f5f5f6107d28585610bd1565b9250925092506107e182610713565b6001600160a01b0316635ddb9b5b846040518263ffffffff1660e01b815260040161080c9190610f33565b6020604051808303815f875af1158015610828573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061084c91906114ca565b63ffffffff168a63ffffffff16116108775760405163207617df60e01b815260040160405180910390fd5b61089c8a8a8a8a8a8a8a60405161088f9291906114e5565b6040518091039020610c14565b60028260028111156108b0576108b06114b6565b03610942577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636738c40b848c6108f08989610cb5565b856040518563ffffffff1660e01b81526004016109109493929190611524565b5f604051808303815f87803b158015610927575f5ffd5b505af1158015610939573d5f5f3e3d5ffd5b505050506109b6565b6001826002811115610956576109566114b6565b03610794577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166356d482f5848c6109968989610cd3565b856040518563ffffffff1660e01b81526004016109109493929190611597565b50505050505050505050565b6109ca610b3a565b6001600160a01b038116610a2f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103b2565b6104f1815b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b806066610a92828261163c565b9050507f20100394950e66014c25009b45d12b675210a6e7a002044a0e3de6544e3c4b3781604051610ac49190611698565b60405180910390a150565b61271061ffff82161115610af6576040516307336f0360e11b815260040160405180910390fd5b6065805461ffff191661ffff83169081179091556040519081527ff5d1836df8fcd7c1e54047e94ac8773d2855395603e2ef9ba5f5f16905f2259290602001610ac4565b6033546001600160a01b031633146107c35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103b2565b60605f610ba083610ce1565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b604080518082019091525f8082526020820152604080518082019091525f8082526020820181905290610c0684860186611760565b919790965090945092505050565b63ffffffff86165f908152606760205260409020548514610c485760405163639d09b560e11b815260040160405180910390fd5b610c9083838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508992508591505063ffffffff8816610d0e565b610cad5760405163afa42ca760e01b815260040160405180910390fd5b505050505050565b610cbd610dbc565b610cc98284018461182e565b9695505050505050565b6060610cc982840184611910565b5f60ff8216601f811115610d0857604051632cd44ac360e21b815260040160405180910390fd5b92915050565b5f83610d1b868585610d25565b1495945050505050565b5f60208451610d349190611a44565b15610d52576040516313717da960e21b815260040160405180910390fd5b8260205b85518111610db357610d69600285611a44565b5f03610d8a57815f528086015160205260405f209150600284049350610da1565b808601515f528160205260405f2091506002840493505b610dac602082611a63565b9050610d56565b50949350505050565b60405180608001604052805f81526020015f8152602001610dee60405180604001604052805f81526020015f81525090565b8152602001606081525090565b6001600160a01b03811681146104f1575f5ffd5b5f60408284031215610e1f575f5ffd5b50919050565b803561ffff811681146107ad575f5ffd5b63ffffffff811681146104f1575f5ffd5b5f5f5f5f5f5f6101008789031215610e5d575f5ffd5b8635610e6881610dfb565b9550610e778860208901610e0f565b9450610e8560608801610e25565b93506080870135610e9581610e36565b925060a08701356001600160401b03811115610eaf575f5ffd5b870160a0818a031215610ec0575f5ffd5b9150610ecf8860c08901610e0f565b90509295509295509295565b5f60408284031215610eeb575f5ffd5b610ef58383610e0f565b9392505050565b5f60208284031215610f0c575f5ffd5b610ef582610e25565b80516001600160a01b0316825260209081015163ffffffff16910152565b60408101610d088284610f15565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f5f5f60608486031215610f88575f5ffd5b83356001600160401b03811115610f9d575f5ffd5b84016101208187031215610faf575f5ffd5b9250602084013591506040840135610fc681610e36565b809150509250925092565b8035600381106107ad575f5ffd5b5f60208284031215610fef575f5ffd5b610ef582610fd1565b5f5f83601f840112611008575f5ffd5b5081356001600160401b0381111561101e575f5ffd5b602083019150836020828501011115611035575f5ffd5b9250929050565b5f5f5f5f5f5f5f60a0888a031215611052575f5ffd5b873561105d81610e36565b965060208801359550604088013561107481610e36565b945060608801356001600160401b0381111561108e575f5ffd5b61109a8a828b01610ff8565b90955093505060808801356001600160401b038111156110b8575f5ffd5b6110c48a828b01610ff8565b989b979a50959850939692959293505050565b5f602082840312156110e7575f5ffd5b8135610ef581610e36565b5f60208284031215611102575f5ffd5b8135610ef581610dfb565b803561111881610dfb565b6001600160a01b03168252602081013561113181610e36565b63ffffffff81166020840152505050565b5f5f8335601e19843603018112611157575f5ffd5b83016020810192503590506001600160401b03811115611175575f5ffd5b8060051b3603821315611035575f5ffd5b8183525f6001600160fb1b0383111561119d575f5ffd5b8260051b80836020870137939093016020019392505050565b6111c0818661110d565b63ffffffff841660408281019190915260c06060808401829052853591840191909152602085013560e0840152908401356101008301528301356101208201525f61120e6080850185611142565b60a061014085015261122561016085018284611186565b92505050611236608083018461110d565b95945050505050565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8235605e198336030181126112a3575f5ffd5b90910192915050565b80358252602080820135908301525f6112c86040830183611142565b60606040860152611236606086018284611186565b5f8151808452602084019350602083015f5b8281101561131157815161ffff168652602095860195909101906001016112ef565b5093949350505050565b83546001600160a01b038116825260a01c63ffffffff166020820152608060408201525f6101a08201843561134f81610e36565b63ffffffff166080840152602085013560a0840152604085013560c0840152606085013560e0840152604060808601610100850137604060c0860161014085013761139e610100860186611142565b610120610180860152828184526101c0860190506101c08260051b8701019350825f5b83811015611480578786036101bf190183526113dd828661128f565b80356113e881610e36565b63ffffffff168752602081013536829003601e19018112611407575f5ffd5b81016020810190356001600160401b03811115611422575f5ffd5b803603821315611430575f5ffd5b606060208a015261144560608a018284611267565b915050611455604083018361128f565b9150878103604089015261146981836112ac565b9750505060209283019291909101906001016113c1565b50505050508281036060840152610cc981856112dd565b5f602082840312156114a7575f5ffd5b81518015158114610ef5575f5ffd5b634e487b7160e01b5f52602160045260245ffd5b5f602082840312156114da575f5ffd5b8151610ef581610e36565b818382375f9101908152919050565b5f8151808452602084019350602083015f5b82811015611311578151865260209586019590910190600101611506565b61152e8186610f15565b63ffffffff8416604082015260c06060820152825160c0820152602083015160e08201525f60408401518051610100840152602081015161012084015250606084015160a06101408401526115876101608401826114f4565b9150506112366080830184610f15565b5f60c082016115a68388610f15565b63ffffffff8616604084015260c0606084015280855180835260e08501915060e08160051b8601019250602087015f5b828110156116275786850360df19018452815180516001600160a01b03168652602090810151604091870182905290611611908701826114f4565b95505060209384019391909101906001016115d6565b50505050809150506112366080830184610f15565b813561164781610dfb565b81546001600160a01b031981166001600160a01b03929092169182178355602084013561167381610e36565b6001600160c01b03199190911690911760a09190911b63ffffffff60a01b1617905550565b60408101610d08828461110d565b604080519081016001600160401b03811182821017156116c8576116c861123f565b60405290565b604051608081016001600160401b03811182821017156116c8576116c861123f565b604051601f8201601f191681016001600160401b03811182821017156117185761171861123f565b604052919050565b5f60408284031215611730575f5ffd5b6117386116a6565b9050813561174581610dfb565b8152602082013561175581610e36565b602082015292915050565b5f5f5f60a08486031215611772575f5ffd5b61177c8585611720565b925061178a60408501610fd1565b91506117998560608601611720565b90509250925092565b5f6001600160401b038211156117ba576117ba61123f565b5060051b60200190565b5f82601f8301126117d3575f5ffd5b81356117e66117e1826117a2565b6116f0565b8082825260208201915060208360051b860101925085831115611807575f5ffd5b602085015b8381101561182457803583526020928301920161180c565b5095945050505050565b5f5f5f5f60c08587031215611841575f5ffd5b61184b8686611720565b935061185960408601610fd1565b92506118688660608701611720565b915060a08501356001600160401b03811115611882575f5ffd5b850180870360a0811215611894575f5ffd5b61189c6116ce565b82358152602080840135908201526040603f19830112156118bb575f5ffd5b6118c36116a6565b604084810135825260608501356020830152820152608083013591506001600160401b038211156118f2575f5ffd5b6118fe898385016117c4565b60608201529598949750929550505050565b5f5f5f5f60c08587031215611923575f5ffd5b61192d8686611720565b935061193b60408601610fd1565b925061194a8660608701611720565b915060a08501356001600160401b03811115611964575f5ffd5b8501601f81018713611974575f5ffd5b80356119826117e1826117a2565b8082825260208201915060208360051b8501019250898311156119a3575f5ffd5b602084015b83811015611a355780356001600160401b038111156119c5575f5ffd5b85016040818d03601f190112156119da575f5ffd5b6119e26116a6565b60208201356119f081610dfb565b815260408201356001600160401b03811115611a0a575f5ffd5b611a198e6020838601016117c4565b60208301525080855250506020830192506020810190506119a8565b50969995985093965050505050565b5f82611a5e57634e487b7160e01b5f52601260045260245ffd5b500690565b80820180821115610d0857634e487b7160e01b5f52601160045260245ffdfea2646970667358221220574b7cf8d5fde8de74e9d16698bff854f7ee35f6e1951d56baa1445caf79c59c64736f6c634300081b0033", } // OperatorTableUpdaterABI is the input ABI used to generate the binding from. @@ -473,66 +473,66 @@ func (_OperatorTableUpdater *OperatorTableUpdaterCallerSession) GetGlobalTableRo return _OperatorTableUpdater.Contract.GetGlobalTableRootByTimestamp(&_OperatorTableUpdater.CallOpts, referenceTimestamp) } -// GlobalRootConfirmationThreshold is a free data retrieval call binding the contract method 0xc252aa22. +// GetLatestReferenceTimestamp is a free data retrieval call binding the contract method 0x4624e6a3. // -// Solidity: function globalRootConfirmationThreshold() view returns(uint16) -func (_OperatorTableUpdater *OperatorTableUpdaterCaller) GlobalRootConfirmationThreshold(opts *bind.CallOpts) (uint16, error) { +// Solidity: function getLatestReferenceTimestamp() view returns(uint32) +func (_OperatorTableUpdater *OperatorTableUpdaterCaller) GetLatestReferenceTimestamp(opts *bind.CallOpts) (uint32, error) { var out []interface{} - err := _OperatorTableUpdater.contract.Call(opts, &out, "globalRootConfirmationThreshold") + err := _OperatorTableUpdater.contract.Call(opts, &out, "getLatestReferenceTimestamp") if err != nil { - return *new(uint16), err + return *new(uint32), err } - out0 := *abi.ConvertType(out[0], new(uint16)).(*uint16) + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) return out0, err } -// GlobalRootConfirmationThreshold is a free data retrieval call binding the contract method 0xc252aa22. +// GetLatestReferenceTimestamp is a free data retrieval call binding the contract method 0x4624e6a3. // -// Solidity: function globalRootConfirmationThreshold() view returns(uint16) -func (_OperatorTableUpdater *OperatorTableUpdaterSession) GlobalRootConfirmationThreshold() (uint16, error) { - return _OperatorTableUpdater.Contract.GlobalRootConfirmationThreshold(&_OperatorTableUpdater.CallOpts) +// Solidity: function getLatestReferenceTimestamp() view returns(uint32) +func (_OperatorTableUpdater *OperatorTableUpdaterSession) GetLatestReferenceTimestamp() (uint32, error) { + return _OperatorTableUpdater.Contract.GetLatestReferenceTimestamp(&_OperatorTableUpdater.CallOpts) } -// GlobalRootConfirmationThreshold is a free data retrieval call binding the contract method 0xc252aa22. +// GetLatestReferenceTimestamp is a free data retrieval call binding the contract method 0x4624e6a3. // -// Solidity: function globalRootConfirmationThreshold() view returns(uint16) -func (_OperatorTableUpdater *OperatorTableUpdaterCallerSession) GlobalRootConfirmationThreshold() (uint16, error) { - return _OperatorTableUpdater.Contract.GlobalRootConfirmationThreshold(&_OperatorTableUpdater.CallOpts) +// Solidity: function getLatestReferenceTimestamp() view returns(uint32) +func (_OperatorTableUpdater *OperatorTableUpdaterCallerSession) GetLatestReferenceTimestamp() (uint32, error) { + return _OperatorTableUpdater.Contract.GetLatestReferenceTimestamp(&_OperatorTableUpdater.CallOpts) } -// LatestReferenceTimestamp is a free data retrieval call binding the contract method 0xa6ff5936. +// GlobalRootConfirmationThreshold is a free data retrieval call binding the contract method 0xc252aa22. // -// Solidity: function latestReferenceTimestamp() view returns(uint32) -func (_OperatorTableUpdater *OperatorTableUpdaterCaller) LatestReferenceTimestamp(opts *bind.CallOpts) (uint32, error) { +// Solidity: function globalRootConfirmationThreshold() view returns(uint16) +func (_OperatorTableUpdater *OperatorTableUpdaterCaller) GlobalRootConfirmationThreshold(opts *bind.CallOpts) (uint16, error) { var out []interface{} - err := _OperatorTableUpdater.contract.Call(opts, &out, "latestReferenceTimestamp") + err := _OperatorTableUpdater.contract.Call(opts, &out, "globalRootConfirmationThreshold") if err != nil { - return *new(uint32), err + return *new(uint16), err } - out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + out0 := *abi.ConvertType(out[0], new(uint16)).(*uint16) return out0, err } -// LatestReferenceTimestamp is a free data retrieval call binding the contract method 0xa6ff5936. +// GlobalRootConfirmationThreshold is a free data retrieval call binding the contract method 0xc252aa22. // -// Solidity: function latestReferenceTimestamp() view returns(uint32) -func (_OperatorTableUpdater *OperatorTableUpdaterSession) LatestReferenceTimestamp() (uint32, error) { - return _OperatorTableUpdater.Contract.LatestReferenceTimestamp(&_OperatorTableUpdater.CallOpts) +// Solidity: function globalRootConfirmationThreshold() view returns(uint16) +func (_OperatorTableUpdater *OperatorTableUpdaterSession) GlobalRootConfirmationThreshold() (uint16, error) { + return _OperatorTableUpdater.Contract.GlobalRootConfirmationThreshold(&_OperatorTableUpdater.CallOpts) } -// LatestReferenceTimestamp is a free data retrieval call binding the contract method 0xa6ff5936. +// GlobalRootConfirmationThreshold is a free data retrieval call binding the contract method 0xc252aa22. // -// Solidity: function latestReferenceTimestamp() view returns(uint32) -func (_OperatorTableUpdater *OperatorTableUpdaterCallerSession) LatestReferenceTimestamp() (uint32, error) { - return _OperatorTableUpdater.Contract.LatestReferenceTimestamp(&_OperatorTableUpdater.CallOpts) +// Solidity: function globalRootConfirmationThreshold() view returns(uint16) +func (_OperatorTableUpdater *OperatorTableUpdaterCallerSession) GlobalRootConfirmationThreshold() (uint16, error) { + return _OperatorTableUpdater.Contract.GlobalRootConfirmationThreshold(&_OperatorTableUpdater.CallOpts) } // Owner is a free data retrieval call binding the contract method 0x8da5cb5b. diff --git a/pkg/bindings/OperatorTableUpdaterStorage/binding.go b/pkg/bindings/OperatorTableUpdaterStorage/binding.go index d75771b854..1f32a22fd1 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\":\"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\"}],\"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\":\"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\":\"globalRootConfirmationThreshold\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"latestReferenceTimestamp\",\"inputs\":[],\"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\":\"InvalidOperatorSetProof\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TableRootNotInCertificate\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TableUpdateForPastTimestamp\",\"inputs\":[]}]", + ABI: "[{\"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\"}],\"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\":\"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\":\"getLatestReferenceTimestamp\",\"inputs\":[],\"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\":\"InvalidOperatorSetProof\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TableRootNotInCertificate\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TableUpdateForPastTimestamp\",\"inputs\":[]}]", } // OperatorTableUpdaterStorageABI is the input ABI used to generate the binding from. @@ -437,66 +437,66 @@ func (_OperatorTableUpdaterStorage *OperatorTableUpdaterStorageCallerSession) Ge return _OperatorTableUpdaterStorage.Contract.GetGlobalTableRootByTimestamp(&_OperatorTableUpdaterStorage.CallOpts, referenceTimestamp) } -// GlobalRootConfirmationThreshold is a free data retrieval call binding the contract method 0xc252aa22. +// GetLatestReferenceTimestamp is a free data retrieval call binding the contract method 0x4624e6a3. // -// Solidity: function globalRootConfirmationThreshold() view returns(uint16) -func (_OperatorTableUpdaterStorage *OperatorTableUpdaterStorageCaller) GlobalRootConfirmationThreshold(opts *bind.CallOpts) (uint16, error) { +// Solidity: function getLatestReferenceTimestamp() view returns(uint32) +func (_OperatorTableUpdaterStorage *OperatorTableUpdaterStorageCaller) GetLatestReferenceTimestamp(opts *bind.CallOpts) (uint32, error) { var out []interface{} - err := _OperatorTableUpdaterStorage.contract.Call(opts, &out, "globalRootConfirmationThreshold") + err := _OperatorTableUpdaterStorage.contract.Call(opts, &out, "getLatestReferenceTimestamp") if err != nil { - return *new(uint16), err + return *new(uint32), err } - out0 := *abi.ConvertType(out[0], new(uint16)).(*uint16) + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) return out0, err } -// GlobalRootConfirmationThreshold is a free data retrieval call binding the contract method 0xc252aa22. +// GetLatestReferenceTimestamp is a free data retrieval call binding the contract method 0x4624e6a3. // -// Solidity: function globalRootConfirmationThreshold() view returns(uint16) -func (_OperatorTableUpdaterStorage *OperatorTableUpdaterStorageSession) GlobalRootConfirmationThreshold() (uint16, error) { - return _OperatorTableUpdaterStorage.Contract.GlobalRootConfirmationThreshold(&_OperatorTableUpdaterStorage.CallOpts) +// Solidity: function getLatestReferenceTimestamp() view returns(uint32) +func (_OperatorTableUpdaterStorage *OperatorTableUpdaterStorageSession) GetLatestReferenceTimestamp() (uint32, error) { + return _OperatorTableUpdaterStorage.Contract.GetLatestReferenceTimestamp(&_OperatorTableUpdaterStorage.CallOpts) } -// GlobalRootConfirmationThreshold is a free data retrieval call binding the contract method 0xc252aa22. +// GetLatestReferenceTimestamp is a free data retrieval call binding the contract method 0x4624e6a3. // -// Solidity: function globalRootConfirmationThreshold() view returns(uint16) -func (_OperatorTableUpdaterStorage *OperatorTableUpdaterStorageCallerSession) GlobalRootConfirmationThreshold() (uint16, error) { - return _OperatorTableUpdaterStorage.Contract.GlobalRootConfirmationThreshold(&_OperatorTableUpdaterStorage.CallOpts) +// Solidity: function getLatestReferenceTimestamp() view returns(uint32) +func (_OperatorTableUpdaterStorage *OperatorTableUpdaterStorageCallerSession) GetLatestReferenceTimestamp() (uint32, error) { + return _OperatorTableUpdaterStorage.Contract.GetLatestReferenceTimestamp(&_OperatorTableUpdaterStorage.CallOpts) } -// LatestReferenceTimestamp is a free data retrieval call binding the contract method 0xa6ff5936. +// GlobalRootConfirmationThreshold is a free data retrieval call binding the contract method 0xc252aa22. // -// Solidity: function latestReferenceTimestamp() view returns(uint32) -func (_OperatorTableUpdaterStorage *OperatorTableUpdaterStorageCaller) LatestReferenceTimestamp(opts *bind.CallOpts) (uint32, error) { +// Solidity: function globalRootConfirmationThreshold() view returns(uint16) +func (_OperatorTableUpdaterStorage *OperatorTableUpdaterStorageCaller) GlobalRootConfirmationThreshold(opts *bind.CallOpts) (uint16, error) { var out []interface{} - err := _OperatorTableUpdaterStorage.contract.Call(opts, &out, "latestReferenceTimestamp") + err := _OperatorTableUpdaterStorage.contract.Call(opts, &out, "globalRootConfirmationThreshold") if err != nil { - return *new(uint32), err + return *new(uint16), err } - out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + out0 := *abi.ConvertType(out[0], new(uint16)).(*uint16) return out0, err } -// LatestReferenceTimestamp is a free data retrieval call binding the contract method 0xa6ff5936. +// GlobalRootConfirmationThreshold is a free data retrieval call binding the contract method 0xc252aa22. // -// Solidity: function latestReferenceTimestamp() view returns(uint32) -func (_OperatorTableUpdaterStorage *OperatorTableUpdaterStorageSession) LatestReferenceTimestamp() (uint32, error) { - return _OperatorTableUpdaterStorage.Contract.LatestReferenceTimestamp(&_OperatorTableUpdaterStorage.CallOpts) +// Solidity: function globalRootConfirmationThreshold() view returns(uint16) +func (_OperatorTableUpdaterStorage *OperatorTableUpdaterStorageSession) GlobalRootConfirmationThreshold() (uint16, error) { + return _OperatorTableUpdaterStorage.Contract.GlobalRootConfirmationThreshold(&_OperatorTableUpdaterStorage.CallOpts) } -// LatestReferenceTimestamp is a free data retrieval call binding the contract method 0xa6ff5936. +// GlobalRootConfirmationThreshold is a free data retrieval call binding the contract method 0xc252aa22. // -// Solidity: function latestReferenceTimestamp() view returns(uint32) -func (_OperatorTableUpdaterStorage *OperatorTableUpdaterStorageCallerSession) LatestReferenceTimestamp() (uint32, error) { - return _OperatorTableUpdaterStorage.Contract.LatestReferenceTimestamp(&_OperatorTableUpdaterStorage.CallOpts) +// Solidity: function globalRootConfirmationThreshold() view returns(uint16) +func (_OperatorTableUpdaterStorage *OperatorTableUpdaterStorageCallerSession) GlobalRootConfirmationThreshold() (uint16, error) { + return _OperatorTableUpdaterStorage.Contract.GlobalRootConfirmationThreshold(&_OperatorTableUpdaterStorage.CallOpts) } // ConfirmGlobalTableRoot is a paid mutator transaction binding the contract method 0x6ab40904. diff --git a/src/contracts/interfaces/IOperatorTableUpdater.sol b/src/contracts/interfaces/IOperatorTableUpdater.sol index cbaafa9488..49ee0e4048 100644 --- a/src/contracts/interfaces/IOperatorTableUpdater.sol +++ b/src/contracts/interfaces/IOperatorTableUpdater.sol @@ -138,4 +138,10 @@ interface IOperatorTableUpdater is function getCertificateVerifier( CurveType curveType ) external view returns (address); + + /** + * @notice Get the latest reference timestamp + * @return The latest reference timestamp + */ + function getLatestReferenceTimestamp() external view returns (uint32); } diff --git a/src/contracts/multichain/BN254CertificateVerifier.sol b/src/contracts/multichain/BN254CertificateVerifier.sol index 46735c856c..db22c9b56a 100644 --- a/src/contracts/multichain/BN254CertificateVerifier.sol +++ b/src/contracts/multichain/BN254CertificateVerifier.sol @@ -359,4 +359,10 @@ contract BN254CertificateVerifier is Initializable, BN254CertificateVerifierStor bytes32 operatorSetKey = operatorSet.key(); return _operatorSetInfos[operatorSetKey][referenceTimestamp]; } + + /// @dev Only used in a test environment + function setMaxStalenessPeriod(OperatorSet memory operatorSet, uint32 maxStalenessPeriod) external { + bytes32 operatorSetKey = operatorSet.key(); + _maxStalenessPeriods[operatorSetKey] = maxStalenessPeriod; + } } diff --git a/src/contracts/multichain/OperatorTableUpdater.sol b/src/contracts/multichain/OperatorTableUpdater.sol index e926ce55a5..814e550b69 100644 --- a/src/contracts/multichain/OperatorTableUpdater.sol +++ b/src/contracts/multichain/OperatorTableUpdater.sol @@ -48,6 +48,9 @@ contract OperatorTableUpdater is Initializable, OwnableUpgradeable, OperatorTabl bn254CertificateVerifier.updateOperatorTable( _globalRootConfirmerSet, referenceTimestamp, globalRootConfirmerSetInfo, globalRootConfirmerSetConfig ); + + // Set the latest reference timestamp + _latestReferenceTimestamp = referenceTimestamp; } /** @@ -64,7 +67,7 @@ contract OperatorTableUpdater is Initializable, OwnableUpgradeable, OperatorTabl ) external { // Table roots can only be updated for current or past timestamps and after the latest reference timestamp require(referenceTimestamp <= block.timestamp, GlobalTableRootInFuture()); - require(referenceTimestamp > latestReferenceTimestamp, GlobalTableRootStale()); + require(referenceTimestamp > _latestReferenceTimestamp, GlobalTableRootStale()); require(globalTableRoot == globalTableRootCert.messageHash, TableRootNotInCertificate()); // Verify certificate by using the stake proportion thresholds @@ -77,7 +80,7 @@ contract OperatorTableUpdater is Initializable, OwnableUpgradeable, OperatorTabl require(isValid, CertificateInvalid()); // Update the global table root - latestReferenceTimestamp = referenceTimestamp; + _latestReferenceTimestamp = referenceTimestamp; _globalTableRoots[referenceTimestamp] = globalTableRoot; emit NewGlobalTableRoot(referenceTimestamp, globalTableRoot); @@ -159,7 +162,7 @@ contract OperatorTableUpdater is Initializable, OwnableUpgradeable, OperatorTabl /// @inheritdoc IOperatorTableUpdater function getCurrentGlobalTableRoot() external view returns (bytes32) { - return _globalTableRoots[latestReferenceTimestamp]; + return _globalTableRoots[_latestReferenceTimestamp]; } /// @inheritdoc IOperatorTableUpdater @@ -180,6 +183,11 @@ contract OperatorTableUpdater is Initializable, OwnableUpgradeable, OperatorTabl } } + /// @inheritdoc IOperatorTableUpdater + function getLatestReferenceTimestamp() external view returns (uint32) { + return _latestReferenceTimestamp; + } + /** * * INTERNAL HELPERS diff --git a/src/contracts/multichain/OperatorTableUpdaterStorage.sol b/src/contracts/multichain/OperatorTableUpdaterStorage.sol index 954be65b4d..26e45102bf 100644 --- a/src/contracts/multichain/OperatorTableUpdaterStorage.sol +++ b/src/contracts/multichain/OperatorTableUpdaterStorage.sol @@ -25,7 +25,7 @@ abstract contract OperatorTableUpdaterStorage is IOperatorTableUpdater { uint16 public globalRootConfirmationThreshold; /// @notice The latest reference timestamp - uint32 public latestReferenceTimestamp; + uint32 internal _latestReferenceTimestamp; /// @notice The operatorSet which certifies against global roots OperatorSet internal _globalRootConfirmerSet; diff --git a/src/test/unit/OperatorTableUpdaterUnit.t.sol b/src/test/unit/OperatorTableUpdaterUnit.t.sol index 5220c0f650..90ad034349 100644 --- a/src/test/unit/OperatorTableUpdaterUnit.t.sol +++ b/src/test/unit/OperatorTableUpdaterUnit.t.sol @@ -57,7 +57,7 @@ contract OperatorTableUpdaterUnitTests is address(this), // owner globalRootConfirmerSet, // globalRootConfirmerSet GLOBAL_ROOT_CONFIRMATION_THRESHOLD, // globalRootConfirmationThreshold - block.timestamp, // referenceTimestamp + block.timestamp - 1, // referenceTimestamp initialOperatorSetInfo, // globalRootConfirmerSetInfo initialOperatorSetConfig // globalRootConfirmerSetConfig ) @@ -177,6 +177,7 @@ contract OperatorTableUpdaterUnitTests_initialize is OperatorTableUpdaterUnitTes OperatorSet memory confirmerSet = operatorTableUpdater.getGlobalRootConfirmerSet(); assertEq(confirmerSet.avs, address(0xDEADBEEF)); assertEq(confirmerSet.id, 0); + assertEq(operatorTableUpdater.getLatestReferenceTimestamp(), uint32(block.timestamp - 1)); uint16 threshold = operatorTableUpdater.globalRootConfirmationThreshold(); assertEq(threshold, GLOBAL_ROOT_CONFIRMATION_THRESHOLD); @@ -190,7 +191,7 @@ contract OperatorTableUpdaterUnitTests_initialize is OperatorTableUpdaterUnitTes address(this), globalRootConfirmerSet, GLOBAL_ROOT_CONFIRMATION_THRESHOLD, - uint32(block.timestamp), + uint32(block.timestamp - 1), initialOperatorSetInfo, initialOperatorSetConfig ); @@ -243,7 +244,7 @@ contract OperatorTableUpdaterUnitTests_confirmGlobalTableRoot is OperatorTableUp // Expect the global table root to be updated assertEq(operatorTableUpdater.getGlobalTableRootByTimestamp(referenceTimestamp), globalTableRoot); assertEq(operatorTableUpdater.getCurrentGlobalTableRoot(), globalTableRoot); - assertEq(operatorTableUpdater.latestReferenceTimestamp(), referenceTimestamp); + assertEq(operatorTableUpdater.getLatestReferenceTimestamp(), referenceTimestamp); } }