diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml index e2c9771b71..f680024bf2 100644 --- a/.github/workflows/integration-tests.yml +++ b/.github/workflows/integration-tests.yml @@ -51,7 +51,7 @@ jobs: - name: Install Foundry uses: foundry-rs/foundry-toolchain@v1 with: - version: nightly + version: nightly-293fad73670b7b59ca901c7f2105bf7a29165a90 - name: Install graph cli run: | @@ -83,7 +83,7 @@ jobs: run: make build && go test -v ./core/thegraph - name: Inabox E2E - run: make build && cd inabox && make run-e2e-nochurner + run: make build && cd inabox && make run-e2e - name: Save logs if: always() diff --git a/.gitignore b/.gitignore index a4082e85b0..3d15c6dde9 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,5 @@ inabox/resources/kzg/SRSTables/* **/bin/* coverage.* + +contracts/broadcast \ No newline at end of file diff --git a/Makefile b/Makefile index acbc58a676..77c0c9af8c 100644 --- a/Makefile +++ b/Makefile @@ -25,7 +25,7 @@ protoc: clean --go-grpc_opt=paths=source_relative \ $(PROTOS)/**/*.proto # Generate Protobuf for sub directories of ./api/proto/disperser - protoc -I $(PROTOS_DISPERSER) \ + protoc -I $(PROTOS_DISPERSER) -I $(PROTOS) \ --go_out=$(PROTO_GEN_DISPERSER_PATH) \ --go_opt=paths=source_relative \ --go-grpc_out=$(PROTO_GEN_DISPERSER_PATH) \ diff --git a/api/grpc/churner/churner.pb.go b/api/grpc/churner/churner.pb.go index 3f2ab01d68..77cdd6b247 100644 --- a/api/grpc/churner/churner.pb.go +++ b/api/grpc/churner/churner.pb.go @@ -25,14 +25,16 @@ type ChurnRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + // The Ethereum address (in hex like "0x123abcdef...") of the operator. + OperatorAddress string `protobuf:"bytes,1,opt,name=operator_address,json=operatorAddress,proto3" json:"operator_address,omitempty"` // The operator making the churn request. - OperatorToRegisterPubkeyG1 []byte `protobuf:"bytes,1,opt,name=operator_to_register_pubkey_g1,json=operatorToRegisterPubkeyG1,proto3" json:"operator_to_register_pubkey_g1,omitempty"` - OperatorToRegisterPubkeyG2 []byte `protobuf:"bytes,2,opt,name=operator_to_register_pubkey_g2,json=operatorToRegisterPubkeyG2,proto3" json:"operator_to_register_pubkey_g2,omitempty"` + OperatorToRegisterPubkeyG1 []byte `protobuf:"bytes,2,opt,name=operator_to_register_pubkey_g1,json=operatorToRegisterPubkeyG1,proto3" json:"operator_to_register_pubkey_g1,omitempty"` + OperatorToRegisterPubkeyG2 []byte `protobuf:"bytes,3,opt,name=operator_to_register_pubkey_g2,json=operatorToRegisterPubkeyG2,proto3" json:"operator_to_register_pubkey_g2,omitempty"` // The operator's BLS signature signed on the keccak256 hash of - // concat("ChurnRequest", g1, g2, salt). - OperatorRequestSignature []byte `protobuf:"bytes,3,opt,name=operator_request_signature,json=operatorRequestSignature,proto3" json:"operator_request_signature,omitempty"` + // concat("ChurnRequest", operator address, g1, g2, salt). + OperatorRequestSignature []byte `protobuf:"bytes,4,opt,name=operator_request_signature,json=operatorRequestSignature,proto3" json:"operator_request_signature,omitempty"` // The salt used as part of the message to sign on for operator_request_signature. - Salt []byte `protobuf:"bytes,4,opt,name=salt,proto3" json:"salt,omitempty"` + Salt []byte `protobuf:"bytes,5,opt,name=salt,proto3" json:"salt,omitempty"` // The quorums to register for. // Note: // - If any of the quorum here has already been registered, this entire request @@ -40,7 +42,7 @@ type ChurnRequest struct { // - If any of the quorum fails to register, this entire request will fail. // // The IDs must be in range [0, 255]. - QuorumIds []uint32 `protobuf:"varint,5,rep,packed,name=quorum_ids,json=quorumIds,proto3" json:"quorum_ids,omitempty"` + QuorumIds []uint32 `protobuf:"varint,6,rep,packed,name=quorum_ids,json=quorumIds,proto3" json:"quorum_ids,omitempty"` } func (x *ChurnRequest) Reset() { @@ -75,6 +77,13 @@ func (*ChurnRequest) Descriptor() ([]byte, []int) { return file_churner_churner_proto_rawDescGZIP(), []int{0} } +func (x *ChurnRequest) GetOperatorAddress() string { + if x != nil { + return x.OperatorAddress + } + return "" +} + func (x *ChurnRequest) GetOperatorToRegisterPubkeyG1() []byte { if x != nil { return x.OperatorToRegisterPubkeyG1 @@ -308,56 +317,58 @@ var File_churner_churner_proto protoreflect.FileDescriptor var file_churner_churner_proto_rawDesc = []byte{ 0x0a, 0x15, 0x63, 0x68, 0x75, 0x72, 0x6e, 0x65, 0x72, 0x2f, 0x63, 0x68, 0x75, 0x72, 0x6e, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x07, 0x63, 0x68, 0x75, 0x72, 0x6e, 0x65, 0x72, - 0x22, 0x87, 0x02, 0x0a, 0x0c, 0x43, 0x68, 0x75, 0x72, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x42, 0x0a, 0x1e, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x74, 0x6f, - 0x5f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x70, 0x75, 0x62, 0x6b, 0x65, 0x79, - 0x5f, 0x67, 0x31, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x1a, 0x6f, 0x70, 0x65, 0x72, 0x61, - 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x50, 0x75, 0x62, - 0x6b, 0x65, 0x79, 0x47, 0x31, 0x12, 0x42, 0x0a, 0x1e, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, - 0x72, 0x5f, 0x74, 0x6f, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x70, 0x75, - 0x62, 0x6b, 0x65, 0x79, 0x5f, 0x67, 0x32, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x1a, 0x6f, - 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, - 0x72, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x47, 0x32, 0x12, 0x3c, 0x0a, 0x1a, 0x6f, 0x70, 0x65, - 0x72, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x73, 0x69, - 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x18, 0x6f, - 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x53, 0x69, - 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x61, 0x6c, 0x74, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x73, 0x61, 0x6c, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x71, - 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0d, 0x52, - 0x09, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x49, 0x64, 0x73, 0x22, 0xbd, 0x01, 0x0a, 0x0a, 0x43, - 0x68, 0x75, 0x72, 0x6e, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x67, 0x0a, 0x1e, 0x73, 0x69, 0x67, - 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x73, 0x61, 0x6c, 0x74, - 0x5f, 0x61, 0x6e, 0x64, 0x5f, 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x23, 0x2e, 0x63, 0x68, 0x75, 0x72, 0x6e, 0x65, 0x72, 0x2e, 0x53, 0x69, 0x67, 0x6e, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x57, 0x69, 0x74, 0x68, 0x53, 0x61, 0x6c, 0x74, 0x41, 0x6e, 0x64, - 0x45, 0x78, 0x70, 0x69, 0x72, 0x79, 0x52, 0x1a, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x57, 0x69, 0x74, 0x68, 0x53, 0x61, 0x6c, 0x74, 0x41, 0x6e, 0x64, 0x45, 0x78, 0x70, 0x69, - 0x72, 0x79, 0x12, 0x46, 0x0a, 0x12, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x5f, - 0x74, 0x6f, 0x5f, 0x63, 0x68, 0x75, 0x72, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, - 0x2e, 0x63, 0x68, 0x75, 0x72, 0x6e, 0x65, 0x72, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, - 0x72, 0x54, 0x6f, 0x43, 0x68, 0x75, 0x72, 0x6e, 0x52, 0x10, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, - 0x6f, 0x72, 0x73, 0x54, 0x6f, 0x43, 0x68, 0x75, 0x72, 0x6e, 0x22, 0x66, 0x0a, 0x1a, 0x53, 0x69, - 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x57, 0x69, 0x74, 0x68, 0x53, 0x61, 0x6c, 0x74, 0x41, - 0x6e, 0x64, 0x45, 0x78, 0x70, 0x69, 0x72, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x73, 0x69, 0x67, - 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x61, 0x6c, 0x74, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x73, 0x61, 0x6c, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x78, - 0x70, 0x69, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x65, 0x78, 0x70, 0x69, - 0x72, 0x79, 0x22, 0x62, 0x0a, 0x0f, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, - 0x43, 0x68, 0x75, 0x72, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, - 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x16, - 0x0a, 0x06, 0x70, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, - 0x70, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x32, 0x40, 0x0a, 0x07, 0x43, 0x68, 0x75, 0x72, 0x6e, 0x65, - 0x72, 0x12, 0x35, 0x0a, 0x05, 0x43, 0x68, 0x75, 0x72, 0x6e, 0x12, 0x15, 0x2e, 0x63, 0x68, 0x75, - 0x72, 0x6e, 0x65, 0x72, 0x2e, 0x43, 0x68, 0x75, 0x72, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x13, 0x2e, 0x63, 0x68, 0x75, 0x72, 0x6e, 0x65, 0x72, 0x2e, 0x43, 0x68, 0x75, 0x72, - 0x6e, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x42, 0x2f, 0x5a, 0x2d, 0x67, 0x69, 0x74, 0x68, - 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4c, 0x61, 0x79, 0x72, 0x2d, 0x4c, 0x61, 0x62, 0x73, - 0x2f, 0x65, 0x69, 0x67, 0x65, 0x6e, 0x64, 0x61, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x72, 0x70, - 0x63, 0x2f, 0x63, 0x68, 0x75, 0x72, 0x6e, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, + 0x22, 0xb2, 0x02, 0x0a, 0x0c, 0x43, 0x68, 0x75, 0x72, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x29, 0x0a, 0x10, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6f, 0x70, 0x65, + 0x72, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x42, 0x0a, 0x1e, + 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x74, 0x6f, 0x5f, 0x72, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x65, 0x72, 0x5f, 0x70, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x5f, 0x67, 0x31, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x1a, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, + 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x47, 0x31, + 0x12, 0x42, 0x0a, 0x1e, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x74, 0x6f, 0x5f, + 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x70, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x5f, + 0x67, 0x32, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x1a, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, + 0x6f, 0x72, 0x54, 0x6f, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6b, + 0x65, 0x79, 0x47, 0x32, 0x12, 0x3c, 0x0a, 0x1a, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, + 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x18, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, + 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x61, 0x6c, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x04, 0x73, 0x61, 0x6c, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, + 0x5f, 0x69, 0x64, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x09, 0x71, 0x75, 0x6f, 0x72, + 0x75, 0x6d, 0x49, 0x64, 0x73, 0x22, 0xbd, 0x01, 0x0a, 0x0a, 0x43, 0x68, 0x75, 0x72, 0x6e, 0x52, + 0x65, 0x70, 0x6c, 0x79, 0x12, 0x67, 0x0a, 0x1e, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x73, 0x61, 0x6c, 0x74, 0x5f, 0x61, 0x6e, 0x64, 0x5f, + 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x63, + 0x68, 0x75, 0x72, 0x6e, 0x65, 0x72, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x57, 0x69, 0x74, 0x68, 0x53, 0x61, 0x6c, 0x74, 0x41, 0x6e, 0x64, 0x45, 0x78, 0x70, 0x69, 0x72, + 0x79, 0x52, 0x1a, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x57, 0x69, 0x74, 0x68, + 0x53, 0x61, 0x6c, 0x74, 0x41, 0x6e, 0x64, 0x45, 0x78, 0x70, 0x69, 0x72, 0x79, 0x12, 0x46, 0x0a, + 0x12, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x5f, 0x74, 0x6f, 0x5f, 0x63, 0x68, + 0x75, 0x72, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x68, 0x75, 0x72, + 0x6e, 0x65, 0x72, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x43, 0x68, + 0x75, 0x72, 0x6e, 0x52, 0x10, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x54, 0x6f, + 0x43, 0x68, 0x75, 0x72, 0x6e, 0x22, 0x66, 0x0a, 0x1a, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x57, 0x69, 0x74, 0x68, 0x53, 0x61, 0x6c, 0x74, 0x41, 0x6e, 0x64, 0x45, 0x78, 0x70, + 0x69, 0x72, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x61, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x04, 0x73, 0x61, 0x6c, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, 0x22, 0x62, 0x0a, + 0x0f, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x43, 0x68, 0x75, 0x72, 0x6e, + 0x12, 0x1b, 0x0a, 0x09, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x08, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x49, 0x64, 0x12, 0x1a, 0x0a, + 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x75, 0x62, + 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x70, 0x75, 0x62, 0x6b, 0x65, + 0x79, 0x32, 0x40, 0x0a, 0x07, 0x43, 0x68, 0x75, 0x72, 0x6e, 0x65, 0x72, 0x12, 0x35, 0x0a, 0x05, + 0x43, 0x68, 0x75, 0x72, 0x6e, 0x12, 0x15, 0x2e, 0x63, 0x68, 0x75, 0x72, 0x6e, 0x65, 0x72, 0x2e, + 0x43, 0x68, 0x75, 0x72, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x13, 0x2e, 0x63, + 0x68, 0x75, 0x72, 0x6e, 0x65, 0x72, 0x2e, 0x43, 0x68, 0x75, 0x72, 0x6e, 0x52, 0x65, 0x70, 0x6c, + 0x79, 0x22, 0x00, 0x42, 0x2f, 0x5a, 0x2d, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x4c, 0x61, 0x79, 0x72, 0x2d, 0x4c, 0x61, 0x62, 0x73, 0x2f, 0x65, 0x69, 0x67, 0x65, + 0x6e, 0x64, 0x61, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x63, 0x68, 0x75, + 0x72, 0x6e, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/api/grpc/common/common.pb.go b/api/grpc/common/common.pb.go new file mode 100644 index 0000000000..c1829695bf --- /dev/null +++ b/api/grpc/common/common.pb.go @@ -0,0 +1,155 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc v3.12.4 +// source: common/common.proto + +package common + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type G1Commitment struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The X coordinate of the KZG commitment. This is the raw byte representation of the field element. + X []byte `protobuf:"bytes,1,opt,name=x,proto3" json:"x,omitempty"` + // The Y coordinate of the KZG commitment. This is the raw byte representation of the field element. + Y []byte `protobuf:"bytes,2,opt,name=y,proto3" json:"y,omitempty"` +} + +func (x *G1Commitment) Reset() { + *x = G1Commitment{} + if protoimpl.UnsafeEnabled { + mi := &file_common_common_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *G1Commitment) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*G1Commitment) ProtoMessage() {} + +func (x *G1Commitment) ProtoReflect() protoreflect.Message { + mi := &file_common_common_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use G1Commitment.ProtoReflect.Descriptor instead. +func (*G1Commitment) Descriptor() ([]byte, []int) { + return file_common_common_proto_rawDescGZIP(), []int{0} +} + +func (x *G1Commitment) GetX() []byte { + if x != nil { + return x.X + } + return nil +} + +func (x *G1Commitment) GetY() []byte { + if x != nil { + return x.Y + } + return nil +} + +var File_common_common_proto protoreflect.FileDescriptor + +var file_common_common_proto_rawDesc = []byte{ + 0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x22, 0x2a, 0x0a, + 0x0c, 0x47, 0x31, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x0c, 0x0a, + 0x01, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x01, 0x78, 0x12, 0x0c, 0x0a, 0x01, 0x79, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x01, 0x79, 0x42, 0x2e, 0x5a, 0x2c, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4c, 0x61, 0x79, 0x72, 0x2d, 0x4c, 0x61, 0x62, + 0x73, 0x2f, 0x65, 0x69, 0x67, 0x65, 0x6e, 0x64, 0x61, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x72, + 0x70, 0x63, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, +} + +var ( + file_common_common_proto_rawDescOnce sync.Once + file_common_common_proto_rawDescData = file_common_common_proto_rawDesc +) + +func file_common_common_proto_rawDescGZIP() []byte { + file_common_common_proto_rawDescOnce.Do(func() { + file_common_common_proto_rawDescData = protoimpl.X.CompressGZIP(file_common_common_proto_rawDescData) + }) + return file_common_common_proto_rawDescData +} + +var file_common_common_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_common_common_proto_goTypes = []interface{}{ + (*G1Commitment)(nil), // 0: common.G1Commitment +} +var file_common_common_proto_depIdxs = []int32{ + 0, // [0:0] is the sub-list for method output_type + 0, // [0:0] is the sub-list for method input_type + 0, // [0:0] is the sub-list for extension type_name + 0, // [0:0] is the sub-list for extension extendee + 0, // [0:0] is the sub-list for field type_name +} + +func init() { file_common_common_proto_init() } +func file_common_common_proto_init() { + if File_common_common_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_common_common_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*G1Commitment); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_common_common_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_common_common_proto_goTypes, + DependencyIndexes: file_common_common_proto_depIdxs, + MessageInfos: file_common_common_proto_msgTypes, + }.Build() + File_common_common_proto = out.File + file_common_common_proto_rawDesc = nil + file_common_common_proto_goTypes = nil + file_common_common_proto_depIdxs = nil +} diff --git a/api/grpc/disperser/disperser.pb.go b/api/grpc/disperser/disperser.pb.go index 51b00d3a81..31b9e7c1c9 100644 --- a/api/grpc/disperser/disperser.pb.go +++ b/api/grpc/disperser/disperser.pb.go @@ -7,6 +7,7 @@ package disperser import ( + common "github.com/Layr-Labs/eigenda/api/grpc/common" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" @@ -248,6 +249,14 @@ func (*AuthenticatedReply_BlobAuthHeader) isAuthenticatedReply_Payload() {} func (*AuthenticatedReply_DisperseReply) isAuthenticatedReply_Payload() {} +// BlobAuthHeader contains information about the blob for the client to verify and sign. +// - Once payments are enabled, the BlobAuthHeader the KZG commitment to the blob, which the client +// will verify and sign. Having the client verify the KZG commitment instead of calculating it avoids +// the need for the client to have the KZG structured reference string (SRS), which can be large. +// The signed KZG commitment prevents the disperser from sending a different blob to the DA Nodes +// than the one the client sent. +// - In the meantime, the BlobAuthHeader contains a simple challenge parameter is used to prevent +// replay attacks in the event that a signature is leaked. type BlobAuthHeader struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -295,6 +304,7 @@ func (x *BlobAuthHeader) GetChallengeParameter() uint32 { return 0 } +// AuthenticationData contains the signature of the BlobAuthHeader. type AuthenticationData struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -348,7 +358,7 @@ type DisperseBlobRequest struct { unknownFields protoimpl.UnknownFields // The data to be dispersed. - // The size of data must be <= 512KiB. + // The size of data must be <= 2MiB. Data []byte `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` // Security parameters allowing clients to customize the safety (via adversary threshold) // and liveness (via quorum threshold). @@ -356,7 +366,9 @@ type DisperseBlobRequest struct { // The disperser will ensure that the encoded blobs for each quorum are all processed // within the same batch. SecurityParams []*SecurityParams `protobuf:"bytes,2,rep,name=security_params,json=securityParams,proto3" json:"security_params,omitempty"` - AccountId string `protobuf:"bytes,3,opt,name=account_id,json=accountId,proto3" json:"account_id,omitempty"` + // The account ID of the client. This should be a hex-encoded string of the ECSDA public key + // corresponding to the key used by the client to sign the BlobAuthHeader. + AccountId string `protobuf:"bytes,3,opt,name=account_id,json=accountId,proto3" json:"account_id,omitempty"` } func (x *DisperseBlobRequest) Reset() { @@ -693,7 +705,7 @@ type SecurityParams struct { // The ID of the quorum. // The quorum must be already registered on EigenLayer. The ID must be - // in range [0, 255]. + // in range [0, 254]. QuorumId uint32 `protobuf:"varint,1,opt,name=quorum_id,json=quorumId,proto3" json:"quorum_id,omitempty"` // The max percentage of stake within the quorum that can be held by or delegated // to adversarial operators. @@ -836,8 +848,8 @@ type BlobHeader struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // KZG commitment to the blob. - Commitment []byte `protobuf:"bytes,1,opt,name=commitment,proto3" json:"commitment,omitempty"` + // KZG commitment of the blob. + Commitment *common.G1Commitment `protobuf:"bytes,1,opt,name=commitment,proto3" json:"commitment,omitempty"` // The length of the blob in symbols (each symbol is 31 bytes). DataLength uint32 `protobuf:"varint,2,opt,name=data_length,json=dataLength,proto3" json:"data_length,omitempty"` // The params of the quorums that this blob participates in. @@ -876,7 +888,7 @@ func (*BlobHeader) Descriptor() ([]byte, []int) { return file_disperser_disperser_proto_rawDescGZIP(), []int{12} } -func (x *BlobHeader) GetCommitment() []byte { +func (x *BlobHeader) GetCommitment() *common.G1Commitment { if x != nil { return x.Commitment } @@ -1166,7 +1178,8 @@ type BatchHeader struct { // The root of the merkle tree with the hashes of blob headers as leaves. BatchRoot []byte `protobuf:"bytes,1,opt,name=batch_root,json=batchRoot,proto3" json:"batch_root,omitempty"` - // All quorums associated with blobs in this batch. + // All quorums associated with blobs in this batch. Sorted in ascending order. + // Ex. [0, 2, 1] => 0x000102 QuorumNumbers []byte `protobuf:"bytes,2,opt,name=quorum_numbers,json=quorumNumbers,proto3" json:"quorum_numbers,omitempty"` // The percentage of stake that has signed for this batch. // The quorum_signed_percentages[i] is percentage for the quorum_numbers[i]. @@ -1242,190 +1255,193 @@ var File_disperser_disperser_proto protoreflect.FileDescriptor var file_disperser_disperser_proto_rawDesc = []byte{ 0x0a, 0x19, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x2f, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x09, 0x64, 0x69, 0x73, - 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x22, 0xc0, 0x01, 0x0a, 0x14, 0x41, 0x75, 0x74, 0x68, 0x65, - 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x4b, 0x0a, 0x10, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x64, 0x69, 0x73, 0x70, - 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x44, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x42, 0x6c, - 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0f, 0x64, 0x69, 0x73, - 0x70, 0x65, 0x72, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x50, 0x0a, 0x13, - 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, - 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x64, 0x69, 0x73, 0x70, - 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x12, 0x61, 0x75, 0x74, 0x68, - 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x42, 0x09, - 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0xad, 0x01, 0x0a, 0x12, 0x41, 0x75, - 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x79, - 0x12, 0x45, 0x0a, 0x10, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x68, 0x65, - 0x61, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x64, 0x69, 0x73, - 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x75, 0x74, 0x68, 0x48, - 0x65, 0x61, 0x64, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0e, 0x62, 0x6c, 0x6f, 0x62, 0x41, 0x75, 0x74, - 0x68, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x45, 0x0a, 0x0e, 0x64, 0x69, 0x73, 0x70, 0x65, - 0x72, 0x73, 0x65, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1c, 0x2e, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x44, 0x69, 0x73, 0x70, - 0x65, 0x72, 0x73, 0x65, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x48, 0x00, 0x52, - 0x0d, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x42, 0x09, - 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x41, 0x0a, 0x0e, 0x42, 0x6c, 0x6f, - 0x62, 0x41, 0x75, 0x74, 0x68, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x2f, 0x0a, 0x13, 0x63, - 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, - 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, 0x63, 0x68, 0x61, 0x6c, 0x6c, 0x65, - 0x6e, 0x67, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x22, 0x45, 0x0a, 0x12, - 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, - 0x74, 0x61, 0x12, 0x2f, 0x0a, 0x13, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x1a, 0x13, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xc0, 0x01, 0x0a, 0x14, + 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x4b, 0x0a, 0x10, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, + 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, + 0x2e, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x44, 0x69, 0x73, 0x70, 0x65, + 0x72, 0x73, 0x65, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, + 0x52, 0x0f, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x50, 0x0a, 0x13, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, + 0x2e, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x65, + 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x12, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, - 0x61, 0x74, 0x61, 0x22, 0x8c, 0x01, 0x0a, 0x13, 0x44, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, - 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x64, - 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, - 0x42, 0x0a, 0x0f, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x61, 0x72, 0x61, - 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x64, 0x69, 0x73, 0x70, 0x65, - 0x72, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x52, 0x0e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x49, 0x64, 0x22, 0x61, 0x0a, 0x11, 0x44, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x42, 0x6c, - 0x6f, 0x62, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x2d, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, - 0x73, 0x65, 0x72, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, - 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x49, 0x64, 0x22, 0x32, 0x0a, 0x11, 0x42, 0x6c, 0x6f, 0x62, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x22, 0x69, 0x0a, 0x0f, 0x42, 0x6c, 0x6f, - 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x2d, 0x0a, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x64, + 0x61, 0x74, 0x61, 0x42, 0x09, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0xad, + 0x01, 0x0a, 0x12, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, + 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x45, 0x0a, 0x10, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x61, 0x75, + 0x74, 0x68, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x19, 0x2e, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x42, 0x6c, 0x6f, 0x62, + 0x41, 0x75, 0x74, 0x68, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0e, 0x62, 0x6c, + 0x6f, 0x62, 0x41, 0x75, 0x74, 0x68, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x45, 0x0a, 0x0e, + 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x79, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, + 0x2e, 0x44, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x70, + 0x6c, 0x79, 0x48, 0x00, 0x52, 0x0d, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x52, 0x65, + 0x70, 0x6c, 0x79, 0x42, 0x09, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x41, + 0x0a, 0x0e, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x75, 0x74, 0x68, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, + 0x12, 0x2f, 0x0a, 0x13, 0x63, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x5f, 0x70, 0x61, + 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, 0x63, + 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, + 0x72, 0x22, 0x45, 0x0a, 0x12, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2f, 0x0a, 0x13, 0x61, 0x75, 0x74, 0x68, 0x65, + 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x12, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x22, 0x8c, 0x01, 0x0a, 0x13, 0x44, 0x69, 0x73, + 0x70, 0x65, 0x72, 0x73, 0x65, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, + 0x64, 0x61, 0x74, 0x61, 0x12, 0x42, 0x0a, 0x0f, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, + 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, + 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, + 0x74, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x0e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, + 0x74, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x61, 0x0a, 0x11, 0x44, 0x69, 0x73, 0x70, 0x65, + 0x72, 0x73, 0x65, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x2d, 0x0a, 0x06, + 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x27, 0x0a, 0x04, 0x69, - 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x64, 0x69, 0x73, 0x70, - 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, - 0x69, 0x6e, 0x66, 0x6f, 0x22, 0x60, 0x0a, 0x13, 0x52, 0x65, 0x74, 0x72, 0x69, 0x65, 0x76, 0x65, - 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x11, 0x62, - 0x61, 0x74, 0x63, 0x68, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x68, 0x61, 0x73, 0x68, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x62, 0x61, 0x74, 0x63, 0x68, 0x48, 0x65, 0x61, - 0x64, 0x65, 0x72, 0x48, 0x61, 0x73, 0x68, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x6c, 0x6f, 0x62, 0x5f, - 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x62, 0x6c, 0x6f, - 0x62, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x22, 0x27, 0x0a, 0x11, 0x52, 0x65, 0x74, 0x72, 0x69, 0x65, - 0x76, 0x65, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x64, - 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, - 0x89, 0x01, 0x0a, 0x0e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x49, 0x64, 0x12, - 0x2f, 0x0a, 0x13, 0x61, 0x64, 0x76, 0x65, 0x72, 0x73, 0x61, 0x72, 0x79, 0x5f, 0x74, 0x68, 0x72, - 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, 0x61, 0x64, - 0x76, 0x65, 0x72, 0x73, 0x61, 0x72, 0x79, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, - 0x12, 0x29, 0x0a, 0x10, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, - 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x71, 0x75, 0x6f, 0x72, - 0x75, 0x6d, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x22, 0x9c, 0x01, 0x0a, 0x08, - 0x42, 0x6c, 0x6f, 0x62, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x36, 0x0a, 0x0b, 0x62, 0x6c, 0x6f, 0x62, - 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, - 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x48, 0x65, - 0x61, 0x64, 0x65, 0x72, 0x52, 0x0a, 0x62, 0x6c, 0x6f, 0x62, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, - 0x12, 0x58, 0x0a, 0x17, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x20, 0x2e, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x42, 0x6c, - 0x6f, 0x62, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, - 0x6f, 0x6f, 0x66, 0x52, 0x15, 0x62, 0x6c, 0x6f, 0x62, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x22, 0x97, 0x01, 0x0a, 0x0a, 0x42, - 0x6c, 0x6f, 0x62, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, - 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x63, - 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x61, 0x74, - 0x61, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, - 0x64, 0x61, 0x74, 0x61, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x48, 0x0a, 0x12, 0x62, 0x6c, - 0x6f, 0x62, 0x5f, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, - 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, - 0x65, 0x72, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x51, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x52, 0x10, 0x62, 0x6c, 0x6f, 0x62, 0x51, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x22, 0xdf, 0x01, 0x0a, 0x0f, 0x42, 0x6c, 0x6f, 0x62, 0x51, 0x75, 0x6f, - 0x72, 0x75, 0x6d, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x23, 0x0a, 0x0d, 0x71, 0x75, 0x6f, 0x72, - 0x75, 0x6d, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x0c, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x44, 0x0a, - 0x1e, 0x61, 0x64, 0x76, 0x65, 0x72, 0x73, 0x61, 0x72, 0x79, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, - 0x68, 0x6f, 0x6c, 0x64, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x1c, 0x61, 0x64, 0x76, 0x65, 0x72, 0x73, 0x61, 0x72, 0x79, - 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, - 0x61, 0x67, 0x65, 0x12, 0x3e, 0x0a, 0x1b, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x5f, 0x74, 0x68, - 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, - 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x19, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, - 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, - 0x61, 0x67, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x5f, 0x6c, 0x65, 0x6e, - 0x67, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x63, 0x68, 0x75, 0x6e, 0x6b, - 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0xe2, 0x01, 0x0a, 0x15, 0x42, 0x6c, 0x6f, 0x62, 0x56, - 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x6f, 0x66, - 0x12, 0x19, 0x0a, 0x08, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x07, 0x62, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x62, - 0x6c, 0x6f, 0x62, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x09, 0x62, 0x6c, 0x6f, 0x62, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x3f, 0x0a, 0x0e, 0x62, 0x61, - 0x74, 0x63, 0x68, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x42, - 0x61, 0x74, 0x63, 0x68, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x0d, 0x62, 0x61, - 0x74, 0x63, 0x68, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x27, 0x0a, 0x0f, 0x69, - 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x50, - 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x25, 0x0a, 0x0e, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x5f, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x71, 0x75, - 0x6f, 0x72, 0x75, 0x6d, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x65, 0x73, 0x22, 0xf8, 0x01, 0x0a, 0x0d, - 0x42, 0x61, 0x74, 0x63, 0x68, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x39, 0x0a, - 0x0c, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, - 0x42, 0x61, 0x74, 0x63, 0x68, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x0b, 0x62, 0x61, 0x74, - 0x63, 0x68, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x32, 0x0a, 0x15, 0x73, 0x69, 0x67, 0x6e, - 0x61, 0x74, 0x6f, 0x72, 0x79, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x68, 0x61, 0x73, - 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x13, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x6f, - 0x72, 0x79, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x48, 0x61, 0x73, 0x68, 0x12, 0x10, 0x0a, 0x03, - 0x66, 0x65, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x66, 0x65, 0x65, 0x12, 0x3a, - 0x0a, 0x19, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x17, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x2a, 0x0a, 0x11, 0x62, 0x61, - 0x74, 0x63, 0x68, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x62, 0x61, 0x74, 0x63, 0x68, 0x48, 0x65, 0x61, 0x64, - 0x65, 0x72, 0x48, 0x61, 0x73, 0x68, 0x22, 0xc5, 0x01, 0x0a, 0x0b, 0x42, 0x61, 0x74, 0x63, 0x68, - 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, - 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x62, 0x61, 0x74, 0x63, - 0x68, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x5f, - 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x71, - 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x3a, 0x0a, 0x19, - 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x70, 0x65, - 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x17, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x50, 0x65, 0x72, - 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x73, 0x12, 0x34, 0x0a, 0x16, 0x72, 0x65, 0x66, 0x65, - 0x72, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x6e, 0x75, 0x6d, 0x62, - 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x14, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, - 0x6e, 0x63, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x2a, 0x70, - 0x0a, 0x0a, 0x42, 0x6c, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0b, 0x0a, 0x07, - 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x50, 0x52, 0x4f, - 0x43, 0x45, 0x53, 0x53, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x4f, 0x4e, - 0x46, 0x49, 0x52, 0x4d, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x46, 0x41, 0x49, 0x4c, - 0x45, 0x44, 0x10, 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x46, 0x49, 0x4e, 0x41, 0x4c, 0x49, 0x5a, 0x45, - 0x44, 0x10, 0x04, 0x12, 0x1b, 0x0a, 0x17, 0x49, 0x4e, 0x53, 0x55, 0x46, 0x46, 0x49, 0x43, 0x49, - 0x45, 0x4e, 0x54, 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x41, 0x54, 0x55, 0x52, 0x45, 0x53, 0x10, 0x05, - 0x32, 0xd9, 0x02, 0x0a, 0x09, 0x44, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x12, 0x4e, - 0x0a, 0x0c, 0x44, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x42, 0x6c, 0x6f, 0x62, 0x12, 0x1e, - 0x2e, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x44, 0x69, 0x73, 0x70, 0x65, - 0x72, 0x73, 0x65, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, - 0x2e, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x44, 0x69, 0x73, 0x70, 0x65, - 0x72, 0x73, 0x65, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x5f, - 0x0a, 0x19, 0x44, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x75, - 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x1f, 0x2e, 0x64, 0x69, - 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, - 0x63, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x64, - 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, - 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x28, 0x01, 0x30, 0x01, 0x12, - 0x4b, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x12, 0x1c, 0x2e, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x42, 0x6c, 0x6f, - 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, - 0x2e, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x0c, - 0x52, 0x65, 0x74, 0x72, 0x69, 0x65, 0x76, 0x65, 0x42, 0x6c, 0x6f, 0x62, 0x12, 0x1e, 0x2e, 0x64, - 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x74, 0x72, 0x69, 0x65, 0x76, - 0x65, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x64, - 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x74, 0x72, 0x69, 0x65, 0x76, - 0x65, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x42, 0x31, 0x5a, 0x2f, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4c, 0x61, 0x79, 0x72, 0x2d, - 0x4c, 0x61, 0x62, 0x73, 0x2f, 0x65, 0x69, 0x67, 0x65, 0x6e, 0x64, 0x61, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x62, - 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x74, 0x75, 0x73, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x22, 0x32, 0x0a, 0x11, 0x42, 0x6c, + 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x22, 0x69, + 0x0a, 0x0f, 0x42, 0x6c, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x70, 0x6c, + 0x79, 0x12, 0x2d, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x15, 0x2e, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x42, 0x6c, + 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x12, 0x27, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, + 0x2e, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x49, + 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x22, 0x60, 0x0a, 0x13, 0x52, 0x65, 0x74, + 0x72, 0x69, 0x65, 0x76, 0x65, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x2a, 0x0a, 0x11, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, + 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x62, 0x61, 0x74, + 0x63, 0x68, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x48, 0x61, 0x73, 0x68, 0x12, 0x1d, 0x0a, 0x0a, + 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x62, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x22, 0x27, 0x0a, 0x11, 0x52, + 0x65, 0x74, 0x72, 0x69, 0x65, 0x76, 0x65, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x70, 0x6c, 0x79, + 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, + 0x64, 0x61, 0x74, 0x61, 0x22, 0x89, 0x01, 0x0a, 0x0e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, + 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x71, 0x75, 0x6f, 0x72, 0x75, + 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x71, 0x75, 0x6f, 0x72, + 0x75, 0x6d, 0x49, 0x64, 0x12, 0x2f, 0x0a, 0x13, 0x61, 0x64, 0x76, 0x65, 0x72, 0x73, 0x61, 0x72, + 0x79, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x12, 0x61, 0x64, 0x76, 0x65, 0x72, 0x73, 0x61, 0x72, 0x79, 0x54, 0x68, 0x72, 0x65, + 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x29, 0x0a, 0x10, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x5f, + 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x0f, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, + 0x22, 0x9c, 0x01, 0x0a, 0x08, 0x42, 0x6c, 0x6f, 0x62, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x36, 0x0a, + 0x0b, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x42, + 0x6c, 0x6f, 0x62, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x0a, 0x62, 0x6c, 0x6f, 0x62, 0x48, + 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x58, 0x0a, 0x17, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x76, 0x65, + 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x6f, 0x66, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, + 0x65, 0x72, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x15, 0x62, 0x6c, 0x6f, 0x62, 0x56, 0x65, + 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x22, + 0xad, 0x01, 0x0a, 0x0a, 0x42, 0x6c, 0x6f, 0x62, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x34, + 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x47, 0x31, 0x43, 0x6f, + 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x6c, 0x65, 0x6e, + 0x67, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x4c, + 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x48, 0x0a, 0x12, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x71, 0x75, + 0x6f, 0x72, 0x75, 0x6d, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x42, 0x6c, + 0x6f, 0x62, 0x51, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x10, 0x62, + 0x6c, 0x6f, 0x62, 0x51, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, + 0xdf, 0x01, 0x0a, 0x0f, 0x42, 0x6c, 0x6f, 0x62, 0x51, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x12, 0x23, 0x0a, 0x0d, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x5f, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x71, 0x75, 0x6f, 0x72, + 0x75, 0x6d, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x44, 0x0a, 0x1e, 0x61, 0x64, 0x76, 0x65, + 0x72, 0x73, 0x61, 0x72, 0x79, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x5f, + 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x1c, 0x61, 0x64, 0x76, 0x65, 0x72, 0x73, 0x61, 0x72, 0x79, 0x54, 0x68, 0x72, 0x65, 0x73, + 0x68, 0x6f, 0x6c, 0x64, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x12, 0x3e, + 0x0a, 0x1b, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, + 0x6c, 0x64, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x19, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x54, 0x68, 0x72, 0x65, 0x73, + 0x68, 0x6f, 0x6c, 0x64, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x12, 0x21, + 0x0a, 0x0c, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x4c, 0x65, 0x6e, 0x67, 0x74, + 0x68, 0x22, 0xe2, 0x01, 0x0a, 0x15, 0x42, 0x6c, 0x6f, 0x62, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x19, 0x0a, 0x08, 0x62, + 0x61, 0x74, 0x63, 0x68, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x62, + 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x69, + 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x62, + 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x3f, 0x0a, 0x0e, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x6d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, + 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x0d, 0x62, 0x61, 0x74, 0x63, 0x68, 0x4d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x27, 0x0a, 0x0f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x73, + 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, + 0x25, 0x0a, 0x0e, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x65, + 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x49, + 0x6e, 0x64, 0x65, 0x78, 0x65, 0x73, 0x22, 0xf8, 0x01, 0x0a, 0x0d, 0x42, 0x61, 0x74, 0x63, 0x68, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x39, 0x0a, 0x0c, 0x62, 0x61, 0x74, 0x63, + 0x68, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, + 0x2e, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, + 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x0b, 0x62, 0x61, 0x74, 0x63, 0x68, 0x48, 0x65, 0x61, + 0x64, 0x65, 0x72, 0x12, 0x32, 0x0a, 0x15, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x79, + 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x13, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x63, + 0x6f, 0x72, 0x64, 0x48, 0x61, 0x73, 0x68, 0x12, 0x10, 0x0a, 0x03, 0x66, 0x65, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x66, 0x65, 0x65, 0x12, 0x3a, 0x0a, 0x19, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x17, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x2a, 0x0a, 0x11, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x68, + 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x0f, 0x62, 0x61, 0x74, 0x63, 0x68, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x48, 0x61, 0x73, + 0x68, 0x22, 0xc5, 0x01, 0x0a, 0x0b, 0x42, 0x61, 0x74, 0x63, 0x68, 0x48, 0x65, 0x61, 0x64, 0x65, + 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x62, 0x61, 0x74, 0x63, 0x68, 0x52, 0x6f, 0x6f, 0x74, + 0x12, 0x25, 0x0a, 0x0e, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, + 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x3a, 0x0a, 0x19, 0x71, 0x75, 0x6f, 0x72, 0x75, + 0x6d, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, + 0x61, 0x67, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x17, 0x71, 0x75, 0x6f, 0x72, + 0x75, 0x6d, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, + 0x67, 0x65, 0x73, 0x12, 0x34, 0x0a, 0x16, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, + 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x14, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x2a, 0x70, 0x0a, 0x0a, 0x42, 0x6c, 0x6f, + 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, + 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x50, 0x52, 0x4f, 0x43, 0x45, 0x53, 0x53, 0x49, + 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x52, 0x4d, 0x45, + 0x44, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x03, 0x12, + 0x0d, 0x0a, 0x09, 0x46, 0x49, 0x4e, 0x41, 0x4c, 0x49, 0x5a, 0x45, 0x44, 0x10, 0x04, 0x12, 0x1b, + 0x0a, 0x17, 0x49, 0x4e, 0x53, 0x55, 0x46, 0x46, 0x49, 0x43, 0x49, 0x45, 0x4e, 0x54, 0x5f, 0x53, + 0x49, 0x47, 0x4e, 0x41, 0x54, 0x55, 0x52, 0x45, 0x53, 0x10, 0x05, 0x32, 0xd9, 0x02, 0x0a, 0x09, + 0x44, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x12, 0x4e, 0x0a, 0x0c, 0x44, 0x69, 0x73, + 0x70, 0x65, 0x72, 0x73, 0x65, 0x42, 0x6c, 0x6f, 0x62, 0x12, 0x1e, 0x2e, 0x64, 0x69, 0x73, 0x70, + 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x44, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x42, 0x6c, + 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x64, 0x69, 0x73, 0x70, + 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x44, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x42, 0x6c, + 0x6f, 0x62, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x5f, 0x0a, 0x19, 0x44, 0x69, 0x73, + 0x70, 0x65, 0x72, 0x73, 0x65, 0x42, 0x6c, 0x6f, 0x62, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, + 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x1f, 0x2e, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, + 0x65, 0x72, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, + 0x73, 0x65, 0x72, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, + 0x64, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x28, 0x01, 0x30, 0x01, 0x12, 0x4b, 0x0a, 0x0d, 0x47, 0x65, + 0x74, 0x42, 0x6c, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1c, 0x2e, 0x64, 0x69, + 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x64, 0x69, 0x73, 0x70, + 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x0c, 0x52, 0x65, 0x74, 0x72, 0x69, + 0x65, 0x76, 0x65, 0x42, 0x6c, 0x6f, 0x62, 0x12, 0x1e, 0x2e, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, + 0x73, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x74, 0x72, 0x69, 0x65, 0x76, 0x65, 0x42, 0x6c, 0x6f, 0x62, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, + 0x73, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x74, 0x72, 0x69, 0x65, 0x76, 0x65, 0x42, 0x6c, 0x6f, 0x62, + 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x42, 0x31, 0x5a, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4c, 0x61, 0x79, 0x72, 0x2d, 0x4c, 0x61, 0x62, 0x73, 0x2f, + 0x65, 0x69, 0x67, 0x65, 0x6e, 0x64, 0x61, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x72, 0x70, 0x63, + 0x2f, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, } var ( @@ -1461,6 +1477,7 @@ var file_disperser_disperser_proto_goTypes = []interface{}{ (*BlobVerificationProof)(nil), // 15: disperser.BlobVerificationProof (*BatchMetadata)(nil), // 16: disperser.BatchMetadata (*BatchHeader)(nil), // 17: disperser.BatchHeader + (*common.G1Commitment)(nil), // 18: common.G1Commitment } var file_disperser_disperser_proto_depIdxs = []int32{ 5, // 0: disperser.AuthenticatedRequest.disperse_request:type_name -> disperser.DisperseBlobRequest @@ -1473,22 +1490,23 @@ var file_disperser_disperser_proto_depIdxs = []int32{ 12, // 7: disperser.BlobStatusReply.info:type_name -> disperser.BlobInfo 13, // 8: disperser.BlobInfo.blob_header:type_name -> disperser.BlobHeader 15, // 9: disperser.BlobInfo.blob_verification_proof:type_name -> disperser.BlobVerificationProof - 14, // 10: disperser.BlobHeader.blob_quorum_params:type_name -> disperser.BlobQuorumParam - 16, // 11: disperser.BlobVerificationProof.batch_metadata:type_name -> disperser.BatchMetadata - 17, // 12: disperser.BatchMetadata.batch_header:type_name -> disperser.BatchHeader - 5, // 13: disperser.Disperser.DisperseBlob:input_type -> disperser.DisperseBlobRequest - 1, // 14: disperser.Disperser.DisperseBlobAuthenticated:input_type -> disperser.AuthenticatedRequest - 7, // 15: disperser.Disperser.GetBlobStatus:input_type -> disperser.BlobStatusRequest - 9, // 16: disperser.Disperser.RetrieveBlob:input_type -> disperser.RetrieveBlobRequest - 6, // 17: disperser.Disperser.DisperseBlob:output_type -> disperser.DisperseBlobReply - 2, // 18: disperser.Disperser.DisperseBlobAuthenticated:output_type -> disperser.AuthenticatedReply - 8, // 19: disperser.Disperser.GetBlobStatus:output_type -> disperser.BlobStatusReply - 10, // 20: disperser.Disperser.RetrieveBlob:output_type -> disperser.RetrieveBlobReply - 17, // [17:21] is the sub-list for method output_type - 13, // [13:17] is the sub-list for method input_type - 13, // [13:13] is the sub-list for extension type_name - 13, // [13:13] is the sub-list for extension extendee - 0, // [0:13] is the sub-list for field type_name + 18, // 10: disperser.BlobHeader.commitment:type_name -> common.G1Commitment + 14, // 11: disperser.BlobHeader.blob_quorum_params:type_name -> disperser.BlobQuorumParam + 16, // 12: disperser.BlobVerificationProof.batch_metadata:type_name -> disperser.BatchMetadata + 17, // 13: disperser.BatchMetadata.batch_header:type_name -> disperser.BatchHeader + 5, // 14: disperser.Disperser.DisperseBlob:input_type -> disperser.DisperseBlobRequest + 1, // 15: disperser.Disperser.DisperseBlobAuthenticated:input_type -> disperser.AuthenticatedRequest + 7, // 16: disperser.Disperser.GetBlobStatus:input_type -> disperser.BlobStatusRequest + 9, // 17: disperser.Disperser.RetrieveBlob:input_type -> disperser.RetrieveBlobRequest + 6, // 18: disperser.Disperser.DisperseBlob:output_type -> disperser.DisperseBlobReply + 2, // 19: disperser.Disperser.DisperseBlobAuthenticated:output_type -> disperser.AuthenticatedReply + 8, // 20: disperser.Disperser.GetBlobStatus:output_type -> disperser.BlobStatusReply + 10, // 21: disperser.Disperser.RetrieveBlob:output_type -> disperser.RetrieveBlobReply + 18, // [18:22] is the sub-list for method output_type + 14, // [14:18] is the sub-list for method input_type + 14, // [14:14] is the sub-list for extension type_name + 14, // [14:14] is the sub-list for extension extendee + 0, // [0:14] is the sub-list for field type_name } func init() { file_disperser_disperser_proto_init() } diff --git a/api/grpc/disperser/disperser_grpc.pb.go b/api/grpc/disperser/disperser_grpc.pb.go index 31233798f9..b0ddb284aa 100644 --- a/api/grpc/disperser/disperser_grpc.pb.go +++ b/api/grpc/disperser/disperser_grpc.pb.go @@ -27,6 +27,14 @@ type DisperserClient interface { // is accepted. The client could use GetBlobStatus() API to poll the the // processing status of the blob. DisperseBlob(ctx context.Context, in *DisperseBlobRequest, opts ...grpc.CallOption) (*DisperseBlobReply, error) + // DisperseBlobAuthenticated is similar to DisperseBlob, except that it requires the + // client to authenticate itself via the AuthenticationData message. The protoco is as follows: + // 1. The client sends a DisperseBlobAuthenticated request with the DisperseBlobRequest message + // 2. The Disperser sends back a BlobAuthHeader message containing information for the client to + // verify and sign. + // 3. The client verifies the BlobAuthHeader and sends back the signed BlobAuthHeader in an + // AuthenticationData message. + // 4. The Disperser verifies the signature and returns a DisperseBlobReply message. DisperseBlobAuthenticated(ctx context.Context, opts ...grpc.CallOption) (Disperser_DisperseBlobAuthenticatedClient, error) // This API is meant to be polled for the blob status. GetBlobStatus(ctx context.Context, in *BlobStatusRequest, opts ...grpc.CallOption) (*BlobStatusReply, error) @@ -114,6 +122,14 @@ type DisperserServer interface { // is accepted. The client could use GetBlobStatus() API to poll the the // processing status of the blob. DisperseBlob(context.Context, *DisperseBlobRequest) (*DisperseBlobReply, error) + // DisperseBlobAuthenticated is similar to DisperseBlob, except that it requires the + // client to authenticate itself via the AuthenticationData message. The protoco is as follows: + // 1. The client sends a DisperseBlobAuthenticated request with the DisperseBlobRequest message + // 2. The Disperser sends back a BlobAuthHeader message containing information for the client to + // verify and sign. + // 3. The client verifies the BlobAuthHeader and sends back the signed BlobAuthHeader in an + // AuthenticationData message. + // 4. The Disperser verifies the signature and returns a DisperseBlobReply message. DisperseBlobAuthenticated(Disperser_DisperseBlobAuthenticatedServer) error // This API is meant to be polled for the blob status. GetBlobStatus(context.Context, *BlobStatusRequest) (*BlobStatusReply, error) diff --git a/api/grpc/node/node.pb.go b/api/grpc/node/node.pb.go index 1ca06a40c6..772ba14ea4 100644 --- a/api/grpc/node/node.pb.go +++ b/api/grpc/node/node.pb.go @@ -7,6 +7,7 @@ package node import ( + common "github.com/Layr-Labs/eigenda/api/grpc/common" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" @@ -139,7 +140,7 @@ type RetrieveChunksRequest struct { BlobIndex uint32 `protobuf:"varint,2,opt,name=blob_index,json=blobIndex,proto3" json:"blob_index,omitempty"` // Which quorum of the blob to retrieve for (note: a blob can have multiple // quorums and the chunks for different quorums at a Node can be different). - // The ID must be in range [0, 255]. + // The ID must be in range [0, 254]. QuorumId uint32 `protobuf:"varint,3,opt,name=quorum_id,json=quorumId,proto3" json:"quorum_id,omitempty"` } @@ -540,29 +541,107 @@ func (x *Bundle) GetChunks() [][]byte { return nil } +type G2Commitment struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The A0 element of the X coordinate of G2 point. + XA0 []byte `protobuf:"bytes,1,opt,name=x_a0,json=xA0,proto3" json:"x_a0,omitempty"` + // The A1 element of the X coordinate of G2 point. + XA1 []byte `protobuf:"bytes,2,opt,name=x_a1,json=xA1,proto3" json:"x_a1,omitempty"` + // The A0 element of the Y coordinate of G2 point. + YA0 []byte `protobuf:"bytes,3,opt,name=y_a0,json=yA0,proto3" json:"y_a0,omitempty"` + // The A1 element of the Y coordinate of G2 point. + YA1 []byte `protobuf:"bytes,4,opt,name=y_a1,json=yA1,proto3" json:"y_a1,omitempty"` +} + +func (x *G2Commitment) Reset() { + *x = G2Commitment{} + if protoimpl.UnsafeEnabled { + mi := &file_node_node_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *G2Commitment) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*G2Commitment) ProtoMessage() {} + +func (x *G2Commitment) ProtoReflect() protoreflect.Message { + mi := &file_node_node_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use G2Commitment.ProtoReflect.Descriptor instead. +func (*G2Commitment) Descriptor() ([]byte, []int) { + return file_node_node_proto_rawDescGZIP(), []int{9} +} + +func (x *G2Commitment) GetXA0() []byte { + if x != nil { + return x.XA0 + } + return nil +} + +func (x *G2Commitment) GetXA1() []byte { + if x != nil { + return x.XA1 + } + return nil +} + +func (x *G2Commitment) GetYA0() []byte { + if x != nil { + return x.YA0 + } + return nil +} + +func (x *G2Commitment) GetYA1() []byte { + if x != nil { + return x.YA1 + } + return nil +} + type BlobHeader struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The KZG commitment to the polynomial representing the blob. - Commitment []byte `protobuf:"bytes,1,opt,name=commitment,proto3" json:"commitment,omitempty"` + Commitment *common.G1Commitment `protobuf:"bytes,1,opt,name=commitment,proto3" json:"commitment,omitempty"` + // The KZG commitment to the polynomial representing the blob on G2, it is used + // for proving the degree of the polynomial + LengthCommitment *G2Commitment `protobuf:"bytes,2,opt,name=length_commitment,json=lengthCommitment,proto3" json:"length_commitment,omitempty"` // The low degree proof. It's the KZG commitment to the polynomial shifted to // the largest SRS degree. - LengthProof []byte `protobuf:"bytes,2,opt,name=length_proof,json=lengthProof,proto3" json:"length_proof,omitempty"` + LengthProof *G2Commitment `protobuf:"bytes,3,opt,name=length_proof,json=lengthProof,proto3" json:"length_proof,omitempty"` // The length of the original blob in number of symbols (in the field where // the polynomial is defined). - Length uint32 `protobuf:"varint,3,opt,name=length,proto3" json:"length,omitempty"` + Length uint32 `protobuf:"varint,4,opt,name=length,proto3" json:"length,omitempty"` // The params of the quorums that this blob participates in. - QuorumHeaders []*BlobQuorumInfo `protobuf:"bytes,4,rep,name=quorum_headers,json=quorumHeaders,proto3" json:"quorum_headers,omitempty"` + QuorumHeaders []*BlobQuorumInfo `protobuf:"bytes,5,rep,name=quorum_headers,json=quorumHeaders,proto3" json:"quorum_headers,omitempty"` // The ID of the user who is dispersing this blob to EigenDA. - AccountId string `protobuf:"bytes,5,opt,name=account_id,json=accountId,proto3" json:"account_id,omitempty"` + AccountId string `protobuf:"bytes,6,opt,name=account_id,json=accountId,proto3" json:"account_id,omitempty"` } func (x *BlobHeader) Reset() { *x = BlobHeader{} if protoimpl.UnsafeEnabled { - mi := &file_node_node_proto_msgTypes[9] + mi := &file_node_node_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -575,7 +654,7 @@ func (x *BlobHeader) String() string { func (*BlobHeader) ProtoMessage() {} func (x *BlobHeader) ProtoReflect() protoreflect.Message { - mi := &file_node_node_proto_msgTypes[9] + mi := &file_node_node_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -588,17 +667,24 @@ func (x *BlobHeader) ProtoReflect() protoreflect.Message { // Deprecated: Use BlobHeader.ProtoReflect.Descriptor instead. func (*BlobHeader) Descriptor() ([]byte, []int) { - return file_node_node_proto_rawDescGZIP(), []int{9} + return file_node_node_proto_rawDescGZIP(), []int{10} } -func (x *BlobHeader) GetCommitment() []byte { +func (x *BlobHeader) GetCommitment() *common.G1Commitment { if x != nil { return x.Commitment } return nil } -func (x *BlobHeader) GetLengthProof() []byte { +func (x *BlobHeader) GetLengthCommitment() *G2Commitment { + if x != nil { + return x.LengthCommitment + } + return nil +} + +func (x *BlobHeader) GetLengthProof() *G2Commitment { if x != nil { return x.LengthProof } @@ -643,7 +729,7 @@ type BlobQuorumInfo struct { func (x *BlobQuorumInfo) Reset() { *x = BlobQuorumInfo{} if protoimpl.UnsafeEnabled { - mi := &file_node_node_proto_msgTypes[10] + mi := &file_node_node_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -656,7 +742,7 @@ func (x *BlobQuorumInfo) String() string { func (*BlobQuorumInfo) ProtoMessage() {} func (x *BlobQuorumInfo) ProtoReflect() protoreflect.Message { - mi := &file_node_node_proto_msgTypes[10] + mi := &file_node_node_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -669,7 +755,7 @@ func (x *BlobQuorumInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use BlobQuorumInfo.ProtoReflect.Descriptor instead. func (*BlobQuorumInfo) Descriptor() ([]byte, []int) { - return file_node_node_proto_rawDescGZIP(), []int{10} + return file_node_node_proto_rawDescGZIP(), []int{11} } func (x *BlobQuorumInfo) GetQuorumId() uint32 { @@ -722,7 +808,7 @@ type BatchHeader struct { func (x *BatchHeader) Reset() { *x = BatchHeader{} if protoimpl.UnsafeEnabled { - mi := &file_node_node_proto_msgTypes[11] + mi := &file_node_node_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -735,7 +821,7 @@ func (x *BatchHeader) String() string { func (*BatchHeader) ProtoMessage() {} func (x *BatchHeader) ProtoReflect() protoreflect.Message { - mi := &file_node_node_proto_msgTypes[11] + mi := &file_node_node_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -748,7 +834,7 @@ func (x *BatchHeader) ProtoReflect() protoreflect.Message { // Deprecated: Use BatchHeader.ProtoReflect.Descriptor instead. func (*BatchHeader) Descriptor() ([]byte, []int) { - return file_node_node_proto_rawDescGZIP(), []int{11} + return file_node_node_proto_rawDescGZIP(), []int{12} } func (x *BatchHeader) GetBatchRoot() []byte { @@ -769,105 +855,118 @@ var File_node_node_proto protoreflect.FileDescriptor var file_node_node_proto_rawDesc = []byte{ 0x0a, 0x0f, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x12, 0x04, 0x6e, 0x6f, 0x64, 0x65, 0x22, 0x6c, 0x0a, 0x12, 0x53, 0x74, 0x6f, 0x72, 0x65, - 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x34, 0x0a, - 0x0c, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, - 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x0b, 0x62, 0x61, 0x74, 0x63, 0x68, 0x48, 0x65, 0x61, - 0x64, 0x65, 0x72, 0x12, 0x20, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x05, - 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x22, 0x30, 0x0a, 0x10, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x68, - 0x75, 0x6e, 0x6b, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, - 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x73, 0x69, - 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0x7f, 0x0a, 0x15, 0x52, 0x65, 0x74, 0x72, 0x69, - 0x65, 0x76, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x2a, 0x0a, 0x11, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, - 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x62, 0x61, 0x74, - 0x63, 0x68, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x48, 0x61, 0x73, 0x68, 0x12, 0x1d, 0x0a, 0x0a, - 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x62, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x1b, 0x0a, 0x09, 0x71, - 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, - 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x49, 0x64, 0x22, 0x2d, 0x0a, 0x13, 0x52, 0x65, 0x74, 0x72, - 0x69, 0x65, 0x76, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, + 0x6f, 0x12, 0x04, 0x6e, 0x6f, 0x64, 0x65, 0x1a, 0x13, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x6c, 0x0a, 0x12, + 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x34, 0x0a, 0x0c, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x68, 0x65, 0x61, 0x64, + 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, + 0x42, 0x61, 0x74, 0x63, 0x68, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x0b, 0x62, 0x61, 0x74, + 0x63, 0x68, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x20, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x62, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x42, + 0x6c, 0x6f, 0x62, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x22, 0x30, 0x0a, 0x10, 0x53, 0x74, + 0x6f, 0x72, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x1c, + 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0x7f, 0x0a, 0x15, + 0x52, 0x65, 0x74, 0x72, 0x69, 0x65, 0x76, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x11, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x68, + 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x0f, 0x62, 0x61, 0x74, 0x63, 0x68, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x48, 0x61, 0x73, + 0x68, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x62, 0x49, 0x6e, 0x64, 0x65, 0x78, + 0x12, 0x1b, 0x0a, 0x09, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x08, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x49, 0x64, 0x22, 0x2d, 0x0a, + 0x13, 0x52, 0x65, 0x74, 0x72, 0x69, 0x65, 0x76, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x52, + 0x65, 0x70, 0x6c, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0c, 0x52, 0x06, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x22, 0x7e, 0x0a, 0x14, + 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x62, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x11, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x68, 0x65, + 0x61, 0x64, 0x65, 0x72, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x0f, 0x62, 0x61, 0x74, 0x63, 0x68, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x48, 0x61, 0x73, 0x68, + 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x62, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, + 0x1b, 0x0a, 0x09, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x08, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x49, 0x64, 0x22, 0x70, 0x0a, 0x12, + 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x62, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x65, 0x70, + 0x6c, 0x79, 0x12, 0x31, 0x0a, 0x0b, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, + 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x42, + 0x6c, 0x6f, 0x62, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x0a, 0x62, 0x6c, 0x6f, 0x62, 0x48, + 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x27, 0x0a, 0x05, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x4d, 0x65, 0x72, 0x6b, + 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x05, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x22, 0x3b, + 0x0a, 0x0b, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x16, 0x0a, + 0x06, 0x68, 0x61, 0x73, 0x68, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x06, 0x68, + 0x61, 0x73, 0x68, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x22, 0x58, 0x0a, 0x04, 0x42, + 0x6c, 0x6f, 0x62, 0x12, 0x28, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x48, + 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x26, 0x0a, + 0x07, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, + 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x07, 0x62, 0x75, + 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x22, 0x20, 0x0a, 0x06, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52, - 0x06, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x22, 0x7e, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x42, 0x6c, - 0x6f, 0x62, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x2a, 0x0a, 0x11, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, - 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x62, 0x61, 0x74, 0x63, - 0x68, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x48, 0x61, 0x73, 0x68, 0x12, 0x1d, 0x0a, 0x0a, 0x62, - 0x6c, 0x6f, 0x62, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x09, 0x62, 0x6c, 0x6f, 0x62, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x1b, 0x0a, 0x09, 0x71, 0x75, - 0x6f, 0x72, 0x75, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x71, - 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x49, 0x64, 0x22, 0x70, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x42, 0x6c, - 0x6f, 0x62, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x31, 0x0a, - 0x0b, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x48, 0x65, - 0x61, 0x64, 0x65, 0x72, 0x52, 0x0a, 0x62, 0x6c, 0x6f, 0x62, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, - 0x12, 0x27, 0x0a, 0x05, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x11, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x50, 0x72, 0x6f, - 0x6f, 0x66, 0x52, 0x05, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x22, 0x3b, 0x0a, 0x0b, 0x4d, 0x65, 0x72, - 0x6b, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x61, 0x73, 0x68, - 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x06, 0x68, 0x61, 0x73, 0x68, 0x65, 0x73, - 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x22, 0x58, 0x0a, 0x04, 0x42, 0x6c, 0x6f, 0x62, 0x12, 0x28, - 0x0a, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, - 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, - 0x52, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x26, 0x0a, 0x07, 0x62, 0x75, 0x6e, 0x64, - 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x6e, 0x6f, 0x64, 0x65, - 0x2e, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x07, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x73, - 0x22, 0x20, 0x0a, 0x06, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x68, - 0x75, 0x6e, 0x6b, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x06, 0x63, 0x68, 0x75, 0x6e, - 0x6b, 0x73, 0x22, 0xc3, 0x01, 0x0a, 0x0a, 0x42, 0x6c, 0x6f, 0x62, 0x48, 0x65, 0x61, 0x64, 0x65, - 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, - 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x5f, 0x70, 0x72, 0x6f, 0x6f, - 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x50, - 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x3b, 0x0a, 0x0e, - 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x04, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x62, - 0x51, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0d, 0x71, 0x75, 0x6f, 0x72, - 0x75, 0x6d, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x22, 0xca, 0x01, 0x0a, 0x0e, 0x42, 0x6c, 0x6f, - 0x62, 0x51, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1b, 0x0a, 0x09, 0x71, - 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, - 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x49, 0x64, 0x12, 0x2f, 0x0a, 0x13, 0x61, 0x64, 0x76, 0x65, - 0x72, 0x73, 0x61, 0x72, 0x79, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, 0x61, 0x64, 0x76, 0x65, 0x72, 0x73, 0x61, 0x72, 0x79, - 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x29, 0x0a, 0x10, 0x71, 0x75, 0x6f, - 0x72, 0x75, 0x6d, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x54, 0x68, 0x72, 0x65, 0x73, - 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x5f, 0x6c, 0x65, - 0x6e, 0x67, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x63, 0x68, 0x75, 0x6e, - 0x6b, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x61, 0x74, 0x65, 0x6c, - 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x72, 0x61, 0x74, 0x65, - 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x22, 0x62, 0x0a, 0x0b, 0x42, 0x61, 0x74, 0x63, 0x68, 0x48, 0x65, - 0x61, 0x64, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x72, 0x6f, - 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x62, 0x61, 0x74, 0x63, 0x68, 0x52, - 0x6f, 0x6f, 0x74, 0x12, 0x34, 0x0a, 0x16, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, - 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x14, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x32, 0x4e, 0x0a, 0x09, 0x44, 0x69, 0x73, - 0x70, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x12, 0x41, 0x0a, 0x0b, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, - 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x12, 0x18, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x53, 0x74, 0x6f, - 0x72, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x16, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x75, 0x6e, - 0x6b, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x32, 0xa0, 0x01, 0x0a, 0x09, 0x52, 0x65, - 0x74, 0x72, 0x69, 0x65, 0x76, 0x61, 0x6c, 0x12, 0x4a, 0x0a, 0x0e, 0x52, 0x65, 0x74, 0x72, 0x69, - 0x65, 0x76, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x12, 0x1b, 0x2e, 0x6e, 0x6f, 0x64, 0x65, - 0x2e, 0x52, 0x65, 0x74, 0x72, 0x69, 0x65, 0x76, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x52, 0x65, - 0x74, 0x72, 0x69, 0x65, 0x76, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x52, 0x65, 0x70, 0x6c, - 0x79, 0x22, 0x00, 0x12, 0x47, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x62, 0x48, 0x65, - 0x61, 0x64, 0x65, 0x72, 0x12, 0x1a, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, - 0x6c, 0x6f, 0x62, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x18, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x62, 0x48, - 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x42, 0x2c, 0x5a, 0x2a, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4c, 0x61, 0x79, 0x72, 0x2d, - 0x4c, 0x61, 0x62, 0x73, 0x2f, 0x65, 0x69, 0x67, 0x65, 0x6e, 0x64, 0x61, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, + 0x06, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x22, 0x5a, 0x0a, 0x0c, 0x47, 0x32, 0x43, 0x6f, 0x6d, + 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x11, 0x0a, 0x04, 0x78, 0x5f, 0x61, 0x30, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x78, 0x41, 0x30, 0x12, 0x11, 0x0a, 0x04, 0x78, 0x5f, + 0x61, 0x31, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x78, 0x41, 0x31, 0x12, 0x11, 0x0a, + 0x04, 0x79, 0x5f, 0x61, 0x30, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x79, 0x41, 0x30, + 0x12, 0x11, 0x0a, 0x04, 0x79, 0x5f, 0x61, 0x31, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, + 0x79, 0x41, 0x31, 0x22, 0xae, 0x02, 0x0a, 0x0a, 0x42, 0x6c, 0x6f, 0x62, 0x48, 0x65, 0x61, 0x64, + 0x65, 0x72, 0x12, 0x34, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, + 0x47, 0x31, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x63, 0x6f, + 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x3f, 0x0a, 0x11, 0x6c, 0x65, 0x6e, 0x67, + 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x47, 0x32, 0x43, 0x6f, 0x6d, + 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x10, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x43, + 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x35, 0x0a, 0x0c, 0x6c, 0x65, 0x6e, + 0x67, 0x74, 0x68, 0x5f, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x12, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x47, 0x32, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, + 0x65, 0x6e, 0x74, 0x52, 0x0b, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x50, 0x72, 0x6f, 0x6f, 0x66, + 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x3b, 0x0a, 0x0e, 0x71, 0x75, 0x6f, 0x72, + 0x75, 0x6d, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x14, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x51, 0x75, 0x6f, 0x72, + 0x75, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0d, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x48, 0x65, + 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x49, 0x64, 0x22, 0xca, 0x01, 0x0a, 0x0e, 0x42, 0x6c, 0x6f, 0x62, 0x51, 0x75, 0x6f, + 0x72, 0x75, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1b, 0x0a, 0x09, 0x71, 0x75, 0x6f, 0x72, 0x75, + 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x71, 0x75, 0x6f, 0x72, + 0x75, 0x6d, 0x49, 0x64, 0x12, 0x2f, 0x0a, 0x13, 0x61, 0x64, 0x76, 0x65, 0x72, 0x73, 0x61, 0x72, + 0x79, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x12, 0x61, 0x64, 0x76, 0x65, 0x72, 0x73, 0x61, 0x72, 0x79, 0x54, 0x68, 0x72, 0x65, + 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x29, 0x0a, 0x10, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x5f, + 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x0f, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, + 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x4c, 0x65, 0x6e, + 0x67, 0x74, 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x72, 0x61, 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, + 0x74, 0x22, 0x62, 0x0a, 0x0b, 0x42, 0x61, 0x74, 0x63, 0x68, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, + 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x62, 0x61, 0x74, 0x63, 0x68, 0x52, 0x6f, 0x6f, 0x74, 0x12, + 0x34, 0x0a, 0x16, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x14, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x32, 0x4e, 0x0a, 0x09, 0x44, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, + 0x61, 0x6c, 0x12, 0x41, 0x0a, 0x0b, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, + 0x73, 0x12, 0x18, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x68, + 0x75, 0x6e, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x6e, 0x6f, + 0x64, 0x65, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x52, 0x65, + 0x70, 0x6c, 0x79, 0x22, 0x00, 0x32, 0xa0, 0x01, 0x0a, 0x09, 0x52, 0x65, 0x74, 0x72, 0x69, 0x65, + 0x76, 0x61, 0x6c, 0x12, 0x4a, 0x0a, 0x0e, 0x52, 0x65, 0x74, 0x72, 0x69, 0x65, 0x76, 0x65, 0x43, + 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x12, 0x1b, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x52, 0x65, 0x74, + 0x72, 0x69, 0x65, 0x76, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x52, 0x65, 0x74, 0x72, 0x69, 0x65, + 0x76, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, + 0x47, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x62, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, + 0x12, 0x1a, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x62, 0x48, + 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x6e, + 0x6f, 0x64, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x62, 0x48, 0x65, 0x61, 0x64, 0x65, + 0x72, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x42, 0x2c, 0x5a, 0x2a, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4c, 0x61, 0x79, 0x72, 0x2d, 0x4c, 0x61, 0x62, 0x73, + 0x2f, 0x65, 0x69, 0x67, 0x65, 0x6e, 0x64, 0x61, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x72, 0x70, + 0x63, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -882,7 +981,7 @@ func file_node_node_proto_rawDescGZIP() []byte { return file_node_node_proto_rawDescData } -var file_node_node_proto_msgTypes = make([]protoimpl.MessageInfo, 12) +var file_node_node_proto_msgTypes = make([]protoimpl.MessageInfo, 13) var file_node_node_proto_goTypes = []interface{}{ (*StoreChunksRequest)(nil), // 0: node.StoreChunksRequest (*StoreChunksReply)(nil), // 1: node.StoreChunksReply @@ -893,29 +992,34 @@ var file_node_node_proto_goTypes = []interface{}{ (*MerkleProof)(nil), // 6: node.MerkleProof (*Blob)(nil), // 7: node.Blob (*Bundle)(nil), // 8: node.Bundle - (*BlobHeader)(nil), // 9: node.BlobHeader - (*BlobQuorumInfo)(nil), // 10: node.BlobQuorumInfo - (*BatchHeader)(nil), // 11: node.BatchHeader + (*G2Commitment)(nil), // 9: node.G2Commitment + (*BlobHeader)(nil), // 10: node.BlobHeader + (*BlobQuorumInfo)(nil), // 11: node.BlobQuorumInfo + (*BatchHeader)(nil), // 12: node.BatchHeader + (*common.G1Commitment)(nil), // 13: common.G1Commitment } var file_node_node_proto_depIdxs = []int32{ - 11, // 0: node.StoreChunksRequest.batch_header:type_name -> node.BatchHeader + 12, // 0: node.StoreChunksRequest.batch_header:type_name -> node.BatchHeader 7, // 1: node.StoreChunksRequest.blobs:type_name -> node.Blob - 9, // 2: node.GetBlobHeaderReply.blob_header:type_name -> node.BlobHeader + 10, // 2: node.GetBlobHeaderReply.blob_header:type_name -> node.BlobHeader 6, // 3: node.GetBlobHeaderReply.proof:type_name -> node.MerkleProof - 9, // 4: node.Blob.header:type_name -> node.BlobHeader + 10, // 4: node.Blob.header:type_name -> node.BlobHeader 8, // 5: node.Blob.bundles:type_name -> node.Bundle - 10, // 6: node.BlobHeader.quorum_headers:type_name -> node.BlobQuorumInfo - 0, // 7: node.Dispersal.StoreChunks:input_type -> node.StoreChunksRequest - 2, // 8: node.Retrieval.RetrieveChunks:input_type -> node.RetrieveChunksRequest - 4, // 9: node.Retrieval.GetBlobHeader:input_type -> node.GetBlobHeaderRequest - 1, // 10: node.Dispersal.StoreChunks:output_type -> node.StoreChunksReply - 3, // 11: node.Retrieval.RetrieveChunks:output_type -> node.RetrieveChunksReply - 5, // 12: node.Retrieval.GetBlobHeader:output_type -> node.GetBlobHeaderReply - 10, // [10:13] is the sub-list for method output_type - 7, // [7:10] is the sub-list for method input_type - 7, // [7:7] is the sub-list for extension type_name - 7, // [7:7] is the sub-list for extension extendee - 0, // [0:7] is the sub-list for field type_name + 13, // 6: node.BlobHeader.commitment:type_name -> common.G1Commitment + 9, // 7: node.BlobHeader.length_commitment:type_name -> node.G2Commitment + 9, // 8: node.BlobHeader.length_proof:type_name -> node.G2Commitment + 11, // 9: node.BlobHeader.quorum_headers:type_name -> node.BlobQuorumInfo + 0, // 10: node.Dispersal.StoreChunks:input_type -> node.StoreChunksRequest + 2, // 11: node.Retrieval.RetrieveChunks:input_type -> node.RetrieveChunksRequest + 4, // 12: node.Retrieval.GetBlobHeader:input_type -> node.GetBlobHeaderRequest + 1, // 13: node.Dispersal.StoreChunks:output_type -> node.StoreChunksReply + 3, // 14: node.Retrieval.RetrieveChunks:output_type -> node.RetrieveChunksReply + 5, // 15: node.Retrieval.GetBlobHeader:output_type -> node.GetBlobHeaderReply + 13, // [13:16] is the sub-list for method output_type + 10, // [10:13] is the sub-list for method input_type + 10, // [10:10] is the sub-list for extension type_name + 10, // [10:10] is the sub-list for extension extendee + 0, // [0:10] is the sub-list for field type_name } func init() { file_node_node_proto_init() } @@ -1033,7 +1137,7 @@ func file_node_node_proto_init() { } } file_node_node_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BlobHeader); i { + switch v := v.(*G2Commitment); i { case 0: return &v.state case 1: @@ -1045,7 +1149,7 @@ func file_node_node_proto_init() { } } file_node_node_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BlobQuorumInfo); i { + switch v := v.(*BlobHeader); i { case 0: return &v.state case 1: @@ -1057,6 +1161,18 @@ func file_node_node_proto_init() { } } file_node_node_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*BlobQuorumInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_node_node_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*BatchHeader); i { case 0: return &v.state @@ -1075,7 +1191,7 @@ func file_node_node_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_node_node_proto_rawDesc, NumEnums: 0, - NumMessages: 12, + NumMessages: 13, NumExtensions: 0, NumServices: 2, }, diff --git a/api/proto/churner/churner.proto b/api/proto/churner/churner.proto index e8fabd4493..0ab936f98b 100644 --- a/api/proto/churner/churner.proto +++ b/api/proto/churner/churner.proto @@ -18,21 +18,23 @@ service Churner { } message ChurnRequest { + // The Ethereum address (in hex like "0x123abcdef...") of the operator. + string operator_address = 1; // The operator making the churn request. - bytes operator_to_register_pubkey_g1 = 1; - bytes operator_to_register_pubkey_g2 = 2; + bytes operator_to_register_pubkey_g1 = 2; + bytes operator_to_register_pubkey_g2 = 3; // The operator's BLS signature signed on the keccak256 hash of - // concat("ChurnRequest", g1, g2, salt). - bytes operator_request_signature = 3; + // concat("ChurnRequest", operator address, g1, g2, salt). + bytes operator_request_signature = 4; // The salt used as part of the message to sign on for operator_request_signature. - bytes salt = 4; + bytes salt = 5; // The quorums to register for. // Note: // - If any of the quorum here has already been registered, this entire request // will fail to proceed. // - If any of the quorum fails to register, this entire request will fail. // The IDs must be in range [0, 255]. - repeated uint32 quorum_ids = 5; + repeated uint32 quorum_ids = 6; } message ChurnReply { diff --git a/api/proto/common/common.proto b/api/proto/common/common.proto new file mode 100644 index 0000000000..343222f88c --- /dev/null +++ b/api/proto/common/common.proto @@ -0,0 +1,10 @@ +syntax = "proto3"; +package common; +option go_package = "github.com/Layr-Labs/eigenda/api/grpc/common"; + +message G1Commitment { + // The X coordinate of the KZG commitment. This is the raw byte representation of the field element. + bytes x = 1; + // The Y coordinate of the KZG commitment. This is the raw byte representation of the field element. + bytes y = 2; +} diff --git a/api/proto/disperser/disperser.proto b/api/proto/disperser/disperser.proto index a1a231c7f8..d6e0d6e768 100644 --- a/api/proto/disperser/disperser.proto +++ b/api/proto/disperser/disperser.proto @@ -1,7 +1,7 @@ syntax = "proto3"; - -option go_package = "github.com/Layr-Labs/eigenda/api/grpc/disperser"; package disperser; +import "common/common.proto"; +option go_package = "github.com/Layr-Labs/eigenda/api/grpc/disperser"; // Disperser defines the public APIs for dispersing blobs. service Disperser { @@ -16,8 +16,8 @@ service Disperser { // client to authenticate itself via the AuthenticationData message. The protoco is as follows: // 1. The client sends a DisperseBlobAuthenticated request with the DisperseBlobRequest message // 2. The Disperser sends back a BlobAuthHeader message containing information for the client to - // verify and sign. - // 3. The client verifies the BlobAuthHeader and sends back the signed BlobAuthHeader in an + // verify and sign. + // 3. The client verifies the BlobAuthHeader and sends back the signed BlobAuthHeader in an // AuthenticationData message. // 4. The Disperser verifies the signature and returns a DisperseBlobReply message. rpc DisperseBlobAuthenticated(stream AuthenticatedRequest) returns (stream AuthenticatedReply); @@ -53,13 +53,13 @@ message AuthenticatedReply { } // BlobAuthHeader contains information about the blob for the client to verify and sign. -// - Once payments are enabled, the BlobAuthHeader the KZG commitment to the blob, which the client +// - Once payments are enabled, the BlobAuthHeader the KZG commitment to the blob, which the client // will verify and sign. Having the client verify the KZG commitment instead of calculating it avoids -// the need for the client to have the KZG structured reference string (SRS), which can be large. +// the need for the client to have the KZG structured reference string (SRS), which can be large. // The signed KZG commitment prevents the disperser from sending a different blob to the DA Nodes // than the one the client sent. // - In the meantime, the BlobAuthHeader contains a simple challenge parameter is used to prevent -// replay attacks in the event that a signature is leaked. +// replay attacks in the event that a signature is leaked. message BlobAuthHeader { uint32 challenge_parameter = 1; } @@ -71,7 +71,7 @@ message AuthenticationData { message DisperseBlobRequest { // The data to be dispersed. - // The size of data must be <= 512KiB. + // The size of data must be <= 2MiB. bytes data = 1; // Security parameters allowing clients to customize the safety (via adversary threshold) // and liveness (via quorum threshold). @@ -128,7 +128,7 @@ message RetrieveBlobReply { message SecurityParams { // The ID of the quorum. // The quorum must be already registered on EigenLayer. The ID must be - // in range [0, 255]. + // in range [0, 254]. uint32 quorum_id = 1; // The max percentage of stake within the quorum that can be held by or delegated // to adversarial operators. @@ -189,8 +189,8 @@ message BlobInfo { } message BlobHeader { - // KZG commitment to the blob. - bytes commitment = 1; + // KZG commitment of the blob. + common.G1Commitment commitment = 1; // The length of the blob in symbols (each symbol is 31 bytes). uint32 data_length = 2; // The params of the quorums that this blob participates in. diff --git a/api/proto/node/node.proto b/api/proto/node/node.proto index 04ab1b7d04..384a238be8 100644 --- a/api/proto/node/node.proto +++ b/api/proto/node/node.proto @@ -1,7 +1,7 @@ syntax = "proto3"; - -option go_package = "github.com/Layr-Labs/eigenda/api/grpc/node"; package node; +import "common/common.proto"; +option go_package = "github.com/Layr-Labs/eigenda/api/grpc/node"; // The EigenDA Node implements two services, Dispersal and Retrieval, as defined below, // for better security and separation of concerns. @@ -47,7 +47,7 @@ message RetrieveChunksRequest { uint32 blob_index = 2; // Which quorum of the blob to retrieve for (note: a blob can have multiple // quorums and the chunks for different quorums at a Node can be different). - // The ID must be in range [0, 255]. + // The ID must be in range [0, 254]. uint32 quorum_id = 3; } @@ -105,19 +105,33 @@ message Bundle { repeated bytes chunks = 1; } +message G2Commitment { + // The A0 element of the X coordinate of G2 point. + bytes x_a0 = 1; + // The A1 element of the X coordinate of G2 point. + bytes x_a1 = 2; + // The A0 element of the Y coordinate of G2 point. + bytes y_a0 = 3; + // The A1 element of the Y coordinate of G2 point. + bytes y_a1 = 4; +} + message BlobHeader { // The KZG commitment to the polynomial representing the blob. - bytes commitment = 1; + common.G1Commitment commitment = 1; + // The KZG commitment to the polynomial representing the blob on G2, it is used + // for proving the degree of the polynomial + G2Commitment length_commitment = 2; // The low degree proof. It's the KZG commitment to the polynomial shifted to // the largest SRS degree. - bytes length_proof = 2; + G2Commitment length_proof = 3; // The length of the original blob in number of symbols (in the field where // the polynomial is defined). - uint32 length = 3; + uint32 length = 4; // The params of the quorums that this blob participates in. - repeated BlobQuorumInfo quorum_headers = 4; + repeated BlobQuorumInfo quorum_headers = 5; // The ID of the user who is dispersing this blob to EigenDA. - string account_id = 5; + string account_id = 6; } // See BlobQuorumParam as defined in diff --git a/churner/churner.go b/churner/churner.go index d11ae7147c..f990bf8e75 100644 --- a/churner/churner.go +++ b/churner/churner.go @@ -21,10 +21,10 @@ import ( var ( bipMultiplier = big.NewInt(10000) secondsTillExpiry = 90 * time.Second - zeroAddressString = "0x0000000000000000000000000000000000000000" ) type ChurnRequest struct { + OperatorAddress gethcommon.Address OperatorToRegisterPubkeyG1 *core.G1Point OperatorToRegisterPubkeyG2 *core.G2Point OperatorRequestSignature *core.Signature @@ -47,7 +47,7 @@ type churner struct { mu sync.Mutex Indexer thegraph.IndexedChainState Transactor core.Transactor - QuorumCount uint16 + QuorumCount uint8 privateKey *ecdsa.PrivateKey logger common.Logger @@ -78,14 +78,7 @@ func NewChurner( } func (c *churner) VerifyRequestSignature(ctx context.Context, churnRequest *ChurnRequest) (gethcommon.Address, error) { - operatorToRegisterAddress, err := c.Transactor.OperatorIDToAddress(ctx, churnRequest.OperatorToRegisterPubkeyG1.GetOperatorID()) - if err != nil { - return gethcommon.Address{}, err - } - if operatorToRegisterAddress == gethcommon.HexToAddress(zeroAddressString) { - return gethcommon.Address{}, errors.New("operatorToRegisterPubkey is not registered with bls pubkey compendium") - } - + operatorToRegisterAddress := churnRequest.OperatorAddress isEqual, err := churnRequest.OperatorToRegisterPubkeyG1.VerifyEquivalence(churnRequest.OperatorToRegisterPubkeyG2) if err != nil { return gethcommon.Address{}, err @@ -121,7 +114,7 @@ func (c *churner) ProcessChurnRequest(ctx context.Context, operatorToRegisterAdd } } - return c.createChurnResponse(ctx, operatorToRegisterId, operatorToRegisterAddress, churnRequest.QuorumIDs) + return c.createChurnResponse(ctx, operatorToRegisterAddress, operatorToRegisterId, churnRequest.QuorumIDs) } func (c *churner) UpdateQuorumCount(ctx context.Context) error { @@ -142,8 +135,8 @@ func (c *churner) UpdateQuorumCount(ctx context.Context) error { func (c *churner) createChurnResponse( ctx context.Context, - operatorToRegisterId core.OperatorID, operatorToRegisterAddress gethcommon.Address, + operatorToRegisterId core.OperatorID, quorumIDs []core.QuorumID, ) (*ChurnResponse, error) { currentBlockNumber, err := c.Transactor.GetCurrentBlockNumber(ctx) @@ -163,7 +156,7 @@ func (c *churner) createChurnResponse( return nil, err } - signatureWithSaltAndExpiry, err := c.sign(ctx, operatorToRegisterId, operatorsToChurn) + signatureWithSaltAndExpiry, err := c.sign(ctx, operatorToRegisterAddress, operatorToRegisterId, operatorsToChurn) if err != nil { return nil, err } @@ -210,7 +203,7 @@ func (c *churner) getOperatorsToChurn(ctx context.Context, quorumIDs []uint8, op churnBIPsOfOperatorStake := big.NewInt(int64(operatorSetParams.ChurnBIPsOfOperatorStake)) churnBIPsOfTotalStake := big.NewInt(int64(operatorSetParams.ChurnBIPsOfTotalStake)) - c.logger.Info("lowestStake", "lowestStake", lowestStake.String(), "operatorToRegisterStake", operatorToRegisterStake.String(), "totalStake", totalStake.String()) + c.logger.Info("lowestStake", "lowestStake", lowestStake.String(), "operatorToRegisterStake", operatorToRegisterStake.String(), "totalStake", totalStake.String(), "operatorToRegisterAddress", operatorToRegisterAddress.Hex()) // verify the lowest stake against the registering operator's stake // make sure that: lowestStake * churnBIPsOfOperatorStake < operatorToRegisterStake * bipMultiplier @@ -256,7 +249,7 @@ func (c *churner) getOperatorsToChurn(ctx context.Context, quorumIDs []uint8, op return operatorsToChurn, nil } -func (c *churner) sign(ctx context.Context, operatorToRegisterId core.OperatorID, operatorsToChurn []core.OperatorToChurn) (*SignatureWithSaltAndExpiry, error) { +func (c *churner) sign(ctx context.Context, operatorToRegisterAddress gethcommon.Address, operatorToRegisterId core.OperatorID, operatorsToChurn []core.OperatorToChurn) (*SignatureWithSaltAndExpiry, error) { now := time.Now() privateKeyBytes := crypto.FromECDSA(c.privateKey) saltKeccak256 := crypto.Keccak256([]byte("churn"), []byte(now.String()), operatorToRegisterId[:], privateKeyBytes) @@ -268,7 +261,7 @@ func (c *churner) sign(ctx context.Context, operatorToRegisterId core.OperatorID expiry := big.NewInt(now.Add(secondsTillExpiry).Unix()) // sign and return signature - hashToSign, err := c.Transactor.CalculateOperatorChurnApprovalDigestHash(ctx, operatorToRegisterId, operatorsToChurn, salt, expiry) + hashToSign, err := c.Transactor.CalculateOperatorChurnApprovalDigestHash(ctx, operatorToRegisterAddress, operatorToRegisterId, operatorsToChurn, salt, expiry) if err != nil { return nil, err } @@ -290,6 +283,7 @@ func CalculateRequestHash(churnRequest *ChurnRequest) [32]byte { var requestHash [32]byte requestHashBytes := crypto.Keccak256( []byte("ChurnRequest"), + []byte(churnRequest.OperatorAddress.Hex()), churnRequest.OperatorToRegisterPubkeyG1.Serialize(), churnRequest.OperatorToRegisterPubkeyG2.Serialize(), churnRequest.Salt[:], diff --git a/churner/server.go b/churner/server.go index 296e93ed04..cf26f46540 100644 --- a/churner/server.go +++ b/churner/server.go @@ -8,6 +8,7 @@ import ( pb "github.com/Layr-Labs/eigenda/api/grpc/churner" "github.com/Layr-Labs/eigenda/common" "github.com/Layr-Labs/eigenda/core" + gethcommon "github.com/ethereum/go-ethereum/common" "github.com/prometheus/client_golang/prometheus" ) @@ -161,6 +162,8 @@ func (s *Server) validateChurnRequest(ctx context.Context, req *pb.ChurnRequest) func createChurnRequest(req *pb.ChurnRequest) *ChurnRequest { signature := &core.Signature{G1Point: new(core.G1Point).Deserialize(req.GetOperatorRequestSignature())} + address := gethcommon.HexToAddress(req.GetOperatorAddress()) + salt := [32]byte{} copy(salt[:], req.GetSalt()) @@ -170,6 +173,7 @@ func createChurnRequest(req *pb.ChurnRequest) *ChurnRequest { } return &ChurnRequest{ + OperatorAddress: address, OperatorToRegisterPubkeyG1: new(core.G1Point).Deserialize(req.GetOperatorToRegisterPubkeyG1()), OperatorToRegisterPubkeyG2: new(core.G2Point).Deserialize(req.GetOperatorToRegisterPubkeyG2()), OperatorRequestSignature: signature, diff --git a/churner/server_test.go b/churner/server_test.go index 377b7ddc18..04a194fec4 100644 --- a/churner/server_test.go +++ b/churner/server_test.go @@ -40,6 +40,7 @@ func TestChurn(t *testing.T) { salt := crypto.Keccak256([]byte(operatorToChurnInPrivateKeyHex), []byte("ChurnRequest")) request := &pb.ChurnRequest{ + OperatorAddress: operatorAddr.Hex(), OperatorToRegisterPubkeyG1: keyPair.PubKey.Serialize(), OperatorToRegisterPubkeyG2: keyPair.GetPubKeyG2().Serialize(), Salt: salt, @@ -49,6 +50,7 @@ func TestChurn(t *testing.T) { var requestHash [32]byte requestHashBytes := crypto.Keccak256( []byte("ChurnRequest"), + []byte(request.OperatorAddress), request.OperatorToRegisterPubkeyG1, request.OperatorToRegisterPubkeyG2, request.Salt, @@ -118,7 +120,7 @@ func setupMockTransactor() { transactorMock.On("OperatorIDToAddress").Return(operatorAddr, nil) transactorMock.On("GetCurrentQuorumBitmapByOperatorId").Return(big.NewInt(2), nil) transactorMock.On("GetCurrentBlockNumber").Return(uint32(2), nil) - transactorMock.On("GetQuorumCount").Return(uint16(1), nil) + transactorMock.On("GetQuorumCount").Return(uint8(1), nil) transactorMock.On("GetOperatorStakesForQuorums").Return(dacore.OperatorStakes{ 0: { 0: { diff --git a/churner/tests/churner_test.go b/churner/tests/churner_test.go index cdb803902b..f2ba7b8ed3 100644 --- a/churner/tests/churner_test.go +++ b/churner/tests/churner_test.go @@ -37,7 +37,7 @@ var ( logger = &commock.Logger{} mockIndexer = &indexermock.MockIndexedChainState{} rpcURL = "http://localhost:8545" - quorumIds = []uint32{0} + quorumIds = []uint32{0, 1} operatorAddr = gethcommon.HexToAddress("0x0000000000000000000000000000000000000001") churnerPrivateKeyHex = "ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80" operatorToChurnInPrivateKeyHex = "0000000000000000000000000000000000000000000000000000000000000020" @@ -89,26 +89,14 @@ func teardown() { func TestChurner(t *testing.T) { ctx := context.Background() - // get the operator to churn in's transactor and bls public key registered - op := testConfig.Operators[0] - operatorTransactor, err := createTransactorFromScratch( - op.NODE_PRIVATE_KEY, - testConfig.EigenDA.OperatorStateRetreiver, - testConfig.EigenDA.ServiceManager, - logger, - ) - assert.NoError(t, err) - keyPair, err := dacore.GenRandomBlsKeys() assert.NoError(t, err) - err = operatorTransactor.RegisterBLSPublicKey(ctx, keyPair) - assert.NoError(t, err) - server := newTestServer(t) salt := crypto.Keccak256([]byte(operatorToChurnInPrivateKeyHex), []byte("ChurnRequest")) request := &pb.ChurnRequest{ + OperatorAddress: operatorAddr.Hex(), OperatorToRegisterPubkeyG1: keyPair.PubKey.Serialize(), OperatorToRegisterPubkeyG2: keyPair.GetPubKeyG2().Serialize(), Salt: salt, @@ -118,6 +106,7 @@ func TestChurner(t *testing.T) { var requestHash [32]byte requestHashBytes := crypto.Keccak256( []byte("ChurnRequest"), + []byte(request.OperatorAddress), request.OperatorToRegisterPubkeyG1, request.OperatorToRegisterPubkeyG2, request.Salt, @@ -132,6 +121,7 @@ func TestChurner(t *testing.T) { }, nil) reply, err := server.Churn(ctx, request) + assert.NoError(t, err) assert.NotNil(t, reply) assert.NotNil(t, reply.SignatureWithSaltAndExpiry.GetSalt()) @@ -144,6 +134,7 @@ func TestChurner(t *testing.T) { assert.Equal(t, operatorAddr.Bytes(), param.GetOperator()) assert.Equal(t, keyPair.PubKey.Serialize(), param.GetPubkey()) } + } func createTransactorFromScratch(privateKey, operatorStateRetriever, serviceManager string, logger common.Logger) (*eth.Transactor, error) { diff --git a/clients/retrieval_client.go b/clients/retrieval_client.go index b395430772..d3639df65d 100644 --- a/clients/retrieval_client.go +++ b/clients/retrieval_client.go @@ -120,6 +120,13 @@ func (r *retrievalClient) RetrieveBlob( return nil, err } + // Validate the commitments are equivalent + commitmentBatch := []core.BlobCommitments{blobHeader.BlobCommitments} + err = r.encoder.VerifyCommitEquivalenceBatch(commitmentBatch) + if err != nil { + return nil, err + } + assignments, info, err := r.assignmentCoordinator.GetAssignments(indexedOperatorState.OperatorState, blobHeader.Length, quorumHeader) if err != nil { return nil, fmt.Errorf("failed to get assignments") diff --git a/clients/tests/retrieval_client_test.go b/clients/tests/retrieval_client_test.go index 86629cec82..d275870b4e 100644 --- a/clients/tests/retrieval_client_test.go +++ b/clients/tests/retrieval_client_test.go @@ -26,14 +26,15 @@ const numOperators = 10 func makeTestEncoder() (core.Encoder, error) { config := &kzgEncoder.KzgConfig{ - G1Path: "../../inabox/resources/kzg/g1.point", - G2Path: "../../inabox/resources/kzg/g2.point", - CacheDir: "../../inabox/resources/kzg/SRSTables", - SRSOrder: 3000, - NumWorker: uint64(runtime.GOMAXPROCS(0)), + G1Path: "../../inabox/resources/kzg/g1.point", + G2Path: "../../inabox/resources/kzg/g2.point", + CacheDir: "../../inabox/resources/kzg/SRSTables", + SRSOrder: 3000, + SRSNumberToLoad: 3000, + NumWorker: uint64(runtime.GOMAXPROCS(0)), } - kzgEncoderGroup, err := kzgEncoder.NewKzgEncoderGroup(config) + kzgEncoderGroup, err := kzgEncoder.NewKzgEncoderGroup(config, true) if err != nil { return nil, err } @@ -156,9 +157,10 @@ func setup(t *testing.T) { blobHeader = &core.BlobHeader{ BlobCommitments: core.BlobCommitments{ - Commitment: commitments.Commitment, - LengthProof: commitments.LengthProof, - Length: commitments.Length, + Commitment: commitments.Commitment, + LengthCommitment: commitments.LengthCommitment, + LengthProof: commitments.LengthProof, + Length: commitments.Length, }, QuorumInfos: []*core.BlobQuorumInfo{quorumHeader}, } diff --git a/common/abi.go b/common/abi.go index c86e9b88a2..ee69ba665f 100644 --- a/common/abi.go +++ b/common/abi.go @@ -9,4 +9,4 @@ import ( //go:embed abis/EigenDAServiceManager.json var ServiceManagerAbi []byte -var BatchConfirmedEventSigHash = crypto.Keccak256Hash([]byte("BatchConfirmed(bytes32,uint32,uint96)")) +var BatchConfirmedEventSigHash = crypto.Keccak256Hash([]byte("BatchConfirmed(bytes32,uint32)")) diff --git a/common/abis/EigenDAServiceManager.json b/common/abis/EigenDAServiceManager.json index d3258615d8..7465b9eb53 100644 --- a/common/abis/EigenDAServiceManager.json +++ b/common/abis/EigenDAServiceManager.json @@ -1,973 +1,2094 @@ [ { - "inputs": [ - { - "internalType": "contract IBLSRegistryCoordinatorWithIndices", - "name": "_registryCoordinator", - "type": "address" - }, - { - "internalType": "contract IStrategyManager", - "name": "_strategyManager", - "type": "address" - }, - { - "internalType": "contract IDelegationManager", - "name": "_delegationMananger", - "type": "address" - }, - { - "internalType": "contract ISlasher", - "name": "_slasher", - "type": "address" - }, - { - "internalType": "contract IPaymentManager", - "name": "_eigenDAPaymentManager", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "batchHeaderHash", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "batchId", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint96", - "name": "fee", - "type": "uint96" - } - ], - "name": "BatchConfirmed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "previousValue", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newValue", - "type": "uint256" - } - ], - "name": "FeePerBytePerTimeSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previousAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAddress", - "type": "address" - } - ], - "name": "FeeSetterChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newPausedStatus", - "type": "uint256" - } - ], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "contract IPauserRegistry", - "name": "pauserRegistry", - "type": "address" - }, - { - "indexed": false, - "internalType": "contract IPauserRegistry", - "name": "newPauserRegistry", - "type": "address" - } - ], - "name": "PauserRegistrySet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previousAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAddress", - "type": "address" - } - ], - "name": "PaymentManagerSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newPausedStatus", - "type": "uint256" - } - ], - "name": "Unpaused", - "type": "event" - }, - { - "inputs": [], - "name": "BLOCK_STALE_MEASURE", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "STORE_DURATION_BLOCKS", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "THRESHOLD_DENOMINATOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "batchId", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "name": "batchIdToBatchMetadataHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "blsPubkeyRegistry", - "outputs": [ - { - "internalType": "contract IBLSPubkeyRegistry", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "totalBytes", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feePerBytePerTime", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "storePeriodLength", - "type": "uint32" - } - ], - "name": "calculateFee", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "msgHash", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "quorumNumbers", - "type": "bytes" - }, - { - "internalType": "uint32", - "name": "referenceBlockNumber", - "type": "uint32" - }, - { - "components": [ - { - "internalType": "uint32[]", - "name": "nonSignerQuorumBitmapIndices", - "type": "uint32[]" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "X", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "Y", - "type": "uint256" - } - ], - "internalType": "struct BN254.G1Point[]", - "name": "nonSignerPubkeys", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "X", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "Y", - "type": "uint256" - } - ], - "internalType": "struct BN254.G1Point[]", - "name": "quorumApks", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "uint256[2]", - "name": "X", - "type": "uint256[2]" - }, - { - "internalType": "uint256[2]", - "name": "Y", - "type": "uint256[2]" - } - ], - "internalType": "struct BN254.G2Point", - "name": "apkG2", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "X", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "Y", - "type": "uint256" - } - ], - "internalType": "struct BN254.G1Point", - "name": "sigma", - "type": "tuple" - }, - { - "internalType": "uint32[]", - "name": "quorumApkIndices", - "type": "uint32[]" - }, - { - "internalType": "uint32[]", - "name": "totalStakeIndices", - "type": "uint32[]" - }, - { - "internalType": "uint32[][]", - "name": "nonSignerStakeIndices", - "type": "uint32[][]" - } - ], - "internalType": "struct BLSSignatureChecker.NonSignerStakesAndSignature", - "name": "nonSignerStakesAndSignature", - "type": "tuple" - } - ], - "name": "checkSignatures", - "outputs": [ - { - "components": [ - { - "internalType": "uint96[]", - "name": "signedStakeForQuorum", - "type": "uint96[]" - }, - { - "internalType": "uint96[]", - "name": "totalStakeForQuorum", - "type": "uint96[]" - } - ], - "internalType": "struct BLSSignatureChecker.QuorumStakeTotals", - "name": "", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "blobHeadersRoot", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "quorumNumbers", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "quorumThresholdPercentages", - "type": "bytes" - }, - { - "internalType": "uint32", - "name": "referenceBlockNumber", - "type": "uint32" - } - ], - "internalType": "struct IEigenDAServiceManager.BatchHeader", - "name": "batchHeader", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint32[]", - "name": "nonSignerQuorumBitmapIndices", - "type": "uint32[]" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "X", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "Y", - "type": "uint256" - } - ], - "internalType": "struct BN254.G1Point[]", - "name": "nonSignerPubkeys", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "X", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "Y", - "type": "uint256" - } - ], - "internalType": "struct BN254.G1Point[]", - "name": "quorumApks", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "uint256[2]", - "name": "X", - "type": "uint256[2]" - }, - { - "internalType": "uint256[2]", - "name": "Y", - "type": "uint256[2]" - } - ], - "internalType": "struct BN254.G2Point", - "name": "apkG2", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "X", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "Y", - "type": "uint256" - } - ], - "internalType": "struct BN254.G1Point", - "name": "sigma", - "type": "tuple" - }, - { - "internalType": "uint32[]", - "name": "quorumApkIndices", - "type": "uint32[]" - }, - { - "internalType": "uint32[]", - "name": "totalStakeIndices", - "type": "uint32[]" - }, - { - "internalType": "uint32[][]", - "name": "nonSignerStakeIndices", - "type": "uint32[][]" - } - ], - "internalType": "struct BLSSignatureChecker.NonSignerStakesAndSignature", - "name": "nonSignerStakesAndSignature", - "type": "tuple" - } - ], - "name": "confirmBatch", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delegationManager", - "outputs": [ - { - "internalType": "contract IDelegationManager", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "eigenDAPaymentManager", - "outputs": [ - { - "internalType": "contract IPaymentManager", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "feePerBytePerTime", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "feeSetter", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "freezeOperator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IPauserRegistry", - "name": "_pauserRegistry", - "type": "address" - }, - { - "internalType": "address", - "name": "initialOwner", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_feePerBytePerTime", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_feeSetter", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "latestServeUntilBlock", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "newPausedStatus", - "type": "uint256" - } - ], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "pauseAll", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pauserRegistry", - "outputs": [ - { - "internalType": "contract IPauserRegistry", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "uint32", - "name": "serveUntilBlock", - "type": "uint32" - } - ], - "name": "recordFirstStakeUpdate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "uint32", - "name": "serveUntilBlock", - "type": "uint32" - } - ], - "name": "recordLastStakeUpdateAndRevokeSlashingAbility", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "uint32", - "name": "updateBlock", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "serveUntilBlock", - "type": "uint32" - }, - { - "internalType": "uint256", - "name": "prevElement", - "type": "uint256" - } - ], - "name": "recordStakeUpdate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "registryCoordinator", - "outputs": [ - { - "internalType": "contract IRegistryCoordinator", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_feePerBytePerTime", - "type": "uint256" - } - ], - "name": "setFeePerBytePerTime", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_feeSetter", - "type": "address" - } - ], - "name": "setFeeSetter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IPauserRegistry", - "name": "newPauserRegistry", - "type": "address" - } - ], - "name": "setPauserRegistry", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "slasher", - "outputs": [ - { - "internalType": "contract ISlasher", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "stakeRegistry", - "outputs": [ - { - "internalType": "contract IStakeRegistry", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "strategyManager", - "outputs": [ - { - "internalType": "contract IStrategyManager", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "taskNumber", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "newPausedStatus", - "type": "uint256" - } - ], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "type": "constructor", + "inputs": [ + { + "name": "__delegationMananger", + "type": "address", + "internalType": "contract IDelegationManager" + }, + { + "name": "__registryCoordinator", + "type": "address", + "internalType": "contract IRegistryCoordinator" + }, + { + "name": "__stakeRegistry", + "type": "address", + "internalType": "contract IStakeRegistry" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "BLOCK_STALE_MEASURE", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint32", + "internalType": "uint32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "STORE_DURATION_BLOCKS", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint32", + "internalType": "uint32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "THRESHOLD_DENOMINATOR", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "batchConfirmer", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "batchId", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint32", + "internalType": "uint32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "batchIdToBatchMetadataHash", + "inputs": [ + { + "name": "", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "blsApkRegistry", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IBLSApkRegistry" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "checkSignatures", + "inputs": [ + { + "name": "msgHash", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "quorumNumbers", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "referenceBlockNumber", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "params", + "type": "tuple", + "internalType": "struct IBLSSignatureChecker.NonSignerStakesAndSignature", + "components": [ + { + "name": "nonSignerQuorumBitmapIndices", + "type": "uint32[]", + "internalType": "uint32[]" + }, + { + "name": "nonSignerPubkeys", + "type": "tuple[]", + "internalType": "struct BN254.G1Point[]", + "components": [ + { + "name": "X", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "Y", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "quorumApks", + "type": "tuple[]", + "internalType": "struct BN254.G1Point[]", + "components": [ + { + "name": "X", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "Y", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "apkG2", + "type": "tuple", + "internalType": "struct BN254.G2Point", + "components": [ + { + "name": "X", + "type": "uint256[2]", + "internalType": "uint256[2]" + }, + { + "name": "Y", + "type": "uint256[2]", + "internalType": "uint256[2]" + } + ] + }, + { + "name": "sigma", + "type": "tuple", + "internalType": "struct BN254.G1Point", + "components": [ + { + "name": "X", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "Y", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "quorumApkIndices", + "type": "uint32[]", + "internalType": "uint32[]" + }, + { + "name": "totalStakeIndices", + "type": "uint32[]", + "internalType": "uint32[]" + }, + { + "name": "nonSignerStakeIndices", + "type": "uint32[][]", + "internalType": "uint32[][]" + } + ] + } + ], + "outputs": [ + { + "name": "", + "type": "tuple", + "internalType": "struct IBLSSignatureChecker.QuorumStakeTotals", + "components": [ + { + "name": "signedStakeForQuorum", + "type": "uint96[]", + "internalType": "uint96[]" + }, + { + "name": "totalStakeForQuorum", + "type": "uint96[]", + "internalType": "uint96[]" + } + ] + }, + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "confirmBatch", + "inputs": [ + { + "name": "batchHeader", + "type": "tuple", + "internalType": "struct IEigenDAServiceManager.BatchHeader", + "components": [ + { + "name": "blobHeadersRoot", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "quorumNumbers", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "quorumThresholdPercentages", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "referenceBlockNumber", + "type": "uint32", + "internalType": "uint32" + } + ] + }, + { + "name": "nonSignerStakesAndSignature", + "type": "tuple", + "internalType": "struct IBLSSignatureChecker.NonSignerStakesAndSignature", + "components": [ + { + "name": "nonSignerQuorumBitmapIndices", + "type": "uint32[]", + "internalType": "uint32[]" + }, + { + "name": "nonSignerPubkeys", + "type": "tuple[]", + "internalType": "struct BN254.G1Point[]", + "components": [ + { + "name": "X", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "Y", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "quorumApks", + "type": "tuple[]", + "internalType": "struct BN254.G1Point[]", + "components": [ + { + "name": "X", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "Y", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "apkG2", + "type": "tuple", + "internalType": "struct BN254.G2Point", + "components": [ + { + "name": "X", + "type": "uint256[2]", + "internalType": "uint256[2]" + }, + { + "name": "Y", + "type": "uint256[2]", + "internalType": "uint256[2]" + } + ] + }, + { + "name": "sigma", + "type": "tuple", + "internalType": "struct BN254.G1Point", + "components": [ + { + "name": "X", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "Y", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "quorumApkIndices", + "type": "uint32[]", + "internalType": "uint32[]" + }, + { + "name": "totalStakeIndices", + "type": "uint32[]", + "internalType": "uint32[]" + }, + { + "name": "nonSignerStakeIndices", + "type": "uint32[][]", + "internalType": "uint32[][]" + } + ] + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "delegation", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IDelegationManager" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "deregisterOperatorFromAVS", + "inputs": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "getOperatorRestakedStrategies", + "inputs": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "address[]", + "internalType": "address[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getRestakeableStrategies", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address[]", + "internalType": "address[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "initialize", + "inputs": [ + { + "name": "_pauserRegistry", + "type": "address", + "internalType": "contract IPauserRegistry" + }, + { + "name": "_initialOwner", + "type": "address", + "internalType": "address" + }, + { + "name": "_batchConfirmer", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "initialize", + "inputs": [ + { + "name": "initialOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "latestServeUntilBlock", + "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": "pause", + "inputs": [ + { + "name": "newPausedStatus", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "pauseAll", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "paused", + "inputs": [ + { + "name": "index", + "type": "uint8", + "internalType": "uint8" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "paused", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "pauserRegistry", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IPauserRegistry" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "registerOperatorToAVS", + "inputs": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + }, + { + "name": "operatorSignature", + "type": "tuple", + "internalType": "struct ISignatureUtils.SignatureWithSaltAndExpiry", + "components": [ + { + "name": "signature", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "salt", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "expiry", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "registryCoordinator", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IRegistryCoordinator" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setBatchConfirmer", + "inputs": [ + { + "name": "_batchConfirmer", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setMetadataURI", + "inputs": [ + { + "name": "_metadataURI", + "type": "string", + "internalType": "string" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setPauserRegistry", + "inputs": [ + { + "name": "newPauserRegistry", + "type": "address", + "internalType": "contract IPauserRegistry" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setStaleStakesForbidden", + "inputs": [ + { + "name": "value", + "type": "bool", + "internalType": "bool" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "stakeRegistry", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IStakeRegistry" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "staleStakesForbidden", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "taskNumber", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint32", + "internalType": "uint32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "transferOwnership", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "trySignatureAndApkVerification", + "inputs": [ + { + "name": "msgHash", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "apk", + "type": "tuple", + "internalType": "struct BN254.G1Point", + "components": [ + { + "name": "X", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "Y", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "apkG2", + "type": "tuple", + "internalType": "struct BN254.G2Point", + "components": [ + { + "name": "X", + "type": "uint256[2]", + "internalType": "uint256[2]" + }, + { + "name": "Y", + "type": "uint256[2]", + "internalType": "uint256[2]" + } + ] + }, + { + "name": "sigma", + "type": "tuple", + "internalType": "struct BN254.G1Point", + "components": [ + { + "name": "X", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "Y", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "outputs": [ + { + "name": "pairingSuccessful", + "type": "bool", + "internalType": "bool" + }, + { + "name": "siganatureIsValid", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "unpause", + "inputs": [ + { + "name": "newPausedStatus", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "BatchConfirmed", + "inputs": [ + { + "name": "batchHeaderHash", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + }, + { + "name": "batchId", + "type": "uint32", + "indexed": false, + "internalType": "uint32" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "BatchConfirmerChanged", + "inputs": [ + { + "name": "previousAddress", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "newAddress", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint8", + "indexed": false, + "internalType": "uint8" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Paused", + "inputs": [ + { + "name": "account", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newPausedStatus", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "PauserRegistrySet", + "inputs": [ + { + "name": "pauserRegistry", + "type": "address", + "indexed": false, + "internalType": "contract IPauserRegistry" + }, + { + "name": "newPauserRegistry", + "type": "address", + "indexed": false, + "internalType": "contract IPauserRegistry" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "StaleStakesForbiddenUpdate", + "inputs": [ + { + "name": "value", + "type": "bool", + "indexed": false, + "internalType": "bool" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Unpaused", + "inputs": [ + { + "name": "account", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newPausedStatus", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false } - ] \ No newline at end of file +], +"bytecode": { + "object": "0x6101606040523480156200001257600080fd5b506040516200501b3803806200501b8339810160408190526200003591620002e7565b6001600160a01b0380841660a052808316608052811660c052818381836200005c620001ff565b5050506001600160a01b03811660e081905260408051636830483560e01b815290516368304835916004808201926020929091908290030181865afa158015620000aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d091906200033b565b6001600160a01b0316610100816001600160a01b031681525050806001600160a01b0316635df459466040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000129573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200014f91906200033b565b6001600160a01b0316610120816001600160a01b031681525050610100516001600160a01b031663df5cf7236040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001d191906200033b565b6001600160a01b031661014052506067805460ff19166001179055620001f6620001ff565b50505062000362565b600254600160a81b900460ff16156200026e5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60025460ff600160a01b90910481161015620002cc576002805460ff60a01b191660ff60a01b17905560405160ff81527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b0381168114620002e457600080fd5b50565b600080600060608486031215620002fd57600080fd5b83516200030a81620002ce565b60208501519093506200031d81620002ce565b60408501519092506200033081620002ce565b809150509250925092565b6000602082840312156200034e57600080fd5b81516200035b81620002ce565b9392505050565b60805160a05160c05160e051610100516101205161014051614bcb62000450600039600081816104b00152611647015260008181610342015261183101526000818161037b01528181611a070152611bc90152600081816103a201528181610d9501528181611325015281816114bd01526116eb015260008181610abe01528181610c1901528181610cb001528181612829015281816129ac0152612a4b015260008181611eb101528181612479015261254d0152600081816108e901528181610978015281816109f801528181612425015281816124f10152818161276701526129070152614bcb6000f3fe608060405234801561001057600080fd5b50600436106102115760003560e01c806372d18e8d11610125578063c0c53b8b116100ad578063eccbbfc91161007c578063eccbbfc9146104da578063ef024458146104fa578063f122098314610502578063f2fde38b14610515578063fabc1cbc1461052857600080fd5b8063c0c53b8b14610485578063c4d66de814610498578063df5cf723146104ab578063e481af9d146104d257600080fd5b8063886f1195116100f4578063886f1195146104295780638da5cb5b146104415780639926ee7d14610452578063a364f4da14610465578063b98d09081461047857600080fd5b806372d18e8d146103ed578063750521f5146103fb578063758f8dba1461040e5780637794965a1461041657600080fd5b80635ac86ab7116101a85780635e8b3f2d116101775780635e8b3f2d1461036e57806368304835146103765780636d14a9871461039d5780636efb4636146103c4578063715018a6146103e557600080fd5b80635ac86ab7146102f85780635c975abb1461032b5780635df459461461033d5780635e0334761461036457600080fd5b806339f309d5116101e457806339f309d51461028d578063416c7e5e146102b85780634972134a146102cb578063595c6a67146102f057600080fd5b806310d67a2f14610216578063136439dd1461022b578063171f1d5b1461023e57806333cfb7b71461026d575b600080fd5b610229610224366004613b95565b61053b565b005b610229610239366004613bb2565b6105f7565b61025161024c366004613d1c565b61073a565b6040805192151583529015156020830152015b60405180910390f35b61028061027b366004613b95565b6108c4565b6040516102649190613d6d565b6002546102a0906001600160a01b031681565b6040516001600160a01b039091168152602001610264565b6102296102c6366004613dc8565b610d93565b6000546102db9063ffffffff1681565b60405163ffffffff9091168152602001610264565b610229610f08565b61031b610306366004613df4565b606854600160ff9092169190911b9081161490565b6040519015158152602001610264565b6068545b604051908152602001610264565b6102a07f000000000000000000000000000000000000000000000000000000000000000081565b6102db620189c081565b6102db609681565b6102a07f000000000000000000000000000000000000000000000000000000000000000081565b6102a07f000000000000000000000000000000000000000000000000000000000000000081565b6103d76103d23660046140c7565b610fd3565b6040516102649291906141ba565b610229611e7e565b60005463ffffffff166102db565b61022961040936600461425a565b611e92565b6102db611f1b565b6102296104243660046142aa565b611f3b565b6067546102a09061010090046001600160a01b031681565b6035546001600160a01b03166102a0565b61022961046036600461433c565b61241a565b610229610473366004613b95565b6124e6565b60675461031b9060ff1681565b6102296104933660046143e7565b61257c565b6102296104a6366004613b95565b612679565b6102a07f000000000000000000000000000000000000000000000000000000000000000081565b610280612761565b61032f6104e8366004614432565b60016020526000908152604090205481565b61032f606481565b610229610510366004613b95565b612b2a565b610229610523366004613b95565b612b3b565b610229610536366004613bb2565b612bb1565b606760019054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561058e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b2919061444d565b6001600160a01b0316336001600160a01b0316146105eb5760405162461bcd60e51b81526004016105e29061446a565b60405180910390fd5b6105f481612d0d565b50565b60675460405163237dfb4760e11b81523360048201526101009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610643573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066791906144b4565b6106835760405162461bcd60e51b81526004016105e2906144d1565b606854818116146106fc5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c697479000000000000000060648201526084016105e2565b606881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b60008060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018787600001518860200151886000015160006002811061078257610782614519565b60200201518951600160200201518a602001516000600281106107a7576107a7614519565b60200201518b602001516001600281106107c3576107c3614519565b602090810291909101518c518d8301516040516108209a99989796959401988952602089019790975260408801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200190565b6040516020818303038152906040528051906020012060001c610843919061452f565b90506108b661085c6108558884612e0f565b8690612ea6565b610864612f3a565b6108ac61089d85610897604080518082018252600080825260209182015281518083019092526001825260029082015290565b90612e0f565b6108a68c612ffa565b90612ea6565b886201d4c061308a565b909890975095505050505050565b6040516309aa152760e11b81526001600160a01b0382811660048301526060916000917f000000000000000000000000000000000000000000000000000000000000000016906313542a4e90602401602060405180830381865afa158015610930573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109549190614551565b60405163871ef04960e01b8152600481018290529091506000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063871ef04990602401602060405180830381865afa1580156109bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e3919061456a565b90506001600160c01b0381161580610a7d57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a789190614593565b60ff16155b15610a9957505060408051600081526020810190915292915050565b6000610aad826001600160c01b03166132ae565b90506000805b8251811015610b83577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633ca5a5f5848381518110610afd57610afd614519565b01602001516040516001600160e01b031960e084901b16815260f89190911c6004820152602401602060405180830381865afa158015610b41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b659190614551565b610b6f90836145c6565b915080610b7b816145de565b915050610ab3565b506000816001600160401b03811115610b9e57610b9e613bcb565b604051908082528060200260200182016040528015610bc7578160200160208202803683370190505b5090506000805b8451811015610d86576000858281518110610beb57610beb614519565b0160200151604051633ca5a5f560e01b815260f89190911c6004820181905291506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633ca5a5f590602401602060405180830381865afa158015610c60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c849190614551565b905060005b81811015610d70576040516356e4026d60e11b815260ff84166004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063adc804da906044016040805180830381865afa158015610cfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d229190614610565b60000151868681518110610d3857610d38614519565b6001600160a01b039092166020928302919091019091015284610d5a816145de565b9550508080610d68906145de565b915050610c89565b5050508080610d7e906145de565b915050610bce565b5090979650505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610df1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e15919061444d565b6001600160a01b0316336001600160a01b031614610ec15760405162461bcd60e51b815260206004820152605c60248201527f424c535369676e6174757265436865636b65722e6f6e6c79436f6f7264696e6160448201527f746f724f776e65723a2063616c6c6572206973206e6f7420746865206f776e6560648201527f72206f6620746865207265676973747279436f6f7264696e61746f7200000000608482015260a4016105e2565b6067805460ff19168215159081179091556040519081527f40e4ed880a29e0f6ddce307457fb75cddf4feef7d3ecb0301bfdf4976a0e2dfc9060200160405180910390a150565b60675460405163237dfb4760e11b81523360048201526101009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610f54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7891906144b4565b610f945760405162461bcd60e51b81526004016105e2906144d1565b600019606881905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b60408051808201825260608082526020820152908201515160009085148015611000575060a08301515185145b8015611010575060c08301515185145b8015611020575060e08301515185145b61108a5760405162461bcd60e51b81526020600482015260416024820152600080516020614b7683398151915260448201527f7265733a20696e7075742071756f72756d206c656e677468206d69736d6174636064820152600d60fb1b608482015260a4016105e2565b825151602084015151146111025760405162461bcd60e51b815260206004820152604460248201819052600080516020614b76833981519152908201527f7265733a20696e707574206e6f6e7369676e6572206c656e677468206d69736d6064820152630c2e8c6d60e31b608482015260a4016105e2565b4363ffffffff168463ffffffff1611156111725760405162461bcd60e51b815260206004820152603c6024820152600080516020614b7683398151915260448201527f7265733a20696e76616c6964207265666572656e636520626c6f636b0000000060648201526084016105e2565b6040805180820182526000808252602080830191909152825180840190935260608084529083015290866001600160401b038111156111b3576111b3613bcb565b6040519080825280602002602001820160405280156111dc578160200160208202803683370190505b506020820152866001600160401b038111156111fa576111fa613bcb565b604051908082528060200260200182016040528015611223578160200160208202803683370190505b50815260408051808201909152606080825260208201528560200151516001600160401b0381111561125757611257613bcb565b604051908082528060200260200182016040528015611280578160200160208202803683370190505b5081526020860151516001600160401b038111156112a0576112a0613bcb565b6040519080825280602002602001820160405280156112c9578160200160208202803683370190505b508160200181905250600061139b8a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051639aa1653d60e01b815290516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169350639aa1653d925060048083019260209291908290030181865afa158015611372573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113969190614593565b61330b565b905060005b876020015151811015611636576113e5886020015182815181106113c6576113c6614519565b6020026020010151805160009081526020918201519091526040902090565b836020015182815181106113fb576113fb614519565b602090810291909101015280156114bb57602083015161141c60018361464f565b8151811061142c5761142c614519565b602002602001015160001c8360200151828151811061144d5761144d614519565b602002602001015160001c116114bb576040805162461bcd60e51b8152602060048201526024810191909152600080516020614b7683398151915260448201527f7265733a206e6f6e5369676e65725075626b657973206e6f7420736f7274656460648201526084016105e2565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166304ec63518460200151838151811061150057611500614519565b60200260200101518b8b60000151858151811061151f5761151f614519565b60200260200101516040518463ffffffff1660e01b815260040161155c9392919092835263ffffffff918216602084015216604082015260600190565b602060405180830381865afa158015611579573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061159d919061456a565b6001600160c01b0316836000015182815181106115bc576115bc614519565b6020026020010181815250506116226108556115f684866000015185815181106115e8576115e8614519565b6020026020010151166133c6565b8a60200151848151811061160c5761160c614519565b60200260200101516133f190919063ffffffff16565b94508061162e816145de565b9150506113a0565b5050611641836134d5565b925060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166350f73e7c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116c79190614551565b60675490915060ff1660005b8a811015611d4d57811561182f578963ffffffff16837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663249a0c428f8f8681811061172a5761172a614519565b60405160e085901b6001600160e01b031916815292013560f81c600483015250602401602060405180830381865afa15801561176a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178e9190614551565b61179891906145c6565b101561182f5760405162461bcd60e51b81526020600482015260666024820152600080516020614b7683398151915260448201527f7265733a205374616b6552656769737472792075706461746573206d7573742060648201527f62652077697468696e207769746864726177616c44656c6179426c6f636b732060848201526577696e646f7760d01b60a482015260c4016105e2565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166368bccaac8d8d8481811061187057611870614519565b9050013560f81c60f81b60f81c8c8c60a00151858151811061189457611894614519565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa1580156118f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119149190614666565b6001600160401b0319166119378a6040015183815181106113c6576113c6614519565b67ffffffffffffffff1916146119d35760405162461bcd60e51b81526020600482015260616024820152600080516020614b7683398151915260448201527f7265733a2071756f72756d41706b206861736820696e2073746f72616765206460648201527f6f6573206e6f74206d617463682070726f76696465642071756f72756d2061706084820152606b60f81b60a482015260c4016105e2565b611a03896040015182815181106119ec576119ec614519565b602002602001015187612ea690919063ffffffff16565b95507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c8294c568d8d84818110611a4657611a46614519565b9050013560f81c60f81b60f81c8c8c60c001518581518110611a6a57611a6a614519565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa158015611ac6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aea9190614691565b85602001518281518110611b0057611b00614519565b6001600160601b03909216602092830291909101820152850151805182908110611b2c57611b2c614519565b602002602001015185600001518281518110611b4a57611b4a614519565b60200260200101906001600160601b031690816001600160601b0316815250506000805b8a6020015151811015611d3857611bc286600001518281518110611b9457611b94614519565b60200260200101518f8f86818110611bae57611bae614519565b600192013560f81c9290921c811614919050565b15611d26577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f2be94ae8f8f86818110611c0857611c08614519565b9050013560f81c60f81b60f81c8e89602001518581518110611c2c57611c2c614519565b60200260200101518f60e001518881518110611c4a57611c4a614519565b60200260200101518781518110611c6357611c63614519565b60209081029190910101516040516001600160e01b031960e087901b16815260ff909416600485015263ffffffff92831660248501526044840191909152166064820152608401602060405180830381865afa158015611cc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ceb9190614691565b8751805185908110611cff57611cff614519565b60200260200101818151611d1391906146ac565b6001600160601b03169052506001909101905b80611d30816145de565b915050611b6e565b50508080611d45906145de565b9150506116d3565b505050600080611d678c868a606001518b6080015161073a565b9150915081611dd85760405162461bcd60e51b81526020600482015260436024820152600080516020614b7683398151915260448201527f7265733a2070616972696e6720707265636f6d70696c652063616c6c206661696064820152621b195960ea1b608482015260a4016105e2565b80611e395760405162461bcd60e51b81526020600482015260396024820152600080516020614b7683398151915260448201527f7265733a207369676e617475726520697320696e76616c69640000000000000060648201526084016105e2565b50506000878260200151604051602001611e549291906146d4565b60408051808303601f190181529190528051602090910120929b929a509198505050505050505050565b611e86613570565b611e9060006135ca565b565b611e9a613570565b60405163a98fb35560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a98fb35590611ee6908490600401614774565b600060405180830381600087803b158015611f0057600080fd5b505af1158015611f14573d6000803e3d6000fd5b5050505050565b60006096611f2c620189c043614787565b611f369190614787565b905090565b60685460009060019081161415611f945760405162461bcd60e51b815260206004820152601960248201527f5061757361626c653a20696e646578206973207061757365640000000000000060448201526064016105e2565b6002546001600160a01b031633146120035760405162461bcd60e51b815260206004820152602c60248201527f6f6e6c794261746368436f6e6669726d65723a206e6f742066726f6d2062617460448201526b31b41031b7b73334b936b2b960a11b60648201526084016105e2565b3233146120805760405162461bcd60e51b81526020600482015260516024820152600080516020614b5683398151915260448201527f63683a2068656164657220616e64206e6f6e7369676e65722064617461206d75606482015270737420626520696e2063616c6c6461746160781b608482015260a4016105e2565b436120916080850160608601614432565b63ffffffff1611156121115760405162461bcd60e51b815260206004820152604f6024820152600080516020614b5683398151915260448201527f63683a20737065636966696564207265666572656e6365426c6f636b4e756d6260648201526e657220697320696e2066757475726560881b608482015260a4016105e2565b63ffffffff4316609661212a6080860160608701614432565b6121349190614787565b63ffffffff1610156121ba5760405162461bcd60e51b81526020600482015260556024820152600080516020614b5683398151915260448201527f63683a20737065636966696564207265666572656e6365426c6f636b4e756d62606482015274195c881a5cc81d1bdbc819985c881a5b881c185cdd605a1b608482015260a4016105e2565b60006121cd6121c8856147af565b61361c565b90506000806121f9836121e3602089018961484f565b6121f360808b0160608c01614432565b89610fd3565b9150915060005b61220d604088018861484f565b905081101561234f57612223604088018861484f565b8281811061223357612233614519565b9050013560f81c60f81b60f81c60ff168360200151828151811061225957612259614519565b602002602001015161226b919061489c565b6001600160601b031660648460000151838151811061228c5761228c614519565b60200260200101516001600160601b03166122a791906148cb565b101561233d5760405162461bcd60e51b815260206004820152606460248201819052600080516020614b5683398151915260448301527f63683a207369676e61746f7269657320646f206e6f74206f776e206174206c65908201527f617374207468726573686f6c642070657263656e74616765206f6620612071756084820152636f72756d60e01b60a482015260c4016105e2565b80612347816145de565b915050612200565b506000805463ffffffff169061236488613697565b6040805160208082018490528183018790524360e01b6001600160e01b0319166060830152825160448184030181526064830180855281519183019190912063ffffffff881660008181526001909452928590205552905191925086917fc75557c4ad49697e231449688be13ef11cb6be8ed0d18819d8dde074a5a16f8a9181900360840190a26123f6826001614787565b6000805463ffffffff191663ffffffff929092169190911790555050505050505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146124625760405162461bcd60e51b81526004016105e2906148ea565b604051639926ee7d60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639926ee7d906124b09085908590600401614962565b600060405180830381600087803b1580156124ca57600080fd5b505af11580156124de573d6000803e3d6000fd5b505050505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461252e5760405162461bcd60e51b81526004016105e2906148ea565b6040516351b27a6d60e11b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063a364f4da90602401611ee6565b600254600160a81b900460ff16158080156125a457506002546001600160a01b90910460ff16105b806125c55750303b1580156125c55750600254600160a01b900460ff166001145b6125e15760405162461bcd60e51b81526004016105e2906149ad565b6002805460ff60a01b1916600160a01b179055801561260e576002805460ff60a81b1916600160a81b1790555b6126198460006136aa565b612622836135ca565b61262b82613795565b8015612673576002805460ff60a81b19169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b600254600160a81b900460ff16158080156126a157506002546001600160a01b90910460ff16105b806126c25750303b1580156126c25750600254600160a01b900460ff166001145b6126de5760405162461bcd60e51b81526004016105e2906149ad565b6002805460ff60a01b1916600160a01b179055801561270b576002805460ff60a81b1916600160a81b1790555b612714826135ca565b801561275d576002805460ff60a81b19169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15b5050565b606060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127e79190614593565b60ff1690508061280557505060408051600081526020810190915290565b6000805b828110156128ba57604051633ca5a5f560e01b815260ff821660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633ca5a5f590602401602060405180830381865afa158015612878573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061289c9190614551565b6128a690836145c6565b9150806128b2816145de565b915050612809565b506000816001600160401b038111156128d5576128d5613bcb565b6040519080825280602002602001820160405280156128fe578160200160208202803683370190505b5090506000805b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612963573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129879190614593565b60ff16811015612b2057604051633ca5a5f560e01b815260ff821660048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633ca5a5f590602401602060405180830381865afa1580156129fb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a1f9190614551565b905060005b81811015612b0b576040516356e4026d60e11b815260ff84166004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063adc804da906044016040805180830381865afa158015612a99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612abd9190614610565b60000151858581518110612ad357612ad3614519565b6001600160a01b039092166020928302919091019091015283612af5816145de565b9450508080612b03906145de565b915050612a24565b50508080612b18906145de565b915050612905565b5090949350505050565b612b32613570565b6105f481613795565b612b43613570565b6001600160a01b038116612ba85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105e2565b6105f4816135ca565b606760019054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c28919061444d565b6001600160a01b0316336001600160a01b031614612c585760405162461bcd60e51b81526004016105e29061446a565b606854198119606854191614612cd65760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c697479000000000000000060648201526084016105e2565b606881905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200161072f565b6001600160a01b038116612d9b5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a4016105e2565b606754604080516001600160a01b036101009093048316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606780546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6040805180820190915260008082526020820152612e2b613aa6565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa9050808015612e5e57612e60565bfe5b5080612e9e5760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b60448201526064016105e2565b505092915050565b6040805180820190915260008082526020820152612ec2613ac4565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa9050808015612e5e575080612e9e5760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b60448201526064016105e2565b612f42613ae2565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b60408051808201909152600080825260208201526000808061302a600080516020614b368339815191528661452f565b90505b613036816137ef565b9093509150600080516020614b36833981519152828309831415613070576040805180820190915290815260208101919091529392505050565b600080516020614b3683398151915260018208905061302d565b6040805180820182528681526020808201869052825180840190935286835282018490526000918291906130bc613b07565b60005b60028110156132815760006130d58260066148cb565b90508482600281106130e9576130e9614519565b602002015151836130fb8360006145c6565b600c811061310b5761310b614519565b602002015284826002811061312257613122614519565b6020020151602001518382600161313991906145c6565b600c811061314957613149614519565b602002015283826002811061316057613160614519565b60200201515151836131738360026145c6565b600c811061318357613183614519565b602002015283826002811061319a5761319a614519565b60200201515160016020020151836131b38360036145c6565b600c81106131c3576131c3614519565b60200201528382600281106131da576131da614519565b6020020151602001516000600281106131f5576131f5614519565b6020020151836132068360046145c6565b600c811061321657613216614519565b602002015283826002811061322d5761322d614519565b60200201516020015160016002811061324857613248614519565b6020020151836132598360056145c6565b600c811061326957613269614519565b60200201525080613279816145de565b9150506130bf565b5061328a613b26565b60006020826101808560088cfa9151919c9115159b50909950505050505050505050565b60606000805b610100811015613304576001811b9150838216156132f457828160f81b6040516020016132e29291906149fb565b60405160208183030381529060405292505b6132fd816145de565b90506132b4565b5050919050565b60008061331784613871565b905080156133bd578260ff168460018651613332919061464f565b8151811061334257613342614519565b016020015160f81c106133bd5760405162461bcd60e51b815260206004820152603f60248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206269746d61702065786365656473206d61782076616c75650060648201526084016105e2565b90505b92915050565b6000805b82156133c0576133db60018461464f565b90921691806133e981614a2a565b9150506133ca565b60408051808201909152600080825260208201526102008261ffff161061344d5760405162461bcd60e51b815260206004820152601060248201526f7363616c61722d746f6f2d6c6172676560801b60448201526064016105e2565b8161ffff16600114156134615750816133c0565b6040805180820190915260008082526020820181905284906001905b8161ffff168661ffff16106134ca57600161ffff871660ff83161c811614156134ad576134aa8484612ea6565b93505b6134b78384612ea6565b92506201fffe600192831b16910161347d565b509195945050505050565b604080518082019091526000808252602082015281511580156134fa57506020820151155b15613518575050604080518082019091526000808252602082015290565b604051806040016040528083600001518152602001600080516020614b36833981519152846020015161354b919061452f565b61356390600080516020614b3683398151915261464f565b905292915050565b919050565b6035546001600160a01b03163314611e905760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105e2565b603580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600061365982604080518082019091526000808252602082015250604080518082019091528151815260609091015163ffffffff16602082015290565b6040805182516020808301919091529092015163ffffffff16908201526060015b604051602081830303815290604052805190602001209050919050565b60008160405160200161367a9190614aba565b60675461010090046001600160a01b03161580156136d057506001600160a01b03821615155b6137525760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a4016105e2565b606881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261275d82612d0d565b600280546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527ff024af0387e1367ceb1c6a3b6a00db4e9917e56bfb22a289808100f8e2b2c0859101612754565b60008080600080516020614b368339815191526003600080516020614b3683398151915286600080516020614b36833981519152888909090890506000613865827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f52600080516020614b368339815191526139fe565b91959194509092505050565b6000610100825111156138fa5760405162461bcd60e51b8152602060048201526044602482018190527f4269746d61705574696c732e6f72646572656442797465734172726179546f42908201527f69746d61703a206f7264657265644279746573417272617920697320746f6f206064820152636c6f6e6760e01b608482015260a4016105e2565b815161390857506000919050565b6000808360008151811061391e5761391e614519565b0160200151600160f89190911c81901b92505b84518110156139f55784818151811061394c5761394c614519565b0160200151600160f89190911c1b91508282116139e15760405162461bcd60e51b815260206004820152604760248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206f72646572656442797465734172726179206973206e6f74206064820152661bdc99195c995960ca1b608482015260a4016105e2565b918117916139ee816145de565b9050613931565b50909392505050565b600080613a09613b26565b613a11613b44565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa9250828015612e5e575082613a9b5760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c75726500000000000060448201526064016105e2565b505195945050505050565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6040518060400160405280613af5613b62565b8152602001613b02613b62565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b6001600160a01b03811681146105f457600080fd5b600060208284031215613ba757600080fd5b81356133bd81613b80565b600060208284031215613bc457600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715613c0357613c03613bcb565b60405290565b60405161010081016001600160401b0381118282101715613c0357613c03613bcb565b604051601f8201601f191681016001600160401b0381118282101715613c5457613c54613bcb565b604052919050565b600060408284031215613c6e57600080fd5b613c76613be1565b9050813581526020820135602082015292915050565b600082601f830112613c9d57600080fd5b613ca5613be1565b806040840185811115613cb757600080fd5b845b81811015613cd1578035845260209384019301613cb9565b509095945050505050565b600060808284031215613cee57600080fd5b613cf6613be1565b9050613d028383613c8c565b8152613d118360408401613c8c565b602082015292915050565b6000806000806101208587031215613d3357600080fd5b84359350613d448660208701613c5c565b9250613d538660608701613cdc565b9150613d628660e08701613c5c565b905092959194509250565b6020808252825182820181905260009190848201906040850190845b81811015613dae5783516001600160a01b031683529284019291840191600101613d89565b50909695505050505050565b80151581146105f457600080fd5b600060208284031215613dda57600080fd5b81356133bd81613dba565b60ff811681146105f457600080fd5b600060208284031215613e0657600080fd5b81356133bd81613de5565b803563ffffffff8116811461356b57600080fd5b60006001600160401b03821115613e3e57613e3e613bcb565b5060051b60200190565b600082601f830112613e5957600080fd5b81356020613e6e613e6983613e25565b613c2c565b82815260059290921b84018101918181019086841115613e8d57600080fd5b8286015b84811015613eaf57613ea281613e11565b8352918301918301613e91565b509695505050505050565b600082601f830112613ecb57600080fd5b81356020613edb613e6983613e25565b82815260069290921b84018101918181019086841115613efa57600080fd5b8286015b84811015613eaf57613f108882613c5c565b835291830191604001613efe565b600082601f830112613f2f57600080fd5b81356020613f3f613e6983613e25565b82815260059290921b84018101918181019086841115613f5e57600080fd5b8286015b84811015613eaf5780356001600160401b03811115613f815760008081fd5b613f8f8986838b0101613e48565b845250918301918301613f62565b60006101808284031215613fb057600080fd5b613fb8613c09565b905081356001600160401b0380821115613fd157600080fd5b613fdd85838601613e48565b83526020840135915080821115613ff357600080fd5b613fff85838601613eba565b6020840152604084013591508082111561401857600080fd5b61402485838601613eba565b60408401526140368560608601613cdc565b60608401526140488560e08601613c5c565b608084015261012084013591508082111561406257600080fd5b61406e85838601613e48565b60a084015261014084013591508082111561408857600080fd5b61409485838601613e48565b60c08401526101608401359150808211156140ae57600080fd5b506140bb84828501613f1e565b60e08301525092915050565b6000806000806000608086880312156140df57600080fd5b8535945060208601356001600160401b03808211156140fd57600080fd5b818801915088601f83011261411157600080fd5b81358181111561412057600080fd5b89602082850101111561413257600080fd5b602083019650945061414660408901613e11565b9350606088013591508082111561415c57600080fd5b5061416988828901613f9d565b9150509295509295909350565b600081518084526020808501945080840160005b838110156141af5781516001600160601b03168752958201959082019060010161418a565b509495945050505050565b60408152600083516040808401526141d56080840182614176565b90506020850151603f198483030160608501526141f28282614176565b925050508260208301529392505050565b60006001600160401b0383111561421c5761421c613bcb565b61422f601f8401601f1916602001613c2c565b905082815283838301111561424357600080fd5b828260208301376000602084830101529392505050565b60006020828403121561426c57600080fd5b81356001600160401b0381111561428257600080fd5b8201601f8101841361429357600080fd5b6142a284823560208401614203565b949350505050565b600080604083850312156142bd57600080fd5b82356001600160401b03808211156142d457600080fd5b90840190608082870312156142e857600080fd5b909250602084013590808211156142fe57600080fd5b5061430b85828601613f9d565b9150509250929050565b600082601f83011261432657600080fd5b61433583833560208501614203565b9392505050565b6000806040838503121561434f57600080fd5b823561435a81613b80565b915060208301356001600160401b038082111561437657600080fd5b908401906060828703121561438a57600080fd5b6040516060810181811083821117156143a5576143a5613bcb565b6040528235828111156143b757600080fd5b6143c388828601614315565b82525060208301356020820152604083013560408201528093505050509250929050565b6000806000606084860312156143fc57600080fd5b833561440781613b80565b9250602084013561441781613b80565b9150604084013561442781613b80565b809150509250925092565b60006020828403121561444457600080fd5b61433582613e11565b60006020828403121561445f57600080fd5b81516133bd81613b80565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b6000602082840312156144c657600080fd5b81516133bd81613dba565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60008261454c57634e487b7160e01b600052601260045260246000fd5b500690565b60006020828403121561456357600080fd5b5051919050565b60006020828403121561457c57600080fd5b81516001600160c01b03811681146133bd57600080fd5b6000602082840312156145a557600080fd5b81516133bd81613de5565b634e487b7160e01b600052601160045260246000fd5b600082198211156145d9576145d96145b0565b500190565b60006000198214156145f2576145f26145b0565b5060010190565b80516001600160601b038116811461356b57600080fd5b60006040828403121561462257600080fd5b61462a613be1565b825161463581613b80565b8152614643602084016145f9565b60208201529392505050565b600082821015614661576146616145b0565b500390565b60006020828403121561467857600080fd5b815167ffffffffffffffff19811681146133bd57600080fd5b6000602082840312156146a357600080fd5b614335826145f9565b60006001600160601b03838116908316818110156146cc576146cc6145b0565b039392505050565b63ffffffff60e01b8360e01b1681526000600482018351602080860160005b8381101561470f578151855293820193908201906001016146f3565b5092979650505050505050565b60005b8381101561473757818101518382015260200161471f565b838111156126735750506000910152565b6000815180845261476081602086016020860161471c565b601f01601f19169290920160200192915050565b6020815260006143356020830184614748565b600063ffffffff8083168185168083038211156147a6576147a66145b0565b01949350505050565b6000608082360312156147c157600080fd5b604051608081016001600160401b0382821081831117156147e4576147e4613bcb565b8160405284358352602085013591508082111561480057600080fd5b61480c36838701614315565b6020840152604085013591508082111561482557600080fd5b5061483236828601614315565b60408301525061484460608401613e11565b606082015292915050565b6000808335601e1984360301811261486657600080fd5b8301803591506001600160401b0382111561488057600080fd5b60200191503681900382131561489557600080fd5b9250929050565b60006001600160601b03808316818516818304811182151516156148c2576148c26145b0565b02949350505050565b60008160001904831182151516156148e5576148e56145b0565b500290565b60208082526052908201527f536572766963654d616e61676572426173652e6f6e6c7952656769737472794360408201527f6f6f7264696e61746f723a2063616c6c6572206973206e6f742074686520726560608201527133b4b9ba393c9031b7b7b93234b730ba37b960711b608082015260a00190565b60018060a01b038316815260406020820152600082516060604084015261498c60a0840182614748565b90506020840151606084015260408401516080840152809150509392505050565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b60008351614a0d81846020880161471c565b6001600160f81b0319939093169190920190815260010192915050565b600061ffff80831681811415614a4257614a426145b0565b6001019392505050565b6000808335601e19843603018112614a6357600080fd5b83016020810192503590506001600160401b03811115614a8257600080fd5b80360383131561489557600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60208152813560208201526000614ad46020840184614a4c565b60806040850152614ae960a085018284614a91565b915050614af96040850185614a4c565b848303601f19016060860152614b10838284614a91565b9250505063ffffffff614b2560608601613e11565b166080840152809150509291505056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47456967656e4441536572766963654d616e616765722e636f6e6669726d426174424c535369676e6174757265436865636b65722e636865636b5369676e617475a2646970667358221220a5aa791ce56437be19ec01db4c7e6d5ddf85b80196b58a7d0376c319b16c677d64736f6c634300080c0033", + "sourceMap": "1166:4957:119:-:0;;;1692:342;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1666:40:45;;;;;1716:44;;;;;1770:32;;;;1879:21:119;1929:20;1879:21;1974:15;1812:22:45;:20;:22::i;:::-;-1:-1:-1;;;;;;;;1679:42:40;;;;;;1747:36;;;-1:-1:-1;;;1747:36:40;;;;:34;;:36;;;;;;;;;;;;;;;1679:42;1747:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1731:52:40;;;-1:-1:-1;;;;;1731:52:40;;;;;1810:20;-1:-1:-1;;;;;1810:35:40;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1793:54:40;;;-1:-1:-1;;;;;1793:54:40;;;;;1870:13;;-1:-1:-1;;;;;1870:24:40;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1857:39:40;;;-1:-1:-1;1915:20:40;:27;;-1:-1:-1;;1915:27:40;1938:4;1915:27;;;2005:22:119::2;:20;:22::i;:::-;1692:342:::0;;;1166:4957;;5388:279:83;5456:13;;-1:-1:-1;;;5456:13:83;;;;5455:14;5447:66;;;;-1:-1:-1;;;5447:66:83;;1941:2:129;5447:66:83;;;1923:21:129;1980:2;1960:18;;;1953:30;2019:34;1999:18;;;1992:62;-1:-1:-1;;;2070:18:129;;;2063:37;2117:19;;5447:66:83;;;;;;;;5527:12;;5542:15;-1:-1:-1;;;5527:12:83;;;;;:30;5523:138;;;5573:12;:30;;-1:-1:-1;;;;5573:30:83;-1:-1:-1;;;5573:30:83;;;5622:28;;5588:15;2289:36:129;;5622:28:83;;2277:2:129;2262:18;5622:28:83;;;;;;;5523:138;5388:279::o;14:151:129:-;-1:-1:-1;;;;;109:31:129;;99:42;;89:70;;155:1;152;145:12;89:70;14:151;:::o;170:660::-;339:6;347;355;408:2;396:9;387:7;383:23;379:32;376:52;;;424:1;421;414:12;376:52;456:9;450:16;475:51;520:5;475:51;:::i;:::-;595:2;580:18;;574:25;545:5;;-1:-1:-1;608:53:129;574:25;608:53;:::i;:::-;732:2;717:18;;711:25;680:7;;-1:-1:-1;745:53:129;711:25;745:53;:::i;:::-;817:7;807:17;;;170:660;;;;;:::o;835:295::-;929:6;982:2;970:9;961:7;957:23;953:32;950:52;;;998:1;995;988:12;950:52;1030:9;1024:16;1049:51;1094:5;1049:51;:::i;:::-;1119:5;835:295;-1:-1:-1;;;835:295:129:o;2147:184::-;1166:4957:119;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", + "linkReferences": {} +}, +"deployedBytecode": { + "object": "0x608060405234801561001057600080fd5b50600436106102115760003560e01c806372d18e8d11610125578063c0c53b8b116100ad578063eccbbfc91161007c578063eccbbfc9146104da578063ef024458146104fa578063f122098314610502578063f2fde38b14610515578063fabc1cbc1461052857600080fd5b8063c0c53b8b14610485578063c4d66de814610498578063df5cf723146104ab578063e481af9d146104d257600080fd5b8063886f1195116100f4578063886f1195146104295780638da5cb5b146104415780639926ee7d14610452578063a364f4da14610465578063b98d09081461047857600080fd5b806372d18e8d146103ed578063750521f5146103fb578063758f8dba1461040e5780637794965a1461041657600080fd5b80635ac86ab7116101a85780635e8b3f2d116101775780635e8b3f2d1461036e57806368304835146103765780636d14a9871461039d5780636efb4636146103c4578063715018a6146103e557600080fd5b80635ac86ab7146102f85780635c975abb1461032b5780635df459461461033d5780635e0334761461036457600080fd5b806339f309d5116101e457806339f309d51461028d578063416c7e5e146102b85780634972134a146102cb578063595c6a67146102f057600080fd5b806310d67a2f14610216578063136439dd1461022b578063171f1d5b1461023e57806333cfb7b71461026d575b600080fd5b610229610224366004613b95565b61053b565b005b610229610239366004613bb2565b6105f7565b61025161024c366004613d1c565b61073a565b6040805192151583529015156020830152015b60405180910390f35b61028061027b366004613b95565b6108c4565b6040516102649190613d6d565b6002546102a0906001600160a01b031681565b6040516001600160a01b039091168152602001610264565b6102296102c6366004613dc8565b610d93565b6000546102db9063ffffffff1681565b60405163ffffffff9091168152602001610264565b610229610f08565b61031b610306366004613df4565b606854600160ff9092169190911b9081161490565b6040519015158152602001610264565b6068545b604051908152602001610264565b6102a07f000000000000000000000000000000000000000000000000000000000000000081565b6102db620189c081565b6102db609681565b6102a07f000000000000000000000000000000000000000000000000000000000000000081565b6102a07f000000000000000000000000000000000000000000000000000000000000000081565b6103d76103d23660046140c7565b610fd3565b6040516102649291906141ba565b610229611e7e565b60005463ffffffff166102db565b61022961040936600461425a565b611e92565b6102db611f1b565b6102296104243660046142aa565b611f3b565b6067546102a09061010090046001600160a01b031681565b6035546001600160a01b03166102a0565b61022961046036600461433c565b61241a565b610229610473366004613b95565b6124e6565b60675461031b9060ff1681565b6102296104933660046143e7565b61257c565b6102296104a6366004613b95565b612679565b6102a07f000000000000000000000000000000000000000000000000000000000000000081565b610280612761565b61032f6104e8366004614432565b60016020526000908152604090205481565b61032f606481565b610229610510366004613b95565b612b2a565b610229610523366004613b95565b612b3b565b610229610536366004613bb2565b612bb1565b606760019054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561058e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b2919061444d565b6001600160a01b0316336001600160a01b0316146105eb5760405162461bcd60e51b81526004016105e29061446a565b60405180910390fd5b6105f481612d0d565b50565b60675460405163237dfb4760e11b81523360048201526101009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610643573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066791906144b4565b6106835760405162461bcd60e51b81526004016105e2906144d1565b606854818116146106fc5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c697479000000000000000060648201526084016105e2565b606881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b60008060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018787600001518860200151886000015160006002811061078257610782614519565b60200201518951600160200201518a602001516000600281106107a7576107a7614519565b60200201518b602001516001600281106107c3576107c3614519565b602090810291909101518c518d8301516040516108209a99989796959401988952602089019790975260408801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200190565b6040516020818303038152906040528051906020012060001c610843919061452f565b90506108b661085c6108558884612e0f565b8690612ea6565b610864612f3a565b6108ac61089d85610897604080518082018252600080825260209182015281518083019092526001825260029082015290565b90612e0f565b6108a68c612ffa565b90612ea6565b886201d4c061308a565b909890975095505050505050565b6040516309aa152760e11b81526001600160a01b0382811660048301526060916000917f000000000000000000000000000000000000000000000000000000000000000016906313542a4e90602401602060405180830381865afa158015610930573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109549190614551565b60405163871ef04960e01b8152600481018290529091506000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063871ef04990602401602060405180830381865afa1580156109bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e3919061456a565b90506001600160c01b0381161580610a7d57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a789190614593565b60ff16155b15610a9957505060408051600081526020810190915292915050565b6000610aad826001600160c01b03166132ae565b90506000805b8251811015610b83577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633ca5a5f5848381518110610afd57610afd614519565b01602001516040516001600160e01b031960e084901b16815260f89190911c6004820152602401602060405180830381865afa158015610b41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b659190614551565b610b6f90836145c6565b915080610b7b816145de565b915050610ab3565b506000816001600160401b03811115610b9e57610b9e613bcb565b604051908082528060200260200182016040528015610bc7578160200160208202803683370190505b5090506000805b8451811015610d86576000858281518110610beb57610beb614519565b0160200151604051633ca5a5f560e01b815260f89190911c6004820181905291506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633ca5a5f590602401602060405180830381865afa158015610c60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c849190614551565b905060005b81811015610d70576040516356e4026d60e11b815260ff84166004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063adc804da906044016040805180830381865afa158015610cfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d229190614610565b60000151868681518110610d3857610d38614519565b6001600160a01b039092166020928302919091019091015284610d5a816145de565b9550508080610d68906145de565b915050610c89565b5050508080610d7e906145de565b915050610bce565b5090979650505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610df1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e15919061444d565b6001600160a01b0316336001600160a01b031614610ec15760405162461bcd60e51b815260206004820152605c60248201527f424c535369676e6174757265436865636b65722e6f6e6c79436f6f7264696e6160448201527f746f724f776e65723a2063616c6c6572206973206e6f7420746865206f776e6560648201527f72206f6620746865207265676973747279436f6f7264696e61746f7200000000608482015260a4016105e2565b6067805460ff19168215159081179091556040519081527f40e4ed880a29e0f6ddce307457fb75cddf4feef7d3ecb0301bfdf4976a0e2dfc9060200160405180910390a150565b60675460405163237dfb4760e11b81523360048201526101009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610f54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7891906144b4565b610f945760405162461bcd60e51b81526004016105e2906144d1565b600019606881905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b60408051808201825260608082526020820152908201515160009085148015611000575060a08301515185145b8015611010575060c08301515185145b8015611020575060e08301515185145b61108a5760405162461bcd60e51b81526020600482015260416024820152600080516020614b7683398151915260448201527f7265733a20696e7075742071756f72756d206c656e677468206d69736d6174636064820152600d60fb1b608482015260a4016105e2565b825151602084015151146111025760405162461bcd60e51b815260206004820152604460248201819052600080516020614b76833981519152908201527f7265733a20696e707574206e6f6e7369676e6572206c656e677468206d69736d6064820152630c2e8c6d60e31b608482015260a4016105e2565b4363ffffffff168463ffffffff1611156111725760405162461bcd60e51b815260206004820152603c6024820152600080516020614b7683398151915260448201527f7265733a20696e76616c6964207265666572656e636520626c6f636b0000000060648201526084016105e2565b6040805180820182526000808252602080830191909152825180840190935260608084529083015290866001600160401b038111156111b3576111b3613bcb565b6040519080825280602002602001820160405280156111dc578160200160208202803683370190505b506020820152866001600160401b038111156111fa576111fa613bcb565b604051908082528060200260200182016040528015611223578160200160208202803683370190505b50815260408051808201909152606080825260208201528560200151516001600160401b0381111561125757611257613bcb565b604051908082528060200260200182016040528015611280578160200160208202803683370190505b5081526020860151516001600160401b038111156112a0576112a0613bcb565b6040519080825280602002602001820160405280156112c9578160200160208202803683370190505b508160200181905250600061139b8a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051639aa1653d60e01b815290516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169350639aa1653d925060048083019260209291908290030181865afa158015611372573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113969190614593565b61330b565b905060005b876020015151811015611636576113e5886020015182815181106113c6576113c6614519565b6020026020010151805160009081526020918201519091526040902090565b836020015182815181106113fb576113fb614519565b602090810291909101015280156114bb57602083015161141c60018361464f565b8151811061142c5761142c614519565b602002602001015160001c8360200151828151811061144d5761144d614519565b602002602001015160001c116114bb576040805162461bcd60e51b8152602060048201526024810191909152600080516020614b7683398151915260448201527f7265733a206e6f6e5369676e65725075626b657973206e6f7420736f7274656460648201526084016105e2565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166304ec63518460200151838151811061150057611500614519565b60200260200101518b8b60000151858151811061151f5761151f614519565b60200260200101516040518463ffffffff1660e01b815260040161155c9392919092835263ffffffff918216602084015216604082015260600190565b602060405180830381865afa158015611579573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061159d919061456a565b6001600160c01b0316836000015182815181106115bc576115bc614519565b6020026020010181815250506116226108556115f684866000015185815181106115e8576115e8614519565b6020026020010151166133c6565b8a60200151848151811061160c5761160c614519565b60200260200101516133f190919063ffffffff16565b94508061162e816145de565b9150506113a0565b5050611641836134d5565b925060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166350f73e7c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116c79190614551565b60675490915060ff1660005b8a811015611d4d57811561182f578963ffffffff16837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663249a0c428f8f8681811061172a5761172a614519565b60405160e085901b6001600160e01b031916815292013560f81c600483015250602401602060405180830381865afa15801561176a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178e9190614551565b61179891906145c6565b101561182f5760405162461bcd60e51b81526020600482015260666024820152600080516020614b7683398151915260448201527f7265733a205374616b6552656769737472792075706461746573206d7573742060648201527f62652077697468696e207769746864726177616c44656c6179426c6f636b732060848201526577696e646f7760d01b60a482015260c4016105e2565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166368bccaac8d8d8481811061187057611870614519565b9050013560f81c60f81b60f81c8c8c60a00151858151811061189457611894614519565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa1580156118f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119149190614666565b6001600160401b0319166119378a6040015183815181106113c6576113c6614519565b67ffffffffffffffff1916146119d35760405162461bcd60e51b81526020600482015260616024820152600080516020614b7683398151915260448201527f7265733a2071756f72756d41706b206861736820696e2073746f72616765206460648201527f6f6573206e6f74206d617463682070726f76696465642071756f72756d2061706084820152606b60f81b60a482015260c4016105e2565b611a03896040015182815181106119ec576119ec614519565b602002602001015187612ea690919063ffffffff16565b95507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c8294c568d8d84818110611a4657611a46614519565b9050013560f81c60f81b60f81c8c8c60c001518581518110611a6a57611a6a614519565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa158015611ac6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aea9190614691565b85602001518281518110611b0057611b00614519565b6001600160601b03909216602092830291909101820152850151805182908110611b2c57611b2c614519565b602002602001015185600001518281518110611b4a57611b4a614519565b60200260200101906001600160601b031690816001600160601b0316815250506000805b8a6020015151811015611d3857611bc286600001518281518110611b9457611b94614519565b60200260200101518f8f86818110611bae57611bae614519565b600192013560f81c9290921c811614919050565b15611d26577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f2be94ae8f8f86818110611c0857611c08614519565b9050013560f81c60f81b60f81c8e89602001518581518110611c2c57611c2c614519565b60200260200101518f60e001518881518110611c4a57611c4a614519565b60200260200101518781518110611c6357611c63614519565b60209081029190910101516040516001600160e01b031960e087901b16815260ff909416600485015263ffffffff92831660248501526044840191909152166064820152608401602060405180830381865afa158015611cc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ceb9190614691565b8751805185908110611cff57611cff614519565b60200260200101818151611d1391906146ac565b6001600160601b03169052506001909101905b80611d30816145de565b915050611b6e565b50508080611d45906145de565b9150506116d3565b505050600080611d678c868a606001518b6080015161073a565b9150915081611dd85760405162461bcd60e51b81526020600482015260436024820152600080516020614b7683398151915260448201527f7265733a2070616972696e6720707265636f6d70696c652063616c6c206661696064820152621b195960ea1b608482015260a4016105e2565b80611e395760405162461bcd60e51b81526020600482015260396024820152600080516020614b7683398151915260448201527f7265733a207369676e617475726520697320696e76616c69640000000000000060648201526084016105e2565b50506000878260200151604051602001611e549291906146d4565b60408051808303601f190181529190528051602090910120929b929a509198505050505050505050565b611e86613570565b611e9060006135ca565b565b611e9a613570565b60405163a98fb35560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a98fb35590611ee6908490600401614774565b600060405180830381600087803b158015611f0057600080fd5b505af1158015611f14573d6000803e3d6000fd5b5050505050565b60006096611f2c620189c043614787565b611f369190614787565b905090565b60685460009060019081161415611f945760405162461bcd60e51b815260206004820152601960248201527f5061757361626c653a20696e646578206973207061757365640000000000000060448201526064016105e2565b6002546001600160a01b031633146120035760405162461bcd60e51b815260206004820152602c60248201527f6f6e6c794261746368436f6e6669726d65723a206e6f742066726f6d2062617460448201526b31b41031b7b73334b936b2b960a11b60648201526084016105e2565b3233146120805760405162461bcd60e51b81526020600482015260516024820152600080516020614b5683398151915260448201527f63683a2068656164657220616e64206e6f6e7369676e65722064617461206d75606482015270737420626520696e2063616c6c6461746160781b608482015260a4016105e2565b436120916080850160608601614432565b63ffffffff1611156121115760405162461bcd60e51b815260206004820152604f6024820152600080516020614b5683398151915260448201527f63683a20737065636966696564207265666572656e6365426c6f636b4e756d6260648201526e657220697320696e2066757475726560881b608482015260a4016105e2565b63ffffffff4316609661212a6080860160608701614432565b6121349190614787565b63ffffffff1610156121ba5760405162461bcd60e51b81526020600482015260556024820152600080516020614b5683398151915260448201527f63683a20737065636966696564207265666572656e6365426c6f636b4e756d62606482015274195c881a5cc81d1bdbc819985c881a5b881c185cdd605a1b608482015260a4016105e2565b60006121cd6121c8856147af565b61361c565b90506000806121f9836121e3602089018961484f565b6121f360808b0160608c01614432565b89610fd3565b9150915060005b61220d604088018861484f565b905081101561234f57612223604088018861484f565b8281811061223357612233614519565b9050013560f81c60f81b60f81c60ff168360200151828151811061225957612259614519565b602002602001015161226b919061489c565b6001600160601b031660648460000151838151811061228c5761228c614519565b60200260200101516001600160601b03166122a791906148cb565b101561233d5760405162461bcd60e51b815260206004820152606460248201819052600080516020614b5683398151915260448301527f63683a207369676e61746f7269657320646f206e6f74206f776e206174206c65908201527f617374207468726573686f6c642070657263656e74616765206f6620612071756084820152636f72756d60e01b60a482015260c4016105e2565b80612347816145de565b915050612200565b506000805463ffffffff169061236488613697565b6040805160208082018490528183018790524360e01b6001600160e01b0319166060830152825160448184030181526064830180855281519183019190912063ffffffff881660008181526001909452928590205552905191925086917fc75557c4ad49697e231449688be13ef11cb6be8ed0d18819d8dde074a5a16f8a9181900360840190a26123f6826001614787565b6000805463ffffffff191663ffffffff929092169190911790555050505050505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146124625760405162461bcd60e51b81526004016105e2906148ea565b604051639926ee7d60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639926ee7d906124b09085908590600401614962565b600060405180830381600087803b1580156124ca57600080fd5b505af11580156124de573d6000803e3d6000fd5b505050505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461252e5760405162461bcd60e51b81526004016105e2906148ea565b6040516351b27a6d60e11b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063a364f4da90602401611ee6565b600254600160a81b900460ff16158080156125a457506002546001600160a01b90910460ff16105b806125c55750303b1580156125c55750600254600160a01b900460ff166001145b6125e15760405162461bcd60e51b81526004016105e2906149ad565b6002805460ff60a01b1916600160a01b179055801561260e576002805460ff60a81b1916600160a81b1790555b6126198460006136aa565b612622836135ca565b61262b82613795565b8015612673576002805460ff60a81b19169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b600254600160a81b900460ff16158080156126a157506002546001600160a01b90910460ff16105b806126c25750303b1580156126c25750600254600160a01b900460ff166001145b6126de5760405162461bcd60e51b81526004016105e2906149ad565b6002805460ff60a01b1916600160a01b179055801561270b576002805460ff60a81b1916600160a81b1790555b612714826135ca565b801561275d576002805460ff60a81b19169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15b5050565b606060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127e79190614593565b60ff1690508061280557505060408051600081526020810190915290565b6000805b828110156128ba57604051633ca5a5f560e01b815260ff821660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633ca5a5f590602401602060405180830381865afa158015612878573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061289c9190614551565b6128a690836145c6565b9150806128b2816145de565b915050612809565b506000816001600160401b038111156128d5576128d5613bcb565b6040519080825280602002602001820160405280156128fe578160200160208202803683370190505b5090506000805b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612963573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129879190614593565b60ff16811015612b2057604051633ca5a5f560e01b815260ff821660048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633ca5a5f590602401602060405180830381865afa1580156129fb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a1f9190614551565b905060005b81811015612b0b576040516356e4026d60e11b815260ff84166004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063adc804da906044016040805180830381865afa158015612a99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612abd9190614610565b60000151858581518110612ad357612ad3614519565b6001600160a01b039092166020928302919091019091015283612af5816145de565b9450508080612b03906145de565b915050612a24565b50508080612b18906145de565b915050612905565b5090949350505050565b612b32613570565b6105f481613795565b612b43613570565b6001600160a01b038116612ba85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105e2565b6105f4816135ca565b606760019054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c28919061444d565b6001600160a01b0316336001600160a01b031614612c585760405162461bcd60e51b81526004016105e29061446a565b606854198119606854191614612cd65760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c697479000000000000000060648201526084016105e2565b606881905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200161072f565b6001600160a01b038116612d9b5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a4016105e2565b606754604080516001600160a01b036101009093048316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606780546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6040805180820190915260008082526020820152612e2b613aa6565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa9050808015612e5e57612e60565bfe5b5080612e9e5760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b60448201526064016105e2565b505092915050565b6040805180820190915260008082526020820152612ec2613ac4565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa9050808015612e5e575080612e9e5760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b60448201526064016105e2565b612f42613ae2565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b60408051808201909152600080825260208201526000808061302a600080516020614b368339815191528661452f565b90505b613036816137ef565b9093509150600080516020614b36833981519152828309831415613070576040805180820190915290815260208101919091529392505050565b600080516020614b3683398151915260018208905061302d565b6040805180820182528681526020808201869052825180840190935286835282018490526000918291906130bc613b07565b60005b60028110156132815760006130d58260066148cb565b90508482600281106130e9576130e9614519565b602002015151836130fb8360006145c6565b600c811061310b5761310b614519565b602002015284826002811061312257613122614519565b6020020151602001518382600161313991906145c6565b600c811061314957613149614519565b602002015283826002811061316057613160614519565b60200201515151836131738360026145c6565b600c811061318357613183614519565b602002015283826002811061319a5761319a614519565b60200201515160016020020151836131b38360036145c6565b600c81106131c3576131c3614519565b60200201528382600281106131da576131da614519565b6020020151602001516000600281106131f5576131f5614519565b6020020151836132068360046145c6565b600c811061321657613216614519565b602002015283826002811061322d5761322d614519565b60200201516020015160016002811061324857613248614519565b6020020151836132598360056145c6565b600c811061326957613269614519565b60200201525080613279816145de565b9150506130bf565b5061328a613b26565b60006020826101808560088cfa9151919c9115159b50909950505050505050505050565b60606000805b610100811015613304576001811b9150838216156132f457828160f81b6040516020016132e29291906149fb565b60405160208183030381529060405292505b6132fd816145de565b90506132b4565b5050919050565b60008061331784613871565b905080156133bd578260ff168460018651613332919061464f565b8151811061334257613342614519565b016020015160f81c106133bd5760405162461bcd60e51b815260206004820152603f60248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206269746d61702065786365656473206d61782076616c75650060648201526084016105e2565b90505b92915050565b6000805b82156133c0576133db60018461464f565b90921691806133e981614a2a565b9150506133ca565b60408051808201909152600080825260208201526102008261ffff161061344d5760405162461bcd60e51b815260206004820152601060248201526f7363616c61722d746f6f2d6c6172676560801b60448201526064016105e2565b8161ffff16600114156134615750816133c0565b6040805180820190915260008082526020820181905284906001905b8161ffff168661ffff16106134ca57600161ffff871660ff83161c811614156134ad576134aa8484612ea6565b93505b6134b78384612ea6565b92506201fffe600192831b16910161347d565b509195945050505050565b604080518082019091526000808252602082015281511580156134fa57506020820151155b15613518575050604080518082019091526000808252602082015290565b604051806040016040528083600001518152602001600080516020614b36833981519152846020015161354b919061452f565b61356390600080516020614b3683398151915261464f565b905292915050565b919050565b6035546001600160a01b03163314611e905760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105e2565b603580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600061365982604080518082019091526000808252602082015250604080518082019091528151815260609091015163ffffffff16602082015290565b6040805182516020808301919091529092015163ffffffff16908201526060015b604051602081830303815290604052805190602001209050919050565b60008160405160200161367a9190614aba565b60675461010090046001600160a01b03161580156136d057506001600160a01b03821615155b6137525760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a4016105e2565b606881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261275d82612d0d565b600280546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527ff024af0387e1367ceb1c6a3b6a00db4e9917e56bfb22a289808100f8e2b2c0859101612754565b60008080600080516020614b368339815191526003600080516020614b3683398151915286600080516020614b36833981519152888909090890506000613865827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f52600080516020614b368339815191526139fe565b91959194509092505050565b6000610100825111156138fa5760405162461bcd60e51b8152602060048201526044602482018190527f4269746d61705574696c732e6f72646572656442797465734172726179546f42908201527f69746d61703a206f7264657265644279746573417272617920697320746f6f206064820152636c6f6e6760e01b608482015260a4016105e2565b815161390857506000919050565b6000808360008151811061391e5761391e614519565b0160200151600160f89190911c81901b92505b84518110156139f55784818151811061394c5761394c614519565b0160200151600160f89190911c1b91508282116139e15760405162461bcd60e51b815260206004820152604760248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206f72646572656442797465734172726179206973206e6f74206064820152661bdc99195c995960ca1b608482015260a4016105e2565b918117916139ee816145de565b9050613931565b50909392505050565b600080613a09613b26565b613a11613b44565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa9250828015612e5e575082613a9b5760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c75726500000000000060448201526064016105e2565b505195945050505050565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6040518060400160405280613af5613b62565b8152602001613b02613b62565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b6001600160a01b03811681146105f457600080fd5b600060208284031215613ba757600080fd5b81356133bd81613b80565b600060208284031215613bc457600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715613c0357613c03613bcb565b60405290565b60405161010081016001600160401b0381118282101715613c0357613c03613bcb565b604051601f8201601f191681016001600160401b0381118282101715613c5457613c54613bcb565b604052919050565b600060408284031215613c6e57600080fd5b613c76613be1565b9050813581526020820135602082015292915050565b600082601f830112613c9d57600080fd5b613ca5613be1565b806040840185811115613cb757600080fd5b845b81811015613cd1578035845260209384019301613cb9565b509095945050505050565b600060808284031215613cee57600080fd5b613cf6613be1565b9050613d028383613c8c565b8152613d118360408401613c8c565b602082015292915050565b6000806000806101208587031215613d3357600080fd5b84359350613d448660208701613c5c565b9250613d538660608701613cdc565b9150613d628660e08701613c5c565b905092959194509250565b6020808252825182820181905260009190848201906040850190845b81811015613dae5783516001600160a01b031683529284019291840191600101613d89565b50909695505050505050565b80151581146105f457600080fd5b600060208284031215613dda57600080fd5b81356133bd81613dba565b60ff811681146105f457600080fd5b600060208284031215613e0657600080fd5b81356133bd81613de5565b803563ffffffff8116811461356b57600080fd5b60006001600160401b03821115613e3e57613e3e613bcb565b5060051b60200190565b600082601f830112613e5957600080fd5b81356020613e6e613e6983613e25565b613c2c565b82815260059290921b84018101918181019086841115613e8d57600080fd5b8286015b84811015613eaf57613ea281613e11565b8352918301918301613e91565b509695505050505050565b600082601f830112613ecb57600080fd5b81356020613edb613e6983613e25565b82815260069290921b84018101918181019086841115613efa57600080fd5b8286015b84811015613eaf57613f108882613c5c565b835291830191604001613efe565b600082601f830112613f2f57600080fd5b81356020613f3f613e6983613e25565b82815260059290921b84018101918181019086841115613f5e57600080fd5b8286015b84811015613eaf5780356001600160401b03811115613f815760008081fd5b613f8f8986838b0101613e48565b845250918301918301613f62565b60006101808284031215613fb057600080fd5b613fb8613c09565b905081356001600160401b0380821115613fd157600080fd5b613fdd85838601613e48565b83526020840135915080821115613ff357600080fd5b613fff85838601613eba565b6020840152604084013591508082111561401857600080fd5b61402485838601613eba565b60408401526140368560608601613cdc565b60608401526140488560e08601613c5c565b608084015261012084013591508082111561406257600080fd5b61406e85838601613e48565b60a084015261014084013591508082111561408857600080fd5b61409485838601613e48565b60c08401526101608401359150808211156140ae57600080fd5b506140bb84828501613f1e565b60e08301525092915050565b6000806000806000608086880312156140df57600080fd5b8535945060208601356001600160401b03808211156140fd57600080fd5b818801915088601f83011261411157600080fd5b81358181111561412057600080fd5b89602082850101111561413257600080fd5b602083019650945061414660408901613e11565b9350606088013591508082111561415c57600080fd5b5061416988828901613f9d565b9150509295509295909350565b600081518084526020808501945080840160005b838110156141af5781516001600160601b03168752958201959082019060010161418a565b509495945050505050565b60408152600083516040808401526141d56080840182614176565b90506020850151603f198483030160608501526141f28282614176565b925050508260208301529392505050565b60006001600160401b0383111561421c5761421c613bcb565b61422f601f8401601f1916602001613c2c565b905082815283838301111561424357600080fd5b828260208301376000602084830101529392505050565b60006020828403121561426c57600080fd5b81356001600160401b0381111561428257600080fd5b8201601f8101841361429357600080fd5b6142a284823560208401614203565b949350505050565b600080604083850312156142bd57600080fd5b82356001600160401b03808211156142d457600080fd5b90840190608082870312156142e857600080fd5b909250602084013590808211156142fe57600080fd5b5061430b85828601613f9d565b9150509250929050565b600082601f83011261432657600080fd5b61433583833560208501614203565b9392505050565b6000806040838503121561434f57600080fd5b823561435a81613b80565b915060208301356001600160401b038082111561437657600080fd5b908401906060828703121561438a57600080fd5b6040516060810181811083821117156143a5576143a5613bcb565b6040528235828111156143b757600080fd5b6143c388828601614315565b82525060208301356020820152604083013560408201528093505050509250929050565b6000806000606084860312156143fc57600080fd5b833561440781613b80565b9250602084013561441781613b80565b9150604084013561442781613b80565b809150509250925092565b60006020828403121561444457600080fd5b61433582613e11565b60006020828403121561445f57600080fd5b81516133bd81613b80565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b6000602082840312156144c657600080fd5b81516133bd81613dba565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60008261454c57634e487b7160e01b600052601260045260246000fd5b500690565b60006020828403121561456357600080fd5b5051919050565b60006020828403121561457c57600080fd5b81516001600160c01b03811681146133bd57600080fd5b6000602082840312156145a557600080fd5b81516133bd81613de5565b634e487b7160e01b600052601160045260246000fd5b600082198211156145d9576145d96145b0565b500190565b60006000198214156145f2576145f26145b0565b5060010190565b80516001600160601b038116811461356b57600080fd5b60006040828403121561462257600080fd5b61462a613be1565b825161463581613b80565b8152614643602084016145f9565b60208201529392505050565b600082821015614661576146616145b0565b500390565b60006020828403121561467857600080fd5b815167ffffffffffffffff19811681146133bd57600080fd5b6000602082840312156146a357600080fd5b614335826145f9565b60006001600160601b03838116908316818110156146cc576146cc6145b0565b039392505050565b63ffffffff60e01b8360e01b1681526000600482018351602080860160005b8381101561470f578151855293820193908201906001016146f3565b5092979650505050505050565b60005b8381101561473757818101518382015260200161471f565b838111156126735750506000910152565b6000815180845261476081602086016020860161471c565b601f01601f19169290920160200192915050565b6020815260006143356020830184614748565b600063ffffffff8083168185168083038211156147a6576147a66145b0565b01949350505050565b6000608082360312156147c157600080fd5b604051608081016001600160401b0382821081831117156147e4576147e4613bcb565b8160405284358352602085013591508082111561480057600080fd5b61480c36838701614315565b6020840152604085013591508082111561482557600080fd5b5061483236828601614315565b60408301525061484460608401613e11565b606082015292915050565b6000808335601e1984360301811261486657600080fd5b8301803591506001600160401b0382111561488057600080fd5b60200191503681900382131561489557600080fd5b9250929050565b60006001600160601b03808316818516818304811182151516156148c2576148c26145b0565b02949350505050565b60008160001904831182151516156148e5576148e56145b0565b500290565b60208082526052908201527f536572766963654d616e61676572426173652e6f6e6c7952656769737472794360408201527f6f6f7264696e61746f723a2063616c6c6572206973206e6f742074686520726560608201527133b4b9ba393c9031b7b7b93234b730ba37b960711b608082015260a00190565b60018060a01b038316815260406020820152600082516060604084015261498c60a0840182614748565b90506020840151606084015260408401516080840152809150509392505050565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b60008351614a0d81846020880161471c565b6001600160f81b0319939093169190920190815260010192915050565b600061ffff80831681811415614a4257614a426145b0565b6001019392505050565b6000808335601e19843603018112614a6357600080fd5b83016020810192503590506001600160401b03811115614a8257600080fd5b80360383131561489557600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60208152813560208201526000614ad46020840184614a4c565b60806040850152614ae960a085018284614a91565b915050614af96040850185614a4c565b848303601f19016060860152614b10838284614a91565b9250505063ffffffff614b2560608601613e11565b166080840152809150509291505056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47456967656e4441536572766963654d616e616765722e636f6e6669726d426174424c535369676e6174757265436865636b65722e636865636b5369676e617475a2646970667358221220a5aa791ce56437be19ec01db4c7e6d5ddf85b80196b58a7d0376c319b16c677d64736f6c634300080c0033", + "sourceMap": "1166:4957:119:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5826:138:25;;;;;;:::i;:::-;;:::i;:::-;;3832:392;;;;;;:::i;:::-;;:::i;13606:854:40:-;;;;;;:::i;:::-;;:::i;:::-;;;;3658:14:129;;3651:22;3633:41;;3717:14;;3710:22;3705:2;3690:18;;3683:50;3606:18;13606:854:40;;;;;;;;4963:1428:45;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2045:29:120:-;;;;;-1:-1:-1;;;;;2045:29:120;;;;;;-1:-1:-1;;;;;4840:32:129;;;4822:51;;4810:2;4795:18;2045:29:120;4676:203:129;2172:168:40;;;;;;:::i;:::-;;:::i;1787:21:120:-;;;;;;;;;;;;5427:10:129;5415:23;;;5397:42;;5385:2;5370:18;1787:21:120;5253:192:129;4299:136:25;;;:::i;5606:149::-;;;;;;:::i;:::-;5724:7;;5695:1;:10;;;;;;;;5724:14;;;5723:24;;5606:149;;;;5982:14:129;;5975:22;5957:41;;5945:2;5930:18;5606:149:25;5817:187:129;5418:87:25;5491:7;;5418:87;;;6155:25:129;;;6143:2;6128:18;5418:87:25;6009:177:129;1125:47:40;;;;;649:67:120;;696:20;649:67;;1692:48;;1737:3;1692:48;;1074:45:40;;;;;1011:57;;;;;4217:8907;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;2071:101:82:-;;;:::i;5808:84:119:-;5853:6;5878:7;;;5808:84;;2134:147:45;;;;;;:::i;:::-;;:::i;5966:154:119:-;;;:::i;2590:2672::-;;;;;;:::i;:::-;;:::i;1825:37:25:-;;;;;;;;-1:-1:-1;;;;;1825:37:25;;;1441:85:82;1513:6;;-1:-1:-1;;;;;1513:6:82;1441:85;;2580:265:45;;;;;;:::i;:::-;;:::i;3055:163::-;;;;;;:::i;:::-;;:::i;1363:32:40:-;;;;;;;;;2040:322:119;;;;;;:::i;:::-;;:::i;1847:118:45:-;;;;;;:::i;:::-;;:::i;1178:46:40:-;;;;;3541:937:45;;;:::i;1914:60:120:-;;;;;;:::i;:::-;;;;;;;;;;;;;;440:51;;488:3;440:51;;5339:125:119;;;;;;:::i;:::-;;:::i;2321:198:82:-;;;;;;:::i;:::-;;:::i;4911:437:25:-;;;;;;:::i;:::-;;:::i;5826:138::-;2285:14;;;;;;;;;-1:-1:-1;;;;;2285:14:25;-1:-1:-1;;;;;2285:23:25;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2271:39:25;:10;-1:-1:-1;;;;;2271:39:25;;2263:94;;;;-1:-1:-1;;;2263:94:25;;;;;;;:::i;:::-;;;;;;;;;5920:37:::1;5939:17;5920:18;:37::i;:::-;5826:138:::0;:::o;3832:392::-;2125:14;;:35;;-1:-1:-1;;;2125:35:25;;2149:10;2125:35;;;4822:51:129;2125:14:25;;;;-1:-1:-1;;;;;2125:14:25;;:23;;4795:18:129;;2125:35:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2117:88;;;;-1:-1:-1;;;2117:88:25;;;;;;;:::i;:::-;4064:7:::1;::::0;4034:25;;::::1;4033:38;4025:107;;;::::0;-1:-1:-1;;;4025:107:25;;19034:2:129;4025:107:25::1;::::0;::::1;19016:21:129::0;19073:2;19053:18;;;19046:30;19112:34;19092:18;;;19085:62;19183:26;19163:18;;;19156:54;19227:19;;4025:107:25::1;18832:420:129::0;4025:107:25::1;4142:7;:25:::0;;;4182:35:::1;::::0;6155:25:129;;;4189:10:25::1;::::0;4182:35:::1;::::0;6143:2:129;6128:18;4182:35:25::1;;;;;;;;3832:392:::0;:::o;13606:854:40:-;13803:22;13827;13936:13;2035:77:57;13987:7:40;13996:3;:5;;;14003:3;:5;;;14010;:7;;;14018:1;14010:10;;;;;;;:::i;:::-;;;;;14022:7;;14030:1;14022:10;;;;14034:5;:7;;;14042:1;14034:10;;;;;;;:::i;:::-;;;;;14046:5;:7;;;14054:1;14046:10;;;;;;;:::i;:::-;;;;;;;;;;14058:7;;14067;;;;13970:105;;;;;;;;;;;19742:19:129;;;19786:2;19777:12;;19770:28;;;;19823:2;19814:12;;19807:28;;;;19860:2;19851:12;;19844:28;;;;19897:3;19888:13;;19881:29;;;;19935:3;19926:13;;19919:29;19973:3;19964:13;;19957:29;20011:3;20002:13;;19995:29;20049:3;20040:13;;20033:29;20087:3;20078:13;;19389:708;13970:105:40;;;;;;;;;;;;;13960:116;;;;;;13952:125;;:144;;;;:::i;:::-;13936:160;-1:-1:-1;14179:274:40;14214:33;14225:21;:3;13936:160;14225:14;:21::i;:::-;14214:5;;:10;:33::i;:::-;14265:22;:20;:22::i;:::-;14305:67;14334:37;14365:5;14334:19;-1:-1:-1;;;;;;;;;;;;;;;;;2390:13:57;;;;;;;;2398:1;2390:13;;2401:1;2390:13;;;;;2311:99;14334:19:40;:30;;:37::i;:::-;14305:23;14320:7;14305:14;:23::i;:::-;:28;;:67::i;:::-;14390:5;998:6;14179:17;:274::i;:::-;14138:315;;;;-1:-1:-1;13606:854:40;-1:-1:-1;;;;;;13606:854:40:o;4963:1428:45:-;5092:44;;-1:-1:-1;;;5092:44:45;;-1:-1:-1;;;;;4840:32:129;;;5092:44:45;;;4822:51:129;5043:16:45;;5071:18;;5092:20;:34;;;;4795:18:129;;5092:44:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5171:55;;-1:-1:-1;;;5171:55:45;;;;;6155:25:129;;;5071:65:45;;-1:-1:-1;5146:22:45;;-1:-1:-1;;;;;5171:20:45;:43;;;;6128:18:129;;5171:55:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5146:80;-1:-1:-1;;;;;;5241:19:45;;;;:62;;;5264:20;-1:-1:-1;;;;;5264:32:45;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:39;;;5241:62;5237:116;;;-1:-1:-1;;5326:16:45;;;5340:1;5326:16;;;;;;;;;5319:23;-1:-1:-1;;4963:1428:45:o;5237:116::-;5434:36;5473:46;5504:14;-1:-1:-1;;;;;5473:46:45;:30;:46::i;:::-;5434:85;-1:-1:-1;5529:21:45;;5560:172;5583:23;:30;5579:1;:34;5560:172;;;5651:14;-1:-1:-1;;;;;5651:35:45;;5693:23;5717:1;5693:26;;;;;;;;:::i;:::-;;;;;5651:70;;-1:-1:-1;;;;;;5651:70:45;;;;;;;5693:26;;;;;5651:70;;;21326:36:129;21299:18;;5651:70:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5634:87;;;;:::i;:::-;;-1:-1:-1;5615:3:45;;;;:::i;:::-;;;;5560:172;;;;5803:35;5855:13;-1:-1:-1;;;;;5841:28:45;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5841:28:45;;5803:66;;5879:13;5910:9;5906:436;5929:23;:30;5925:1;:34;5906:436;;;5980:12;6001:23;6025:1;6001:26;;;;;;;;:::i;:::-;;;;;6073:43;;-1:-1:-1;;;6073:43:45;;6001:26;;;;;6073:43;;;21326:36:129;;;6001:26:45;-1:-1:-1;;;;;;;;6073:14:45;:35;;;;21299:18:129;;6073:43:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6042:74;;6135:9;6130:202;6154:20;6150:1;:24;6130:202;;;6235:47;;-1:-1:-1;;;6235:47:45;;22167:4:129;22155:17;;6235:47:45;;;22137:36:129;22189:18;;;22182:34;;;6235:14:45;-1:-1:-1;;;;;6235:36:45;;;;22110:18:129;;6235:47:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;;;6199:18;6218:5;6199:25;;;;;;;;:::i;:::-;-1:-1:-1;;;;;6199:93:45;;;:25;;;;;;;;;;;:93;6310:7;;;;:::i;:::-;;;;6176:3;;;;;:::i;:::-;;;;6130:202;;;;5966:376;;5961:3;;;;;:::i;:::-;;;;5906:436;;;-1:-1:-1;6358:18:45;;4963:1428;-1:-1:-1;;;;;;;4963:1428:45:o;2172:168:40:-;1466:19;-1:-1:-1;;;;;1466:25:40;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1452:41:40;:10;-1:-1:-1;;;;;1452:41:40;;1444:146;;;;-1:-1:-1;;;1444:146:40;;23083:2:129;1444:146:40;;;23065:21:129;23122:2;23102:18;;;23095:30;23161:34;23141:18;;;23134:62;23232:34;23212:18;;;23205:62;23304:30;23283:19;;;23276:59;23352:19;;1444:146:40;22881:496:129;1444:146:40;2257:20:::1;:28:::0;;-1:-1:-1;;2257:28:40::1;::::0;::::1;;::::0;;::::1;::::0;;;2300:33:::1;::::0;5957:41:129;;;2300:33:40::1;::::0;5945:2:129;5930:18;2300:33:40::1;;;;;;;2172:168:::0;:::o;4299:136:25:-;2125:14;;:35;;-1:-1:-1;;;2125:35:25;;2149:10;2125:35;;;4822:51:129;2125:14:25;;;;-1:-1:-1;;;;;2125:14:25;;:23;;4795:18:129;;2125:35:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2117:88;;;;-1:-1:-1;;;2117:88:25;;;;;;;:::i;:::-;-1:-1:-1;;4349:7:25::1;:27:::0;;;4391:37:::1;::::0;6155:25:129;;;4398:10:25::1;::::0;4391:37:::1;::::0;6143:2:129;6128:18;4391:37:25::1;;;;;;;4299:136::o:0;4217:8907:40:-;-1:-1:-1;;;;;;;;;;;;;;;;4577:17:40;;;;:24;-1:-1:-1;;4553:48:40;;4552:122;;;;-1:-1:-1;4643:23:40;;;;:30;4619:54;;4552:122;:195;;;;-1:-1:-1;4715:24:40;;;;:31;4691:55;;4552:195;:272;;;;-1:-1:-1;4788:28:40;;;;:35;4764:59;;4552:272;4531:384;;;;-1:-1:-1;;;4531:384:40;;23584:2:129;4531:384:40;;;23566:21:129;23623:2;23603:18;;;23596:30;-1:-1:-1;;;;;;;;;;;23642:18:129;;;23635:62;23733:34;23713:18;;;23706:62;-1:-1:-1;;;23784:19:129;;;23777:32;23826:19;;4531:384:40;23382:469:129;4531:384:40;4981:35;;:42;4947:23;;;;:30;:76;4926:191;;;;-1:-1:-1;;;4926:191:40;;24058:2:129;4926:191:40;;;24040:21:129;24097:2;24077:18;;;24070:30;;;-1:-1:-1;;;;;;;;;;;24116:18:129;;;24109:62;24207:34;24187:18;;;24180:62;-1:-1:-1;;;24258:19:129;;;24251:35;24303:19;;4926:191:40;23856:472:129;4926:191:40;5167:12;5136:44;;:20;:44;;;;5128:117;;;;-1:-1:-1;;;5128:117:40;;24535:2:129;5128:117:40;;;24517:21:129;24574:2;24554:18;;;24547:30;-1:-1:-1;;;;;;;;;;;24593:18:129;;;24586:62;24684:30;24664:18;;;24657:58;24732:19;;5128:117:40;24333:424:129;5128:117:40;5762:19;;;;;;;;5735:24;5762:19;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;5762:19:40;6118:13;-1:-1:-1;;;;;6105:34:40;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6105:34:40;-1:-1:-1;6071:31:40;;;:68;6197:13;-1:-1:-1;;;;;6184:34:40;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6184:34:40;-1:-1:-1;6149:69:40;;-1:-1:-1;;;;;;;;;;;;;;;;;6311:6:40;:23;;;:30;-1:-1:-1;;;;;6297:45:40;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6297:45:40;-1:-1:-1;6270:72:40;;6392:23;;;;:30;-1:-1:-1;;;;;6378:45:40;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6378:45:40;;6352:10;:23;;:71;;;;6602:27;6632:87;6670:13;;6632:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6685:33:40;;;-1:-1:-1;;;6685:33:40;;;;-1:-1:-1;;;;;6685:19:40;:31;;-1:-1:-1;6685:31:40;;-1:-1:-1;6685:33:40;;;;;;;;;;;;;;:31;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6632:37;:87::i;:::-;6602:117;;6739:9;6734:1638;6758:6;:23;;;:30;6754:1;:34;6734:1638;;;7050:40;:6;:23;;;7074:1;7050:26;;;;;;;;:::i;:::-;;;;;;;10532:9:57;;10471:16;10522:20;;;10578:4;10574:13;;;10568:20;10555:34;;;10627:4;10614:18;;;10402:246;7050:40:40;7021:10;:23;;;7045:1;7021:26;;;;;;;;:::i;:::-;;;;;;;;;;:69;7112:6;;7108:277;;7221:23;;;;7245:5;7249:1;7245;:5;:::i;:::-;7221:30;;;;;;;;:::i;:::-;;;;;;;7213:39;;7183:10;:23;;;7207:1;7183:26;;;;;;;;:::i;:::-;;;;;;;7175:35;;:77;7142:224;;;;;-1:-1:-1;;;7142:224:40;;25094:2:129;7142:224:40;;;25076:21:129;25113:18;;;25106:30;;;;-1:-1:-1;;;;;;;;;;;25152:18:129;;;25145:62;25243:34;25223:18;;;25216:62;25295:19;;7142:224:40;24892:428:129;7142:224:40;7546:19;-1:-1:-1;;;;;7546:55:40;;7640:10;:23;;;7664:1;7640:26;;;;;;;;:::i;:::-;;;;;;;7705:20;7758:6;:35;;;7794:1;7758:38;;;;;;;;:::i;:::-;;;;;;;7546:273;;;;;;;;;;;;;;;;25524:25:129;;;25568:10;25614:15;;;25609:2;25594:18;;25587:43;25666:15;25661:2;25646:18;;25639:43;25512:2;25497:18;;25325:363;7546:273:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;7495:324:40;:10;:24;;;7520:1;7495:27;;;;;;;;:::i;:::-;;;;;;:324;;;;;8110:247;8140:199;8237:75;8292:19;8262:10;:24;;;8287:1;8262:27;;;;;;;;:::i;:::-;;;;;;;:49;8237:24;:75::i;:::-;8140:6;:23;;;8164:1;8140:26;;;;;;;;:::i;:::-;;;;;;;:67;;:199;;;;:::i;8110:247::-;8104:253;-1:-1:-1;6790:3:40;;;;:::i;:::-;;;;6734:1638;;;;6434:1948;8655:12;:3;:10;:12::i;:::-;8649:18;;8970:29;9002:10;-1:-1:-1;;;;;9002:32:40;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9079:20;;8970:66;;-1:-1:-1;9079:20:40;;9050:26;9114:3139;9134:24;;;9114:3139;;;9342:21;9338:369;;;9516:20;9420:116;;9491:21;9420:19;-1:-1:-1;;;;;9420:43:40;;9470:13;;9484:1;9470:16;;;;;;;:::i;:::-;9420:68;;;;;;-1:-1:-1;;;;;;9420:68:40;;;9470:16;;;;;9420:68;;;21326:36:129;-1:-1:-1;21299:18:129;;9420:68:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:92;;;;:::i;:::-;:116;;9387:301;;;;-1:-1:-1;;;9387:301:40;;25895:2:129;9387:301:40;;;25877:21:129;25934:3;25914:18;;;25907:31;-1:-1:-1;;;;;;;;;;;25954:18:129;;;25947:62;26045:34;26025:18;;;26018:62;26117:34;26096:19;;;26089:63;-1:-1:-1;;;26168:19:129;;;26161:37;26215:19;;9387:301:40;25693:547:129;9387:301:40;9976:14;-1:-1:-1;;;;;9976:46:40;;10073:13;;10087:1;10073:16;;;;;;;:::i;:::-;;;;;;;;;10067:23;;10133:20;10190:6;:23;;;10214:1;10190:26;;;;;;;;:::i;:::-;;;;;;;;;;;9976:267;;-1:-1:-1;;;;;;9976:267:40;;;;;;;26470:4:129;26458:17;;;9976:267:40;;;26440:36:129;9976:267:40;26541:15:129;;;26521:18;;;26514:43;26593:15;26573:18;;;26566:43;26413:18;;9976:267:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;9904:339:40;;9912:34;:6;:17;;;9930:1;9912:20;;;;;;;;:::i;:34::-;-1:-1:-1;;9904:339:40;;9875:507;;;;-1:-1:-1;;;9875:507:40;;27121:2:129;9875:507:40;;;27103:21:129;27160:2;27140:18;;;27133:30;-1:-1:-1;;;;;;;;;;;27179:18:129;;;27172:62;27270:34;27250:18;;;27243:62;27342:34;27321:19;;;27314:63;-1:-1:-1;;;27393:19:129;;;27386:32;27435:19;;9875:507:40;26919:541:129;9875:507:40;10406:30;10415:6;:17;;;10433:1;10415:20;;;;;;;;:::i;:::-;;;;;;;10406:3;:8;;:30;;;;:::i;:::-;10400:36;;10611:13;-1:-1:-1;;;;;10611:49:40;;10707:13;;10721:1;10707:16;;;;;;;:::i;:::-;;;;;;;;;10701:23;;10763:20;10816:6;:24;;;10841:1;10816:27;;;;;;;;:::i;:::-;;;;;;;;;;;10611:255;;-1:-1:-1;;;;;;10611:255:40;;;;;;;26470:4:129;26458:17;;;10611:255:40;;;26440:36:129;10611:255:40;26541:15:129;;;26521:18;;;26514:43;26593:15;26573:18;;;26566:43;26413:18;;10611:255:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10553:11;:31;;;10585:1;10553:34;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10553:313:40;;;:34;;;;;;;;;;:313;10922:31;;;:34;;10954:1;;10922:34;;;;;;:::i;:::-;;;;;;;10884:11;:32;;;10917:1;10884:35;;;;;;;;:::i;:::-;;;;;;:72;-1:-1:-1;;;;;10884:72:40;;;-1:-1:-1;;;;;10884:72:40;;;;;11043:31;11342:9;11337:902;11361:6;:23;;;:30;11357:1;:34;11337:902;;;11533:71;11551:10;:24;;;11576:1;11551:27;;;;;;;;:::i;:::-;;;;;;;11586:13;;11600:1;11586:16;;;;;;;:::i;:::-;14843:1:58;11586:16:40;;;;;14826:13:58;;;;14825:19;;14819:26;;;-1:-1:-1;14731:121:58;11533:71:40;11529:692;;;11699:13;-1:-1:-1;;;;;11699:43:40;;11797:13;;11811:1;11797:16;;;;;;;:::i;:::-;;;;;;;;;11791:23;;11861:20;11927:10;:23;;;11951:1;11927:26;;;;;;;;:::i;:::-;;;;;;;11994:6;:28;;;12023:1;11994:31;;;;;;;;:::i;:::-;;;;;;;12026:23;11994:56;;;;;;;;:::i;:::-;;;;;;;;;;;11699:382;;-1:-1:-1;;;;;;11699:382:40;;;;;;;27930:4:129;27918:17;;;11699:382:40;;;27900:36:129;11699:382:40;28001:15:129;;;27981:18;;;27974:43;28033:18;;;28026:34;;;;28096:15;28076:18;;;28069:43;27872:19;;11699:382:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11632:32;;:35;;11665:1;;11632:35;;;;;;:::i;:::-;;;;;;:449;;;;;;;:::i;:::-;-1:-1:-1;;;;;11632:449:40;;;-1:-1:-1;12147:25:40;;;;;11529:692;11393:3;;;;:::i;:::-;;;;11337:902;;;;9165:3088;9160:3;;;;;:::i;:::-;;;;9114:3139;;;;8956:3307;;12323:22;12347:21;12372:153;12420:7;12446:3;12468:6;:12;;;12499:6;:12;;;12372:30;:153::i;:::-;12322:203;;;;12547:17;12539:97;;;;-1:-1:-1;;;12539:97:40;;28567:2:129;12539:97:40;;;28549:21:129;28606:2;28586:18;;;28579:30;-1:-1:-1;;;;;;;;;;;28625:18:129;;;28618:62;28716:34;28696:18;;;28689:62;-1:-1:-1;;;28767:19:129;;;28760:34;28811:19;;12539:97:40;28365:471:129;12539:97:40;12658:16;12650:86;;;;-1:-1:-1;;;12650:86:40;;29043:2:129;12650:86:40;;;29025:21:129;29082:2;29062:18;;;29055:30;-1:-1:-1;;;;;;;;;;;29101:18:129;;;29094:62;29192:27;29172:18;;;29165:55;29237:19;;12650:86:40;28841:421:129;12650:86:40;12272:475;;12821:27;12878:20;12900:10;:23;;;12861:63;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;12861:63:40;;;;;;12851:74;;12861:63;12851:74;;;;13084:11;;12851:74;;-1:-1:-1;4217:8907:40;;-1:-1:-1;;;;;;;;;4217:8907:40:o;2071:101:82:-;1334:13;:11;:13::i;:::-;2135:30:::1;2162:1;2135:18;:30::i;:::-;2071:101::o:0;2134:147:45:-;1334:13:82;:11;:13::i;:::-;2221:53:45::1;::::0;-1:-1:-1;;;2221:53:45;;-1:-1:-1;;;;;2221:18:45::1;:39;::::0;::::1;::::0;:53:::1;::::0;2261:12;;2221:53:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;2134:147:::0;:::o;5966:154:119:-;6022:6;1737:3:120;6047:44:119;696:20:120;6054:12:119;6047:44;:::i;:::-;:66;;;;:::i;:::-;6040:73;;5966:154;:::o;2590:2672::-;5724:7:25;;1423:1:119;;5695::25;5724:14;;;5723:24;2767:14;2759:52;;;;-1:-1:-1;;;2759:52:25;;31102:2:129;2759:52:25;;;31084:21:129;31141:2;31121:18;;;31114:30;31180:27;31160:18;;;31153:55;31225:18;;2759:52:25;30900:349:129;2759:52:25;1605:14:119::1;::::0;-1:-1:-1;;;;;1605:14:119::1;1591:10;:28;1583:85;;;::::0;-1:-1:-1;;;1583:85:119;;31456:2:129;1583:85:119::1;::::0;::::1;31438:21:129::0;31495:2;31475:18;;;31468:30;31534:34;31514:18;;;31507:62;-1:-1:-1;;;31585:18:129;;;31578:42;31637:19;;1583:85:119::1;31254:408:129::0;1583:85:119::1;2940:9:::2;2953:10;2940:23;2932:117;;;::::0;-1:-1:-1;;;2932:117:119;;31869:2:129;2932:117:119::2;::::0;::::2;31851:21:129::0;31908:2;31888:18;;;31881:30;-1:-1:-1;;;;;;;;;;;31927:18:129;;;31920:62;32018:34;31998:18;;;31991:62;-1:-1:-1;;;32069:19:129;;;32062:48;32127:19;;2932:117:119::2;31667:485:129::0;2932:117:119::2;3205:12;3169:32;::::0;;;::::2;::::0;::::2;;:::i;:::-;:48;;;;3148:162;;;::::0;-1:-1:-1;;;3148:162:119;;32359:2:129;3148:162:119::2;::::0;::::2;32341:21:129::0;32398:2;32378:18;;;32371:30;-1:-1:-1;;;;;;;;;;;32417:18:129;;;32410:62;32508:34;32488:18;;;32481:62;-1:-1:-1;;;32559:19:129;;;32552:46;32615:19;;3148:162:119::2;32157:483:129::0;3148:162:119::2;3342:80;3409:12;3342:80;1737:3:120;3343:32:119;::::0;;;::::2;::::0;::::2;;:::i;:::-;:54;;;;:::i;:::-;3342:80;;;;3321:212;;;::::0;-1:-1:-1;;;3321:212:119;;32847:2:129;3321:212:119::2;::::0;::::2;32829:21:129::0;32886:2;32866:18;;;32859:30;-1:-1:-1;;;;;;;;;;;32905:18:129;;;32898:62;32996:34;32976:18;;;32969:62;-1:-1:-1;;;33047:19:129;;;33040:52;33109:19;;3321:212:119::2;32645:489:129::0;3321:212:119::2;3607:30;3640:49;:47;:11:::0;:47:::2;:::i;:::-;;:49::i;:::-;3607:82:::0;-1:-1:-1;3745:42:119::2;::::0;3841:262:::2;3607:82:::0;3907:25:::2;;::::0;::::2;:11:::0;:25:::2;:::i;:::-;4019:32;::::0;;;::::2;::::0;::::2;;:::i;:::-;4066:27;3841:15;:262::i;:::-;3731:372;;;;4204:6;4199:625;4220:38;;::::0;::::2;:11:::0;:38:::2;:::i;:::-;:45;;4216:1;:49;4199:625;;;4637:38;;::::0;::::2;:11:::0;:38:::2;:::i;:::-;4676:1;4637:41;;;;;;;:::i;:::-;;;;;;;;;4631:48;;4588:91;;:17;:37;;;4626:1;4588:40;;;;;;;;:::i;:::-;;;;;;;:91;;;;:::i;:::-;-1:-1:-1::0;;;;;4498:181:119::2;488:3:120;4498:17:119;:38;;;4537:1;4498:41;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;4498:65:119::2;;;;;:::i;:::-;:181;;4473:340;;;::::0;-1:-1:-1;;;4473:340:119;;35257:2:129;4473:340:119::2;::::0;::::2;35239:21:129::0;35296:3;35276:18;;;35269:31;;;-1:-1:-1;;;;;;;;;;;35316:18:129;;;35309:62;35407:34;35387:18;;;35380:62;35479:34;35458:19;;;35451:63;-1:-1:-1;;;35530:19:129;;;35523:35;35575:19;;4473:340:119::2;35055:545:129::0;4473:340:119::2;4267:3:::0;::::2;::::0;::::2;:::i;:::-;;;;4199:625;;;-1:-1:-1::0;4869:20:119::2;4892:7:::0;;::::2;;::::0;4935:29:::2;:11:::0;:27:::2;:29::i;:::-;787:67:122::0;;;;;;;43604:19:129;;;43639:12;;;43632:28;;;5101:12:119::2;43716:3:129::0;43694:16;-1:-1:-1;;;;;;43690:43:129;43676:12;;;43669:65;787:67:122;;;;;;;;;43750:12:129;;;787:67:122;;;777:78;;;;;;;;;4974:41:119::2;::::0;::::2;-1:-1:-1::0;4974:41:119;;;:26:::2;:41:::0;;;;;;;:141;5397:42:129;5131:53:119;;43604:19:129;;-1:-1:-1;5146:22:119;;5131:53:::2;::::0;;;;5370:18:129;5131:53:119;;::::2;5238:17;:13:::0;5254:1:::2;5238:17;:::i;:::-;5228:7;:27:::0;;-1:-1:-1;;5228:27:119::2;;::::0;;;::::2;::::0;;;::::2;::::0;;-1:-1:-1;;;;;;;;2590:2672:119:o;2580:265:45:-;1255:10;-1:-1:-1;;;;;1277:20:45;1255:43;;1234:172;;;;-1:-1:-1;;;1234:172:45;;;;;;;:::i;:::-;2769:69:::1;::::0;-1:-1:-1;;;2769:69:45;;-1:-1:-1;;;;;2769:18:45::1;:40;::::0;::::1;::::0;:69:::1;::::0;2810:8;;2820:17;;2769:69:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;2580:265:::0;;:::o;3055:163::-;1255:10;-1:-1:-1;;;;;1277:20:45;1255:43;;1234:172;;;;-1:-1:-1;;;1234:172:45;;;;;;;:::i;:::-;3157:54:::1;::::0;-1:-1:-1;;;3157:54:45;;-1:-1:-1;;;;;4840:32:129;;;3157:54:45::1;::::0;::::1;4822:51:129::0;3157:18:45::1;:44;::::0;::::1;::::0;4795:18:129;;3157:54:45::1;4676:203:129::0;2040:322:119;3134:13:83;;-1:-1:-1;;;3134:13:83;;;;3133:14;;3179:34;;;;-1:-1:-1;3197:12:83;;3212:1;-1:-1:-1;;;3197:12:83;;;;;:16;3179:34;3178:108;;;-1:-1:-1;3258:4:83;1476:19:85;:23;;;3219:66:83;;-1:-1:-1;3268:12:83;;-1:-1:-1;;;3268:12:83;;;;3284:1;3268:17;3219:66;3157:201;;;;-1:-1:-1;;;3157:201:83;;;;;;;:::i;:::-;3368:12;:16;;-1:-1:-1;;;;3368:16:83;-1:-1:-1;;;3368:16:83;;;3394:65;;;;3428:13;:20;;-1:-1:-1;;;;3428:20:83;-1:-1:-1;;;3428:20:83;;;3394:65;2220:47:119::1;2238:15;2000:1:25;2220:17:119;:47::i;:::-;2277:33;2296:13;2277:18;:33::i;:::-;2320:35;2339:15;2320:18;:35::i;:::-;3483:14:83::0;3479:99;;;3513:13;:21;;-1:-1:-1;;;;3513:21:83;;;3553:14;;-1:-1:-1;21326:36:129;;3553:14:83;;21314:2:129;21299:18;3553:14:83;;;;;;;3479:99;3101:483;2040:322:119;;;:::o;1847:118:45:-;3134:13:83;;-1:-1:-1;;;3134:13:83;;;;3133:14;;3179:34;;;;-1:-1:-1;3197:12:83;;3212:1;-1:-1:-1;;;3197:12:83;;;;;:16;3179:34;3178:108;;;-1:-1:-1;3258:4:83;1476:19:85;:23;;;3219:66:83;;-1:-1:-1;3268:12:83;;-1:-1:-1;;;3268:12:83;;;;3284:1;3268:17;3219:66;3157:201;;;;-1:-1:-1;;;3157:201:83;;;;;;;:::i;:::-;3368:12;:16;;-1:-1:-1;;;;3368:16:83;-1:-1:-1;;;3368:16:83;;;3394:65;;;;3428:13;:20;;-1:-1:-1;;;;3428:20:83;-1:-1:-1;;;3428:20:83;;;3394:65;1926:32:45::1;1945:12;1926:18;:32::i;:::-;3483:14:83::0;3479:99;;;3513:13;:21;;-1:-1:-1;;;;3513:21:83;;;3553:14;;-1:-1:-1;21326:36:129;;3553:14:83;;21314:2:129;21299:18;3553:14:83;;;;;;;;3479:99;3101:483;1847:118:45;:::o;3541:937::-;3600:16;3628:19;3650:20;-1:-1:-1;;;;;3650:32:45;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3628:56;;;-1:-1:-1;3699:16:45;3695:70;;-1:-1:-1;;3738:16:45;;;3752:1;3738:16;;;;;;;;;3541:937::o;3695:70::-;3783:21;;3814:128;3837:11;3833:1;:15;3814:128;;;3886:45;;-1:-1:-1;;;3886:45:45;;21356:4:129;21344:17;;3886:45:45;;;21326:36:129;3886:14:45;-1:-1:-1;;;;;3886:35:45;;;;21299:18:129;;3886:45:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3869:62;;;;:::i;:::-;;-1:-1:-1;3850:3:45;;;;:::i;:::-;;;;3814:128;;;;3952:35;4004:13;-1:-1:-1;;;;;3990:28:45;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3990:28:45;;3952:66;;4028:13;4059:9;4055:382;4078:20;-1:-1:-1;;;;;4078:32:45;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4074:38;;:1;:38;4055:382;;;4164:45;;-1:-1:-1;;;4164:45:45;;21356:4:129;21344:17;;4164:45:45;;;21326:36:129;4133:28:45;;4164:14;-1:-1:-1;;;;;4164:35:45;;;;21299:18:129;;4164:45:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4133:76;;4228:9;4223:204;4247:20;4243:1;:24;4223:204;;;4328:49;;-1:-1:-1;;;4328:49:45;;22167:4:129;22155:17;;4328:49:45;;;22137:36:129;22189:18;;;22182:34;;;4328:14:45;-1:-1:-1;;;;;4328:36:45;;;;22110:18:129;;4328:49:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:58;;;4292:18;4311:5;4292:25;;;;;;;;:::i;:::-;-1:-1:-1;;;;;4292:95:45;;;:25;;;;;;;;;;;:95;4405:7;;;;:::i;:::-;;;;4269:3;;;;;:::i;:::-;;;;4223:204;;;;4119:318;4114:3;;;;;:::i;:::-;;;;4055:382;;;-1:-1:-1;4453:18:45;;3541:937;-1:-1:-1;;;;3541:937:45:o;5339:125:119:-;1334:13:82;:11;:13::i;:::-;5422:35:119::1;5441:15;5422:18;:35::i;2321:198:82:-:0;1334:13;:11;:13::i;:::-;-1:-1:-1;;;;;2409:22:82;::::1;2401:73;;;::::0;-1:-1:-1;;;2401:73:82;;37542:2:129;2401:73:82::1;::::0;::::1;37524:21:129::0;37581:2;37561:18;;;37554:30;37620:34;37600:18;;;37593:62;-1:-1:-1;;;37671:18:129;;;37664:36;37717:19;;2401:73:82::1;37340:402:129::0;2401:73:82::1;2484:28;2503:8;2484:18;:28::i;4911:437:25:-:0;2285:14;;;;;;;;;-1:-1:-1;;;;;2285:14:25;-1:-1:-1;;;;;2285:23:25;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2271:39:25;:10;-1:-1:-1;;;;;2271:39:25;;2263:94;;;;-1:-1:-1;;;2263:94:25;;;;;;;:::i;:::-;5164:7:::1;;5163:8;5141:15;5140:16;5128:7;;5127:8;5126:31;5125:47;5104:150;;;::::0;-1:-1:-1;;;5104:150:25;;37949:2:129;5104:150:25::1;::::0;::::1;37931:21:129::0;37988:2;37968:18;;;37961:30;38027:34;38007:18;;;38000:62;38098:26;38078:18;;;38071:54;38142:19;;5104:150:25::1;37747:420:129::0;5104:150:25::1;5264:7;:25:::0;;;5304:37:::1;::::0;6155:25:129;;;5313:10:25::1;::::0;5304:37:::1;::::0;6143:2:129;6128:18;5304:37:25::1;6009:177:129::0;6024:360:25;-1:-1:-1;;;;;6127:40:25;;6106:160;;;;-1:-1:-1;;;6106:160:25;;38374:2:129;6106:160:25;;;38356:21:129;38413:2;38393:18;;;38386:30;38452:34;38432:18;;;38425:62;38523:34;38503:18;;;38496:62;-1:-1:-1;;;38574:19:129;;;38567:40;38624:19;;6106:160:25;38172:477:129;6106:160:25;6299:14;;6281:52;;;-1:-1:-1;;;;;6299:14:25;;;;;;38914:34:129;;38984:15;;;38979:2;38964:18;;38957:43;6281:52:25;;38849:18:129;6281:52:25;;;;;;;6343:14;:34;;-1:-1:-1;;;;;6343:34:25;;;;;-1:-1:-1;;;;;;6343:34:25;;;;;;;;;6024:360::o;7082:580:57:-;-1:-1:-1;;;;;;;;;;;;;;;;;7182:23:57;;:::i;:::-;7226:3;;7215:14;;:8;7250:3;;;;7239:8;;;:14;7263:8;;;;:12;;;-1:-1:-1;;7450:1:57;7444:4;7215:14;7434:1;7427:4;7420:5;7416:16;7405:53;7394:64;-1:-1:-1;7394:64:57;7555:48;;;;7528:75;;7555:48;7580:9;7528:75;;7630:7;7622:33;;;;-1:-1:-1;;;7622:33:57;;39213:2:129;7622:33:57;;;39195:21:129;39252:2;39232:18;;;39225:30;-1:-1:-1;;;39271:18:129;;;39264:43;39324:18;;7622:33:57;39011:337:129;7622:33:57;7172:490;;7082:580;;;;:::o;4821:615::-;-1:-1:-1;;;;;;;;;;;;;;;;;4924:23:57;;:::i;:::-;4968:4;;4957:15;;:8;4993:4;;;;4982:8;;;:15;5018:4;;5007:8;;;;:15;;;;5043:4;;;;5032:8;;;:15;-1:-1:-1;;5223:1:57;5217:4;4957:15;5207:1;5200:4;5193:5;5189:16;5178:53;5167:64;-1:-1:-1;5167:64:57;5328:48;;;;5301:75;5404:7;5396:33;;;;-1:-1:-1;;;5396:33:57;;39555:2:129;5396:33:57;;;39537:21:129;39594:2;39574:18;;;39567:30;-1:-1:-1;;;39613:18:129;;;39606:43;39666:18;;5396:33:57;39353:337:129;4068:128:57;4117:14;;:::i;:::-;-1:-1:-1;4150:39:57;;;;;;;;3633:77;4150:39;;;;;;3750:77;4150:39;;;;;;;;;;;;;;3867:77;4150:39;;3984:77;4150:39;;;;;;;;;;;;;;;4068:128::o;11042:451::-;-1:-1:-1;;;;;;;;;;;;;;;;;11121:12:57;;;11183:24;-1:-1:-1;;;;;;;;;;;11191:2:57;11183:24;:::i;:::-;11171:36;;11218:239;11257:13;11268:1;11257:10;:13::i;:::-;11245:25;;-1:-1:-1;11245:25:57;-1:-1:-1;;;;;;;;;;;;11334:1:57;11331;11324:24;11316:4;:32;11312:92;;;11376:13;;;;;;;;;;;;;;;;;;;;11042:451;-1:-1:-1;;;11042:451:57:o;11312:92::-;-1:-1:-1;;;;;;;;;;;11432:1:57;11429;11422:24;11418:28;;11218:239;;9187:1112;9395:31;;;;;;;;;;;;;;;;;;9436;;;;;;;;;;;;;;;;9373:4;;;;9395:31;9478:24;;:::i;:::-;9518:9;9513:302;9537:1;9533;:5;9513:302;;;9559:9;9571:5;:1;9575;9571:5;:::i;:::-;9559:17;;9605:2;9608:1;9605:5;;;;;;;:::i;:::-;;;;;:7;9590:5;9596;:1;9605:7;9596:5;:::i;:::-;9590:12;;;;;;;:::i;:::-;;;;:22;9641:2;9644:1;9641:5;;;;;;;:::i;:::-;;;;;:7;;;9626:5;9632:1;9636;9632:5;;;;:::i;:::-;9626:12;;;;;;;:::i;:::-;;;;:22;9677:2;9680:1;9677:5;;;;;;;:::i;:::-;;;;;:7;:10;9662:5;9668;:1;9672;9668:5;:::i;:::-;9662:12;;;;;;;:::i;:::-;;;;:25;9716:2;9719:1;9716:5;;;;;;;:::i;:::-;;;;;:7;9724:1;9716:10;;;;9701:5;9707;:1;9711;9707:5;:::i;:::-;9701:12;;;;;;;:::i;:::-;;;;:25;9755:2;9758:1;9755:5;;;;;;;:::i;:::-;;;;;:7;;;9763:1;9755:10;;;;;;;:::i;:::-;;;;;9740:5;9746;:1;9750;9746:5;:::i;:::-;9740:12;;;;;;;:::i;:::-;;;;:25;9794:2;9797:1;9794:5;;;;;;;:::i;:::-;;;;;:7;;;9802:1;9794:10;;;;;;;:::i;:::-;;;;;9779:5;9785;:1;9789;9785:5;:::i;:::-;9779:12;;;;;;;:::i;:::-;;;;:25;-1:-1:-1;9540:3:57;;;;:::i;:::-;;;;9513:302;;;;9825:21;;:::i;:::-;9856:12;10030:4;10025:3;10010:13;10003:5;10000:1;9988:10;9977:58;10280:6;;9966:69;;10280:11;;;;-1:-1:-1;10263:29:57;;-1:-1:-1;;;;;;;;;;9187:1112:57:o;13616:751:58:-;13683:23;13797:15;;13894:440;13918:3;13914:1;:7;13894:440;;;14020:1;:6;;;-1:-1:-1;14107:16:58;;;:21;14103:221;;14280:10;14305:1;14292:16;;14267:42;;;;;;;;;:::i;:::-;;;;;;;;;;;;;14254:55;;14103:221;13923:3;;;:::i;:::-;;;13894:440;;;;14343:17;13616:751;;;:::o;5267:467::-;5378:7;5397:14;5414:44;5440:17;5414:25;:44::i;:::-;5397:61;-1:-1:-1;5473:11:58;;5469:235;;5582:13;5525:70;;5531:17;5576:1;5549:17;:24;:28;;;;:::i;:::-;5531:47;;;;;;;;:::i;:::-;;;;;;;5525:70;5500:193;;;;-1:-1:-1;;;5500:193:58;;40287:2:129;5500:193:58;;;40269:21:129;40326:2;40306:18;;;40299:30;40365:34;40345:18;;;40338:62;40436:33;40416:18;;;40409:61;40487:19;;5500:193:58;40085:427:129;5500:193:58;5721:6;-1:-1:-1;5267:467:58;;;;;:::o;14442:200::-;14498:6;;14542:72;14549:5;;14542:72;;14576:5;14580:1;14576;:5;:::i;:::-;14570:12;;;;14596:7;;;;:::i;:::-;;;;14542:72;;5696:1197:57;-1:-1:-1;;;;;;;;;;;;;;;;;5822:4:57;5818:1;:8;;;5810:37;;;;-1:-1:-1;;;5810:37:57;;40921:2:129;5810:37:57;;;40903:21:129;40960:2;40940:18;;;40933:30;-1:-1:-1;;;40979:18:129;;;40972:46;41035:18;;5810:37:57;40719:340:129;5810:37:57;5891:1;:6;;5896:1;5891:6;5888:44;;;-1:-1:-1;5920:1:57;5913:8;;5888:44;6014:19;;;;;;;;;5987:24;6014:19;;;;;;;;;6143:1;;6206;;6335:481;6346:1;6341:6;;:1;:6;;;6335:481;;6491:1;6481:6;;;;;;;6480:12;;:17;6476:84;;;6527:14;6532:3;6537;6527:4;:14::i;:::-;6521:20;;6476:84;6642:14;6647:3;6652;6642:4;:14::i;:::-;6636:20;-1:-1:-1;6763:7:57;6769:1;6763:7;;;;;6788:3;6335:481;;;-1:-1:-1;6883:3:57;;5696:1197;-1:-1:-1;;;;;5696:1197:57:o;4459:295::-;-1:-1:-1;;;;;;;;;;;;;;;;;4598:3:57;;:8;:20;;;;-1:-1:-1;4610:3:57;;;;:8;4598:20;4594:154;;;-1:-1:-1;;4641:13:57;;;;;;;;;-1:-1:-1;4641:13:57;;;;;;;;4459:295::o;4594:154::-;4692:45;;;;;;;;4700:1;:3;;;4692:45;;;;-1:-1:-1;;;;;;;;;;;4719:1:57;:3;;;:16;;;;:::i;:::-;4705:31;;-1:-1:-1;;;;;;;;;;;4705:31:57;:::i;:::-;4692:45;;4685:52;4459:295;-1:-1:-1;;4459:295:57:o;4594:154::-;4459:295;;;:::o;1599:130:82:-;1513:6;;-1:-1:-1;;;;;1513:6:82;929:10:86;1662:23:82;1654:68;;;;-1:-1:-1;;;1654:68:82;;41266:2:129;1654:68:82;;;41248:21:129;;;41285:18;;;41278:30;41344:34;41324:18;;;41317:62;41396:18;;1654:68:82;41064:356:129;2673:187:82;2765:6;;;-1:-1:-1;;;;;2781:17:82;;;-1:-1:-1;;;;;;2781:17:82;;;;;;;2813:40;;2765:6;;;2781:17;2765:6;;2813:40;;2746:16;;2813:40;2736:124;2673:187;:::o;3907:229:122:-;4029:7;4076:51;4115:11;-1:-1:-1;;;;;;;;;;;;;;;;;;3556:179:122;;;;;;;;;3629:27;;3556:179;;3692:32;;;;;3556:179;;;;;;;3364:378;4076:51;4065:63;;;41663:13:129;;4065:63:122;;;;41645:32:129;;;;41725:17;;;41719:24;41745:10;41715:41;41693:20;;;41686:71;41618:18;;4065:63:122;;;;;;;;;;;;;4055:74;;;;;;4048:81;;3907:229;;;:::o;2434:171::-;2538:7;2585:11;2574:23;;;;;;;;:::i;2943:441:25:-;3077:14;;;;;-1:-1:-1;;;;;3077:14:25;3069:37;:79;;;;-1:-1:-1;;;;;;3110:38:25;;;;3069:79;3048:197;;;;-1:-1:-1;;;3048:197:25;;43975:2:129;3048:197:25;;;43957:21:129;44014:2;43994:18;;;43987:30;44053:34;44033:18;;;44026:62;44124:34;44104:18;;;44097:62;-1:-1:-1;;;44175:19:129;;;44168:38;44223:19;;3048:197:25;43773:475:129;3048:197:25;3255:7;:26;;;3296:36;;6155:25:129;;;3303:10:25;;3296:36;;6143:2:129;6128:18;3296:36:25;;;;;;;3342:35;3361:15;3342:18;:35::i;5514:244:119:-;5619:14;;;-1:-1:-1;;;;;5643:32:119;;;-1:-1:-1;;;;;;5643:32:119;;;;;;;5690:61;;;5619:14;;;;38914:34:129;;;38979:2;38964:18;;38957:43;;;;5690:61:119;;38849:18:129;5690:61:119;38654:352:129;11614:433:57;11668:7;;;-1:-1:-1;;;;;;;;;;;11799:1:57;-1:-1:-1;;;;;;;;;;;11783:1:57;-1:-1:-1;;;;;;;;;;;11767:1:57;11764;11757:24;11750:47;11743:70;11728:85;;11910:9;11922:91;11929:4;11935:65;-1:-1:-1;;;;;;;;;;;11922:6:57;:91::i;:::-;12032:4;;11910:103;;-1:-1:-1;11614:433:57;;-1:-1:-1;;;11614:433:57:o;3147:1693:58:-;3237:7;576:3;3368:17;:24;:49;;3360:142;;;;-1:-1:-1;;;3360:142:58;;44764:2:129;3360:142:58;;;44746:21:129;44803:2;44783:18;;;44776:30;;;44842:34;44822:18;;;44815:62;44913:34;44893:18;;;44886:62;-1:-1:-1;;;44964:19:129;;;44957:35;45009:19;;3360:142:58;44562:472:129;3360:142:58;3578:24;;3574:77;;-1:-1:-1;3638:1:58;;3147:1693;-1:-1:-1;3147:1693:58:o;3574:77::-;3729:14;3832:15;4139:17;4157:1;4139:20;;;;;;;;:::i;:::-;;;;;4128:1;4139:20;;;;;4128:32;;;;-1:-1:-1;4243:568:58;4267:17;:24;4263:1;:28;4243:568;;;4439:17;4457:1;4439:20;;;;;;;;:::i;:::-;;;;;4428:1;4439:20;;;;;4428:32;;-1:-1:-1;4624:16:58;;;4616:100;;;;-1:-1:-1;;;4616:100:58;;45241:2:129;4616:100:58;;;45223:21:129;45280:2;45260:18;;;45253:30;45319:34;45299:18;;;45292:62;45390:34;45370:18;;;45363:62;-1:-1:-1;;;45441:19:129;;;45434:38;45489:19;;4616:100:58;45039:475:129;4616:100:58;4783:16;;;;4293:3;;;:::i;:::-;;;4243:568;;;-1:-1:-1;4827:6:58;;3147:1693;-1:-1:-1;;;3147:1693:58:o;12053:874:57:-;12144:14;12170:12;12192:24;;:::i;:::-;12226:20;;:::i;:::-;12267:4;12256:15;;;12339:8;;;:15;;;12423:8;;;:15;;;12507:8;;;:16;;;12533:8;;;:20;;;12563:8;;;:19;;;12671:6;12665:4;12256:15;12569:1;12648:4;12641:5;12637:16;12626:58;12615:69;-1:-1:-1;12615:69:57;12781:48;;;;12754:75;12856:7;12848:46;;;;-1:-1:-1;;;12848:46:57;;45721:2:129;12848:46:57;;;45703:21:129;45760:2;45740:18;;;45733:30;45799:28;45779:18;;;45772:56;45845:18;;12848:46:57;45519:350:129;12848:46:57;-1:-1:-1;12911:9:57;;;-1:-1:-1;;;;;12053:874:57:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:148:129:-;-1:-1:-1;;;;;106:31:129;;96:42;;86:70;;152:1;149;142:12;167:288;250:6;303:2;291:9;282:7;278:23;274:32;271:52;;;319:1;316;309:12;271:52;358:9;345:23;377:48;419:5;377:48;:::i;460:180::-;519:6;572:2;560:9;551:7;547:23;543:32;540:52;;;588:1;585;578:12;540:52;-1:-1:-1;611:23:129;;460:180;-1:-1:-1;460:180:129:o;645:127::-;706:10;701:3;697:20;694:1;687:31;737:4;734:1;727:15;761:4;758:1;751:15;777:257;849:4;843:11;;;881:17;;-1:-1:-1;;;;;913:34:129;;949:22;;;910:62;907:88;;;975:18;;:::i;:::-;1011:4;1004:24;777:257;:::o;1295:255::-;1367:2;1361:9;1409:6;1397:19;;-1:-1:-1;;;;;1431:34:129;;1467:22;;;1428:62;1425:88;;;1493:18;;:::i;1555:275::-;1626:2;1620:9;1691:2;1672:13;;-1:-1:-1;;1668:27:129;1656:40;;-1:-1:-1;;;;;1711:34:129;;1747:22;;;1708:62;1705:88;;;1773:18;;:::i;:::-;1809:2;1802:22;1555:275;;-1:-1:-1;1555:275:129:o;1835:282::-;1889:5;1937:4;1925:9;1920:3;1916:19;1912:30;1909:50;;;1955:1;1952;1945:12;1909:50;1977:22;;:::i;:::-;1968:31;;2035:9;2022:23;2015:5;2008:38;2106:2;2095:9;2091:18;2078:32;2073:2;2066:5;2062:14;2055:56;1835:282;;;;:::o;2122:484::-;2172:5;2225:3;2218:4;2210:6;2206:17;2202:27;2192:55;;2243:1;2240;2233:12;2192:55;2267:22;;:::i;:::-;2311:3;2349:2;2341:6;2337:15;2375:3;2367:6;2364:15;2361:35;;;2392:1;2389;2382:12;2361:35;2416:6;2431:146;2447:6;2442:3;2439:15;2431:146;;;2515:17;;2503:30;;2562:4;2553:14;;;;2464;2431:146;;;-1:-1:-1;2595:5:129;;2122:484;-1:-1:-1;;;;;2122:484:129:o;2611:320::-;2665:5;2713:4;2701:9;2696:3;2692:19;2688:30;2685:50;;;2731:1;2728;2721:12;2685:50;2753:22;;:::i;:::-;2744:31;;2798:40;2834:3;2823:9;2798:40;:::i;:::-;2791:5;2784:55;2873:51;2920:3;2913:4;2902:9;2898:20;2873:51;:::i;:::-;2866:4;2859:5;2855:16;2848:77;2611:320;;;;:::o;2936:530::-;3100:6;3108;3116;3124;3177:3;3165:9;3156:7;3152:23;3148:33;3145:53;;;3194:1;3191;3184:12;3145:53;3230:9;3217:23;3207:33;;3259:54;3305:7;3300:2;3289:9;3285:18;3259:54;:::i;:::-;3249:64;;3332:54;3378:7;3373:2;3362:9;3358:18;3332:54;:::i;:::-;3322:64;;3405:55;3452:7;3446:3;3435:9;3431:19;3405:55;:::i;:::-;3395:65;;2936:530;;;;;;;:::o;4013:658::-;4184:2;4236:21;;;4306:13;;4209:18;;;4328:22;;;4155:4;;4184:2;4407:15;;;;4381:2;4366:18;;;4155:4;4450:195;4464:6;4461:1;4458:13;4450:195;;;4529:13;;-1:-1:-1;;;;;4525:39:129;4513:52;;4620:15;;;;4585:12;;;;4561:1;4479:9;4450:195;;;-1:-1:-1;4662:3:129;;4013:658;-1:-1:-1;;;;;;4013:658:129:o;4884:118::-;4970:5;4963:13;4956:21;4949:5;4946:32;4936:60;;4992:1;4989;4982:12;5007:241;5063:6;5116:2;5104:9;5095:7;5091:23;5087:32;5084:52;;;5132:1;5129;5122:12;5084:52;5171:9;5158:23;5190:28;5212:5;5190:28;:::i;5450:114::-;5534:4;5527:5;5523:16;5516:5;5513:27;5503:55;;5554:1;5551;5544:12;5569:243;5626:6;5679:2;5667:9;5658:7;5654:23;5650:32;5647:52;;;5695:1;5692;5685:12;5647:52;5734:9;5721:23;5753:29;5776:5;5753:29;:::i;6894:163::-;6961:20;;7021:10;7010:22;;7000:33;;6990:61;;7047:1;7044;7037:12;7062:182;7121:4;-1:-1:-1;;;;;7146:6:129;7143:30;7140:56;;;7176:18;;:::i;:::-;-1:-1:-1;7221:1:129;7217:14;7233:4;7213:25;;7062:182::o;7249:665::-;7302:5;7355:3;7348:4;7340:6;7336:17;7332:27;7322:55;;7373:1;7370;7363:12;7322:55;7409:6;7396:20;7435:4;7459:59;7475:42;7514:2;7475:42;:::i;:::-;7459:59;:::i;:::-;7552:15;;;7638:1;7634:10;;;;7622:23;;7618:32;;;7583:12;;;;7662:15;;;7659:35;;;7690:1;7687;7680:12;7659:35;7726:2;7718:6;7714:15;7738:147;7754:6;7749:3;7746:15;7738:147;;;7820:22;7838:3;7820:22;:::i;:::-;7808:35;;7863:12;;;;7771;;7738:147;;;-1:-1:-1;7903:5:129;7249:665;-1:-1:-1;;;;;;7249:665:129:o;7919:688::-;7980:5;8033:3;8026:4;8018:6;8014:17;8010:27;8000:55;;8051:1;8048;8041:12;8000:55;8087:6;8074:20;8113:4;8137:59;8153:42;8192:2;8153:42;:::i;8137:59::-;8230:15;;;8316:1;8312:10;;;;8300:23;;8296:32;;;8261:12;;;;8340:15;;;8337:35;;;8368:1;8365;8358:12;8337:35;8404:2;8396:6;8392:15;8416:162;8432:6;8427:3;8424:15;8416:162;;;8500:35;8531:3;8526;8500:35;:::i;:::-;8488:48;;8556:12;;;;8458:4;8449:14;8416:162;;8612:907;8675:5;8728:3;8721:4;8713:6;8709:17;8705:27;8695:55;;8746:1;8743;8736:12;8695:55;8782:6;8769:20;8808:4;8832:59;8848:42;8887:2;8848:42;:::i;8832:59::-;8925:15;;;9011:1;9007:10;;;;8995:23;;8991:32;;;8956:12;;;;9035:15;;;9032:35;;;9063:1;9060;9053:12;9032:35;9099:2;9091:6;9087:15;9111:379;9127:6;9122:3;9119:15;9111:379;;;9213:3;9200:17;-1:-1:-1;;;;;9236:11:129;9233:35;9230:125;;;9309:1;9338:2;9334;9327:14;9230:125;9380:67;9443:3;9438:2;9424:11;9416:6;9412:24;9408:33;9380:67;:::i;:::-;9368:80;;-1:-1:-1;9468:12:129;;;;9144;;9111:379;;9524:1566;9598:5;9646:6;9634:9;9629:3;9625:19;9621:32;9618:52;;;9666:1;9663;9656:12;9618:52;9688:22;;:::i;:::-;9679:31;;9746:9;9733:23;-1:-1:-1;;;;;9816:2:129;9808:6;9805:14;9802:34;;;9832:1;9829;9822:12;9802:34;9859:56;9911:3;9902:6;9891:9;9887:22;9859:56;:::i;:::-;9852:5;9845:71;9969:2;9958:9;9954:18;9941:32;9925:48;;9998:2;9988:8;9985:16;9982:36;;;10014:1;10011;10004:12;9982:36;10050:66;10112:3;10101:8;10090:9;10086:24;10050:66;:::i;:::-;10045:2;10038:5;10034:14;10027:90;10170:2;10159:9;10155:18;10142:32;10126:48;;10199:2;10189:8;10186:16;10183:36;;;10215:1;10212;10205:12;10183:36;10251:66;10313:3;10302:8;10291:9;10287:24;10251:66;:::i;:::-;10246:2;10239:5;10235:14;10228:90;10350:50;10396:3;10391:2;10380:9;10376:18;10350:50;:::i;:::-;10345:2;10338:5;10334:14;10327:74;10435:51;10482:3;10476;10465:9;10461:19;10435:51;:::i;:::-;10428:4;10421:5;10417:16;10410:77;10540:3;10529:9;10525:19;10512:33;10496:49;;10570:2;10560:8;10557:16;10554:36;;;10586:1;10583;10576:12;10554:36;10624:58;10678:3;10667:8;10656:9;10652:24;10624:58;:::i;:::-;10617:4;10610:5;10606:16;10599:84;10736:3;10725:9;10721:19;10708:33;10692:49;;10766:2;10756:8;10753:16;10750:36;;;10782:1;10779;10772:12;10750:36;10820:58;10874:3;10863:8;10852:9;10848:24;10820:58;:::i;:::-;10813:4;10806:5;10802:16;10795:84;10932:3;10921:9;10917:19;10904:33;10888:49;;10962:2;10952:8;10949:16;10946:36;;;10978:1;10975;10968:12;10946:36;;11015:68;11079:3;11068:8;11057:9;11053:24;11015:68;:::i;:::-;11009:3;11002:5;10998:15;10991:93;;9524:1566;;;;:::o;11095:996::-;11237:6;11245;11253;11261;11269;11322:3;11310:9;11301:7;11297:23;11293:33;11290:53;;;11339:1;11336;11329:12;11290:53;11375:9;11362:23;11352:33;;11436:2;11425:9;11421:18;11408:32;-1:-1:-1;;;;;11500:2:129;11492:6;11489:14;11486:34;;;11516:1;11513;11506:12;11486:34;11554:6;11543:9;11539:22;11529:32;;11599:7;11592:4;11588:2;11584:13;11580:27;11570:55;;11621:1;11618;11611:12;11570:55;11661:2;11648:16;11687:2;11679:6;11676:14;11673:34;;;11703:1;11700;11693:12;11673:34;11748:7;11743:2;11734:6;11730:2;11726:15;11722:24;11719:37;11716:57;;;11769:1;11766;11759:12;11716:57;11800:2;11792:11;;;-1:-1:-1;11822:6:129;-1:-1:-1;11847:37:129;11880:2;11865:18;;11847:37;:::i;:::-;11837:47;;11937:2;11926:9;11922:18;11909:32;11893:48;;11966:2;11956:8;11953:16;11950:36;;;11982:1;11979;11972:12;11950:36;;12005:80;12077:7;12066:8;12055:9;12051:24;12005:80;:::i;:::-;11995:90;;;11095:996;;;;;;;;:::o;12096:467::-;12148:3;12186:5;12180:12;12213:6;12208:3;12201:19;12239:4;12268:2;12263:3;12259:12;12252:19;;12305:2;12298:5;12294:14;12326:1;12336:202;12350:6;12347:1;12344:13;12336:202;;;12415:13;;-1:-1:-1;;;;;12411:46:129;12399:59;;12478:12;;;;12513:15;;;;12372:1;12365:9;12336:202;;;-1:-1:-1;12554:3:129;;12096:467;-1:-1:-1;;;;;12096:467:129:o;12568:645::-;12797:2;12786:9;12779:21;12760:4;12835:6;12829:13;12878:2;12873;12862:9;12858:18;12851:30;12904:62;12961:3;12950:9;12946:19;12932:12;12904:62;:::i;:::-;12890:76;;13015:4;13007:6;13003:17;12997:24;13089:2;13085:7;13073:9;13065:6;13061:22;13057:36;13052:2;13041:9;13037:18;13030:64;13111:51;13155:6;13139:14;13111:51;:::i;:::-;13103:59;;;;13200:6;13193:4;13182:9;13178:20;13171:36;12568:645;;;;;:::o;13218:407::-;13283:5;-1:-1:-1;;;;;13309:6:129;13306:30;13303:56;;;13339:18;;:::i;:::-;13377:57;13422:2;13401:15;;-1:-1:-1;;13397:29:129;13428:4;13393:40;13377:57;:::i;:::-;13368:66;;13457:6;13450:5;13443:21;13497:3;13488:6;13483:3;13479:16;13476:25;13473:45;;;13514:1;13511;13504:12;13473:45;13563:6;13558:3;13551:4;13544:5;13540:16;13527:43;13617:1;13610:4;13601:6;13594:5;13590:18;13586:29;13579:40;13218:407;;;;;:::o;13630:451::-;13699:6;13752:2;13740:9;13731:7;13727:23;13723:32;13720:52;;;13768:1;13765;13758:12;13720:52;13808:9;13795:23;-1:-1:-1;;;;;13833:6:129;13830:30;13827:50;;;13873:1;13870;13863:12;13827:50;13896:22;;13949:4;13941:13;;13937:27;-1:-1:-1;13927:55:129;;13978:1;13975;13968:12;13927:55;14001:74;14067:7;14062:2;14049:16;14044:2;14040;14036:11;14001:74;:::i;:::-;13991:84;13630:451;-1:-1:-1;;;;13630:451:129:o;14086:677::-;14232:6;14240;14293:2;14281:9;14272:7;14268:23;14264:32;14261:52;;;14309:1;14306;14299:12;14261:52;14349:9;14336:23;-1:-1:-1;;;;;14419:2:129;14411:6;14408:14;14405:34;;;14435:1;14432;14425:12;14405:34;14458:22;;;;14514:3;14496:16;;;14492:26;14489:46;;;14531:1;14528;14521:12;14489:46;14554:2;;-1:-1:-1;14609:2:129;14594:18;;14581:32;;14625:16;;;14622:36;;;14654:1;14651;14644:12;14622:36;;14677:80;14749:7;14738:8;14727:9;14723:24;14677:80;:::i;:::-;14667:90;;;14086:677;;;;;:::o;15000:221::-;15042:5;15095:3;15088:4;15080:6;15076:17;15072:27;15062:55;;15113:1;15110;15103:12;15062:55;15135:80;15211:3;15202:6;15189:20;15182:4;15174:6;15170:17;15135:80;:::i;:::-;15126:89;15000:221;-1:-1:-1;;;15000:221:129:o;15226:1043::-;15338:6;15346;15399:2;15387:9;15378:7;15374:23;15370:32;15367:52;;;15415:1;15412;15405:12;15367:52;15454:9;15441:23;15473:48;15515:5;15473:48;:::i;:::-;15540:5;-1:-1:-1;15596:2:129;15581:18;;15568:32;-1:-1:-1;;;;;15649:14:129;;;15646:34;;;15676:1;15673;15666:12;15646:34;15699:22;;;;15755:4;15737:16;;;15733:27;15730:47;;;15773:1;15770;15763:12;15730:47;15806:2;15800:9;15848:4;15840:6;15836:17;15903:6;15891:10;15888:22;15883:2;15871:10;15868:18;15865:46;15862:72;;;15914:18;;:::i;:::-;15950:2;15943:22;15990:16;;16018;;;16015:36;;;16047:1;16044;16037:12;16015:36;16075:44;16111:7;16100:8;16096:2;16092:17;16075:44;:::i;:::-;16067:6;16060:60;;16174:2;16170;16166:11;16153:25;16148:2;16140:6;16136:15;16129:50;16233:2;16229;16225:11;16212:25;16207:2;16199:6;16195:15;16188:50;16257:6;16247:16;;;;;15226:1043;;;;;:::o;16274:604::-;16375:6;16383;16391;16444:2;16432:9;16423:7;16419:23;16415:32;16412:52;;;16460:1;16457;16450:12;16412:52;16499:9;16486:23;16518:48;16560:5;16518:48;:::i;:::-;16585:5;-1:-1:-1;16642:2:129;16627:18;;16614:32;16655:50;16614:32;16655:50;:::i;:::-;16724:7;-1:-1:-1;16783:2:129;16768:18;;16755:32;16796:50;16755:32;16796:50;:::i;:::-;16865:7;16855:17;;;16274:604;;;;;:::o;17118:184::-;17176:6;17229:2;17217:9;17208:7;17204:23;17200:32;17197:52;;;17245:1;17242;17235:12;17197:52;17268:28;17286:9;17268:28;:::i;17489:268::-;17559:6;17612:2;17600:9;17591:7;17587:23;17583:32;17580:52;;;17628:1;17625;17618:12;17580:52;17660:9;17654:16;17679:48;17721:5;17679:48;:::i;17762:406::-;17964:2;17946:21;;;18003:2;17983:18;;;17976:30;18042:34;18037:2;18022:18;;18015:62;-1:-1:-1;;;18108:2:129;18093:18;;18086:40;18158:3;18143:19;;17762:406::o;18173:245::-;18240:6;18293:2;18281:9;18272:7;18268:23;18264:32;18261:52;;;18309:1;18306;18299:12;18261:52;18341:9;18335:16;18360:28;18382:5;18360:28;:::i;18423:404::-;18625:2;18607:21;;;18664:2;18644:18;;;18637:30;18703:34;18698:2;18683:18;;18676:62;-1:-1:-1;;;18769:2:129;18754:18;;18747:38;18817:3;18802:19;;18423:404::o;19257:127::-;19318:10;19313:3;19309:20;19306:1;19299:31;19349:4;19346:1;19339:15;19373:4;19370:1;19363:15;20234:209;20266:1;20292;20282:132;;20336:10;20331:3;20327:20;20324:1;20317:31;20371:4;20368:1;20361:15;20399:4;20396:1;20389:15;20282:132;-1:-1:-1;20428:9:129;;20234:209::o;20448:184::-;20518:6;20571:2;20559:9;20550:7;20546:23;20542:32;20539:52;;;20587:1;20584;20577:12;20539:52;-1:-1:-1;20610:16:129;;20448:184;-1:-1:-1;20448:184:129:o;20637:290::-;20707:6;20760:2;20748:9;20739:7;20735:23;20731:32;20728:52;;;20776:1;20773;20766:12;20728:52;20802:16;;-1:-1:-1;;;;;20847:31:129;;20837:42;;20827:70;;20893:1;20890;20883:12;20932:247;21000:6;21053:2;21041:9;21032:7;21028:23;21024:32;21021:52;;;21069:1;21066;21059:12;21021:52;21101:9;21095:16;21120:29;21143:5;21120:29;:::i;21562:127::-;21623:10;21618:3;21614:20;21611:1;21604:31;21654:4;21651:1;21644:15;21678:4;21675:1;21668:15;21694:128;21734:3;21765:1;21761:6;21758:1;21755:13;21752:39;;;21771:18;;:::i;:::-;-1:-1:-1;21807:9:129;;21694:128::o;21827:135::-;21866:3;-1:-1:-1;;21887:17:129;;21884:43;;;21907:18;;:::i;:::-;-1:-1:-1;21954:1:129;21943:13;;21827:135::o;22227:183::-;22305:13;;-1:-1:-1;;;;;22347:38:129;;22337:49;;22327:77;;22400:1;22397;22390:12;22415:461;22518:6;22571:2;22559:9;22550:7;22546:23;22542:32;22539:52;;;22587:1;22584;22577:12;22539:52;22613:22;;:::i;:::-;22665:9;22659:16;22684:50;22726:7;22684:50;:::i;:::-;22743:22;;22797:48;22841:2;22826:18;;22797:48;:::i;:::-;22792:2;22781:14;;22774:72;22785:5;22415:461;-1:-1:-1;;;22415:461:129:o;24762:125::-;24802:4;24830:1;24827;24824:8;24821:34;;;24835:18;;:::i;:::-;-1:-1:-1;24872:9:129;;24762:125::o;26620:294::-;26690:6;26743:2;26731:9;26722:7;26718:23;26714:32;26711:52;;;26759:1;26756;26749:12;26711:52;26785:16;;-1:-1:-1;;26830:35:129;;26820:46;;26810:74;;26880:1;26877;26870:12;27465:206;27534:6;27587:2;27575:9;27566:7;27562:23;27558:32;27555:52;;;27603:1;27600;27593:12;27555:52;27626:39;27655:9;27626:39;:::i;28123:237::-;28162:4;-1:-1:-1;;;;;28267:10:129;;;;28237;;28289:12;;;28286:38;;;28304:18;;:::i;:::-;28341:13;;28123:237;-1:-1:-1;;;28123:237:129:o;29267:644::-;29515:10;29510:3;29506:20;29497:6;29492:3;29488:16;29484:43;29479:3;29472:56;29454:3;29559:1;29554:3;29550:11;29590:6;29584:13;29639:4;29678:2;29670:6;29666:15;29699:1;29709:175;29723:6;29720:1;29717:13;29709:175;;;29786:13;;29772:28;;29822:14;;;;29859:15;;;;29745:1;29738:9;29709:175;;;-1:-1:-1;29900:5:129;;29267:644;-1:-1:-1;;;;;;;29267:644:129:o;29916:258::-;29988:1;29998:113;30012:6;30009:1;30006:13;29998:113;;;30088:11;;;30082:18;30069:11;;;30062:39;30034:2;30027:10;29998:113;;;30129:6;30126:1;30123:13;30120:48;;;-1:-1:-1;;30164:1:129;30146:16;;30139:27;29916:258::o;30179:::-;30221:3;30259:5;30253:12;30286:6;30281:3;30274:19;30302:63;30358:6;30351:4;30346:3;30342:14;30335:4;30328:5;30324:16;30302:63;:::i;:::-;30419:2;30398:15;-1:-1:-1;;30394:29:129;30385:39;;;;30426:4;30381:50;;30179:258;-1:-1:-1;;30179:258:129:o;30442:220::-;30591:2;30580:9;30573:21;30554:4;30611:45;30652:2;30641:9;30637:18;30629:6;30611:45;:::i;30667:228::-;30706:3;30734:10;30771:2;30768:1;30764:10;30801:2;30798:1;30794:10;30832:3;30828:2;30824:12;30819:3;30816:21;30813:47;;;30840:18;;:::i;:::-;30876:13;;30667:228;-1:-1:-1;;;;30667:228:129:o;33139:929::-;33251:9;33310:4;33302:5;33286:14;33282:26;33278:37;33275:57;;;33328:1;33325;33318:12;33275:57;33361:2;33355:9;33403:4;33395:6;33391:17;-1:-1:-1;;;;;33495:6:129;33483:10;33480:22;33475:2;33463:10;33460:18;33457:46;33454:72;;;33506:18;;:::i;:::-;33546:10;33542:2;33535:22;33594:5;33581:19;33573:6;33566:35;33648:2;33641:5;33637:14;33624:28;33610:42;;33675:2;33667:6;33664:14;33661:34;;;33691:1;33688;33681:12;33661:34;33728:52;33765:14;33756:6;33749:5;33745:18;33728:52;:::i;:::-;33723:2;33715:6;33711:15;33704:77;33830:2;33823:5;33819:14;33806:28;33790:44;;33859:2;33849:8;33846:16;33843:36;;;33875:1;33872;33865:12;33843:36;;33912:54;33951:14;33940:8;33933:5;33929:20;33912:54;:::i;:::-;33907:2;33899:6;33895:15;33888:79;;34000:33;34029:2;34022:5;34018:14;34000:33;:::i;:::-;33995:2;33983:15;;33976:58;33987:6;33139:929;-1:-1:-1;;33139:929:129:o;34073:521::-;34150:4;34156:6;34216:11;34203:25;34310:2;34306:7;34295:8;34279:14;34275:29;34271:43;34251:18;34247:68;34237:96;;34329:1;34326;34319:12;34237:96;34356:33;;34408:20;;;-1:-1:-1;;;;;;34440:30:129;;34437:50;;;34483:1;34480;34473:12;34437:50;34516:4;34504:17;;-1:-1:-1;34547:14:129;34543:27;;;34533:38;;34530:58;;;34584:1;34581;34574:12;34530:58;34073:521;;;;;:::o;34599:278::-;34638:7;-1:-1:-1;;;;;34723:2:129;34720:1;34716:10;34753:2;34750:1;34746:10;34809:3;34805:2;34801:12;34796:3;34793:21;34786:3;34779:11;34772:19;34768:47;34765:73;;;34818:18;;:::i;:::-;34858:13;;34599:278;-1:-1:-1;;;;34599:278:129:o;34882:168::-;34922:7;34988:1;34984;34980:6;34976:14;34973:1;34970:21;34965:1;34958:9;34951:17;34947:45;34944:71;;;34995:18;;:::i;:::-;-1:-1:-1;35035:9:129;;34882:168::o;35605:486::-;35807:2;35789:21;;;35846:2;35826:18;;;35819:30;35885:34;35880:2;35865:18;;35858:62;35956:34;35951:2;35936:18;;35929:62;-1:-1:-1;;;36022:3:129;36007:19;;36000:49;36081:3;36066:19;;35605:486::o;36096:625::-;36370:1;36366;36361:3;36357:11;36353:19;36345:6;36341:32;36330:9;36323:51;36410:2;36405;36394:9;36390:18;36383:30;36304:4;36448:6;36442:13;36491:4;36486:2;36475:9;36471:18;36464:32;36519:52;36566:3;36555:9;36551:19;36537:12;36519:52;:::i;:::-;36505:66;;36627:2;36619:6;36615:15;36609:22;36602:4;36591:9;36587:20;36580:52;36687:2;36679:6;36675:15;36669:22;36663:3;36652:9;36648:19;36641:51;36709:6;36701:14;;;36096:625;;;;;:::o;36726:410::-;36928:2;36910:21;;;36967:2;36947:18;;;36940:30;37006:34;37001:2;36986:18;;36979:62;-1:-1:-1;;;37072:2:129;37057:18;;37050:44;37126:3;37111:19;;36726:410::o;39695:385::-;39850:3;39888:6;39882:13;39904:53;39950:6;39945:3;39938:4;39930:6;39926:17;39904:53;:::i;:::-;-1:-1:-1;;;;;;40018:26:129;;;;39979:16;;;;40004:41;;;40072:1;40061:13;;39695:385;-1:-1:-1;;39695:385:129:o;40517:197::-;40555:3;40583:6;40624:2;40617:5;40613:14;40651:2;40642:7;40639:15;40636:41;;;40657:18;;:::i;:::-;40706:1;40693:15;;40517:197;-1:-1:-1;;;40517:197:129:o;41768:503::-;41826:5;41833:6;41893:3;41880:17;41979:2;41975:7;41964:8;41948:14;41944:29;41940:43;41920:18;41916:68;41906:96;;41998:1;41995;41988:12;41906:96;42026:33;;42130:4;42117:18;;;-1:-1:-1;42078:21:129;;-1:-1:-1;;;;;;42147:30:129;;42144:50;;;42190:1;42187;42180:12;42144:50;42240:6;42224:14;42220:27;42210:8;42206:42;42203:62;;;42261:1;42258;42251:12;42276:266;42364:6;42359:3;42352:19;42416:6;42409:5;42402:4;42397:3;42393:14;42380:43;-1:-1:-1;42468:1:129;42443:16;;;42461:4;42439:27;;;42432:38;;;;42524:2;42503:15;;;-1:-1:-1;;42499:29:129;42490:39;;;42486:50;;42276:266::o;42547:869::-;42738:2;42727:9;42720:21;42790:6;42777:20;42772:2;42761:9;42757:18;42750:48;42701:4;42841:55;42892:2;42884:6;42880:15;42872:6;42841:55;:::i;:::-;42932:4;42927:2;42916:9;42912:18;42905:32;42960:74;43029:3;43018:9;43014:19;43000:12;42986;42960:74;:::i;:::-;42946:88;;;43081:55;43132:2;43124:6;43120:15;43112:6;43081:55;:::i;:::-;43176:22;;;-1:-1:-1;;43172:36:129;43167:2;43152:18;;43145:64;43232:65;43180:6;43274:14;43258;43232:65;:::i;:::-;43218:79;;;;43375:10;43339:34;43369:2;43361:6;43357:15;43339:34;:::i;:::-;43335:51;43328:4;43317:9;43313:20;43306:81;43404:6;43396:14;;;42547:869;;;;:::o", + "linkReferences": {}, + "immutableReferences": { + "16124": [ + { + "start": 930, + "length": 32 + }, + { + "start": 3477, + "length": 32 + }, + { + "start": 4901, + "length": 32 + }, + { + "start": 5309, + "length": 32 + }, + { + "start": 5867, + "length": 32 + } + ], + "16127": [ + { + "start": 891, + "length": 32 + }, + { + "start": 6663, + "length": 32 + }, + { + "start": 7113, + "length": 32 + } + ], + "16130": [ + { + "start": 834, + "length": 32 + }, + { + "start": 6193, + "length": 32 + } + ], + "16133": [ + { + "start": 1200, + "length": 32 + }, + { + "start": 5703, + "length": 32 + } + ], + "20190": [ + { + "start": 2281, + "length": 32 + }, + { + "start": 2424, + "length": 32 + }, + { + "start": 2552, + "length": 32 + }, + { + "start": 9253, + "length": 32 + }, + { + "start": 9457, + "length": 32 + }, + { + "start": 10087, + "length": 32 + }, + { + "start": 10503, + "length": 32 + } + ], + "20193": [ + { + "start": 7857, + "length": 32 + }, + { + "start": 9337, + "length": 32 + }, + { + "start": 9549, + "length": 32 + } + ], + "20196": [ + { + "start": 2750, + "length": 32 + }, + { + "start": 3097, + "length": 32 + }, + { + "start": 3248, + "length": 32 + }, + { + "start": 10281, + "length": 32 + }, + { + "start": 10668, + "length": 32 + }, + { + "start": 10827, + "length": 32 + } + ] + } +}, +"methodIdentifiers": { + "BLOCK_STALE_MEASURE()": "5e8b3f2d", + "STORE_DURATION_BLOCKS()": "5e033476", + "THRESHOLD_DENOMINATOR()": "ef024458", + "batchConfirmer()": "39f309d5", + "batchId()": "4972134a", + "batchIdToBatchMetadataHash(uint32)": "eccbbfc9", + "blsApkRegistry()": "5df45946", + "checkSignatures(bytes32,bytes,uint32,(uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]))": "6efb4636", + "confirmBatch((bytes32,bytes,bytes,uint32),(uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]))": "7794965a", + "delegation()": "df5cf723", + "deregisterOperatorFromAVS(address)": "a364f4da", + "getOperatorRestakedStrategies(address)": "33cfb7b7", + "getRestakeableStrategies()": "e481af9d", + "initialize(address)": "c4d66de8", + "initialize(address,address,address)": "c0c53b8b", + "latestServeUntilBlock()": "758f8dba", + "owner()": "8da5cb5b", + "pause(uint256)": "136439dd", + "pauseAll()": "595c6a67", + "paused()": "5c975abb", + "paused(uint8)": "5ac86ab7", + "pauserRegistry()": "886f1195", + "registerOperatorToAVS(address,(bytes,bytes32,uint256))": "9926ee7d", + "registryCoordinator()": "6d14a987", + "renounceOwnership()": "715018a6", + "setBatchConfirmer(address)": "f1220983", + "setMetadataURI(string)": "750521f5", + "setPauserRegistry(address)": "10d67a2f", + "setStaleStakesForbidden(bool)": "416c7e5e", + "stakeRegistry()": "68304835", + "staleStakesForbidden()": "b98d0908", + "taskNumber()": "72d18e8d", + "transferOwnership(address)": "f2fde38b", + "trySignatureAndApkVerification(bytes32,(uint256,uint256),(uint256[2],uint256[2]),(uint256,uint256))": "171f1d5b", + "unpause(uint256)": "fabc1cbc" +}, +"rawMetadata": "{\"compiler\":{\"version\":\"0.8.12+commit.f00d7308\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IDelegationManager\",\"name\":\"__delegationMananger\",\"type\":\"address\"},{\"internalType\":\"contract IRegistryCoordinator\",\"name\":\"__registryCoordinator\",\"type\":\"address\"},{\"internalType\":\"contract IStakeRegistry\",\"name\":\"__stakeRegistry\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHeaderHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"batchId\",\"type\":\"uint32\"}],\"name\":\"BatchConfirmed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"BatchConfirmerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPausedStatus\",\"type\":\"uint256\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contract IPauserRegistry\",\"name\":\"pauserRegistry\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"contract IPauserRegistry\",\"name\":\"newPauserRegistry\",\"type\":\"address\"}],\"name\":\"PauserRegistrySet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"value\",\"type\":\"bool\"}],\"name\":\"StaleStakesForbiddenUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPausedStatus\",\"type\":\"uint256\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BLOCK_STALE_MEASURE\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STORE_DURATION_BLOCKS\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"THRESHOLD_DENOMINATOR\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batchConfirmer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batchId\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"name\":\"batchIdToBatchMetadataHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blsApkRegistry\",\"outputs\":[{\"internalType\":\"contract IBLSApkRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"quorumNumbers\",\"type\":\"bytes\"},{\"internalType\":\"uint32\",\"name\":\"referenceBlockNumber\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"uint32[]\",\"name\":\"nonSignerQuorumBitmapIndices\",\"type\":\"uint32[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point[]\",\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point[]\",\"name\":\"quorumApks\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"X\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"Y\",\"type\":\"uint256[2]\"}],\"internalType\":\"struct BN254.G2Point\",\"name\":\"apkG2\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point\",\"name\":\"sigma\",\"type\":\"tuple\"},{\"internalType\":\"uint32[]\",\"name\":\"quorumApkIndices\",\"type\":\"uint32[]\"},{\"internalType\":\"uint32[]\",\"name\":\"totalStakeIndices\",\"type\":\"uint32[]\"},{\"internalType\":\"uint32[][]\",\"name\":\"nonSignerStakeIndices\",\"type\":\"uint32[][]\"}],\"internalType\":\"struct IBLSSignatureChecker.NonSignerStakesAndSignature\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"checkSignatures\",\"outputs\":[{\"components\":[{\"internalType\":\"uint96[]\",\"name\":\"signedStakeForQuorum\",\"type\":\"uint96[]\"},{\"internalType\":\"uint96[]\",\"name\":\"totalStakeForQuorum\",\"type\":\"uint96[]\"}],\"internalType\":\"struct IBLSSignatureChecker.QuorumStakeTotals\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"blobHeadersRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"quorumNumbers\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"quorumThresholdPercentages\",\"type\":\"bytes\"},{\"internalType\":\"uint32\",\"name\":\"referenceBlockNumber\",\"type\":\"uint32\"}],\"internalType\":\"struct IEigenDAServiceManager.BatchHeader\",\"name\":\"batchHeader\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32[]\",\"name\":\"nonSignerQuorumBitmapIndices\",\"type\":\"uint32[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point[]\",\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point[]\",\"name\":\"quorumApks\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"X\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"Y\",\"type\":\"uint256[2]\"}],\"internalType\":\"struct BN254.G2Point\",\"name\":\"apkG2\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point\",\"name\":\"sigma\",\"type\":\"tuple\"},{\"internalType\":\"uint32[]\",\"name\":\"quorumApkIndices\",\"type\":\"uint32[]\"},{\"internalType\":\"uint32[]\",\"name\":\"totalStakeIndices\",\"type\":\"uint32[]\"},{\"internalType\":\"uint32[][]\",\"name\":\"nonSignerStakeIndices\",\"type\":\"uint32[][]\"}],\"internalType\":\"struct IBLSSignatureChecker.NonSignerStakesAndSignature\",\"name\":\"nonSignerStakesAndSignature\",\"type\":\"tuple\"}],\"name\":\"confirmBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delegation\",\"outputs\":[{\"internalType\":\"contract IDelegationManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"deregisterOperatorFromAVS\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"getOperatorRestakedStrategies\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRestakeableStrategies\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IPauserRegistry\",\"name\":\"_pauserRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_initialOwner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_batchConfirmer\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestServeUntilBlock\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newPausedStatus\",\"type\":\"uint256\"}],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"index\",\"type\":\"uint8\"}],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauserRegistry\",\"outputs\":[{\"internalType\":\"contract IPauserRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"}],\"internalType\":\"struct ISignatureUtils.SignatureWithSaltAndExpiry\",\"name\":\"operatorSignature\",\"type\":\"tuple\"}],\"name\":\"registerOperatorToAVS\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"registryCoordinator\",\"outputs\":[{\"internalType\":\"contract IRegistryCoordinator\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_batchConfirmer\",\"type\":\"address\"}],\"name\":\"setBatchConfirmer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_metadataURI\",\"type\":\"string\"}],\"name\":\"setMetadataURI\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IPauserRegistry\",\"name\":\"newPauserRegistry\",\"type\":\"address\"}],\"name\":\"setPauserRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"value\",\"type\":\"bool\"}],\"name\":\"setStaleStakesForbidden\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakeRegistry\",\"outputs\":[{\"internalType\":\"contract IStakeRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"staleStakesForbidden\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"taskNumber\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point\",\"name\":\"apk\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"X\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"Y\",\"type\":\"uint256[2]\"}],\"internalType\":\"struct BN254.G2Point\",\"name\":\"apkG2\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct BN254.G1Point\",\"name\":\"sigma\",\"type\":\"tuple\"}],\"name\":\"trySignatureAndApkVerification\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"pairingSuccessful\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"siganatureIsValid\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newPausedStatus\",\"type\":\"uint256\"}],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Layr Labs, Inc.\",\"kind\":\"dev\",\"methods\":{\"checkSignatures(bytes32,bytes,uint32,(uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]))\":{\"details\":\"Before signature verification, the function verifies operator stake information. This includes ensuring that the provided `referenceBlockNumber` is correct, i.e., ensure that the stake returned from the specified block number is recent enough and that the stake is either the most recent update for the total stake (of the operator) or latest before the referenceBlockNumber.\",\"params\":{\"msgHash\":\"is the hash being signed\",\"params\":\"is the struct containing information on nonsigners, stakes, quorum apks, and the aggregate signature\",\"quorumNumbers\":\"is the bytes array of quorum numbers that are being signed for\",\"referenceBlockNumber\":\"is the block number at which the stake information is being verified\"},\"returns\":{\"_0\":\"quorumStakeTotals is the struct containing the total and signed stake for each quorum\",\"_1\":\"signatoryRecordHash is the hash of the signatory record, which is used for fraud proofs\"}},\"deregisterOperatorFromAVS(address)\":{\"params\":{\"operator\":\"The address of the operator to deregister.\"}},\"getOperatorRestakedStrategies(address)\":{\"details\":\"This function is intended to be called off-chainNo guarantee is made on whether the operator has shares for a strategy in a quorum or uniqueness of each element in the returned array. The off-chain service should do that validation separately\",\"params\":{\"operator\":\"The address of the operator to get restaked strategies for\"}},\"getRestakeableStrategies()\":{\"details\":\"This function is intended to be called off-chainNo guarantee is made on uniqueness of each element in the returned array. The off-chain service should do that validation separately\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pause(uint256)\":{\"details\":\"This function can only pause functionality, and thus cannot 'unflip' any bit in `_paused` from 1 to 0.\",\"params\":{\"newPausedStatus\":\"represents the new value for `_paused` to take, which means it may flip several bits at once.\"}},\"registerOperatorToAVS(address,(bytes,bytes32,uint256))\":{\"params\":{\"operator\":\"The address of the operator to register.\",\"operatorSignature\":\"The signature, salt, and expiry of the operator's signature.\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"setMetadataURI(string)\":{\"details\":\"only callable by the owner\",\"params\":{\"_metadataURI\":\"is the metadata URI for the AVS\"}},\"setStaleStakesForbidden(bool)\":{\"params\":{\"value\":\"to toggle staleStakesForbidden\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"trySignatureAndApkVerification(bytes32,(uint256,uint256),(uint256[2],uint256[2]),(uint256,uint256))\":{\"params\":{\"apk\":\"is the claimed G1 public key\",\"apkG2\":\"is provided G2 public key\",\"msgHash\":\"is the hash being signed\",\"sigma\":\"is the G1 point signature\"},\"returns\":{\"pairingSuccessful\":\"is true if the pairing precompile call was successful\",\"siganatureIsValid\":\"is true if the signature is valid\"}},\"unpause(uint256)\":{\"details\":\"This function can only unpause functionality, and thus cannot 'flip' any bit in `_paused` from 0 to 1.\",\"params\":{\"newPausedStatus\":\"represents the new value for `_paused` to take, which means it may flip several bits at once.\"}}},\"title\":\"Primary entrypoint for procuring services from EigenDA.\",\"version\":1},\"userdoc\":{\"events\":{\"BatchConfirmed(bytes32,uint32)\":{\"notice\":\"Emitted when a Batch is confirmed.\"},\"BatchConfirmerChanged(address,address)\":{\"notice\":\"Emitted when the batch confirmer is changed.\"},\"Paused(address,uint256)\":{\"notice\":\"Emitted when the pause is triggered by `account`, and changed to `newPausedStatus`.\"},\"PauserRegistrySet(address,address)\":{\"notice\":\"Emitted when the `pauserRegistry` is set to `newPauserRegistry`.\"},\"StaleStakesForbiddenUpdate(bool)\":{\"notice\":\"Emitted when `staleStakesForbiddenUpdate` is set\"},\"Unpaused(address,uint256)\":{\"notice\":\"Emitted when the pause is lifted by `account`, and changed to `newPausedStatus`.\"}},\"kind\":\"user\",\"methods\":{\"BLOCK_STALE_MEASURE()\":{\"notice\":\"The maximum amount of blocks in the past that the service will consider stake amounts to still be 'valid'.\"},\"STORE_DURATION_BLOCKS()\":{\"notice\":\"Unit of measure (in blocks) for which data will be stored for after confirmation.\"},\"batchConfirmer()\":{\"notice\":\"address that is permissioned to confirm batches\"},\"batchId()\":{\"notice\":\"The current batchId\"},\"batchIdToBatchMetadataHash(uint32)\":{\"notice\":\"mapping between the batchId to the hash of the metadata of the corresponding Batch\"},\"checkSignatures(bytes32,bytes,uint32,(uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]))\":{\"notice\":\"This function is called by disperser when it has aggregated all the signatures of the operators that are part of the quorum for a particular taskNumber and is asserting them into onchain. The function checks that the claim for aggregated signatures are valid. The thesis of this procedure entails: - getting the aggregated pubkey of all registered nodes at the time of pre-commit by the disperser (represented by apk in the parameters), - subtracting the pubkeys of all the signers not in the quorum (nonSignerPubkeys) and storing the output in apk to get aggregated pubkey of all operators that are part of quorum. - use this aggregated pubkey to verify the aggregated signature under BLS scheme. \"},\"confirmBatch((bytes32,bytes,bytes,uint32),(uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]))\":{\"notice\":\"This function is used for - submitting data availabilty certificates, - check that the aggregate signature is valid, - and check whether quorum has been achieved or not.\"},\"deregisterOperatorFromAVS(address)\":{\"notice\":\"Forwards a call to EigenLayer's DelegationManager contract to confirm operator deregistration from the AVS\"},\"getOperatorRestakedStrategies(address)\":{\"notice\":\"Returns the list of strategies that the operator has potentially restaked on the AVS\"},\"getRestakeableStrategies()\":{\"notice\":\"Returns the list of strategies that the AVS supports for restaking\"},\"latestServeUntilBlock()\":{\"notice\":\"Returns the block until which operators must serve.\"},\"pause(uint256)\":{\"notice\":\"This function is used to pause an EigenLayer contract's functionality. It is permissioned to the `pauser` address, which is expected to be a low threshold multisig.\"},\"pauseAll()\":{\"notice\":\"Alias for `pause(type(uint256).max)`.\"},\"paused()\":{\"notice\":\"Returns the current paused status as a uint256.\"},\"paused(uint8)\":{\"notice\":\"Returns 'true' if the `indexed`th bit of `_paused` is 1, and 'false' otherwise\"},\"pauserRegistry()\":{\"notice\":\"Address of the `PauserRegistry` contract that this contract defers to for determining access control (for pausing).\"},\"registerOperatorToAVS(address,(bytes,bytes32,uint256))\":{\"notice\":\"Forwards a call to EigenLayer's DelegationManager contract to confirm operator registration with the AVS\"},\"setBatchConfirmer(address)\":{\"notice\":\"This function is used for changing the batch confirmer\"},\"setMetadataURI(string)\":{\"notice\":\"Sets the metadata URI for the AVS\"},\"setPauserRegistry(address)\":{\"notice\":\"Allows the unpauser to set a new pauser registry\"},\"setStaleStakesForbidden(bool)\":{\"notice\":\"RegistryCoordinator owner can either enforce or not that operator stakes are staler than the delegation.withdrawalDelayBlocks() window.\"},\"staleStakesForbidden()\":{\"notice\":\"If true, check the staleness of the operator stakes and that its within the delegation withdrawalDelayBlocks window.\"},\"taskNumber()\":{\"notice\":\"Returns the current batchId\"},\"trySignatureAndApkVerification(bytes32,(uint256,uint256),(uint256[2],uint256[2]),(uint256,uint256))\":{\"notice\":\"trySignatureAndApkVerification verifies a BLS aggregate signature and the veracity of a calculated G1 Public key\"},\"unpause(uint256)\":{\"notice\":\"This function is used to unpause an EigenLayer contract's functionality. It is permissioned to the `unpauser` address, which is expected to be a high threshold multisig or governance contract.\"}},\"notice\":\"This contract is used for: - initializing the data store by the disperser - confirming the data store by the disperser with inferred aggregated signatures of the quorum - freezing operators as the result of various \\\"challenges\\\"\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/core/EigenDAServiceManager.sol\":\"EigenDAServiceManager\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin-upgrades/=lib/openzeppelin-contracts-upgradeable/\",\":@openzeppelin/=lib/openzeppelin-contracts/\",\":ds-test/=lib/eigenlayer-contracts/lib/ds-test/src/\",\":eigenlayer-contracts/=lib/eigenlayer-contracts/\",\":eigenlayer-core/=lib/eigenlayer-contracts/src/\",\":eigenlayer-middleware/=lib/eigenlayer-middleware/src/\",\":eigenlayer-scripts/=lib/eigenlayer-contracts/script/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"]},\"sources\":{\"lib/eigenlayer-contracts/src/contracts/interfaces/IBeaconChainOracle.sol\":{\"keccak256\":\"0x0fef07aa6179c77198f1514e12e628aa1c876e04f9c181ec853a322179e5be00\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://51438325876cc2d4c77f58488a7e27b488015d1b663c50be6a5cafbd73b9c983\",\"dweb:/ipfs/QmViCuGoYZzi6wtXA8PPKigqVv3KMuNxEVQ1Td9dGqjL18\"]},\"lib/eigenlayer-contracts/src/contracts/interfaces/IDelegationManager.sol\":{\"keccak256\":\"0xd3f57f3e95226d95a41399385a5b7512df7a2c6e8b3bf84d8f1e1d9d3a8acad1\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://1750f88e93c0f63c05d57d8f9770adaeec23209df8c8a1c004df4244750bbae9\",\"dweb:/ipfs/QmQYCHgJLpGiDauL2Z3WF5ofansgcngKFV3AeeDo2EsJDb\"]},\"lib/eigenlayer-contracts/src/contracts/interfaces/IETHPOSDeposit.sol\":{\"keccak256\":\"0x2e60e5f4b0da0a0a4e2a07c63141120998559970c21deac743ea0c64a60a880c\",\"license\":\"CC0-1.0\",\"urls\":[\"bzz-raw://e635c346bde5b7ade9bcf35bc733081520cb86015be4fbc6e761e6e9482c4c91\",\"dweb:/ipfs/QmRoeazEnbFn5SPSWAkoFK2gSN9DMp3hJAnrLWuL2sKutz\"]},\"lib/eigenlayer-contracts/src/contracts/interfaces/IEigenPod.sol\":{\"keccak256\":\"0xb50c36ad96b6679bb80fd8331f949cbfbcba0f529026e1421a4d2bae64396eba\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://5719181d780120f1e688c0da276992a8caf185815917f453b3550537c31ed4cc\",\"dweb:/ipfs/QmYprRC5ZEXhz3zAUND5E8Xjn6s5TL8ZF8QbnndVq7aVPR\"]},\"lib/eigenlayer-contracts/src/contracts/interfaces/IEigenPodManager.sol\":{\"keccak256\":\"0xda0ef432f8d186276739e8f8547712c9978c172de48ca0afc7935d0e84cabb03\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://97de6d182477a30c298880e0896b639ada35637a6acc4e3fadf89bf68ae83096\",\"dweb:/ipfs/QmUPzdhiKXFuFZaFvKFMrYMeF93N7wiKyigELVjRA1WsqA\"]},\"lib/eigenlayer-contracts/src/contracts/interfaces/IPausable.sol\":{\"keccak256\":\"0x98cffc894842947377e24c1d375813a1120dd73a84c29782ab68404e109cb34f\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://b3474f6c350ceaee57cbdfb08fb48835d0c6e81ae8ebfbb9667899584a139324\",\"dweb:/ipfs/QmWELKtksdtWxQbqAccd8yGyhKqrgPZXTADKR7BuT27Zg5\"]},\"lib/eigenlayer-contracts/src/contracts/interfaces/IPauserRegistry.sol\":{\"keccak256\":\"0x9de8dd682bc0d812bbd6583c0231cbf35448d5eff58b74a93efa64cb9a768c49\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://c00d6c675b9c72b092d287fe85fd37782588df32b8eb59ab4c7db7a86be25e7d\",\"dweb:/ipfs/QmeYokY3HhAdbBaCPdHg3PgQEdRCDFEJy3Wf7VtgHBkQSx\"]},\"lib/eigenlayer-contracts/src/contracts/interfaces/ISignatureUtils.sol\":{\"keccak256\":\"0x5e52482a31d94401a8502f3014c4aada1142b4450fc0596dff8e1866a85fe092\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://17dc326c9361bc1453379f26545963557b2883b0c88bc07d4477e04dbcc0cc8c\",\"dweb:/ipfs/QmZXT7A816W5JH2ymirE2ETaJttqztFCsEL22AV8oEfCK9\"]},\"lib/eigenlayer-contracts/src/contracts/interfaces/ISlasher.sol\":{\"keccak256\":\"0x45dfaa2cfdde87f48a6ee38bb6fb739847aef7cf3f6137bdcd8c8a330559ec79\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://1b7f6bd75b42fcaa91ceb7140cb2c41926a1fe6ee2d3161e4fe6186b181ba232\",\"dweb:/ipfs/QmZjbdKiSs33C9i3GDc3sdD39Pz4YPkDoKftowoUF4kHmY\"]},\"lib/eigenlayer-contracts/src/contracts/interfaces/IStrategy.sol\":{\"keccak256\":\"0xc530c6a944b70051fd0dac0222de9a4b5baadeaf94ad194daac6ad8d2ace7420\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://3767df0364ce835b52e786d2851431eb9223fe4747602107505477e162231d73\",\"dweb:/ipfs/QmZkH5bKUygQrJomndNaQqkefVRW4rRefCa8HPJ5HMczxJ\"]},\"lib/eigenlayer-contracts/src/contracts/interfaces/IStrategyManager.sol\":{\"keccak256\":\"0x3ac96c08e5ac35a015a8b943fe4509370f73cfb420375efb3808fe3c13840679\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://e76b0c1d96925dc54b11365ceb8178a1de0b2bdb1260da0f9942048d35892bc4\",\"dweb:/ipfs/QmSyew5ejxyEXsbq5t6pmhmBZmojQcesgNXgTDJmJMg1TU\"]},\"lib/eigenlayer-contracts/src/contracts/libraries/BeaconChainProofs.sol\":{\"keccak256\":\"0x0d17c9b2b6cb6a33685ee6fc2f4c6e1b6ac59fd7555b42591575abdd65bf6395\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://14fdbaa196e46791b75e8fbb1862bc02ae76cfbd956cb8967dc18f0f88182ad1\",\"dweb:/ipfs/QmS3p4xrqgVABzAeG3ssinhKXEm6bCXR24i14VJtGJDv46\"]},\"lib/eigenlayer-contracts/src/contracts/libraries/Endian.sol\":{\"keccak256\":\"0xf3b72653ba2567a978d4612703fa5f71c5fcd015d8dac7818468f22772d90a9d\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://cee9d09370d968138d775c39525db4cd0768d60d17be7685519de12444e7dd2f\",\"dweb:/ipfs/QmUdGh8wpMei3edKiEWA6S96s9dRt4ekZKJ4nau356X8xQ\"]},\"lib/eigenlayer-contracts/src/contracts/libraries/Merkle.sol\":{\"keccak256\":\"0x2a2b15842b11da4f2e6ea7016a4f94cfcfce18f2306c3bb3bb17b05831bd2c2a\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://9c4b5da7c287fcb1a95b2543ba9d33df8829420dce39c1d15e950f31af6035a8\",\"dweb:/ipfs/QmWM2LYsvnf69g4aLjYXUKE6gQ54Rd95PLXU3xTQ2xiBss\"]},\"lib/eigenlayer-contracts/src/contracts/permissions/Pausable.sol\":{\"keccak256\":\"0xc543d34b3e0fd116227fc5218286de6b30a9141f47df2e8cc17d857d2c0cb338\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://e78ca3c3c9f14ccde852ea41bc411726ea7770a1cf2ef18851e67bcdf7522cff\",\"dweb:/ipfs/QmWagcWsaNZqBZhdEHhZ4PcU9fx5wQnrbjoaaFvjEwgGHt\"]},\"lib/eigenlayer-middleware/src/BLSSignatureChecker.sol\":{\"keccak256\":\"0x67272da63a94fd83c974b332a4ad2a49f2f2a7171051efa45b258d5b96fdfcad\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://e7440e0655428ac8ea5698eb09c9fac6740e79acbda6874a7267a12517f7f1e1\",\"dweb:/ipfs/QmPbBvEGsqtCfbBVFvsMJGtfFCarjruJ42pggHkde7nm52\"]},\"lib/eigenlayer-middleware/src/ServiceManagerBase.sol\":{\"keccak256\":\"0xe7f965c3270eae1f4d1d8e623fe3b22da3683497d435b3348f7a3f544b09179a\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://c24d42c4d849555eca39190718684e53f2be278ff59bf421d7b84280c11a0900\",\"dweb:/ipfs/QmZfv34B4xnjdSEchxBmtzXjbZkrSkxry3wzm5Tp4AGEqN\"]},\"lib/eigenlayer-middleware/src/interfaces/IBLSApkRegistry.sol\":{\"keccak256\":\"0x7f6aa0b9e3a7ddf3097932d073e49064326ae56303e4f40cf88c9e5a61968166\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://8728c82cb251eaf5b9d7001a41a754265fdb293c0630ddd0170b842582b5a059\",\"dweb:/ipfs/Qmc55Qf7qS5uABgENmc2G79DgwWyZ6aoB1EK4togbyCj4A\"]},\"lib/eigenlayer-middleware/src/interfaces/IBLSSignatureChecker.sol\":{\"keccak256\":\"0xf3ea961264db7607a0a07593893daf27b87cf68cdd8a8271361239d08859acc7\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://5c01e8f6d2ce97fa65205c0fe2f269870fa00d4baec6755da2023812d818a04d\",\"dweb:/ipfs/QmRPjUy2N7T2mfyaXPcso6HfDGAWgoJhy5tS4eWQjpwGEX\"]},\"lib/eigenlayer-middleware/src/interfaces/IDelayedService.sol\":{\"keccak256\":\"0xaec8fa534c561f101052d78bcf3dae185e2e48784943d1db63bcfc6de8c80db4\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://3b7de76e334d8ceca104d2fe883d7c61349c1cf448218cface57ef7128a27fdf\",\"dweb:/ipfs/QmRfhcURN2EnvczAM3GYYKqKMv6uRK1JwAkpWuEUaggRTH\"]},\"lib/eigenlayer-middleware/src/interfaces/IIndexRegistry.sol\":{\"keccak256\":\"0x1fbcb7dd742b7fe004e44a4db03ef7160e3f1b9c6262c6b43484553d23893e70\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://33f42c3376409c9079a35e119ae5e122246cd4ae3adf9f6d9b0166aca8de86bb\",\"dweb:/ipfs/QmdA5JtYbCwVXWsX6t8WLgU5ejy2ZWoATb5BkF8ntn4K1x\"]},\"lib/eigenlayer-middleware/src/interfaces/IRegistry.sol\":{\"keccak256\":\"0x51426a17fb7e54bd3720e2890104e97a8559a13ff248b3d6b840916751c143d3\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://01f91289e6100d528cb8b318cb14ff22a0bc52882c9d4db41585e030cc9ddc25\",\"dweb:/ipfs/Qmb22nqGrsrtNovHRwbMCvDHGENuxAgrWu3Db4p7Er2MHY\"]},\"lib/eigenlayer-middleware/src/interfaces/IRegistryCoordinator.sol\":{\"keccak256\":\"0xaa994bdacd0d8718b4a9c018debece071e28a0906a3f041d53f1874eb882fad9\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://0f175cfc849fb4ac38d1629e6f87c1d7b39bd5eb2bc62e6d40d57a9ec34a62db\",\"dweb:/ipfs/QmQhgQNjZaYYzEpk2X732ZKPfTbFGr8y8RLhDWizZSQLxi\"]},\"lib/eigenlayer-middleware/src/interfaces/IServiceManager.sol\":{\"keccak256\":\"0xa7787ef89af43339a2447f252fed74746267ff2a4339823879d003c3a682f213\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://222bc9452f3af760ab477b1eb92e1e425b7027ad3ffe83d3325a92563026d0f8\",\"dweb:/ipfs/QmdQ2euKD4suZkfrKfbxaPe34xzNUpZ3459yiwJhSbLdKv\"]},\"lib/eigenlayer-middleware/src/interfaces/IStakeRegistry.sol\":{\"keccak256\":\"0xd12e4327dd3af7c467514eeb26f6330263d40ea5bcea4393f20dcb4505b6aa20\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://9d2ed354473eb07fa145d4679b27919caff7d2d638c2a0ecffc0d8a5dc4d64b0\",\"dweb:/ipfs/QmagWvvrW1h9wHkDKrbaQGJ8H7mQQyZKQx1BSdTSCErk14\"]},\"lib/eigenlayer-middleware/src/libraries/BN254.sol\":{\"keccak256\":\"0xc7c5c9529ba56d63487a02cebd5ec41e4f7044ccac6a7bdbbd53492932f1e5e9\",\"license\":\"BUSL-1.1 AND MIT\",\"urls\":[\"bzz-raw://1d3ab347b2554544eee112846bf479fcd579ce573275c59d84676207ec36be06\",\"dweb:/ipfs/Qmd8e3z1JGuHKjLAdep4u8JDBsf3j6hNShQCt14eKufJYh\"]},\"lib/eigenlayer-middleware/src/libraries/BitmapUtils.sol\":{\"keccak256\":\"0x0a7f76850c3edb11080e20ef34f761813d8be3d1a0325ad64d175c01f3e3816e\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://6f697dff42c3e1c2eab7d2bc50aa96ad92abfeb1cabf8d17e541c76a82d40365\",\"dweb:/ipfs/QmPzhJNpwAYbd33oUwj1dq3KVDBMY8efUKryNa624Q2ewA\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a\",\"dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6eb2fd1e9894dbe778f4b8131adecebe570689e63cf892f4e21257bfe1252497\",\"dweb:/ipfs/QmXgUGNfZvrn6N2miv3nooSs7Jm34A41qz94fu2GtDFcx8\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol\":{\"keccak256\":\"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9b4b2110b7f2b3eb32951bc08046fa90feccffa594e1176cb91cdfb0e94726b4\",\"dweb:/ipfs/QmSxLwYjicf9zWFuieRc8WQwE4FisA1Um5jp1iSa731TGt\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c\",\"dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a\"]},\"lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354\",\"dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"src/core/EigenDAServiceManager.sol\":{\"keccak256\":\"0x22dafca30c97c7ae7d912884cfb6628a1896448002d395843d1968cb9cdeef5b\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://8bb56a91288ba2cca6378439a4c4bdbf0c8b454324814516993f434fada3d0a9\",\"dweb:/ipfs/QmSMZNUnTqCr1WdocntdbK2Xx7MJEtxuoqmQRMGJ2yCVfT\"]},\"src/core/EigenDAServiceManagerStorage.sol\":{\"keccak256\":\"0x4b461dd0a47bb467a4d1ce0548ec4bc5c0912514327dc5f39ba0f35b158a6813\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://043c3d55196a0cd9e71f682bb1a28e0ffc0dbb0478c985c72ef0862e82dd25cd\",\"dweb:/ipfs/QmdJD1DNKU8f2iUXAN1oagc4YsY6nkcqds6oPCq7u1YCLr\"]},\"src/interfaces/IEigenDAServiceManager.sol\":{\"keccak256\":\"0x609bd8f4c858366fa0167140e81b749b5f75f63cdad682f7e77c7bb47b31ef61\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://bbf7ae42c11c84f846e332e7da40e032f38f22f1ae435b2a8434bbd0b4672c35\",\"dweb:/ipfs/QmQchg3Z8nVcxx1hpPLUJVV5coT61JndURVMq8w2veR5Gq\"]},\"src/libraries/EigenDAHasher.sol\":{\"keccak256\":\"0x7539b1c2dd5db8d449ba79c7dd1b1c88091ad781bfca9535d431be6feb3947fd\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://1407eb9bbb9a61561e35afb3dad09e1c07e2bb38060e846cc643c0ff3568574a\",\"dweb:/ipfs/QmWtbAE9WT3Q7N7Vh8iKdtgdghEacjBh4xJGU47spGg17S\"]}},\"version\":1}", +"metadata": { + "compiler": { + "version": "0.8.12+commit.f00d7308" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "contract IDelegationManager", + "name": "__delegationMananger", + "type": "address" + }, + { + "internalType": "contract IRegistryCoordinator", + "name": "__registryCoordinator", + "type": "address" + }, + { + "internalType": "contract IStakeRegistry", + "name": "__stakeRegistry", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "batchHeaderHash", + "type": "bytes32", + "indexed": true + }, + { + "internalType": "uint32", + "name": "batchId", + "type": "uint32", + "indexed": false + } + ], + "type": "event", + "name": "BatchConfirmed", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "previousAddress", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "newAddress", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "BatchConfirmerChanged", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "version", + "type": "uint8", + "indexed": false + } + ], + "type": "event", + "name": "Initialized", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "previousOwner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "OwnershipTransferred", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address", + "indexed": true + }, + { + "internalType": "uint256", + "name": "newPausedStatus", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Paused", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "contract IPauserRegistry", + "name": "pauserRegistry", + "type": "address", + "indexed": false + }, + { + "internalType": "contract IPauserRegistry", + "name": "newPauserRegistry", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "PauserRegistrySet", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "value", + "type": "bool", + "indexed": false + } + ], + "type": "event", + "name": "StaleStakesForbiddenUpdate", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address", + "indexed": true + }, + { + "internalType": "uint256", + "name": "newPausedStatus", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Unpaused", + "anonymous": false + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "BLOCK_STALE_MEASURE", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "STORE_DURATION_BLOCKS", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "THRESHOLD_DENOMINATOR", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "batchConfirmer", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "batchId", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function", + "name": "batchIdToBatchMetadataHash", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "blsApkRegistry", + "outputs": [ + { + "internalType": "contract IBLSApkRegistry", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "msgHash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "quorumNumbers", + "type": "bytes" + }, + { + "internalType": "uint32", + "name": "referenceBlockNumber", + "type": "uint32" + }, + { + "internalType": "struct IBLSSignatureChecker.NonSignerStakesAndSignature", + "name": "params", + "type": "tuple", + "components": [ + { + "internalType": "uint32[]", + "name": "nonSignerQuorumBitmapIndices", + "type": "uint32[]" + }, + { + "internalType": "struct BN254.G1Point[]", + "name": "nonSignerPubkeys", + "type": "tuple[]", + "components": [ + { + "internalType": "uint256", + "name": "X", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "Y", + "type": "uint256" + } + ] + }, + { + "internalType": "struct BN254.G1Point[]", + "name": "quorumApks", + "type": "tuple[]", + "components": [ + { + "internalType": "uint256", + "name": "X", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "Y", + "type": "uint256" + } + ] + }, + { + "internalType": "struct BN254.G2Point", + "name": "apkG2", + "type": "tuple", + "components": [ + { + "internalType": "uint256[2]", + "name": "X", + "type": "uint256[2]" + }, + { + "internalType": "uint256[2]", + "name": "Y", + "type": "uint256[2]" + } + ] + }, + { + "internalType": "struct BN254.G1Point", + "name": "sigma", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "X", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "Y", + "type": "uint256" + } + ] + }, + { + "internalType": "uint32[]", + "name": "quorumApkIndices", + "type": "uint32[]" + }, + { + "internalType": "uint32[]", + "name": "totalStakeIndices", + "type": "uint32[]" + }, + { + "internalType": "uint32[][]", + "name": "nonSignerStakeIndices", + "type": "uint32[][]" + } + ] + } + ], + "stateMutability": "view", + "type": "function", + "name": "checkSignatures", + "outputs": [ + { + "internalType": "struct IBLSSignatureChecker.QuorumStakeTotals", + "name": "", + "type": "tuple", + "components": [ + { + "internalType": "uint96[]", + "name": "signedStakeForQuorum", + "type": "uint96[]" + }, + { + "internalType": "uint96[]", + "name": "totalStakeForQuorum", + "type": "uint96[]" + } + ] + }, + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ] + }, + { + "inputs": [ + { + "internalType": "struct IEigenDAServiceManager.BatchHeader", + "name": "batchHeader", + "type": "tuple", + "components": [ + { + "internalType": "bytes32", + "name": "blobHeadersRoot", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "quorumNumbers", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "quorumThresholdPercentages", + "type": "bytes" + }, + { + "internalType": "uint32", + "name": "referenceBlockNumber", + "type": "uint32" + } + ] + }, + { + "internalType": "struct IBLSSignatureChecker.NonSignerStakesAndSignature", + "name": "nonSignerStakesAndSignature", + "type": "tuple", + "components": [ + { + "internalType": "uint32[]", + "name": "nonSignerQuorumBitmapIndices", + "type": "uint32[]" + }, + { + "internalType": "struct BN254.G1Point[]", + "name": "nonSignerPubkeys", + "type": "tuple[]", + "components": [ + { + "internalType": "uint256", + "name": "X", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "Y", + "type": "uint256" + } + ] + }, + { + "internalType": "struct BN254.G1Point[]", + "name": "quorumApks", + "type": "tuple[]", + "components": [ + { + "internalType": "uint256", + "name": "X", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "Y", + "type": "uint256" + } + ] + }, + { + "internalType": "struct BN254.G2Point", + "name": "apkG2", + "type": "tuple", + "components": [ + { + "internalType": "uint256[2]", + "name": "X", + "type": "uint256[2]" + }, + { + "internalType": "uint256[2]", + "name": "Y", + "type": "uint256[2]" + } + ] + }, + { + "internalType": "struct BN254.G1Point", + "name": "sigma", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "X", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "Y", + "type": "uint256" + } + ] + }, + { + "internalType": "uint32[]", + "name": "quorumApkIndices", + "type": "uint32[]" + }, + { + "internalType": "uint32[]", + "name": "totalStakeIndices", + "type": "uint32[]" + }, + { + "internalType": "uint32[][]", + "name": "nonSignerStakeIndices", + "type": "uint32[][]" + } + ] + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "confirmBatch" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "delegation", + "outputs": [ + { + "internalType": "contract IDelegationManager", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "deregisterOperatorFromAVS" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getOperatorRestakedStrategies", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getRestakeableStrategies", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IPauserRegistry", + "name": "_pauserRegistry", + "type": "address" + }, + { + "internalType": "address", + "name": "_initialOwner", + "type": "address" + }, + { + "internalType": "address", + "name": "_batchConfirmer", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "initialize" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "initialize" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "latestServeUntilBlock", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newPausedStatus", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "pause" + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "pauseAll" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "index", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function", + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "paused", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "pauserRegistry", + "outputs": [ + { + "internalType": "contract IPauserRegistry", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "struct ISignatureUtils.SignatureWithSaltAndExpiry", + "name": "operatorSignature", + "type": "tuple", + "components": [ + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "salt", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "expiry", + "type": "uint256" + } + ] + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "registerOperatorToAVS" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "registryCoordinator", + "outputs": [ + { + "internalType": "contract IRegistryCoordinator", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "renounceOwnership" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_batchConfirmer", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "setBatchConfirmer" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_metadataURI", + "type": "string" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "setMetadataURI" + }, + { + "inputs": [ + { + "internalType": "contract IPauserRegistry", + "name": "newPauserRegistry", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "setPauserRegistry" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "value", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "setStaleStakesForbidden" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "stakeRegistry", + "outputs": [ + { + "internalType": "contract IStakeRegistry", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "staleStakesForbidden", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "taskNumber", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "transferOwnership" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "msgHash", + "type": "bytes32" + }, + { + "internalType": "struct BN254.G1Point", + "name": "apk", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "X", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "Y", + "type": "uint256" + } + ] + }, + { + "internalType": "struct BN254.G2Point", + "name": "apkG2", + "type": "tuple", + "components": [ + { + "internalType": "uint256[2]", + "name": "X", + "type": "uint256[2]" + }, + { + "internalType": "uint256[2]", + "name": "Y", + "type": "uint256[2]" + } + ] + }, + { + "internalType": "struct BN254.G1Point", + "name": "sigma", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "X", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "Y", + "type": "uint256" + } + ] + } + ], + "stateMutability": "view", + "type": "function", + "name": "trySignatureAndApkVerification", + "outputs": [ + { + "internalType": "bool", + "name": "pairingSuccessful", + "type": "bool" + }, + { + "internalType": "bool", + "name": "siganatureIsValid", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newPausedStatus", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "unpause" + } + ], \ No newline at end of file diff --git a/contracts/bindings/AVSDirectory/binding.go b/contracts/bindings/AVSDirectory/binding.go new file mode 100644 index 0000000000..72ddd98605 --- /dev/null +++ b/contracts/bindings/AVSDirectory/binding.go @@ -0,0 +1,1772 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package contractAVSDirectory + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// ISignatureUtilsSignatureWithSaltAndExpiry is an auto generated low-level Go binding around an user-defined struct. +type ISignatureUtilsSignatureWithSaltAndExpiry struct { + Signature []byte + Salt [32]byte + Expiry *big.Int +} + +// ContractAVSDirectoryMetaData contains all meta data concerning the ContractAVSDirectory contract. +var ContractAVSDirectoryMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_delegation\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DOMAIN_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPERATOR_AVS_REGISTRATION_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"avsOperatorStatus\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIAVSDirectory.OperatorAVSRegistrationStatus\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateOperatorAVSRegistrationDigestHash\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"delegation\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deregisterOperatorFromAVS\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"domainSeparator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"operatorSaltIsSpent\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseAll\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pauserRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registerOperatorToAVS\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.SignatureWithSaltAndExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateAVSMetadataURI\",\"inputs\":[{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"AVSMetadataURIUpdated\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"metadataURI\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorAVSRegistrationStatusUpdated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"status\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"enumIAVSDirectory.OperatorAVSRegistrationStatus\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false}]", + Bin: "0x60c06040523480156200001157600080fd5b5060405162001eaf38038062001eaf833981016040819052620000349162000118565b6001600160a01b0381166080526200004b62000056565b504660a0526200014a565b600054610100900460ff1615620000c35760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000116576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6000602082840312156200012b57600080fd5b81516001600160a01b03811681146200014357600080fd5b9392505050565b60805160a051611d38620001776000396000610ddf01526000818161031901526109650152611d386000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c8063886f1195116100b8578063a98fb3551161007c578063a98fb355146102da578063d79aceab146102ed578063df5cf72314610314578063f2fde38b1461033b578063f698da251461034e578063fabc1cbc1461035657600080fd5b8063886f1195146102655780638da5cb5b146102905780639926ee7d146102a1578063a1060c88146102b4578063a364f4da146102c757600080fd5b806349075da3116100ff57806349075da3146101ef578063595c6a671461022a5780635ac86ab7146102325780635c975abb14610255578063715018a61461025d57600080fd5b806310d67a2f1461013c578063136439dd146101515780631794bb3c1461016457806320606b7014610177578063374823b5146101b1575b600080fd5b61014f61014a3660046117e2565b610369565b005b61014f61015f366004611806565b610425565b61014f61017236600461181f565b610564565b61019e7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6040519081526020015b60405180910390f35b6101df6101bf366004611860565b609960209081526000928352604080842090915290825290205460ff1681565b60405190151581526020016101a8565b61021d6101fd36600461188c565b609860209081526000928352604080842090915290825290205460ff1681565b6040516101a891906118db565b61014f61068e565b6101df610240366004611903565b606654600160ff9092169190911b9081161490565b60665461019e565b61014f610755565b606554610278906001600160a01b031681565b6040516001600160a01b0390911681526020016101a8565b6033546001600160a01b0316610278565b61014f6102af366004611996565b610769565b61019e6102c2366004611a7d565b610afc565b61014f6102d53660046117e2565b610bb5565b61014f6102e8366004611ac3565b610d1e565b61019e7fda2c89bafdd34776a2b8bb9c83c82f419e20cc8c67207f70edd58249b92661bd81565b6102787f000000000000000000000000000000000000000000000000000000000000000081565b61014f6103493660046117e2565b610d65565b61019e610ddb565b61014f610364366004611806565b610e19565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103e09190611b35565b6001600160a01b0316336001600160a01b0316146104195760405162461bcd60e51b815260040161041090611b52565b60405180910390fd5b61042281610f75565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa15801561046d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104919190611b9c565b6104ad5760405162461bcd60e51b815260040161041090611bbe565b606654818116146105265760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610410565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b600054610100900460ff16158080156105845750600054600160ff909116105b8061059e5750303b15801561059e575060005460ff166001145b6106015760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610410565b6000805460ff191660011790558015610624576000805461ff0019166101001790555b61062e838361106c565b610636611156565b609755610642846111ed565b8015610688576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156106d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106fa9190611b9c565b6107165760405162461bcd60e51b815260040161041090611bbe565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b61075d61123f565b61076760006111ed565b565b606654600090600190811614156107be5760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b6044820152606401610410565b42826040015110156108265760405162461bcd60e51b815260206004820152603e6024820152600080516020611ce383398151915260448201527f56533a206f70657261746f72207369676e6174757265206578706972656400006064820152608401610410565b60013360009081526098602090815260408083206001600160a01b038816845290915290205460ff166001811115610860576108606118c5565b14156108c25760405162461bcd60e51b815260206004820152603f6024820152600080516020611ce383398151915260448201527f56533a206f70657261746f7220616c72656164792072656769737465726564006064820152608401610410565b6001600160a01b038316600090815260996020908152604080832085830151845290915290205460ff16156109465760405162461bcd60e51b81526020600482015260366024820152600080516020611ce38339815191526044820152751594ce881cd85b1d08185b1c9958591e481cdc195b9d60521b6064820152608401610410565b6040516336b87bd760e11b81526001600160a01b0384811660048301527f00000000000000000000000000000000000000000000000000000000000000001690636d70f7ae90602401602060405180830381865afa1580156109ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d09190611b9c565b610a465760405162461bcd60e51b815260206004820152604d6024820152600080516020611ce383398151915260448201527f56533a206f70657261746f72206e6f74207265676973746572656420746f204560648201526c1a59d95b93185e595c881e595d609a1b608482015260a401610410565b6000610a5c843385602001518660400151610afc565b9050610a6d84828560000151611299565b3360008181526098602090815260408083206001600160a01b0389168085529083528184208054600160ff199182168117909255609985528386208a860151875290945293829020805490931684179092555190917ff0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b4191610aee91906118db565b60405180910390a350505050565b604080517fda2c89bafdd34776a2b8bb9c83c82f419e20cc8c67207f70edd58249b92661bd6020808301919091526001600160a01b0387811683850152861660608301526080820185905260a08083018590528351808403909101815260c0909201909252805191012060009081610b72610ddb565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f190181529190528051602090910120979650505050505050565b60665460009060019081161415610c0a5760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b6044820152606401610410565b60013360009081526098602090815260408083206001600160a01b038716845290915290205460ff166001811115610c4457610c446118c5565b14610cb75760405162461bcd60e51b815260206004820152603f60248201527f4156534469726563746f72792e646572656769737465724f70657261746f724660448201527f726f6d4156533a206f70657261746f72206e6f742072656769737465726564006064820152608401610410565b3360008181526098602090815260408083206001600160a01b0387168085529252808320805460ff191690555190917ff0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b4191610d1291906118db565b60405180910390a35050565b336001600160a01b03167fa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c9437138383604051610d59929190611c06565b60405180910390a25050565b610d6d61123f565b6001600160a01b038116610dd25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610410565b610422816111ed565b60007f0000000000000000000000000000000000000000000000000000000000000000461415610e0c575060975490565b610e14611156565b905090565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e909190611b35565b6001600160a01b0316336001600160a01b031614610ec05760405162461bcd60e51b815260040161041090611b52565b606654198119606654191614610f3e5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610410565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610559565b6001600160a01b0381166110035760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610410565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6065546001600160a01b031615801561108d57506001600160a01b03821615155b61110f5760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610410565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261115282610f75565b5050565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6033546001600160a01b031633146107675760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610410565b6001600160a01b0383163b156113b857604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e906112d99086908690600401611c35565b602060405180830381865afa1580156112f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131a9190611c92565b6001600160e01b031916146113b35760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a401610410565b505050565b826001600160a01b03166113cc8383611458565b6001600160a01b0316146113b35760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a401610410565b6000806000611467858561147c565b91509150611474816114ec565b509392505050565b6000808251604114156114b35760208301516040840151606085015160001a6114a7878285856116a7565b945094505050506114e5565b8251604014156114dd57602083015160408401516114d2868383611794565b9350935050506114e5565b506000905060025b9250929050565b6000816004811115611500576115006118c5565b14156115095750565b600181600481111561151d5761151d6118c5565b141561156b5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610410565b600281600481111561157f5761157f6118c5565b14156115cd5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610410565b60038160048111156115e1576115e16118c5565b141561163a5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610410565b600481600481111561164e5761164e6118c5565b14156104225760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610410565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156116de575060009050600361178b565b8460ff16601b141580156116f657508460ff16601c14155b15611707575060009050600461178b565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561175b573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166117845760006001925092505061178b565b9150600090505b94509492505050565b6000806001600160ff1b038316816117b160ff86901c601b611cbc565b90506117bf878288856116a7565b935093505050935093915050565b6001600160a01b038116811461042257600080fd5b6000602082840312156117f457600080fd5b81356117ff816117cd565b9392505050565b60006020828403121561181857600080fd5b5035919050565b60008060006060848603121561183457600080fd5b833561183f816117cd565b9250602084013561184f816117cd565b929592945050506040919091013590565b6000806040838503121561187357600080fd5b823561187e816117cd565b946020939093013593505050565b6000806040838503121561189f57600080fd5b82356118aa816117cd565b915060208301356118ba816117cd565b809150509250929050565b634e487b7160e01b600052602160045260246000fd5b60208101600283106118fd57634e487b7160e01b600052602160045260246000fd5b91905290565b60006020828403121561191557600080fd5b813560ff811681146117ff57600080fd5b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561195f5761195f611926565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561198e5761198e611926565b604052919050565b600080604083850312156119a957600080fd5b82356119b4816117cd565b915060208381013567ffffffffffffffff808211156119d257600080fd5b90850190606082880312156119e657600080fd5b6119ee61193c565b8235828111156119fd57600080fd5b8301601f81018913611a0e57600080fd5b803583811115611a2057611a20611926565b611a32601f8201601f19168701611965565b93508084528986828401011115611a4857600080fd5b808683018786013760008682860101525050818152838301358482015260408301356040820152809450505050509250929050565b60008060008060808587031215611a9357600080fd5b8435611a9e816117cd565b93506020850135611aae816117cd565b93969395505050506040820135916060013590565b60008060208385031215611ad657600080fd5b823567ffffffffffffffff80821115611aee57600080fd5b818501915085601f830112611b0257600080fd5b813581811115611b1157600080fd5b866020828501011115611b2357600080fd5b60209290920196919550909350505050565b600060208284031215611b4757600080fd5b81516117ff816117cd565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215611bae57600080fd5b815180151581146117ff57600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b82815260006020604081840152835180604085015260005b81811015611c6957858101830151858201606001528201611c4d565b81811115611c7b576000606083870101525b50601f01601f191692909201606001949350505050565b600060208284031215611ca457600080fd5b81516001600160e01b0319811681146117ff57600080fd5b60008219821115611cdd57634e487b7160e01b600052601160045260246000fd5b50019056fe4156534469726563746f72792e72656769737465724f70657261746f72546f41a264697066735822122051cb169f16e8237b5493e2fb70d582ba9526e13054d6a1d667ea6233c06953d164736f6c634300080c0033", +} + +// ContractAVSDirectoryABI is the input ABI used to generate the binding from. +// Deprecated: Use ContractAVSDirectoryMetaData.ABI instead. +var ContractAVSDirectoryABI = ContractAVSDirectoryMetaData.ABI + +// ContractAVSDirectoryBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use ContractAVSDirectoryMetaData.Bin instead. +var ContractAVSDirectoryBin = ContractAVSDirectoryMetaData.Bin + +// DeployContractAVSDirectory deploys a new Ethereum contract, binding an instance of ContractAVSDirectory to it. +func DeployContractAVSDirectory(auth *bind.TransactOpts, backend bind.ContractBackend, _delegation common.Address) (common.Address, *types.Transaction, *ContractAVSDirectory, error) { + parsed, err := ContractAVSDirectoryMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ContractAVSDirectoryBin), backend, _delegation) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &ContractAVSDirectory{ContractAVSDirectoryCaller: ContractAVSDirectoryCaller{contract: contract}, ContractAVSDirectoryTransactor: ContractAVSDirectoryTransactor{contract: contract}, ContractAVSDirectoryFilterer: ContractAVSDirectoryFilterer{contract: contract}}, nil +} + +// ContractAVSDirectory is an auto generated Go binding around an Ethereum contract. +type ContractAVSDirectory struct { + ContractAVSDirectoryCaller // Read-only binding to the contract + ContractAVSDirectoryTransactor // Write-only binding to the contract + ContractAVSDirectoryFilterer // Log filterer for contract events +} + +// ContractAVSDirectoryCaller is an auto generated read-only Go binding around an Ethereum contract. +type ContractAVSDirectoryCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ContractAVSDirectoryTransactor is an auto generated write-only Go binding around an Ethereum contract. +type ContractAVSDirectoryTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ContractAVSDirectoryFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type ContractAVSDirectoryFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ContractAVSDirectorySession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type ContractAVSDirectorySession struct { + Contract *ContractAVSDirectory // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ContractAVSDirectoryCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type ContractAVSDirectoryCallerSession struct { + Contract *ContractAVSDirectoryCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// ContractAVSDirectoryTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type ContractAVSDirectoryTransactorSession struct { + Contract *ContractAVSDirectoryTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ContractAVSDirectoryRaw is an auto generated low-level Go binding around an Ethereum contract. +type ContractAVSDirectoryRaw struct { + Contract *ContractAVSDirectory // Generic contract binding to access the raw methods on +} + +// ContractAVSDirectoryCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type ContractAVSDirectoryCallerRaw struct { + Contract *ContractAVSDirectoryCaller // Generic read-only contract binding to access the raw methods on +} + +// ContractAVSDirectoryTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type ContractAVSDirectoryTransactorRaw struct { + Contract *ContractAVSDirectoryTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewContractAVSDirectory creates a new instance of ContractAVSDirectory, bound to a specific deployed contract. +func NewContractAVSDirectory(address common.Address, backend bind.ContractBackend) (*ContractAVSDirectory, error) { + contract, err := bindContractAVSDirectory(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ContractAVSDirectory{ContractAVSDirectoryCaller: ContractAVSDirectoryCaller{contract: contract}, ContractAVSDirectoryTransactor: ContractAVSDirectoryTransactor{contract: contract}, ContractAVSDirectoryFilterer: ContractAVSDirectoryFilterer{contract: contract}}, nil +} + +// NewContractAVSDirectoryCaller creates a new read-only instance of ContractAVSDirectory, bound to a specific deployed contract. +func NewContractAVSDirectoryCaller(address common.Address, caller bind.ContractCaller) (*ContractAVSDirectoryCaller, error) { + contract, err := bindContractAVSDirectory(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ContractAVSDirectoryCaller{contract: contract}, nil +} + +// NewContractAVSDirectoryTransactor creates a new write-only instance of ContractAVSDirectory, bound to a specific deployed contract. +func NewContractAVSDirectoryTransactor(address common.Address, transactor bind.ContractTransactor) (*ContractAVSDirectoryTransactor, error) { + contract, err := bindContractAVSDirectory(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ContractAVSDirectoryTransactor{contract: contract}, nil +} + +// NewContractAVSDirectoryFilterer creates a new log filterer instance of ContractAVSDirectory, bound to a specific deployed contract. +func NewContractAVSDirectoryFilterer(address common.Address, filterer bind.ContractFilterer) (*ContractAVSDirectoryFilterer, error) { + contract, err := bindContractAVSDirectory(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ContractAVSDirectoryFilterer{contract: contract}, nil +} + +// bindContractAVSDirectory binds a generic wrapper to an already deployed contract. +func bindContractAVSDirectory(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ContractAVSDirectoryMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ContractAVSDirectory *ContractAVSDirectoryRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ContractAVSDirectory.Contract.ContractAVSDirectoryCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ContractAVSDirectory *ContractAVSDirectoryRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ContractAVSDirectory.Contract.ContractAVSDirectoryTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ContractAVSDirectory *ContractAVSDirectoryRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ContractAVSDirectory.Contract.ContractAVSDirectoryTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ContractAVSDirectory *ContractAVSDirectoryCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ContractAVSDirectory.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ContractAVSDirectory *ContractAVSDirectoryTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ContractAVSDirectory.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ContractAVSDirectory *ContractAVSDirectoryTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ContractAVSDirectory.Contract.contract.Transact(opts, method, params...) +} + +// DOMAINTYPEHASH is a free data retrieval call binding the contract method 0x20606b70. +// +// Solidity: function DOMAIN_TYPEHASH() view returns(bytes32) +func (_ContractAVSDirectory *ContractAVSDirectoryCaller) DOMAINTYPEHASH(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ContractAVSDirectory.contract.Call(opts, &out, "DOMAIN_TYPEHASH") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// DOMAINTYPEHASH is a free data retrieval call binding the contract method 0x20606b70. +// +// Solidity: function DOMAIN_TYPEHASH() view returns(bytes32) +func (_ContractAVSDirectory *ContractAVSDirectorySession) DOMAINTYPEHASH() ([32]byte, error) { + return _ContractAVSDirectory.Contract.DOMAINTYPEHASH(&_ContractAVSDirectory.CallOpts) +} + +// DOMAINTYPEHASH is a free data retrieval call binding the contract method 0x20606b70. +// +// Solidity: function DOMAIN_TYPEHASH() view returns(bytes32) +func (_ContractAVSDirectory *ContractAVSDirectoryCallerSession) DOMAINTYPEHASH() ([32]byte, error) { + return _ContractAVSDirectory.Contract.DOMAINTYPEHASH(&_ContractAVSDirectory.CallOpts) +} + +// OPERATORAVSREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xd79aceab. +// +// Solidity: function OPERATOR_AVS_REGISTRATION_TYPEHASH() view returns(bytes32) +func (_ContractAVSDirectory *ContractAVSDirectoryCaller) OPERATORAVSREGISTRATIONTYPEHASH(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ContractAVSDirectory.contract.Call(opts, &out, "OPERATOR_AVS_REGISTRATION_TYPEHASH") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// OPERATORAVSREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xd79aceab. +// +// Solidity: function OPERATOR_AVS_REGISTRATION_TYPEHASH() view returns(bytes32) +func (_ContractAVSDirectory *ContractAVSDirectorySession) OPERATORAVSREGISTRATIONTYPEHASH() ([32]byte, error) { + return _ContractAVSDirectory.Contract.OPERATORAVSREGISTRATIONTYPEHASH(&_ContractAVSDirectory.CallOpts) +} + +// OPERATORAVSREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xd79aceab. +// +// Solidity: function OPERATOR_AVS_REGISTRATION_TYPEHASH() view returns(bytes32) +func (_ContractAVSDirectory *ContractAVSDirectoryCallerSession) OPERATORAVSREGISTRATIONTYPEHASH() ([32]byte, error) { + return _ContractAVSDirectory.Contract.OPERATORAVSREGISTRATIONTYPEHASH(&_ContractAVSDirectory.CallOpts) +} + +// AvsOperatorStatus is a free data retrieval call binding the contract method 0x49075da3. +// +// Solidity: function avsOperatorStatus(address , address ) view returns(uint8) +func (_ContractAVSDirectory *ContractAVSDirectoryCaller) AvsOperatorStatus(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address) (uint8, error) { + var out []interface{} + err := _ContractAVSDirectory.contract.Call(opts, &out, "avsOperatorStatus", arg0, arg1) + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +// AvsOperatorStatus is a free data retrieval call binding the contract method 0x49075da3. +// +// Solidity: function avsOperatorStatus(address , address ) view returns(uint8) +func (_ContractAVSDirectory *ContractAVSDirectorySession) AvsOperatorStatus(arg0 common.Address, arg1 common.Address) (uint8, error) { + return _ContractAVSDirectory.Contract.AvsOperatorStatus(&_ContractAVSDirectory.CallOpts, arg0, arg1) +} + +// AvsOperatorStatus is a free data retrieval call binding the contract method 0x49075da3. +// +// Solidity: function avsOperatorStatus(address , address ) view returns(uint8) +func (_ContractAVSDirectory *ContractAVSDirectoryCallerSession) AvsOperatorStatus(arg0 common.Address, arg1 common.Address) (uint8, error) { + return _ContractAVSDirectory.Contract.AvsOperatorStatus(&_ContractAVSDirectory.CallOpts, arg0, arg1) +} + +// CalculateOperatorAVSRegistrationDigestHash is a free data retrieval call binding the contract method 0xa1060c88. +// +// Solidity: function calculateOperatorAVSRegistrationDigestHash(address operator, address avs, bytes32 salt, uint256 expiry) view returns(bytes32) +func (_ContractAVSDirectory *ContractAVSDirectoryCaller) CalculateOperatorAVSRegistrationDigestHash(opts *bind.CallOpts, operator common.Address, avs common.Address, salt [32]byte, expiry *big.Int) ([32]byte, error) { + var out []interface{} + err := _ContractAVSDirectory.contract.Call(opts, &out, "calculateOperatorAVSRegistrationDigestHash", operator, avs, salt, expiry) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// CalculateOperatorAVSRegistrationDigestHash is a free data retrieval call binding the contract method 0xa1060c88. +// +// Solidity: function calculateOperatorAVSRegistrationDigestHash(address operator, address avs, bytes32 salt, uint256 expiry) view returns(bytes32) +func (_ContractAVSDirectory *ContractAVSDirectorySession) CalculateOperatorAVSRegistrationDigestHash(operator common.Address, avs common.Address, salt [32]byte, expiry *big.Int) ([32]byte, error) { + return _ContractAVSDirectory.Contract.CalculateOperatorAVSRegistrationDigestHash(&_ContractAVSDirectory.CallOpts, operator, avs, salt, expiry) +} + +// CalculateOperatorAVSRegistrationDigestHash is a free data retrieval call binding the contract method 0xa1060c88. +// +// Solidity: function calculateOperatorAVSRegistrationDigestHash(address operator, address avs, bytes32 salt, uint256 expiry) view returns(bytes32) +func (_ContractAVSDirectory *ContractAVSDirectoryCallerSession) CalculateOperatorAVSRegistrationDigestHash(operator common.Address, avs common.Address, salt [32]byte, expiry *big.Int) ([32]byte, error) { + return _ContractAVSDirectory.Contract.CalculateOperatorAVSRegistrationDigestHash(&_ContractAVSDirectory.CallOpts, operator, avs, salt, expiry) +} + +// Delegation is a free data retrieval call binding the contract method 0xdf5cf723. +// +// Solidity: function delegation() view returns(address) +func (_ContractAVSDirectory *ContractAVSDirectoryCaller) Delegation(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ContractAVSDirectory.contract.Call(opts, &out, "delegation") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Delegation is a free data retrieval call binding the contract method 0xdf5cf723. +// +// Solidity: function delegation() view returns(address) +func (_ContractAVSDirectory *ContractAVSDirectorySession) Delegation() (common.Address, error) { + return _ContractAVSDirectory.Contract.Delegation(&_ContractAVSDirectory.CallOpts) +} + +// Delegation is a free data retrieval call binding the contract method 0xdf5cf723. +// +// Solidity: function delegation() view returns(address) +func (_ContractAVSDirectory *ContractAVSDirectoryCallerSession) Delegation() (common.Address, error) { + return _ContractAVSDirectory.Contract.Delegation(&_ContractAVSDirectory.CallOpts) +} + +// DomainSeparator is a free data retrieval call binding the contract method 0xf698da25. +// +// Solidity: function domainSeparator() view returns(bytes32) +func (_ContractAVSDirectory *ContractAVSDirectoryCaller) DomainSeparator(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ContractAVSDirectory.contract.Call(opts, &out, "domainSeparator") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// DomainSeparator is a free data retrieval call binding the contract method 0xf698da25. +// +// Solidity: function domainSeparator() view returns(bytes32) +func (_ContractAVSDirectory *ContractAVSDirectorySession) DomainSeparator() ([32]byte, error) { + return _ContractAVSDirectory.Contract.DomainSeparator(&_ContractAVSDirectory.CallOpts) +} + +// DomainSeparator is a free data retrieval call binding the contract method 0xf698da25. +// +// Solidity: function domainSeparator() view returns(bytes32) +func (_ContractAVSDirectory *ContractAVSDirectoryCallerSession) DomainSeparator() ([32]byte, error) { + return _ContractAVSDirectory.Contract.DomainSeparator(&_ContractAVSDirectory.CallOpts) +} + +// OperatorSaltIsSpent is a free data retrieval call binding the contract method 0x374823b5. +// +// Solidity: function operatorSaltIsSpent(address , bytes32 ) view returns(bool) +func (_ContractAVSDirectory *ContractAVSDirectoryCaller) OperatorSaltIsSpent(opts *bind.CallOpts, arg0 common.Address, arg1 [32]byte) (bool, error) { + var out []interface{} + err := _ContractAVSDirectory.contract.Call(opts, &out, "operatorSaltIsSpent", arg0, arg1) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// OperatorSaltIsSpent is a free data retrieval call binding the contract method 0x374823b5. +// +// Solidity: function operatorSaltIsSpent(address , bytes32 ) view returns(bool) +func (_ContractAVSDirectory *ContractAVSDirectorySession) OperatorSaltIsSpent(arg0 common.Address, arg1 [32]byte) (bool, error) { + return _ContractAVSDirectory.Contract.OperatorSaltIsSpent(&_ContractAVSDirectory.CallOpts, arg0, arg1) +} + +// OperatorSaltIsSpent is a free data retrieval call binding the contract method 0x374823b5. +// +// Solidity: function operatorSaltIsSpent(address , bytes32 ) view returns(bool) +func (_ContractAVSDirectory *ContractAVSDirectoryCallerSession) OperatorSaltIsSpent(arg0 common.Address, arg1 [32]byte) (bool, error) { + return _ContractAVSDirectory.Contract.OperatorSaltIsSpent(&_ContractAVSDirectory.CallOpts, arg0, arg1) +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_ContractAVSDirectory *ContractAVSDirectoryCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ContractAVSDirectory.contract.Call(opts, &out, "owner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_ContractAVSDirectory *ContractAVSDirectorySession) Owner() (common.Address, error) { + return _ContractAVSDirectory.Contract.Owner(&_ContractAVSDirectory.CallOpts) +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_ContractAVSDirectory *ContractAVSDirectoryCallerSession) Owner() (common.Address, error) { + return _ContractAVSDirectory.Contract.Owner(&_ContractAVSDirectory.CallOpts) +} + +// Paused is a free data retrieval call binding the contract method 0x5ac86ab7. +// +// Solidity: function paused(uint8 index) view returns(bool) +func (_ContractAVSDirectory *ContractAVSDirectoryCaller) Paused(opts *bind.CallOpts, index uint8) (bool, error) { + var out []interface{} + err := _ContractAVSDirectory.contract.Call(opts, &out, "paused", index) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// Paused is a free data retrieval call binding the contract method 0x5ac86ab7. +// +// Solidity: function paused(uint8 index) view returns(bool) +func (_ContractAVSDirectory *ContractAVSDirectorySession) Paused(index uint8) (bool, error) { + return _ContractAVSDirectory.Contract.Paused(&_ContractAVSDirectory.CallOpts, index) +} + +// Paused is a free data retrieval call binding the contract method 0x5ac86ab7. +// +// Solidity: function paused(uint8 index) view returns(bool) +func (_ContractAVSDirectory *ContractAVSDirectoryCallerSession) Paused(index uint8) (bool, error) { + return _ContractAVSDirectory.Contract.Paused(&_ContractAVSDirectory.CallOpts, index) +} + +// Paused0 is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(uint256) +func (_ContractAVSDirectory *ContractAVSDirectoryCaller) Paused0(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _ContractAVSDirectory.contract.Call(opts, &out, "paused0") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// Paused0 is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(uint256) +func (_ContractAVSDirectory *ContractAVSDirectorySession) Paused0() (*big.Int, error) { + return _ContractAVSDirectory.Contract.Paused0(&_ContractAVSDirectory.CallOpts) +} + +// Paused0 is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(uint256) +func (_ContractAVSDirectory *ContractAVSDirectoryCallerSession) Paused0() (*big.Int, error) { + return _ContractAVSDirectory.Contract.Paused0(&_ContractAVSDirectory.CallOpts) +} + +// PauserRegistry is a free data retrieval call binding the contract method 0x886f1195. +// +// Solidity: function pauserRegistry() view returns(address) +func (_ContractAVSDirectory *ContractAVSDirectoryCaller) PauserRegistry(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ContractAVSDirectory.contract.Call(opts, &out, "pauserRegistry") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// PauserRegistry is a free data retrieval call binding the contract method 0x886f1195. +// +// Solidity: function pauserRegistry() view returns(address) +func (_ContractAVSDirectory *ContractAVSDirectorySession) PauserRegistry() (common.Address, error) { + return _ContractAVSDirectory.Contract.PauserRegistry(&_ContractAVSDirectory.CallOpts) +} + +// PauserRegistry is a free data retrieval call binding the contract method 0x886f1195. +// +// Solidity: function pauserRegistry() view returns(address) +func (_ContractAVSDirectory *ContractAVSDirectoryCallerSession) PauserRegistry() (common.Address, error) { + return _ContractAVSDirectory.Contract.PauserRegistry(&_ContractAVSDirectory.CallOpts) +} + +// DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. +// +// Solidity: function deregisterOperatorFromAVS(address operator) returns() +func (_ContractAVSDirectory *ContractAVSDirectoryTransactor) DeregisterOperatorFromAVS(opts *bind.TransactOpts, operator common.Address) (*types.Transaction, error) { + return _ContractAVSDirectory.contract.Transact(opts, "deregisterOperatorFromAVS", operator) +} + +// DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. +// +// Solidity: function deregisterOperatorFromAVS(address operator) returns() +func (_ContractAVSDirectory *ContractAVSDirectorySession) DeregisterOperatorFromAVS(operator common.Address) (*types.Transaction, error) { + return _ContractAVSDirectory.Contract.DeregisterOperatorFromAVS(&_ContractAVSDirectory.TransactOpts, operator) +} + +// DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. +// +// Solidity: function deregisterOperatorFromAVS(address operator) returns() +func (_ContractAVSDirectory *ContractAVSDirectoryTransactorSession) DeregisterOperatorFromAVS(operator common.Address) (*types.Transaction, error) { + return _ContractAVSDirectory.Contract.DeregisterOperatorFromAVS(&_ContractAVSDirectory.TransactOpts, operator) +} + +// Initialize is a paid mutator transaction binding the contract method 0x1794bb3c. +// +// Solidity: function initialize(address initialOwner, address _pauserRegistry, uint256 initialPausedStatus) returns() +func (_ContractAVSDirectory *ContractAVSDirectoryTransactor) Initialize(opts *bind.TransactOpts, initialOwner common.Address, _pauserRegistry common.Address, initialPausedStatus *big.Int) (*types.Transaction, error) { + return _ContractAVSDirectory.contract.Transact(opts, "initialize", initialOwner, _pauserRegistry, initialPausedStatus) +} + +// Initialize is a paid mutator transaction binding the contract method 0x1794bb3c. +// +// Solidity: function initialize(address initialOwner, address _pauserRegistry, uint256 initialPausedStatus) returns() +func (_ContractAVSDirectory *ContractAVSDirectorySession) Initialize(initialOwner common.Address, _pauserRegistry common.Address, initialPausedStatus *big.Int) (*types.Transaction, error) { + return _ContractAVSDirectory.Contract.Initialize(&_ContractAVSDirectory.TransactOpts, initialOwner, _pauserRegistry, initialPausedStatus) +} + +// Initialize is a paid mutator transaction binding the contract method 0x1794bb3c. +// +// Solidity: function initialize(address initialOwner, address _pauserRegistry, uint256 initialPausedStatus) returns() +func (_ContractAVSDirectory *ContractAVSDirectoryTransactorSession) Initialize(initialOwner common.Address, _pauserRegistry common.Address, initialPausedStatus *big.Int) (*types.Transaction, error) { + return _ContractAVSDirectory.Contract.Initialize(&_ContractAVSDirectory.TransactOpts, initialOwner, _pauserRegistry, initialPausedStatus) +} + +// Pause is a paid mutator transaction binding the contract method 0x136439dd. +// +// Solidity: function pause(uint256 newPausedStatus) returns() +func (_ContractAVSDirectory *ContractAVSDirectoryTransactor) Pause(opts *bind.TransactOpts, newPausedStatus *big.Int) (*types.Transaction, error) { + return _ContractAVSDirectory.contract.Transact(opts, "pause", newPausedStatus) +} + +// Pause is a paid mutator transaction binding the contract method 0x136439dd. +// +// Solidity: function pause(uint256 newPausedStatus) returns() +func (_ContractAVSDirectory *ContractAVSDirectorySession) Pause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _ContractAVSDirectory.Contract.Pause(&_ContractAVSDirectory.TransactOpts, newPausedStatus) +} + +// Pause is a paid mutator transaction binding the contract method 0x136439dd. +// +// Solidity: function pause(uint256 newPausedStatus) returns() +func (_ContractAVSDirectory *ContractAVSDirectoryTransactorSession) Pause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _ContractAVSDirectory.Contract.Pause(&_ContractAVSDirectory.TransactOpts, newPausedStatus) +} + +// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. +// +// Solidity: function pauseAll() returns() +func (_ContractAVSDirectory *ContractAVSDirectoryTransactor) PauseAll(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ContractAVSDirectory.contract.Transact(opts, "pauseAll") +} + +// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. +// +// Solidity: function pauseAll() returns() +func (_ContractAVSDirectory *ContractAVSDirectorySession) PauseAll() (*types.Transaction, error) { + return _ContractAVSDirectory.Contract.PauseAll(&_ContractAVSDirectory.TransactOpts) +} + +// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. +// +// Solidity: function pauseAll() returns() +func (_ContractAVSDirectory *ContractAVSDirectoryTransactorSession) PauseAll() (*types.Transaction, error) { + return _ContractAVSDirectory.Contract.PauseAll(&_ContractAVSDirectory.TransactOpts) +} + +// RegisterOperatorToAVS is a paid mutator transaction binding the contract method 0x9926ee7d. +// +// Solidity: function registerOperatorToAVS(address operator, (bytes,bytes32,uint256) operatorSignature) returns() +func (_ContractAVSDirectory *ContractAVSDirectoryTransactor) RegisterOperatorToAVS(opts *bind.TransactOpts, operator common.Address, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _ContractAVSDirectory.contract.Transact(opts, "registerOperatorToAVS", operator, operatorSignature) +} + +// RegisterOperatorToAVS is a paid mutator transaction binding the contract method 0x9926ee7d. +// +// Solidity: function registerOperatorToAVS(address operator, (bytes,bytes32,uint256) operatorSignature) returns() +func (_ContractAVSDirectory *ContractAVSDirectorySession) RegisterOperatorToAVS(operator common.Address, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _ContractAVSDirectory.Contract.RegisterOperatorToAVS(&_ContractAVSDirectory.TransactOpts, operator, operatorSignature) +} + +// RegisterOperatorToAVS is a paid mutator transaction binding the contract method 0x9926ee7d. +// +// Solidity: function registerOperatorToAVS(address operator, (bytes,bytes32,uint256) operatorSignature) returns() +func (_ContractAVSDirectory *ContractAVSDirectoryTransactorSession) RegisterOperatorToAVS(operator common.Address, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _ContractAVSDirectory.Contract.RegisterOperatorToAVS(&_ContractAVSDirectory.TransactOpts, operator, operatorSignature) +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_ContractAVSDirectory *ContractAVSDirectoryTransactor) RenounceOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ContractAVSDirectory.contract.Transact(opts, "renounceOwnership") +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_ContractAVSDirectory *ContractAVSDirectorySession) RenounceOwnership() (*types.Transaction, error) { + return _ContractAVSDirectory.Contract.RenounceOwnership(&_ContractAVSDirectory.TransactOpts) +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_ContractAVSDirectory *ContractAVSDirectoryTransactorSession) RenounceOwnership() (*types.Transaction, error) { + return _ContractAVSDirectory.Contract.RenounceOwnership(&_ContractAVSDirectory.TransactOpts) +} + +// SetPauserRegistry is a paid mutator transaction binding the contract method 0x10d67a2f. +// +// Solidity: function setPauserRegistry(address newPauserRegistry) returns() +func (_ContractAVSDirectory *ContractAVSDirectoryTransactor) SetPauserRegistry(opts *bind.TransactOpts, newPauserRegistry common.Address) (*types.Transaction, error) { + return _ContractAVSDirectory.contract.Transact(opts, "setPauserRegistry", newPauserRegistry) +} + +// SetPauserRegistry is a paid mutator transaction binding the contract method 0x10d67a2f. +// +// Solidity: function setPauserRegistry(address newPauserRegistry) returns() +func (_ContractAVSDirectory *ContractAVSDirectorySession) SetPauserRegistry(newPauserRegistry common.Address) (*types.Transaction, error) { + return _ContractAVSDirectory.Contract.SetPauserRegistry(&_ContractAVSDirectory.TransactOpts, newPauserRegistry) +} + +// SetPauserRegistry is a paid mutator transaction binding the contract method 0x10d67a2f. +// +// Solidity: function setPauserRegistry(address newPauserRegistry) returns() +func (_ContractAVSDirectory *ContractAVSDirectoryTransactorSession) SetPauserRegistry(newPauserRegistry common.Address) (*types.Transaction, error) { + return _ContractAVSDirectory.Contract.SetPauserRegistry(&_ContractAVSDirectory.TransactOpts, newPauserRegistry) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_ContractAVSDirectory *ContractAVSDirectoryTransactor) TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) { + return _ContractAVSDirectory.contract.Transact(opts, "transferOwnership", newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_ContractAVSDirectory *ContractAVSDirectorySession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _ContractAVSDirectory.Contract.TransferOwnership(&_ContractAVSDirectory.TransactOpts, newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_ContractAVSDirectory *ContractAVSDirectoryTransactorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _ContractAVSDirectory.Contract.TransferOwnership(&_ContractAVSDirectory.TransactOpts, newOwner) +} + +// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc. +// +// Solidity: function unpause(uint256 newPausedStatus) returns() +func (_ContractAVSDirectory *ContractAVSDirectoryTransactor) Unpause(opts *bind.TransactOpts, newPausedStatus *big.Int) (*types.Transaction, error) { + return _ContractAVSDirectory.contract.Transact(opts, "unpause", newPausedStatus) +} + +// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc. +// +// Solidity: function unpause(uint256 newPausedStatus) returns() +func (_ContractAVSDirectory *ContractAVSDirectorySession) Unpause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _ContractAVSDirectory.Contract.Unpause(&_ContractAVSDirectory.TransactOpts, newPausedStatus) +} + +// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc. +// +// Solidity: function unpause(uint256 newPausedStatus) returns() +func (_ContractAVSDirectory *ContractAVSDirectoryTransactorSession) Unpause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _ContractAVSDirectory.Contract.Unpause(&_ContractAVSDirectory.TransactOpts, newPausedStatus) +} + +// UpdateAVSMetadataURI is a paid mutator transaction binding the contract method 0xa98fb355. +// +// Solidity: function updateAVSMetadataURI(string metadataURI) returns() +func (_ContractAVSDirectory *ContractAVSDirectoryTransactor) UpdateAVSMetadataURI(opts *bind.TransactOpts, metadataURI string) (*types.Transaction, error) { + return _ContractAVSDirectory.contract.Transact(opts, "updateAVSMetadataURI", metadataURI) +} + +// UpdateAVSMetadataURI is a paid mutator transaction binding the contract method 0xa98fb355. +// +// Solidity: function updateAVSMetadataURI(string metadataURI) returns() +func (_ContractAVSDirectory *ContractAVSDirectorySession) UpdateAVSMetadataURI(metadataURI string) (*types.Transaction, error) { + return _ContractAVSDirectory.Contract.UpdateAVSMetadataURI(&_ContractAVSDirectory.TransactOpts, metadataURI) +} + +// UpdateAVSMetadataURI is a paid mutator transaction binding the contract method 0xa98fb355. +// +// Solidity: function updateAVSMetadataURI(string metadataURI) returns() +func (_ContractAVSDirectory *ContractAVSDirectoryTransactorSession) UpdateAVSMetadataURI(metadataURI string) (*types.Transaction, error) { + return _ContractAVSDirectory.Contract.UpdateAVSMetadataURI(&_ContractAVSDirectory.TransactOpts, metadataURI) +} + +// ContractAVSDirectoryAVSMetadataURIUpdatedIterator is returned from FilterAVSMetadataURIUpdated and is used to iterate over the raw logs and unpacked data for AVSMetadataURIUpdated events raised by the ContractAVSDirectory contract. +type ContractAVSDirectoryAVSMetadataURIUpdatedIterator struct { + Event *ContractAVSDirectoryAVSMetadataURIUpdated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractAVSDirectoryAVSMetadataURIUpdatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractAVSDirectoryAVSMetadataURIUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractAVSDirectoryAVSMetadataURIUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractAVSDirectoryAVSMetadataURIUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractAVSDirectoryAVSMetadataURIUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractAVSDirectoryAVSMetadataURIUpdated represents a AVSMetadataURIUpdated event raised by the ContractAVSDirectory contract. +type ContractAVSDirectoryAVSMetadataURIUpdated struct { + Avs common.Address + MetadataURI string + Raw types.Log // Blockchain specific contextual infos +} + +// FilterAVSMetadataURIUpdated is a free log retrieval operation binding the contract event 0xa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c943713. +// +// Solidity: event AVSMetadataURIUpdated(address indexed avs, string metadataURI) +func (_ContractAVSDirectory *ContractAVSDirectoryFilterer) FilterAVSMetadataURIUpdated(opts *bind.FilterOpts, avs []common.Address) (*ContractAVSDirectoryAVSMetadataURIUpdatedIterator, error) { + + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) + } + + logs, sub, err := _ContractAVSDirectory.contract.FilterLogs(opts, "AVSMetadataURIUpdated", avsRule) + if err != nil { + return nil, err + } + return &ContractAVSDirectoryAVSMetadataURIUpdatedIterator{contract: _ContractAVSDirectory.contract, event: "AVSMetadataURIUpdated", logs: logs, sub: sub}, nil +} + +// WatchAVSMetadataURIUpdated is a free log subscription operation binding the contract event 0xa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c943713. +// +// Solidity: event AVSMetadataURIUpdated(address indexed avs, string metadataURI) +func (_ContractAVSDirectory *ContractAVSDirectoryFilterer) WatchAVSMetadataURIUpdated(opts *bind.WatchOpts, sink chan<- *ContractAVSDirectoryAVSMetadataURIUpdated, avs []common.Address) (event.Subscription, error) { + + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) + } + + logs, sub, err := _ContractAVSDirectory.contract.WatchLogs(opts, "AVSMetadataURIUpdated", avsRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractAVSDirectoryAVSMetadataURIUpdated) + if err := _ContractAVSDirectory.contract.UnpackLog(event, "AVSMetadataURIUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseAVSMetadataURIUpdated is a log parse operation binding the contract event 0xa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c943713. +// +// Solidity: event AVSMetadataURIUpdated(address indexed avs, string metadataURI) +func (_ContractAVSDirectory *ContractAVSDirectoryFilterer) ParseAVSMetadataURIUpdated(log types.Log) (*ContractAVSDirectoryAVSMetadataURIUpdated, error) { + event := new(ContractAVSDirectoryAVSMetadataURIUpdated) + if err := _ContractAVSDirectory.contract.UnpackLog(event, "AVSMetadataURIUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ContractAVSDirectoryInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the ContractAVSDirectory contract. +type ContractAVSDirectoryInitializedIterator struct { + Event *ContractAVSDirectoryInitialized // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractAVSDirectoryInitializedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractAVSDirectoryInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractAVSDirectoryInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractAVSDirectoryInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractAVSDirectoryInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractAVSDirectoryInitialized represents a Initialized event raised by the ContractAVSDirectory contract. +type ContractAVSDirectoryInitialized struct { + Version uint8 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_ContractAVSDirectory *ContractAVSDirectoryFilterer) FilterInitialized(opts *bind.FilterOpts) (*ContractAVSDirectoryInitializedIterator, error) { + + logs, sub, err := _ContractAVSDirectory.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &ContractAVSDirectoryInitializedIterator{contract: _ContractAVSDirectory.contract, event: "Initialized", logs: logs, sub: sub}, nil +} + +// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_ContractAVSDirectory *ContractAVSDirectoryFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *ContractAVSDirectoryInitialized) (event.Subscription, error) { + + logs, sub, err := _ContractAVSDirectory.contract.WatchLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractAVSDirectoryInitialized) + if err := _ContractAVSDirectory.contract.UnpackLog(event, "Initialized", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_ContractAVSDirectory *ContractAVSDirectoryFilterer) ParseInitialized(log types.Log) (*ContractAVSDirectoryInitialized, error) { + event := new(ContractAVSDirectoryInitialized) + if err := _ContractAVSDirectory.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ContractAVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator is returned from FilterOperatorAVSRegistrationStatusUpdated and is used to iterate over the raw logs and unpacked data for OperatorAVSRegistrationStatusUpdated events raised by the ContractAVSDirectory contract. +type ContractAVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator struct { + Event *ContractAVSDirectoryOperatorAVSRegistrationStatusUpdated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractAVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractAVSDirectoryOperatorAVSRegistrationStatusUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractAVSDirectoryOperatorAVSRegistrationStatusUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractAVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractAVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractAVSDirectoryOperatorAVSRegistrationStatusUpdated represents a OperatorAVSRegistrationStatusUpdated event raised by the ContractAVSDirectory contract. +type ContractAVSDirectoryOperatorAVSRegistrationStatusUpdated struct { + Operator common.Address + Avs common.Address + Status uint8 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOperatorAVSRegistrationStatusUpdated is a free log retrieval operation binding the contract event 0xf0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41. +// +// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, uint8 status) +func (_ContractAVSDirectory *ContractAVSDirectoryFilterer) FilterOperatorAVSRegistrationStatusUpdated(opts *bind.FilterOpts, operator []common.Address, avs []common.Address) (*ContractAVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) + } + + logs, sub, err := _ContractAVSDirectory.contract.FilterLogs(opts, "OperatorAVSRegistrationStatusUpdated", operatorRule, avsRule) + if err != nil { + return nil, err + } + return &ContractAVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator{contract: _ContractAVSDirectory.contract, event: "OperatorAVSRegistrationStatusUpdated", logs: logs, sub: sub}, nil +} + +// WatchOperatorAVSRegistrationStatusUpdated is a free log subscription operation binding the contract event 0xf0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41. +// +// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, uint8 status) +func (_ContractAVSDirectory *ContractAVSDirectoryFilterer) WatchOperatorAVSRegistrationStatusUpdated(opts *bind.WatchOpts, sink chan<- *ContractAVSDirectoryOperatorAVSRegistrationStatusUpdated, operator []common.Address, avs []common.Address) (event.Subscription, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) + } + + logs, sub, err := _ContractAVSDirectory.contract.WatchLogs(opts, "OperatorAVSRegistrationStatusUpdated", operatorRule, avsRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractAVSDirectoryOperatorAVSRegistrationStatusUpdated) + if err := _ContractAVSDirectory.contract.UnpackLog(event, "OperatorAVSRegistrationStatusUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseOperatorAVSRegistrationStatusUpdated is a log parse operation binding the contract event 0xf0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41. +// +// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, uint8 status) +func (_ContractAVSDirectory *ContractAVSDirectoryFilterer) ParseOperatorAVSRegistrationStatusUpdated(log types.Log) (*ContractAVSDirectoryOperatorAVSRegistrationStatusUpdated, error) { + event := new(ContractAVSDirectoryOperatorAVSRegistrationStatusUpdated) + if err := _ContractAVSDirectory.contract.UnpackLog(event, "OperatorAVSRegistrationStatusUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ContractAVSDirectoryOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the ContractAVSDirectory contract. +type ContractAVSDirectoryOwnershipTransferredIterator struct { + Event *ContractAVSDirectoryOwnershipTransferred // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractAVSDirectoryOwnershipTransferredIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractAVSDirectoryOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractAVSDirectoryOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractAVSDirectoryOwnershipTransferredIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractAVSDirectoryOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractAVSDirectoryOwnershipTransferred represents a OwnershipTransferred event raised by the ContractAVSDirectory contract. +type ContractAVSDirectoryOwnershipTransferred struct { + PreviousOwner common.Address + NewOwner common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOwnershipTransferred is a free log retrieval operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_ContractAVSDirectory *ContractAVSDirectoryFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*ContractAVSDirectoryOwnershipTransferredIterator, error) { + + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + } + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) + } + + logs, sub, err := _ContractAVSDirectory.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return &ContractAVSDirectoryOwnershipTransferredIterator{contract: _ContractAVSDirectory.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +// WatchOwnershipTransferred is a free log subscription operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_ContractAVSDirectory *ContractAVSDirectoryFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ContractAVSDirectoryOwnershipTransferred, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { + + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + } + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) + } + + logs, sub, err := _ContractAVSDirectory.contract.WatchLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractAVSDirectoryOwnershipTransferred) + if err := _ContractAVSDirectory.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseOwnershipTransferred is a log parse operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_ContractAVSDirectory *ContractAVSDirectoryFilterer) ParseOwnershipTransferred(log types.Log) (*ContractAVSDirectoryOwnershipTransferred, error) { + event := new(ContractAVSDirectoryOwnershipTransferred) + if err := _ContractAVSDirectory.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ContractAVSDirectoryPausedIterator is returned from FilterPaused and is used to iterate over the raw logs and unpacked data for Paused events raised by the ContractAVSDirectory contract. +type ContractAVSDirectoryPausedIterator struct { + Event *ContractAVSDirectoryPaused // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractAVSDirectoryPausedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractAVSDirectoryPaused) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractAVSDirectoryPaused) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractAVSDirectoryPausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractAVSDirectoryPausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractAVSDirectoryPaused represents a Paused event raised by the ContractAVSDirectory contract. +type ContractAVSDirectoryPaused struct { + Account common.Address + NewPausedStatus *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterPaused is a free log retrieval operation binding the contract event 0xab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d. +// +// Solidity: event Paused(address indexed account, uint256 newPausedStatus) +func (_ContractAVSDirectory *ContractAVSDirectoryFilterer) FilterPaused(opts *bind.FilterOpts, account []common.Address) (*ContractAVSDirectoryPausedIterator, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _ContractAVSDirectory.contract.FilterLogs(opts, "Paused", accountRule) + if err != nil { + return nil, err + } + return &ContractAVSDirectoryPausedIterator{contract: _ContractAVSDirectory.contract, event: "Paused", logs: logs, sub: sub}, nil +} + +// WatchPaused is a free log subscription operation binding the contract event 0xab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d. +// +// Solidity: event Paused(address indexed account, uint256 newPausedStatus) +func (_ContractAVSDirectory *ContractAVSDirectoryFilterer) WatchPaused(opts *bind.WatchOpts, sink chan<- *ContractAVSDirectoryPaused, account []common.Address) (event.Subscription, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _ContractAVSDirectory.contract.WatchLogs(opts, "Paused", accountRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractAVSDirectoryPaused) + if err := _ContractAVSDirectory.contract.UnpackLog(event, "Paused", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParsePaused is a log parse operation binding the contract event 0xab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d. +// +// Solidity: event Paused(address indexed account, uint256 newPausedStatus) +func (_ContractAVSDirectory *ContractAVSDirectoryFilterer) ParsePaused(log types.Log) (*ContractAVSDirectoryPaused, error) { + event := new(ContractAVSDirectoryPaused) + if err := _ContractAVSDirectory.contract.UnpackLog(event, "Paused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ContractAVSDirectoryPauserRegistrySetIterator is returned from FilterPauserRegistrySet and is used to iterate over the raw logs and unpacked data for PauserRegistrySet events raised by the ContractAVSDirectory contract. +type ContractAVSDirectoryPauserRegistrySetIterator struct { + Event *ContractAVSDirectoryPauserRegistrySet // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractAVSDirectoryPauserRegistrySetIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractAVSDirectoryPauserRegistrySet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractAVSDirectoryPauserRegistrySet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractAVSDirectoryPauserRegistrySetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractAVSDirectoryPauserRegistrySetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractAVSDirectoryPauserRegistrySet represents a PauserRegistrySet event raised by the ContractAVSDirectory contract. +type ContractAVSDirectoryPauserRegistrySet struct { + PauserRegistry common.Address + NewPauserRegistry common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterPauserRegistrySet is a free log retrieval operation binding the contract event 0x6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6. +// +// Solidity: event PauserRegistrySet(address pauserRegistry, address newPauserRegistry) +func (_ContractAVSDirectory *ContractAVSDirectoryFilterer) FilterPauserRegistrySet(opts *bind.FilterOpts) (*ContractAVSDirectoryPauserRegistrySetIterator, error) { + + logs, sub, err := _ContractAVSDirectory.contract.FilterLogs(opts, "PauserRegistrySet") + if err != nil { + return nil, err + } + return &ContractAVSDirectoryPauserRegistrySetIterator{contract: _ContractAVSDirectory.contract, event: "PauserRegistrySet", logs: logs, sub: sub}, nil +} + +// WatchPauserRegistrySet is a free log subscription operation binding the contract event 0x6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6. +// +// Solidity: event PauserRegistrySet(address pauserRegistry, address newPauserRegistry) +func (_ContractAVSDirectory *ContractAVSDirectoryFilterer) WatchPauserRegistrySet(opts *bind.WatchOpts, sink chan<- *ContractAVSDirectoryPauserRegistrySet) (event.Subscription, error) { + + logs, sub, err := _ContractAVSDirectory.contract.WatchLogs(opts, "PauserRegistrySet") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractAVSDirectoryPauserRegistrySet) + if err := _ContractAVSDirectory.contract.UnpackLog(event, "PauserRegistrySet", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParsePauserRegistrySet is a log parse operation binding the contract event 0x6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6. +// +// Solidity: event PauserRegistrySet(address pauserRegistry, address newPauserRegistry) +func (_ContractAVSDirectory *ContractAVSDirectoryFilterer) ParsePauserRegistrySet(log types.Log) (*ContractAVSDirectoryPauserRegistrySet, error) { + event := new(ContractAVSDirectoryPauserRegistrySet) + if err := _ContractAVSDirectory.contract.UnpackLog(event, "PauserRegistrySet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ContractAVSDirectoryUnpausedIterator is returned from FilterUnpaused and is used to iterate over the raw logs and unpacked data for Unpaused events raised by the ContractAVSDirectory contract. +type ContractAVSDirectoryUnpausedIterator struct { + Event *ContractAVSDirectoryUnpaused // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractAVSDirectoryUnpausedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractAVSDirectoryUnpaused) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractAVSDirectoryUnpaused) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractAVSDirectoryUnpausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractAVSDirectoryUnpausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractAVSDirectoryUnpaused represents a Unpaused event raised by the ContractAVSDirectory contract. +type ContractAVSDirectoryUnpaused struct { + Account common.Address + NewPausedStatus *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUnpaused is a free log retrieval operation binding the contract event 0x3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c. +// +// Solidity: event Unpaused(address indexed account, uint256 newPausedStatus) +func (_ContractAVSDirectory *ContractAVSDirectoryFilterer) FilterUnpaused(opts *bind.FilterOpts, account []common.Address) (*ContractAVSDirectoryUnpausedIterator, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _ContractAVSDirectory.contract.FilterLogs(opts, "Unpaused", accountRule) + if err != nil { + return nil, err + } + return &ContractAVSDirectoryUnpausedIterator{contract: _ContractAVSDirectory.contract, event: "Unpaused", logs: logs, sub: sub}, nil +} + +// WatchUnpaused is a free log subscription operation binding the contract event 0x3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c. +// +// Solidity: event Unpaused(address indexed account, uint256 newPausedStatus) +func (_ContractAVSDirectory *ContractAVSDirectoryFilterer) WatchUnpaused(opts *bind.WatchOpts, sink chan<- *ContractAVSDirectoryUnpaused, account []common.Address) (event.Subscription, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _ContractAVSDirectory.contract.WatchLogs(opts, "Unpaused", accountRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractAVSDirectoryUnpaused) + if err := _ContractAVSDirectory.contract.UnpackLog(event, "Unpaused", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseUnpaused is a log parse operation binding the contract event 0x3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c. +// +// Solidity: event Unpaused(address indexed account, uint256 newPausedStatus) +func (_ContractAVSDirectory *ContractAVSDirectoryFilterer) ParseUnpaused(log types.Log) (*ContractAVSDirectoryUnpaused, error) { + event := new(ContractAVSDirectoryUnpaused) + if err := _ContractAVSDirectory.contract.UnpackLog(event, "Unpaused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/contracts/bindings/BLSApkRegistry/binding.go b/contracts/bindings/BLSApkRegistry/binding.go new file mode 100644 index 0000000000..0153b309d9 --- /dev/null +++ b/contracts/bindings/BLSApkRegistry/binding.go @@ -0,0 +1,1345 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package contractBLSApkRegistry + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// BN254G1Point is an auto generated low-level Go binding around an user-defined struct. +type BN254G1Point struct { + X *big.Int + Y *big.Int +} + +// BN254G2Point is an auto generated low-level Go binding around an user-defined struct. +type BN254G2Point struct { + X [2]*big.Int + Y [2]*big.Int +} + +// IBLSApkRegistryApkUpdate is an auto generated low-level Go binding around an user-defined struct. +type IBLSApkRegistryApkUpdate struct { + ApkHash [24]byte + UpdateBlockNumber uint32 + NextUpdateBlockNumber uint32 +} + +// IBLSApkRegistryPubkeyRegistrationParams is an auto generated low-level Go binding around an user-defined struct. +type IBLSApkRegistryPubkeyRegistrationParams struct { + PubkeyRegistrationSignature BN254G1Point + PubkeyG1 BN254G1Point + PubkeyG2 BN254G2Point +} + +// ContractBLSApkRegistryMetaData contains all meta data concerning the ContractBLSApkRegistry contract. +var ContractBLSApkRegistryMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_registryCoordinator\",\"type\":\"address\",\"internalType\":\"contractIRegistryCoordinator\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"apkHistory\",\"inputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"apkHash\",\"type\":\"bytes24\",\"internalType\":\"bytes24\"},{\"name\":\"updateBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"nextUpdateBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"currentApk\",\"inputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deregisterOperator\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getApk\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getApkHashAtBlockNumberAndIndex\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"blockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes24\",\"internalType\":\"bytes24\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getApkHistoryLength\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getApkIndicesAtBlockNumber\",\"inputs\":[{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"blockNumber\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getApkUpdateAtIndex\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIBLSApkRegistry.ApkUpdate\",\"components\":[{\"name\":\"apkHash\",\"type\":\"bytes24\",\"internalType\":\"bytes24\"},{\"name\":\"updateBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"nextUpdateBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorFromPubkeyHash\",\"inputs\":[{\"name\":\"pubkeyHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorId\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRegisteredPubkey\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initializeQuorum\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"operatorToPubkey\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorToPubkeyHash\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pubkeyHashToOperator\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registerBLSPublicKey\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"params\",\"type\":\"tuple\",\"internalType\":\"structIBLSApkRegistry.PubkeyRegistrationParams\",\"components\":[{\"name\":\"pubkeyRegistrationSignature\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"pubkeyG1\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"pubkeyG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]}]},{\"name\":\"pubkeyRegistrationMessageHash\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[{\"name\":\"operatorId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registerOperator\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registryCoordinator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"NewPubkeyRegistration\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"pubkeyG1\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"pubkeyG2\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorAddedToQuorums\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorRemovedFromQuorums\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false}]", + Bin: "0x60a06040523480156200001157600080fd5b506040516200213738038062002137833981016040819052620000349162000116565b6001600160a01b038116608052806200004c62000054565b505062000148565b600054610100900460ff1615620000c15760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000114576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6000602082840312156200012957600080fd5b81516001600160a01b03811681146200014157600080fd5b9392505050565b608051611fb7620001806000396000818161030f01528181610466015281816105bf015281816109a501526110420152611fb76000f3fe608060405234801561001057600080fd5b50600436106101155760003560e01c80636d14a987116100a2578063bf79ce5811610071578063bf79ce58146103cc578063d5254a8c146103df578063de29fac0146103ff578063e8bb9ae61461041f578063f4e24fe51461044857600080fd5b80636d14a9871461030a5780637916cea6146103315780637ff81a8714610372578063a3db80e2146103a557600080fd5b80633fb27952116100e95780633fb27952146101df57806347b314e8146101f25780635f61a88414610233578063605747d51461028f57806368bccaac146102dd57600080fd5b8062a1f4cb1461011a57806313542a4e1461015b57806326d941f214610192578063377ed99d146101a7575b600080fd5b610141610128366004611905565b6003602052600090815260409020805460019091015482565b604080519283526020830191909152015b60405180910390f35b610184610169366004611905565b6001600160a01b031660009081526001602052604090205490565b604051908152602001610152565b6101a56101a0366004611938565b61045b565b005b6101ca6101b5366004611938565b60ff1660009081526004602052604090205490565b60405163ffffffff9091168152602001610152565b6101a56101ed3660046119c3565b6105b4565b61021b610200366004611a69565b6000908152600260205260409020546001600160a01b031690565b6040516001600160a01b039091168152602001610152565b610282610241366004611938565b60408051808201909152600080825260208201525060ff16600090815260056020908152604091829020825180840190935280548352600101549082015290565b6040516101529190611a82565b6102a261029d366004611a99565b610652565b60408051825167ffffffffffffffff1916815260208084015163ffffffff908116918301919091529282015190921690820152606001610152565b6102f06102eb366004611ac3565b6106e5565b60405167ffffffffffffffff199091168152602001610152565b61021b7f000000000000000000000000000000000000000000000000000000000000000081565b61034461033f366004611a99565b610880565b6040805167ffffffffffffffff19909416845263ffffffff9283166020850152911690820152606001610152565b610385610380366004611905565b6108cb565b604080518351815260209384015193810193909352820152606001610152565b6101416103b3366004611938565b6005602052600090815260409020805460019091015482565b6101846103da366004611b0b565b610998565b6103f26103ed366004611b68565b610dec565b6040516101529190611be0565b61018461040d366004611905565b60016020526000908152604090205481565b61021b61042d366004611a69565b6002602052600090815260409020546001600160a01b031681565b6101a56104563660046119c3565b611037565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104ac5760405162461bcd60e51b81526004016104a390611c2a565b60405180910390fd5b60ff81166000908152600460205260409020541561052b5760405162461bcd60e51b815260206004820152603660248201527f424c5341706b52656769737472792e696e697469616c697a6551756f72756d3a6044820152752071756f72756d20616c72656164792065786973747360501b60648201526084016104a3565b60ff166000908152600460209081526040808320815160608101835284815263ffffffff4381168286019081528285018781528454600181018655948852959096209151919092018054955194518316600160e01b026001600160e01b0395909316600160c01b026001600160e01b03199096169190931c179390931791909116919091179055565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105fc5760405162461bcd60e51b81526004016104a390611c2a565b6000610607836108cb565b50905061061482826110d0565b7f5358c5b42179178c8fc757734ac2a3198f9071c765ee0d8389211525f50052468383604051610645929190611c9e565b60405180910390a1505050565b604080516060810182526000808252602080830182905282840182905260ff86168252600490529190912080548390811061068f5761068f611d03565b600091825260209182902060408051606081018252919092015467ffffffffffffffff1981841b16825263ffffffff600160c01b8204811694830194909452600160e01b90049092169082015290505b92915050565b60ff8316600090815260046020526040812080548291908490811061070c5761070c611d03565b600091825260209182902060408051606081018252919092015467ffffffffffffffff1981841b16825263ffffffff600160c01b82048116948301859052600160e01b9091048116928201929092529250851610156107d35760405162461bcd60e51b815260206004820152603e60248201527f424c5341706b52656769737472792e5f76616c696461746541706b486173684160448201527f74426c6f636b4e756d6265723a20696e64657820746f6f20726563656e74000060648201526084016104a3565b604081015163ffffffff1615806107f95750806040015163ffffffff168463ffffffff16105b6108775760405162461bcd60e51b815260206004820152604360248201527f424c5341706b52656769737472792e5f76616c696461746541706b486173684160448201527f74426c6f636b4e756d6265723a206e6f74206c61746573742061706b2075706460648201526261746560e81b608482015260a4016104a3565b51949350505050565b6004602052816000526040600020818154811061089c57600080fd5b600091825260209091200154604081901b925063ffffffff600160c01b820481169250600160e01b9091041683565b60408051808201909152600080825260208201526001600160a01b03821660008181526003602090815260408083208151808301835281548152600191820154818501529484529091528120549091908061098e5760405162461bcd60e51b815260206004820152603e60248201527f424c5341706b52656769737472792e676574526567697374657265645075626b60448201527f65793a206f70657261746f72206973206e6f742072656769737465726564000060648201526084016104a3565b9094909350915050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109e25760405162461bcd60e51b81526004016104a390611c2a565b6000610a106109f936869003860160408701611d19565b805160009081526020918201519091526040902090565b90507fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5811415610a98576040805162461bcd60e51b8152602060048201526024810191909152600080516020611f6283398151915260448201527f4b65793a2063616e6e6f74207265676973746572207a65726f207075626b657960648201526084016104a3565b6001600160a01b03851660009081526001602052604090205415610b225760405162461bcd60e51b81526020600482015260476024820152600080516020611f6283398151915260448201527f4b65793a206f70657261746f7220616c72656164792072656769737465726564606482015266207075626b657960c81b608482015260a4016104a3565b6000818152600260205260409020546001600160a01b031615610ba65760405162461bcd60e51b81526020600482015260426024820152600080516020611f6283398151915260448201527f4b65793a207075626c6963206b657920616c7265616479207265676973746572606482015261195960f21b608482015260a4016104a3565b604080516000917f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000191610bff918835916020808b0135928b01359160608c01359160808d019160c08e01918d35918e8201359101611d4b565b6040516020818303038152906040528051906020012060001c610c229190611d96565b9050610cbc610c5b610c4683610c40368a90038a0160408b01611d19565b9061131b565b610c5536899003890189611d19565b906113b2565b610c63611446565b610ca5610c9685610c40604080518082018252600080825260209182015281518083019092526001825260029082015290565b610c55368a90038a018a611d19565b610cb7368a90038a0160808b01611e08565b611506565b610d575760405162461bcd60e51b815260206004820152606c6024820152600080516020611f6283398151915260448201527f4b65793a2065697468657220746865204731207369676e61747572652069732060648201527f77726f6e672c206f7220473120616e642047322070726976617465206b65792060848201526b0c8de40dcdee840dac2e8c6d60a31b60a482015260c4016104a3565b6001600160a01b03861660008181526003602090815260408083208982018035825560608b013560019283015590835281842087905586845260029092529182902080546001600160a01b0319168417905590517fe3fb6613af2e8930cf85d47fcf6db10192224a64c6cbe8023e0eee1ba382804191610ddb9160808a0190611e65565b60405180910390a250949350505050565b606060008367ffffffffffffffff811115610e0957610e09611953565b604051908082528060200260200182016040528015610e32578160200160208202803683370190505b50905060005b8481101561102e576000868683818110610e5457610e54611d03565b919091013560f81c600081815260046020526040902054909250905063ffffffff81161580610ebd575060ff821660009081526004602052604081208054909190610ea157610ea1611d03565b600091825260209091200154600160c01b900463ffffffff1686105b15610f4a5760405162461bcd60e51b815260206004820152605160248201527f424c5341706b52656769737472792e67657441706b496e64696365734174426c60448201527f6f636b4e756d6265723a20626c6f636b4e756d626572206973206265666f7265606482015270207468652066697273742075706461746560781b608482015260a4016104a3565b60005b8163ffffffff168163ffffffff1610156110185760ff8316600090815260046020526040902087906001610f818486611eaf565b610f8b9190611eaf565b63ffffffff1681548110610fa157610fa1611d03565b600091825260209091200154600160c01b900463ffffffff1611611006576001610fcb8284611eaf565b610fd59190611eaf565b858581518110610fe757610fe7611d03565b602002602001019063ffffffff16908163ffffffff1681525050611018565b8061101081611ed4565b915050610f4d565b505050808061102690611ef8565b915050610e38565b50949350505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461107f5760405162461bcd60e51b81526004016104a390611c2a565b600061108a836108cb565b50905061109f8261109a83611773565b6110d0565b7f14a5172b312e9d2c22b8468f9c70ec2caa9de934fe380734fbc6f3beff2b14ba8383604051610645929190611c9e565b604080518082019091526000808252602082015260005b835181101561131557600084828151811061110457611104611d03565b0160209081015160f81c60008181526004909252604090912054909150806111945760405162461bcd60e51b815260206004820152603d60248201527f424c5341706b52656769737472792e5f70726f6365737351756f72756d41706b60448201527f5570646174653a2071756f72756d20646f6573206e6f7420657869737400000060648201526084016104a3565b60ff821660009081526005602090815260409182902082518084019093528054835260010154908201526111c890866113b2565b60ff831660008181526005602090815260408083208551808255868401805160019384015590855251835281842094845260049092528220939750919290916112119085611f13565b8154811061122157611221611d03565b600091825260209091200180549091504363ffffffff908116600160c01b9092041614156112625780546001600160c01b031916604083901c1781556112fe565b805463ffffffff438116600160e01b8181026001600160e01b0394851617855560ff88166000908152600460209081526040808320815160608101835267ffffffffffffffff198b16815280840196875280830185815282546001810184559286529390942093519301805495519251871690940291909516600160c01b026001600160e01b0319949094169190941c17919091179092161790555b50505050808061130d90611ef8565b9150506110e7565b50505050565b6040805180820190915260008082526020820152611337611832565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa905080801561136a5761136c565bfe5b50806113aa5760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b60448201526064016104a3565b505092915050565b60408051808201909152600080825260208201526113ce611850565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa905080801561136a5750806113aa5760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b60448201526064016104a3565b61144e61186e565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b604080518082018252858152602080820185905282518084019093528583528201839052600091611535611893565b60005b60028110156116fa57600061154e826006611f2a565b905084826002811061156257611562611d03565b60200201515183611574836000611f49565b600c811061158457611584611d03565b602002015284826002811061159b5761159b611d03565b602002015160200151838260016115b29190611f49565b600c81106115c2576115c2611d03565b60200201528382600281106115d9576115d9611d03565b60200201515151836115ec836002611f49565b600c81106115fc576115fc611d03565b602002015283826002811061161357611613611d03565b602002015151600160200201518361162c836003611f49565b600c811061163c5761163c611d03565b602002015283826002811061165357611653611d03565b60200201516020015160006002811061166e5761166e611d03565b60200201518361167f836004611f49565b600c811061168f5761168f611d03565b60200201528382600281106116a6576116a6611d03565b6020020151602001516001600281106116c1576116c1611d03565b6020020151836116d2836005611f49565b600c81106116e2576116e2611d03565b602002015250806116f281611ef8565b915050611538565b506117036118b2565b60006020826101808560086107d05a03fa905080801561136a5750806117635760405162461bcd60e51b81526020600482015260156024820152741c185a5c9a5b99cb5bdc18dbd9194b59985a5b1959605a1b60448201526064016104a3565b5051151598975050505050505050565b6040805180820190915260008082526020820152815115801561179857506020820151155b156117b6575050604080518082019091526000808252602082015290565b6040518060400160405280836000015181526020017f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4784602001516117fb9190611d96565b611825907f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47611f13565b905292915050565b919050565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b60405180604001604052806118816118d0565b815260200161188e6118d0565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b80356001600160a01b038116811461182d57600080fd5b60006020828403121561191757600080fd5b611920826118ee565b9392505050565b803560ff8116811461182d57600080fd5b60006020828403121561194a57600080fd5b61192082611927565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561198c5761198c611953565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156119bb576119bb611953565b604052919050565b600080604083850312156119d657600080fd5b6119df836118ee565b915060208084013567ffffffffffffffff808211156119fd57600080fd5b818601915086601f830112611a1157600080fd5b813581811115611a2357611a23611953565b611a35601f8201601f19168501611992565b91508082528784828501011115611a4b57600080fd5b80848401858401376000848284010152508093505050509250929050565b600060208284031215611a7b57600080fd5b5035919050565b8151815260208083015190820152604081016106df565b60008060408385031215611aac57600080fd5b611ab583611927565b946020939093013593505050565b600080600060608486031215611ad857600080fd5b611ae184611927565b9250602084013563ffffffff81168114611afa57600080fd5b929592945050506040919091013590565b6000806000838503610160811215611b2257600080fd5b611b2b856118ee565b9350610100601f1982011215611b4057600080fd5b602085019250604061011f1982011215611b5957600080fd5b50610120840190509250925092565b600080600060408486031215611b7d57600080fd5b833567ffffffffffffffff80821115611b9557600080fd5b818601915086601f830112611ba957600080fd5b813581811115611bb857600080fd5b876020828501011115611bca57600080fd5b6020928301989097509590910135949350505050565b6020808252825182820181905260009190848201906040850190845b81811015611c1e57835163ffffffff1683529284019291840191600101611bfc565b50909695505050505050565b6020808252604e908201527f424c5341706b52656769737472792e6f6e6c795265676973747279436f6f726460408201527f696e61746f723a2063616c6c6572206973206e6f74207468652072656769737460608201526d393c9031b7b7b93234b730ba37b960911b608082015260a00190565b60018060a01b038316815260006020604081840152835180604085015260005b81811015611cda57858101830151858201606001528201611cbe565b81811115611cec576000606083870101525b50601f01601f191692909201606001949350505050565b634e487b7160e01b600052603260045260246000fd5b600060408284031215611d2b57600080fd5b611d33611969565b82358152602083013560208201528091505092915050565b8881528760208201528660408201528560608201526040856080830137600060c082016000815260408682375050610100810192909252610120820152610140019695505050505050565b600082611db357634e487b7160e01b600052601260045260246000fd5b500690565b600082601f830112611dc957600080fd5b611dd1611969565b806040840185811115611de357600080fd5b845b81811015611dfd578035845260209384019301611de5565b509095945050505050565b600060808284031215611e1a57600080fd5b6040516040810181811067ffffffffffffffff82111715611e3d57611e3d611953565b604052611e4a8484611db8565b8152611e598460408501611db8565b60208201529392505050565b823581526020808401359082015260c081016040838184013760808201600081526040808501823750600081529392505050565b634e487b7160e01b600052601160045260246000fd5b600063ffffffff83811690831681811015611ecc57611ecc611e99565b039392505050565b600063ffffffff80831681811415611eee57611eee611e99565b6001019392505050565b6000600019821415611f0c57611f0c611e99565b5060010190565b600082821015611f2557611f25611e99565b500390565b6000816000190483118215151615611f4457611f44611e99565b500290565b60008219821115611f5c57611f5c611e99565b50019056fe424c5341706b52656769737472792e7265676973746572424c535075626c6963a26469706673582212200d2d3b97253df46c83338dadf3c1445b357beb3d7a616c75a1dca881a866712e64736f6c634300080c0033", +} + +// ContractBLSApkRegistryABI is the input ABI used to generate the binding from. +// Deprecated: Use ContractBLSApkRegistryMetaData.ABI instead. +var ContractBLSApkRegistryABI = ContractBLSApkRegistryMetaData.ABI + +// ContractBLSApkRegistryBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use ContractBLSApkRegistryMetaData.Bin instead. +var ContractBLSApkRegistryBin = ContractBLSApkRegistryMetaData.Bin + +// DeployContractBLSApkRegistry deploys a new Ethereum contract, binding an instance of ContractBLSApkRegistry to it. +func DeployContractBLSApkRegistry(auth *bind.TransactOpts, backend bind.ContractBackend, _registryCoordinator common.Address) (common.Address, *types.Transaction, *ContractBLSApkRegistry, error) { + parsed, err := ContractBLSApkRegistryMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ContractBLSApkRegistryBin), backend, _registryCoordinator) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &ContractBLSApkRegistry{ContractBLSApkRegistryCaller: ContractBLSApkRegistryCaller{contract: contract}, ContractBLSApkRegistryTransactor: ContractBLSApkRegistryTransactor{contract: contract}, ContractBLSApkRegistryFilterer: ContractBLSApkRegistryFilterer{contract: contract}}, nil +} + +// ContractBLSApkRegistry is an auto generated Go binding around an Ethereum contract. +type ContractBLSApkRegistry struct { + ContractBLSApkRegistryCaller // Read-only binding to the contract + ContractBLSApkRegistryTransactor // Write-only binding to the contract + ContractBLSApkRegistryFilterer // Log filterer for contract events +} + +// ContractBLSApkRegistryCaller is an auto generated read-only Go binding around an Ethereum contract. +type ContractBLSApkRegistryCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ContractBLSApkRegistryTransactor is an auto generated write-only Go binding around an Ethereum contract. +type ContractBLSApkRegistryTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ContractBLSApkRegistryFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type ContractBLSApkRegistryFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ContractBLSApkRegistrySession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type ContractBLSApkRegistrySession struct { + Contract *ContractBLSApkRegistry // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ContractBLSApkRegistryCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type ContractBLSApkRegistryCallerSession struct { + Contract *ContractBLSApkRegistryCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// ContractBLSApkRegistryTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type ContractBLSApkRegistryTransactorSession struct { + Contract *ContractBLSApkRegistryTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ContractBLSApkRegistryRaw is an auto generated low-level Go binding around an Ethereum contract. +type ContractBLSApkRegistryRaw struct { + Contract *ContractBLSApkRegistry // Generic contract binding to access the raw methods on +} + +// ContractBLSApkRegistryCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type ContractBLSApkRegistryCallerRaw struct { + Contract *ContractBLSApkRegistryCaller // Generic read-only contract binding to access the raw methods on +} + +// ContractBLSApkRegistryTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type ContractBLSApkRegistryTransactorRaw struct { + Contract *ContractBLSApkRegistryTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewContractBLSApkRegistry creates a new instance of ContractBLSApkRegistry, bound to a specific deployed contract. +func NewContractBLSApkRegistry(address common.Address, backend bind.ContractBackend) (*ContractBLSApkRegistry, error) { + contract, err := bindContractBLSApkRegistry(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ContractBLSApkRegistry{ContractBLSApkRegistryCaller: ContractBLSApkRegistryCaller{contract: contract}, ContractBLSApkRegistryTransactor: ContractBLSApkRegistryTransactor{contract: contract}, ContractBLSApkRegistryFilterer: ContractBLSApkRegistryFilterer{contract: contract}}, nil +} + +// NewContractBLSApkRegistryCaller creates a new read-only instance of ContractBLSApkRegistry, bound to a specific deployed contract. +func NewContractBLSApkRegistryCaller(address common.Address, caller bind.ContractCaller) (*ContractBLSApkRegistryCaller, error) { + contract, err := bindContractBLSApkRegistry(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ContractBLSApkRegistryCaller{contract: contract}, nil +} + +// NewContractBLSApkRegistryTransactor creates a new write-only instance of ContractBLSApkRegistry, bound to a specific deployed contract. +func NewContractBLSApkRegistryTransactor(address common.Address, transactor bind.ContractTransactor) (*ContractBLSApkRegistryTransactor, error) { + contract, err := bindContractBLSApkRegistry(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ContractBLSApkRegistryTransactor{contract: contract}, nil +} + +// NewContractBLSApkRegistryFilterer creates a new log filterer instance of ContractBLSApkRegistry, bound to a specific deployed contract. +func NewContractBLSApkRegistryFilterer(address common.Address, filterer bind.ContractFilterer) (*ContractBLSApkRegistryFilterer, error) { + contract, err := bindContractBLSApkRegistry(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ContractBLSApkRegistryFilterer{contract: contract}, nil +} + +// bindContractBLSApkRegistry binds a generic wrapper to an already deployed contract. +func bindContractBLSApkRegistry(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ContractBLSApkRegistryMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ContractBLSApkRegistry *ContractBLSApkRegistryRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ContractBLSApkRegistry.Contract.ContractBLSApkRegistryCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ContractBLSApkRegistry *ContractBLSApkRegistryRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ContractBLSApkRegistry.Contract.ContractBLSApkRegistryTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ContractBLSApkRegistry *ContractBLSApkRegistryRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ContractBLSApkRegistry.Contract.ContractBLSApkRegistryTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ContractBLSApkRegistry *ContractBLSApkRegistryCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ContractBLSApkRegistry.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ContractBLSApkRegistry *ContractBLSApkRegistryTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ContractBLSApkRegistry.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ContractBLSApkRegistry *ContractBLSApkRegistryTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ContractBLSApkRegistry.Contract.contract.Transact(opts, method, params...) +} + +// ApkHistory is a free data retrieval call binding the contract method 0x7916cea6. +// +// Solidity: function apkHistory(uint8 , uint256 ) view returns(bytes24 apkHash, uint32 updateBlockNumber, uint32 nextUpdateBlockNumber) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryCaller) ApkHistory(opts *bind.CallOpts, arg0 uint8, arg1 *big.Int) (struct { + ApkHash [24]byte + UpdateBlockNumber uint32 + NextUpdateBlockNumber uint32 +}, error) { + var out []interface{} + err := _ContractBLSApkRegistry.contract.Call(opts, &out, "apkHistory", arg0, arg1) + + outstruct := new(struct { + ApkHash [24]byte + UpdateBlockNumber uint32 + NextUpdateBlockNumber uint32 + }) + if err != nil { + return *outstruct, err + } + + outstruct.ApkHash = *abi.ConvertType(out[0], new([24]byte)).(*[24]byte) + outstruct.UpdateBlockNumber = *abi.ConvertType(out[1], new(uint32)).(*uint32) + outstruct.NextUpdateBlockNumber = *abi.ConvertType(out[2], new(uint32)).(*uint32) + + return *outstruct, err + +} + +// ApkHistory is a free data retrieval call binding the contract method 0x7916cea6. +// +// Solidity: function apkHistory(uint8 , uint256 ) view returns(bytes24 apkHash, uint32 updateBlockNumber, uint32 nextUpdateBlockNumber) +func (_ContractBLSApkRegistry *ContractBLSApkRegistrySession) ApkHistory(arg0 uint8, arg1 *big.Int) (struct { + ApkHash [24]byte + UpdateBlockNumber uint32 + NextUpdateBlockNumber uint32 +}, error) { + return _ContractBLSApkRegistry.Contract.ApkHistory(&_ContractBLSApkRegistry.CallOpts, arg0, arg1) +} + +// ApkHistory is a free data retrieval call binding the contract method 0x7916cea6. +// +// Solidity: function apkHistory(uint8 , uint256 ) view returns(bytes24 apkHash, uint32 updateBlockNumber, uint32 nextUpdateBlockNumber) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryCallerSession) ApkHistory(arg0 uint8, arg1 *big.Int) (struct { + ApkHash [24]byte + UpdateBlockNumber uint32 + NextUpdateBlockNumber uint32 +}, error) { + return _ContractBLSApkRegistry.Contract.ApkHistory(&_ContractBLSApkRegistry.CallOpts, arg0, arg1) +} + +// CurrentApk is a free data retrieval call binding the contract method 0xa3db80e2. +// +// Solidity: function currentApk(uint8 ) view returns(uint256 X, uint256 Y) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryCaller) CurrentApk(opts *bind.CallOpts, arg0 uint8) (struct { + X *big.Int + Y *big.Int +}, error) { + var out []interface{} + err := _ContractBLSApkRegistry.contract.Call(opts, &out, "currentApk", arg0) + + outstruct := new(struct { + X *big.Int + Y *big.Int + }) + if err != nil { + return *outstruct, err + } + + outstruct.X = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + outstruct.Y = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) + + return *outstruct, err + +} + +// CurrentApk is a free data retrieval call binding the contract method 0xa3db80e2. +// +// Solidity: function currentApk(uint8 ) view returns(uint256 X, uint256 Y) +func (_ContractBLSApkRegistry *ContractBLSApkRegistrySession) CurrentApk(arg0 uint8) (struct { + X *big.Int + Y *big.Int +}, error) { + return _ContractBLSApkRegistry.Contract.CurrentApk(&_ContractBLSApkRegistry.CallOpts, arg0) +} + +// CurrentApk is a free data retrieval call binding the contract method 0xa3db80e2. +// +// Solidity: function currentApk(uint8 ) view returns(uint256 X, uint256 Y) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryCallerSession) CurrentApk(arg0 uint8) (struct { + X *big.Int + Y *big.Int +}, error) { + return _ContractBLSApkRegistry.Contract.CurrentApk(&_ContractBLSApkRegistry.CallOpts, arg0) +} + +// GetApk is a free data retrieval call binding the contract method 0x5f61a884. +// +// Solidity: function getApk(uint8 quorumNumber) view returns((uint256,uint256)) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryCaller) GetApk(opts *bind.CallOpts, quorumNumber uint8) (BN254G1Point, error) { + var out []interface{} + err := _ContractBLSApkRegistry.contract.Call(opts, &out, "getApk", quorumNumber) + + if err != nil { + return *new(BN254G1Point), err + } + + out0 := *abi.ConvertType(out[0], new(BN254G1Point)).(*BN254G1Point) + + return out0, err + +} + +// GetApk is a free data retrieval call binding the contract method 0x5f61a884. +// +// Solidity: function getApk(uint8 quorumNumber) view returns((uint256,uint256)) +func (_ContractBLSApkRegistry *ContractBLSApkRegistrySession) GetApk(quorumNumber uint8) (BN254G1Point, error) { + return _ContractBLSApkRegistry.Contract.GetApk(&_ContractBLSApkRegistry.CallOpts, quorumNumber) +} + +// GetApk is a free data retrieval call binding the contract method 0x5f61a884. +// +// Solidity: function getApk(uint8 quorumNumber) view returns((uint256,uint256)) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryCallerSession) GetApk(quorumNumber uint8) (BN254G1Point, error) { + return _ContractBLSApkRegistry.Contract.GetApk(&_ContractBLSApkRegistry.CallOpts, quorumNumber) +} + +// GetApkHashAtBlockNumberAndIndex is a free data retrieval call binding the contract method 0x68bccaac. +// +// Solidity: function getApkHashAtBlockNumberAndIndex(uint8 quorumNumber, uint32 blockNumber, uint256 index) view returns(bytes24) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryCaller) GetApkHashAtBlockNumberAndIndex(opts *bind.CallOpts, quorumNumber uint8, blockNumber uint32, index *big.Int) ([24]byte, error) { + var out []interface{} + err := _ContractBLSApkRegistry.contract.Call(opts, &out, "getApkHashAtBlockNumberAndIndex", quorumNumber, blockNumber, index) + + if err != nil { + return *new([24]byte), err + } + + out0 := *abi.ConvertType(out[0], new([24]byte)).(*[24]byte) + + return out0, err + +} + +// GetApkHashAtBlockNumberAndIndex is a free data retrieval call binding the contract method 0x68bccaac. +// +// Solidity: function getApkHashAtBlockNumberAndIndex(uint8 quorumNumber, uint32 blockNumber, uint256 index) view returns(bytes24) +func (_ContractBLSApkRegistry *ContractBLSApkRegistrySession) GetApkHashAtBlockNumberAndIndex(quorumNumber uint8, blockNumber uint32, index *big.Int) ([24]byte, error) { + return _ContractBLSApkRegistry.Contract.GetApkHashAtBlockNumberAndIndex(&_ContractBLSApkRegistry.CallOpts, quorumNumber, blockNumber, index) +} + +// GetApkHashAtBlockNumberAndIndex is a free data retrieval call binding the contract method 0x68bccaac. +// +// Solidity: function getApkHashAtBlockNumberAndIndex(uint8 quorumNumber, uint32 blockNumber, uint256 index) view returns(bytes24) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryCallerSession) GetApkHashAtBlockNumberAndIndex(quorumNumber uint8, blockNumber uint32, index *big.Int) ([24]byte, error) { + return _ContractBLSApkRegistry.Contract.GetApkHashAtBlockNumberAndIndex(&_ContractBLSApkRegistry.CallOpts, quorumNumber, blockNumber, index) +} + +// GetApkHistoryLength is a free data retrieval call binding the contract method 0x377ed99d. +// +// Solidity: function getApkHistoryLength(uint8 quorumNumber) view returns(uint32) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryCaller) GetApkHistoryLength(opts *bind.CallOpts, quorumNumber uint8) (uint32, error) { + var out []interface{} + err := _ContractBLSApkRegistry.contract.Call(opts, &out, "getApkHistoryLength", quorumNumber) + + if err != nil { + return *new(uint32), err + } + + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + + return out0, err + +} + +// GetApkHistoryLength is a free data retrieval call binding the contract method 0x377ed99d. +// +// Solidity: function getApkHistoryLength(uint8 quorumNumber) view returns(uint32) +func (_ContractBLSApkRegistry *ContractBLSApkRegistrySession) GetApkHistoryLength(quorumNumber uint8) (uint32, error) { + return _ContractBLSApkRegistry.Contract.GetApkHistoryLength(&_ContractBLSApkRegistry.CallOpts, quorumNumber) +} + +// GetApkHistoryLength is a free data retrieval call binding the contract method 0x377ed99d. +// +// Solidity: function getApkHistoryLength(uint8 quorumNumber) view returns(uint32) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryCallerSession) GetApkHistoryLength(quorumNumber uint8) (uint32, error) { + return _ContractBLSApkRegistry.Contract.GetApkHistoryLength(&_ContractBLSApkRegistry.CallOpts, quorumNumber) +} + +// GetApkIndicesAtBlockNumber is a free data retrieval call binding the contract method 0xd5254a8c. +// +// Solidity: function getApkIndicesAtBlockNumber(bytes quorumNumbers, uint256 blockNumber) view returns(uint32[]) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryCaller) GetApkIndicesAtBlockNumber(opts *bind.CallOpts, quorumNumbers []byte, blockNumber *big.Int) ([]uint32, error) { + var out []interface{} + err := _ContractBLSApkRegistry.contract.Call(opts, &out, "getApkIndicesAtBlockNumber", quorumNumbers, blockNumber) + + if err != nil { + return *new([]uint32), err + } + + out0 := *abi.ConvertType(out[0], new([]uint32)).(*[]uint32) + + return out0, err + +} + +// GetApkIndicesAtBlockNumber is a free data retrieval call binding the contract method 0xd5254a8c. +// +// Solidity: function getApkIndicesAtBlockNumber(bytes quorumNumbers, uint256 blockNumber) view returns(uint32[]) +func (_ContractBLSApkRegistry *ContractBLSApkRegistrySession) GetApkIndicesAtBlockNumber(quorumNumbers []byte, blockNumber *big.Int) ([]uint32, error) { + return _ContractBLSApkRegistry.Contract.GetApkIndicesAtBlockNumber(&_ContractBLSApkRegistry.CallOpts, quorumNumbers, blockNumber) +} + +// GetApkIndicesAtBlockNumber is a free data retrieval call binding the contract method 0xd5254a8c. +// +// Solidity: function getApkIndicesAtBlockNumber(bytes quorumNumbers, uint256 blockNumber) view returns(uint32[]) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryCallerSession) GetApkIndicesAtBlockNumber(quorumNumbers []byte, blockNumber *big.Int) ([]uint32, error) { + return _ContractBLSApkRegistry.Contract.GetApkIndicesAtBlockNumber(&_ContractBLSApkRegistry.CallOpts, quorumNumbers, blockNumber) +} + +// GetApkUpdateAtIndex is a free data retrieval call binding the contract method 0x605747d5. +// +// Solidity: function getApkUpdateAtIndex(uint8 quorumNumber, uint256 index) view returns((bytes24,uint32,uint32)) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryCaller) GetApkUpdateAtIndex(opts *bind.CallOpts, quorumNumber uint8, index *big.Int) (IBLSApkRegistryApkUpdate, error) { + var out []interface{} + err := _ContractBLSApkRegistry.contract.Call(opts, &out, "getApkUpdateAtIndex", quorumNumber, index) + + if err != nil { + return *new(IBLSApkRegistryApkUpdate), err + } + + out0 := *abi.ConvertType(out[0], new(IBLSApkRegistryApkUpdate)).(*IBLSApkRegistryApkUpdate) + + return out0, err + +} + +// GetApkUpdateAtIndex is a free data retrieval call binding the contract method 0x605747d5. +// +// Solidity: function getApkUpdateAtIndex(uint8 quorumNumber, uint256 index) view returns((bytes24,uint32,uint32)) +func (_ContractBLSApkRegistry *ContractBLSApkRegistrySession) GetApkUpdateAtIndex(quorumNumber uint8, index *big.Int) (IBLSApkRegistryApkUpdate, error) { + return _ContractBLSApkRegistry.Contract.GetApkUpdateAtIndex(&_ContractBLSApkRegistry.CallOpts, quorumNumber, index) +} + +// GetApkUpdateAtIndex is a free data retrieval call binding the contract method 0x605747d5. +// +// Solidity: function getApkUpdateAtIndex(uint8 quorumNumber, uint256 index) view returns((bytes24,uint32,uint32)) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryCallerSession) GetApkUpdateAtIndex(quorumNumber uint8, index *big.Int) (IBLSApkRegistryApkUpdate, error) { + return _ContractBLSApkRegistry.Contract.GetApkUpdateAtIndex(&_ContractBLSApkRegistry.CallOpts, quorumNumber, index) +} + +// GetOperatorFromPubkeyHash is a free data retrieval call binding the contract method 0x47b314e8. +// +// Solidity: function getOperatorFromPubkeyHash(bytes32 pubkeyHash) view returns(address) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryCaller) GetOperatorFromPubkeyHash(opts *bind.CallOpts, pubkeyHash [32]byte) (common.Address, error) { + var out []interface{} + err := _ContractBLSApkRegistry.contract.Call(opts, &out, "getOperatorFromPubkeyHash", pubkeyHash) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetOperatorFromPubkeyHash is a free data retrieval call binding the contract method 0x47b314e8. +// +// Solidity: function getOperatorFromPubkeyHash(bytes32 pubkeyHash) view returns(address) +func (_ContractBLSApkRegistry *ContractBLSApkRegistrySession) GetOperatorFromPubkeyHash(pubkeyHash [32]byte) (common.Address, error) { + return _ContractBLSApkRegistry.Contract.GetOperatorFromPubkeyHash(&_ContractBLSApkRegistry.CallOpts, pubkeyHash) +} + +// GetOperatorFromPubkeyHash is a free data retrieval call binding the contract method 0x47b314e8. +// +// Solidity: function getOperatorFromPubkeyHash(bytes32 pubkeyHash) view returns(address) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryCallerSession) GetOperatorFromPubkeyHash(pubkeyHash [32]byte) (common.Address, error) { + return _ContractBLSApkRegistry.Contract.GetOperatorFromPubkeyHash(&_ContractBLSApkRegistry.CallOpts, pubkeyHash) +} + +// GetOperatorId is a free data retrieval call binding the contract method 0x13542a4e. +// +// Solidity: function getOperatorId(address operator) view returns(bytes32) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryCaller) GetOperatorId(opts *bind.CallOpts, operator common.Address) ([32]byte, error) { + var out []interface{} + err := _ContractBLSApkRegistry.contract.Call(opts, &out, "getOperatorId", operator) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// GetOperatorId is a free data retrieval call binding the contract method 0x13542a4e. +// +// Solidity: function getOperatorId(address operator) view returns(bytes32) +func (_ContractBLSApkRegistry *ContractBLSApkRegistrySession) GetOperatorId(operator common.Address) ([32]byte, error) { + return _ContractBLSApkRegistry.Contract.GetOperatorId(&_ContractBLSApkRegistry.CallOpts, operator) +} + +// GetOperatorId is a free data retrieval call binding the contract method 0x13542a4e. +// +// Solidity: function getOperatorId(address operator) view returns(bytes32) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryCallerSession) GetOperatorId(operator common.Address) ([32]byte, error) { + return _ContractBLSApkRegistry.Contract.GetOperatorId(&_ContractBLSApkRegistry.CallOpts, operator) +} + +// GetRegisteredPubkey is a free data retrieval call binding the contract method 0x7ff81a87. +// +// Solidity: function getRegisteredPubkey(address operator) view returns((uint256,uint256), bytes32) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryCaller) GetRegisteredPubkey(opts *bind.CallOpts, operator common.Address) (BN254G1Point, [32]byte, error) { + var out []interface{} + err := _ContractBLSApkRegistry.contract.Call(opts, &out, "getRegisteredPubkey", operator) + + if err != nil { + return *new(BN254G1Point), *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new(BN254G1Point)).(*BN254G1Point) + out1 := *abi.ConvertType(out[1], new([32]byte)).(*[32]byte) + + return out0, out1, err + +} + +// GetRegisteredPubkey is a free data retrieval call binding the contract method 0x7ff81a87. +// +// Solidity: function getRegisteredPubkey(address operator) view returns((uint256,uint256), bytes32) +func (_ContractBLSApkRegistry *ContractBLSApkRegistrySession) GetRegisteredPubkey(operator common.Address) (BN254G1Point, [32]byte, error) { + return _ContractBLSApkRegistry.Contract.GetRegisteredPubkey(&_ContractBLSApkRegistry.CallOpts, operator) +} + +// GetRegisteredPubkey is a free data retrieval call binding the contract method 0x7ff81a87. +// +// Solidity: function getRegisteredPubkey(address operator) view returns((uint256,uint256), bytes32) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryCallerSession) GetRegisteredPubkey(operator common.Address) (BN254G1Point, [32]byte, error) { + return _ContractBLSApkRegistry.Contract.GetRegisteredPubkey(&_ContractBLSApkRegistry.CallOpts, operator) +} + +// OperatorToPubkey is a free data retrieval call binding the contract method 0x00a1f4cb. +// +// Solidity: function operatorToPubkey(address ) view returns(uint256 X, uint256 Y) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryCaller) OperatorToPubkey(opts *bind.CallOpts, arg0 common.Address) (struct { + X *big.Int + Y *big.Int +}, error) { + var out []interface{} + err := _ContractBLSApkRegistry.contract.Call(opts, &out, "operatorToPubkey", arg0) + + outstruct := new(struct { + X *big.Int + Y *big.Int + }) + if err != nil { + return *outstruct, err + } + + outstruct.X = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + outstruct.Y = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) + + return *outstruct, err + +} + +// OperatorToPubkey is a free data retrieval call binding the contract method 0x00a1f4cb. +// +// Solidity: function operatorToPubkey(address ) view returns(uint256 X, uint256 Y) +func (_ContractBLSApkRegistry *ContractBLSApkRegistrySession) OperatorToPubkey(arg0 common.Address) (struct { + X *big.Int + Y *big.Int +}, error) { + return _ContractBLSApkRegistry.Contract.OperatorToPubkey(&_ContractBLSApkRegistry.CallOpts, arg0) +} + +// OperatorToPubkey is a free data retrieval call binding the contract method 0x00a1f4cb. +// +// Solidity: function operatorToPubkey(address ) view returns(uint256 X, uint256 Y) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryCallerSession) OperatorToPubkey(arg0 common.Address) (struct { + X *big.Int + Y *big.Int +}, error) { + return _ContractBLSApkRegistry.Contract.OperatorToPubkey(&_ContractBLSApkRegistry.CallOpts, arg0) +} + +// OperatorToPubkeyHash is a free data retrieval call binding the contract method 0xde29fac0. +// +// Solidity: function operatorToPubkeyHash(address ) view returns(bytes32) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryCaller) OperatorToPubkeyHash(opts *bind.CallOpts, arg0 common.Address) ([32]byte, error) { + var out []interface{} + err := _ContractBLSApkRegistry.contract.Call(opts, &out, "operatorToPubkeyHash", arg0) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// OperatorToPubkeyHash is a free data retrieval call binding the contract method 0xde29fac0. +// +// Solidity: function operatorToPubkeyHash(address ) view returns(bytes32) +func (_ContractBLSApkRegistry *ContractBLSApkRegistrySession) OperatorToPubkeyHash(arg0 common.Address) ([32]byte, error) { + return _ContractBLSApkRegistry.Contract.OperatorToPubkeyHash(&_ContractBLSApkRegistry.CallOpts, arg0) +} + +// OperatorToPubkeyHash is a free data retrieval call binding the contract method 0xde29fac0. +// +// Solidity: function operatorToPubkeyHash(address ) view returns(bytes32) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryCallerSession) OperatorToPubkeyHash(arg0 common.Address) ([32]byte, error) { + return _ContractBLSApkRegistry.Contract.OperatorToPubkeyHash(&_ContractBLSApkRegistry.CallOpts, arg0) +} + +// PubkeyHashToOperator is a free data retrieval call binding the contract method 0xe8bb9ae6. +// +// Solidity: function pubkeyHashToOperator(bytes32 ) view returns(address) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryCaller) PubkeyHashToOperator(opts *bind.CallOpts, arg0 [32]byte) (common.Address, error) { + var out []interface{} + err := _ContractBLSApkRegistry.contract.Call(opts, &out, "pubkeyHashToOperator", arg0) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// PubkeyHashToOperator is a free data retrieval call binding the contract method 0xe8bb9ae6. +// +// Solidity: function pubkeyHashToOperator(bytes32 ) view returns(address) +func (_ContractBLSApkRegistry *ContractBLSApkRegistrySession) PubkeyHashToOperator(arg0 [32]byte) (common.Address, error) { + return _ContractBLSApkRegistry.Contract.PubkeyHashToOperator(&_ContractBLSApkRegistry.CallOpts, arg0) +} + +// PubkeyHashToOperator is a free data retrieval call binding the contract method 0xe8bb9ae6. +// +// Solidity: function pubkeyHashToOperator(bytes32 ) view returns(address) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryCallerSession) PubkeyHashToOperator(arg0 [32]byte) (common.Address, error) { + return _ContractBLSApkRegistry.Contract.PubkeyHashToOperator(&_ContractBLSApkRegistry.CallOpts, arg0) +} + +// RegistryCoordinator is a free data retrieval call binding the contract method 0x6d14a987. +// +// Solidity: function registryCoordinator() view returns(address) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryCaller) RegistryCoordinator(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ContractBLSApkRegistry.contract.Call(opts, &out, "registryCoordinator") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// RegistryCoordinator is a free data retrieval call binding the contract method 0x6d14a987. +// +// Solidity: function registryCoordinator() view returns(address) +func (_ContractBLSApkRegistry *ContractBLSApkRegistrySession) RegistryCoordinator() (common.Address, error) { + return _ContractBLSApkRegistry.Contract.RegistryCoordinator(&_ContractBLSApkRegistry.CallOpts) +} + +// RegistryCoordinator is a free data retrieval call binding the contract method 0x6d14a987. +// +// Solidity: function registryCoordinator() view returns(address) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryCallerSession) RegistryCoordinator() (common.Address, error) { + return _ContractBLSApkRegistry.Contract.RegistryCoordinator(&_ContractBLSApkRegistry.CallOpts) +} + +// DeregisterOperator is a paid mutator transaction binding the contract method 0xf4e24fe5. +// +// Solidity: function deregisterOperator(address operator, bytes quorumNumbers) returns() +func (_ContractBLSApkRegistry *ContractBLSApkRegistryTransactor) DeregisterOperator(opts *bind.TransactOpts, operator common.Address, quorumNumbers []byte) (*types.Transaction, error) { + return _ContractBLSApkRegistry.contract.Transact(opts, "deregisterOperator", operator, quorumNumbers) +} + +// DeregisterOperator is a paid mutator transaction binding the contract method 0xf4e24fe5. +// +// Solidity: function deregisterOperator(address operator, bytes quorumNumbers) returns() +func (_ContractBLSApkRegistry *ContractBLSApkRegistrySession) DeregisterOperator(operator common.Address, quorumNumbers []byte) (*types.Transaction, error) { + return _ContractBLSApkRegistry.Contract.DeregisterOperator(&_ContractBLSApkRegistry.TransactOpts, operator, quorumNumbers) +} + +// DeregisterOperator is a paid mutator transaction binding the contract method 0xf4e24fe5. +// +// Solidity: function deregisterOperator(address operator, bytes quorumNumbers) returns() +func (_ContractBLSApkRegistry *ContractBLSApkRegistryTransactorSession) DeregisterOperator(operator common.Address, quorumNumbers []byte) (*types.Transaction, error) { + return _ContractBLSApkRegistry.Contract.DeregisterOperator(&_ContractBLSApkRegistry.TransactOpts, operator, quorumNumbers) +} + +// InitializeQuorum is a paid mutator transaction binding the contract method 0x26d941f2. +// +// Solidity: function initializeQuorum(uint8 quorumNumber) returns() +func (_ContractBLSApkRegistry *ContractBLSApkRegistryTransactor) InitializeQuorum(opts *bind.TransactOpts, quorumNumber uint8) (*types.Transaction, error) { + return _ContractBLSApkRegistry.contract.Transact(opts, "initializeQuorum", quorumNumber) +} + +// InitializeQuorum is a paid mutator transaction binding the contract method 0x26d941f2. +// +// Solidity: function initializeQuorum(uint8 quorumNumber) returns() +func (_ContractBLSApkRegistry *ContractBLSApkRegistrySession) InitializeQuorum(quorumNumber uint8) (*types.Transaction, error) { + return _ContractBLSApkRegistry.Contract.InitializeQuorum(&_ContractBLSApkRegistry.TransactOpts, quorumNumber) +} + +// InitializeQuorum is a paid mutator transaction binding the contract method 0x26d941f2. +// +// Solidity: function initializeQuorum(uint8 quorumNumber) returns() +func (_ContractBLSApkRegistry *ContractBLSApkRegistryTransactorSession) InitializeQuorum(quorumNumber uint8) (*types.Transaction, error) { + return _ContractBLSApkRegistry.Contract.InitializeQuorum(&_ContractBLSApkRegistry.TransactOpts, quorumNumber) +} + +// RegisterBLSPublicKey is a paid mutator transaction binding the contract method 0xbf79ce58. +// +// Solidity: function registerBLSPublicKey(address operator, ((uint256,uint256),(uint256,uint256),(uint256[2],uint256[2])) params, (uint256,uint256) pubkeyRegistrationMessageHash) returns(bytes32 operatorId) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryTransactor) RegisterBLSPublicKey(opts *bind.TransactOpts, operator common.Address, params IBLSApkRegistryPubkeyRegistrationParams, pubkeyRegistrationMessageHash BN254G1Point) (*types.Transaction, error) { + return _ContractBLSApkRegistry.contract.Transact(opts, "registerBLSPublicKey", operator, params, pubkeyRegistrationMessageHash) +} + +// RegisterBLSPublicKey is a paid mutator transaction binding the contract method 0xbf79ce58. +// +// Solidity: function registerBLSPublicKey(address operator, ((uint256,uint256),(uint256,uint256),(uint256[2],uint256[2])) params, (uint256,uint256) pubkeyRegistrationMessageHash) returns(bytes32 operatorId) +func (_ContractBLSApkRegistry *ContractBLSApkRegistrySession) RegisterBLSPublicKey(operator common.Address, params IBLSApkRegistryPubkeyRegistrationParams, pubkeyRegistrationMessageHash BN254G1Point) (*types.Transaction, error) { + return _ContractBLSApkRegistry.Contract.RegisterBLSPublicKey(&_ContractBLSApkRegistry.TransactOpts, operator, params, pubkeyRegistrationMessageHash) +} + +// RegisterBLSPublicKey is a paid mutator transaction binding the contract method 0xbf79ce58. +// +// Solidity: function registerBLSPublicKey(address operator, ((uint256,uint256),(uint256,uint256),(uint256[2],uint256[2])) params, (uint256,uint256) pubkeyRegistrationMessageHash) returns(bytes32 operatorId) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryTransactorSession) RegisterBLSPublicKey(operator common.Address, params IBLSApkRegistryPubkeyRegistrationParams, pubkeyRegistrationMessageHash BN254G1Point) (*types.Transaction, error) { + return _ContractBLSApkRegistry.Contract.RegisterBLSPublicKey(&_ContractBLSApkRegistry.TransactOpts, operator, params, pubkeyRegistrationMessageHash) +} + +// RegisterOperator is a paid mutator transaction binding the contract method 0x3fb27952. +// +// Solidity: function registerOperator(address operator, bytes quorumNumbers) returns() +func (_ContractBLSApkRegistry *ContractBLSApkRegistryTransactor) RegisterOperator(opts *bind.TransactOpts, operator common.Address, quorumNumbers []byte) (*types.Transaction, error) { + return _ContractBLSApkRegistry.contract.Transact(opts, "registerOperator", operator, quorumNumbers) +} + +// RegisterOperator is a paid mutator transaction binding the contract method 0x3fb27952. +// +// Solidity: function registerOperator(address operator, bytes quorumNumbers) returns() +func (_ContractBLSApkRegistry *ContractBLSApkRegistrySession) RegisterOperator(operator common.Address, quorumNumbers []byte) (*types.Transaction, error) { + return _ContractBLSApkRegistry.Contract.RegisterOperator(&_ContractBLSApkRegistry.TransactOpts, operator, quorumNumbers) +} + +// RegisterOperator is a paid mutator transaction binding the contract method 0x3fb27952. +// +// Solidity: function registerOperator(address operator, bytes quorumNumbers) returns() +func (_ContractBLSApkRegistry *ContractBLSApkRegistryTransactorSession) RegisterOperator(operator common.Address, quorumNumbers []byte) (*types.Transaction, error) { + return _ContractBLSApkRegistry.Contract.RegisterOperator(&_ContractBLSApkRegistry.TransactOpts, operator, quorumNumbers) +} + +// ContractBLSApkRegistryInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the ContractBLSApkRegistry contract. +type ContractBLSApkRegistryInitializedIterator struct { + Event *ContractBLSApkRegistryInitialized // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractBLSApkRegistryInitializedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractBLSApkRegistryInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractBLSApkRegistryInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractBLSApkRegistryInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractBLSApkRegistryInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractBLSApkRegistryInitialized represents a Initialized event raised by the ContractBLSApkRegistry contract. +type ContractBLSApkRegistryInitialized struct { + Version uint8 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryFilterer) FilterInitialized(opts *bind.FilterOpts) (*ContractBLSApkRegistryInitializedIterator, error) { + + logs, sub, err := _ContractBLSApkRegistry.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &ContractBLSApkRegistryInitializedIterator{contract: _ContractBLSApkRegistry.contract, event: "Initialized", logs: logs, sub: sub}, nil +} + +// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *ContractBLSApkRegistryInitialized) (event.Subscription, error) { + + logs, sub, err := _ContractBLSApkRegistry.contract.WatchLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractBLSApkRegistryInitialized) + if err := _ContractBLSApkRegistry.contract.UnpackLog(event, "Initialized", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryFilterer) ParseInitialized(log types.Log) (*ContractBLSApkRegistryInitialized, error) { + event := new(ContractBLSApkRegistryInitialized) + if err := _ContractBLSApkRegistry.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ContractBLSApkRegistryNewPubkeyRegistrationIterator is returned from FilterNewPubkeyRegistration and is used to iterate over the raw logs and unpacked data for NewPubkeyRegistration events raised by the ContractBLSApkRegistry contract. +type ContractBLSApkRegistryNewPubkeyRegistrationIterator struct { + Event *ContractBLSApkRegistryNewPubkeyRegistration // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractBLSApkRegistryNewPubkeyRegistrationIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractBLSApkRegistryNewPubkeyRegistration) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractBLSApkRegistryNewPubkeyRegistration) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractBLSApkRegistryNewPubkeyRegistrationIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractBLSApkRegistryNewPubkeyRegistrationIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractBLSApkRegistryNewPubkeyRegistration represents a NewPubkeyRegistration event raised by the ContractBLSApkRegistry contract. +type ContractBLSApkRegistryNewPubkeyRegistration struct { + Operator common.Address + PubkeyG1 BN254G1Point + PubkeyG2 BN254G2Point + Raw types.Log // Blockchain specific contextual infos +} + +// FilterNewPubkeyRegistration is a free log retrieval operation binding the contract event 0xe3fb6613af2e8930cf85d47fcf6db10192224a64c6cbe8023e0eee1ba3828041. +// +// Solidity: event NewPubkeyRegistration(address indexed operator, (uint256,uint256) pubkeyG1, (uint256[2],uint256[2]) pubkeyG2) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryFilterer) FilterNewPubkeyRegistration(opts *bind.FilterOpts, operator []common.Address) (*ContractBLSApkRegistryNewPubkeyRegistrationIterator, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _ContractBLSApkRegistry.contract.FilterLogs(opts, "NewPubkeyRegistration", operatorRule) + if err != nil { + return nil, err + } + return &ContractBLSApkRegistryNewPubkeyRegistrationIterator{contract: _ContractBLSApkRegistry.contract, event: "NewPubkeyRegistration", logs: logs, sub: sub}, nil +} + +// WatchNewPubkeyRegistration is a free log subscription operation binding the contract event 0xe3fb6613af2e8930cf85d47fcf6db10192224a64c6cbe8023e0eee1ba3828041. +// +// Solidity: event NewPubkeyRegistration(address indexed operator, (uint256,uint256) pubkeyG1, (uint256[2],uint256[2]) pubkeyG2) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryFilterer) WatchNewPubkeyRegistration(opts *bind.WatchOpts, sink chan<- *ContractBLSApkRegistryNewPubkeyRegistration, operator []common.Address) (event.Subscription, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _ContractBLSApkRegistry.contract.WatchLogs(opts, "NewPubkeyRegistration", operatorRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractBLSApkRegistryNewPubkeyRegistration) + if err := _ContractBLSApkRegistry.contract.UnpackLog(event, "NewPubkeyRegistration", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseNewPubkeyRegistration is a log parse operation binding the contract event 0xe3fb6613af2e8930cf85d47fcf6db10192224a64c6cbe8023e0eee1ba3828041. +// +// Solidity: event NewPubkeyRegistration(address indexed operator, (uint256,uint256) pubkeyG1, (uint256[2],uint256[2]) pubkeyG2) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryFilterer) ParseNewPubkeyRegistration(log types.Log) (*ContractBLSApkRegistryNewPubkeyRegistration, error) { + event := new(ContractBLSApkRegistryNewPubkeyRegistration) + if err := _ContractBLSApkRegistry.contract.UnpackLog(event, "NewPubkeyRegistration", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ContractBLSApkRegistryOperatorAddedToQuorumsIterator is returned from FilterOperatorAddedToQuorums and is used to iterate over the raw logs and unpacked data for OperatorAddedToQuorums events raised by the ContractBLSApkRegistry contract. +type ContractBLSApkRegistryOperatorAddedToQuorumsIterator struct { + Event *ContractBLSApkRegistryOperatorAddedToQuorums // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractBLSApkRegistryOperatorAddedToQuorumsIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractBLSApkRegistryOperatorAddedToQuorums) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractBLSApkRegistryOperatorAddedToQuorums) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractBLSApkRegistryOperatorAddedToQuorumsIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractBLSApkRegistryOperatorAddedToQuorumsIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractBLSApkRegistryOperatorAddedToQuorums represents a OperatorAddedToQuorums event raised by the ContractBLSApkRegistry contract. +type ContractBLSApkRegistryOperatorAddedToQuorums struct { + Operator common.Address + QuorumNumbers []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOperatorAddedToQuorums is a free log retrieval operation binding the contract event 0x5358c5b42179178c8fc757734ac2a3198f9071c765ee0d8389211525f5005246. +// +// Solidity: event OperatorAddedToQuorums(address operator, bytes quorumNumbers) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryFilterer) FilterOperatorAddedToQuorums(opts *bind.FilterOpts) (*ContractBLSApkRegistryOperatorAddedToQuorumsIterator, error) { + + logs, sub, err := _ContractBLSApkRegistry.contract.FilterLogs(opts, "OperatorAddedToQuorums") + if err != nil { + return nil, err + } + return &ContractBLSApkRegistryOperatorAddedToQuorumsIterator{contract: _ContractBLSApkRegistry.contract, event: "OperatorAddedToQuorums", logs: logs, sub: sub}, nil +} + +// WatchOperatorAddedToQuorums is a free log subscription operation binding the contract event 0x5358c5b42179178c8fc757734ac2a3198f9071c765ee0d8389211525f5005246. +// +// Solidity: event OperatorAddedToQuorums(address operator, bytes quorumNumbers) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryFilterer) WatchOperatorAddedToQuorums(opts *bind.WatchOpts, sink chan<- *ContractBLSApkRegistryOperatorAddedToQuorums) (event.Subscription, error) { + + logs, sub, err := _ContractBLSApkRegistry.contract.WatchLogs(opts, "OperatorAddedToQuorums") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractBLSApkRegistryOperatorAddedToQuorums) + if err := _ContractBLSApkRegistry.contract.UnpackLog(event, "OperatorAddedToQuorums", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseOperatorAddedToQuorums is a log parse operation binding the contract event 0x5358c5b42179178c8fc757734ac2a3198f9071c765ee0d8389211525f5005246. +// +// Solidity: event OperatorAddedToQuorums(address operator, bytes quorumNumbers) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryFilterer) ParseOperatorAddedToQuorums(log types.Log) (*ContractBLSApkRegistryOperatorAddedToQuorums, error) { + event := new(ContractBLSApkRegistryOperatorAddedToQuorums) + if err := _ContractBLSApkRegistry.contract.UnpackLog(event, "OperatorAddedToQuorums", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ContractBLSApkRegistryOperatorRemovedFromQuorumsIterator is returned from FilterOperatorRemovedFromQuorums and is used to iterate over the raw logs and unpacked data for OperatorRemovedFromQuorums events raised by the ContractBLSApkRegistry contract. +type ContractBLSApkRegistryOperatorRemovedFromQuorumsIterator struct { + Event *ContractBLSApkRegistryOperatorRemovedFromQuorums // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractBLSApkRegistryOperatorRemovedFromQuorumsIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractBLSApkRegistryOperatorRemovedFromQuorums) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractBLSApkRegistryOperatorRemovedFromQuorums) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractBLSApkRegistryOperatorRemovedFromQuorumsIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractBLSApkRegistryOperatorRemovedFromQuorumsIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractBLSApkRegistryOperatorRemovedFromQuorums represents a OperatorRemovedFromQuorums event raised by the ContractBLSApkRegistry contract. +type ContractBLSApkRegistryOperatorRemovedFromQuorums struct { + Operator common.Address + QuorumNumbers []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOperatorRemovedFromQuorums is a free log retrieval operation binding the contract event 0x14a5172b312e9d2c22b8468f9c70ec2caa9de934fe380734fbc6f3beff2b14ba. +// +// Solidity: event OperatorRemovedFromQuorums(address operator, bytes quorumNumbers) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryFilterer) FilterOperatorRemovedFromQuorums(opts *bind.FilterOpts) (*ContractBLSApkRegistryOperatorRemovedFromQuorumsIterator, error) { + + logs, sub, err := _ContractBLSApkRegistry.contract.FilterLogs(opts, "OperatorRemovedFromQuorums") + if err != nil { + return nil, err + } + return &ContractBLSApkRegistryOperatorRemovedFromQuorumsIterator{contract: _ContractBLSApkRegistry.contract, event: "OperatorRemovedFromQuorums", logs: logs, sub: sub}, nil +} + +// WatchOperatorRemovedFromQuorums is a free log subscription operation binding the contract event 0x14a5172b312e9d2c22b8468f9c70ec2caa9de934fe380734fbc6f3beff2b14ba. +// +// Solidity: event OperatorRemovedFromQuorums(address operator, bytes quorumNumbers) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryFilterer) WatchOperatorRemovedFromQuorums(opts *bind.WatchOpts, sink chan<- *ContractBLSApkRegistryOperatorRemovedFromQuorums) (event.Subscription, error) { + + logs, sub, err := _ContractBLSApkRegistry.contract.WatchLogs(opts, "OperatorRemovedFromQuorums") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractBLSApkRegistryOperatorRemovedFromQuorums) + if err := _ContractBLSApkRegistry.contract.UnpackLog(event, "OperatorRemovedFromQuorums", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseOperatorRemovedFromQuorums is a log parse operation binding the contract event 0x14a5172b312e9d2c22b8468f9c70ec2caa9de934fe380734fbc6f3beff2b14ba. +// +// Solidity: event OperatorRemovedFromQuorums(address operator, bytes quorumNumbers) +func (_ContractBLSApkRegistry *ContractBLSApkRegistryFilterer) ParseOperatorRemovedFromQuorums(log types.Log) (*ContractBLSApkRegistryOperatorRemovedFromQuorums, error) { + event := new(ContractBLSApkRegistryOperatorRemovedFromQuorums) + if err := _ContractBLSApkRegistry.contract.UnpackLog(event, "OperatorRemovedFromQuorums", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/contracts/bindings/BLSOperatorStateRetriever/binding.go b/contracts/bindings/BLSOperatorStateRetriever/binding.go index fbcc69c9f0..2f1b1d7673 100644 --- a/contracts/bindings/BLSOperatorStateRetriever/binding.go +++ b/contracts/bindings/BLSOperatorStateRetriever/binding.go @@ -45,8 +45,8 @@ type BLSOperatorStateRetrieverOperator struct { // ContractBLSOperatorStateRetrieverMetaData contains all meta data concerning the ContractBLSOperatorStateRetriever contract. var ContractBLSOperatorStateRetrieverMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"contractIBLSRegistryCoordinatorWithIndices\",\"name\":\"registryCoordinator\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"referenceBlockNumber\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"quorumNumbers\",\"type\":\"bytes\"},{\"internalType\":\"bytes32[]\",\"name\":\"nonSignerOperatorIds\",\"type\":\"bytes32[]\"}],\"name\":\"getCheckSignaturesIndices\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32[]\",\"name\":\"nonSignerQuorumBitmapIndices\",\"type\":\"uint32[]\"},{\"internalType\":\"uint32[]\",\"name\":\"quorumApkIndices\",\"type\":\"uint32[]\"},{\"internalType\":\"uint32[]\",\"name\":\"totalStakeIndices\",\"type\":\"uint32[]\"},{\"internalType\":\"uint32[][]\",\"name\":\"nonSignerStakeIndices\",\"type\":\"uint32[][]\"}],\"internalType\":\"structBLSOperatorStateRetriever.CheckSignaturesIndices\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIBLSRegistryCoordinatorWithIndices\",\"name\":\"registryCoordinator\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"quorumNumbers\",\"type\":\"bytes\"},{\"internalType\":\"uint32\",\"name\":\"blockNumber\",\"type\":\"uint32\"}],\"name\":\"getOperatorState\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"operatorId\",\"type\":\"bytes32\"},{\"internalType\":\"uint96\",\"name\":\"stake\",\"type\":\"uint96\"}],\"internalType\":\"structBLSOperatorStateRetriever.Operator[][]\",\"name\":\"\",\"type\":\"tuple[][]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIBLSRegistryCoordinatorWithIndices\",\"name\":\"registryCoordinator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"operatorId\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"blockNumber\",\"type\":\"uint32\"}],\"name\":\"getOperatorState\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"operatorId\",\"type\":\"bytes32\"},{\"internalType\":\"uint96\",\"name\":\"stake\",\"type\":\"uint96\"}],\"internalType\":\"structBLSOperatorStateRetriever.Operator[][]\",\"name\":\"\",\"type\":\"tuple[][]\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b506114cc806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80633563b0d1146100465780634f739f741461006f578063cefdc1d41461008f575b600080fd5b610059610054366004610d22565b6100b0565b6040516100669190610e6a565b60405180910390f35b61008261007d366004610ed0565b61042b565b6040516100669190610fd4565b6100a261009d36600461108f565b610ab2565b6040516100669291906110d1565b60606000846001600160a01b031663683048356040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061011691906110f2565b90506000856001600160a01b0316639e9923c26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610158573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061017c91906110f2565b90506000855167ffffffffffffffff81111561019a5761019a610cb9565b6040519080825280602002602001820160405280156101cd57816020015b60608152602001906001900390816101b85790505b50905060005b86518110156104205760008782815181106101f0576101f061110f565b016020015160405163889ae3e560e01b815260f89190911c6004820181905263ffffffff8916602483015291506000906001600160a01b0386169063889ae3e590604401600060405180830381865afa158015610251573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102799190810190611149565b9050805167ffffffffffffffff81111561029557610295610cb9565b6040519080825280602002602001820160405280156102da57816020015b60408051808201909152600080825260208201528152602001906001900390816102b35790505b508484815181106102ed576102ed61110f565b602002602001018190525060005b815181101561040a5760008282815181106103185761031861110f565b6020908102919091018101516040805180820182528281529051631b32722560e01b81526004810183905260ff8816602482015263ffffffff8e166044820152919350918201906001600160a01b038b1690631b32722590606401602060405180830381865afa158015610390573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b491906111df565b6001600160601b03168152508686815181106103d2576103d261110f565b602002602001015183815181106103eb576103eb61110f565b60200260200101819052505080806104029061121e565b9150506102fb565b50505080806104189061121e565b9150506101d3565b509695505050505050565b6104566040518060800160405280606081526020016060815260200160608152602001606081525090565b6000876001600160a01b031663683048356040518163ffffffff1660e01b8152600401602060405180830381865afa158015610496573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ba91906110f2565b90506104e76040518060800160405280606081526020016060815260200160608152602001606081525090565b6040516385020d4960e01b81526001600160a01b038a16906385020d4990610517908b9089908990600401611239565b600060405180830381865afa158015610534573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261055c9190810190611283565b815260405163e192e9ad60e01b81526001600160a01b0383169063e192e9ad9061058e908b908b908b9060040161133b565b600060405180830381865afa1580156105ab573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105d39190810190611283565b60408201528567ffffffffffffffff8111156105f1576105f1610cb9565b60405190808252806020026020018201604052801561062457816020015b606081526020019060019003908161060f5790505b50606082015260005b60ff81168711156109c35760008567ffffffffffffffff81111561065357610653610cb9565b60405190808252806020026020018201604052801561067c578160200160208202803683370190505b5083606001518360ff16815181106106965761069661110f565b602002602001018190525060005b868110156108c25760008c6001600160a01b0316633064620d8a8a858181106106cf576106cf61110f565b905060200201358e886000015186815181106106ed576106ed61110f565b60200260200101516040518463ffffffff1660e01b815260040161072a9392919092835263ffffffff918216602084015216604082015260600190565b602060405180830381865afa158015610747573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076b9190611364565b90508a8a8560ff168181106107825761078261110f565b6001600160c01b03841692013560f81c9190911c6001908116141590506108af57856001600160a01b031663480858668a8a858181106107c4576107c461110f565b905060200201358d8d8860ff168181106107e0576107e061110f565b6040516001600160e01b031960e087901b1681526004810194909452919091013560f81c60248301525063ffffffff8f166044820152606401602060405180830381865afa158015610836573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085a919061138d565b85606001518560ff16815181106108735761087361110f565b6020026020010151848151811061088c5761088c61110f565b63ffffffff90921660209283029190910190910152826108ab8161121e565b9350505b50806108ba8161121e565b9150506106a4565b5060008167ffffffffffffffff8111156108de576108de610cb9565b604051908082528060200260200182016040528015610907578160200160208202803683370190505b50905060005b828110156109885784606001518460ff168151811061092e5761092e61110f565b602002602001015181815181106109475761094761110f565b60200260200101518282815181106109615761096161110f565b63ffffffff90921660209283029190910190910152806109808161121e565b91505061090d565b508084606001518460ff16815181106109a3576109a361110f565b6020026020010181905250505080806109bb906113aa565b91505061062d565b506000896001600160a01b0316633561deb16040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2891906110f2565b60405163eda1076360e01b81529091506001600160a01b0382169063eda1076390610a5b908b908b908e906004016113ca565b600060405180830381865afa158015610a78573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610aa09190810190611283565b60208301525098975050505050505050565b6040805160018082528183019092526000916060918391602080830190803683370190505090508481600081518110610aed57610aed61110f565b60209081029190910101526040516385020d4960e01b81526000906001600160a01b038816906385020d4990610b2990889086906004016113f4565b600060405180830381865afa158015610b46573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b6e9190810190611283565b600081518110610b8057610b8061110f565b6020908102919091010151604051633064620d60e01b81526004810188905263ffffffff87811660248301529091166044820181905291506000906001600160a01b03891690633064620d90606401602060405180830381865afa158015610bec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c109190611364565b6001600160c01b031690506000610c2682610c44565b905081610c348a838a6100b0565b9550955050505050935093915050565b60606000805b610100811015610c9a576001811b915083821615610c8a57828160f81b604051602001610c78929190611448565b60405160208183030381529060405292505b610c938161121e565b9050610c4a565b5050919050565b6001600160a01b0381168114610cb657600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610cf857610cf8610cb9565b604052919050565b63ffffffff81168114610cb657600080fd5b8035610d1d81610d00565b919050565b600080600060608486031215610d3757600080fd5b8335610d4281610ca1565b925060208481013567ffffffffffffffff80821115610d6057600080fd5b818701915087601f830112610d7457600080fd5b813581811115610d8657610d86610cb9565b610d98601f8201601f19168501610ccf565b91508082528884828501011115610dae57600080fd5b8084840185840137600084828401015250809450505050610dd160408501610d12565b90509250925092565b600081518084526020808501808196508360051b810191508286016000805b86811015610e5c578385038a52825180518087529087019087870190845b81811015610e47578351805184528a01516001600160601b03168a84015292890192604090920191600101610e17565b50509a87019a95505091850191600101610df9565b509298975050505050505050565b602081526000610e7d6020830184610dda565b9392505050565b60008083601f840112610e9657600080fd5b50813567ffffffffffffffff811115610eae57600080fd5b6020830191508360208260051b8501011115610ec957600080fd5b9250929050565b60008060008060008060808789031215610ee957600080fd5b8635610ef481610ca1565b95506020870135610f0481610d00565b9450604087013567ffffffffffffffff80821115610f2157600080fd5b818901915089601f830112610f3557600080fd5b813581811115610f4457600080fd5b8a6020828501011115610f5657600080fd5b602083019650809550506060890135915080821115610f7457600080fd5b50610f8189828a01610e84565b979a9699509497509295939492505050565b600081518084526020808501945080840160005b83811015610fc957815163ffffffff1687529582019590820190600101610fa7565b509495945050505050565b600060208083528351608082850152610ff060a0850182610f93565b905081850151601f198086840301604087015261100d8383610f93565b9250604087015191508086840301606087015261102a8383610f93565b60608801518782038301608089015280518083529194508501925084840190600581901b8501860160005b82811015611081578487830301845261106f828751610f93565b95880195938801939150600101611055565b509998505050505050505050565b6000806000606084860312156110a457600080fd5b83356110af81610ca1565b92506020840135915060408401356110c681610d00565b809150509250925092565b8281526040602082015260006110ea6040830184610dda565b949350505050565b60006020828403121561110457600080fd5b8151610e7d81610ca1565b634e487b7160e01b600052603260045260246000fd5b600067ffffffffffffffff82111561113f5761113f610cb9565b5060051b60200190565b6000602080838503121561115c57600080fd5b825167ffffffffffffffff81111561117357600080fd5b8301601f8101851361118457600080fd5b805161119761119282611125565b610ccf565b81815260059190911b820183019083810190878311156111b657600080fd5b928401925b828410156111d4578351825292840192908401906111bb565b979650505050505050565b6000602082840312156111f157600080fd5b81516001600160601b0381168114610e7d57600080fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561123257611232611208565b5060010190565b63ffffffff84168152604060208201819052810182905260006001600160fb1b0383111561126657600080fd5b8260051b8085606085013760009201606001918252509392505050565b6000602080838503121561129657600080fd5b825167ffffffffffffffff8111156112ad57600080fd5b8301601f810185136112be57600080fd5b80516112cc61119282611125565b81815260059190911b820183019083810190878311156112eb57600080fd5b928401925b828410156111d457835161130381610d00565b825292840192908401906112f0565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b63ffffffff8416815260406020820152600061135b604083018486611312565b95945050505050565b60006020828403121561137657600080fd5b81516001600160c01b0381168114610e7d57600080fd5b60006020828403121561139f57600080fd5b8151610e7d81610d00565b600060ff821660ff8114156113c1576113c1611208565b60010192915050565b6040815260006113de604083018587611312565b905063ffffffff83166020830152949350505050565b60006040820163ffffffff851683526020604081850152818551808452606086019150828701935060005b8181101561143b5784518352938301939183019160010161141f565b5090979650505050505050565b6000835160005b81811015611469576020818701810151858301520161144f565b81811115611478576000828501525b506001600160f81b031993909316919092019081526001019291505056fea2646970667358221220a41cb9d8797cf9e924b93739929441e961697d752c0a832c9971b431d6f3709d64736f6c634300080c0033", + ABI: "[{\"type\":\"function\",\"name\":\"getCheckSignaturesIndices\",\"inputs\":[{\"name\":\"registryCoordinator\",\"type\":\"address\",\"internalType\":\"contractIBLSRegistryCoordinatorWithIndices\"},{\"name\":\"referenceBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"nonSignerOperatorIds\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structBLSOperatorStateRetriever.CheckSignaturesIndices\",\"components\":[{\"name\":\"nonSignerQuorumBitmapIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"quorumApkIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"totalStakeIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerStakeIndices\",\"type\":\"uint32[][]\",\"internalType\":\"uint32[][]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorState\",\"inputs\":[{\"name\":\"registryCoordinator\",\"type\":\"address\",\"internalType\":\"contractIBLSRegistryCoordinatorWithIndices\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"blockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple[][]\",\"internalType\":\"structBLSOperatorStateRetriever.Operator[][]\",\"components\":[{\"name\":\"operatorId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stake\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorState\",\"inputs\":[{\"name\":\"registryCoordinator\",\"type\":\"address\",\"internalType\":\"contractIBLSRegistryCoordinatorWithIndices\"},{\"name\":\"operatorId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"blockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"tuple[][]\",\"internalType\":\"structBLSOperatorStateRetriever.Operator[][]\",\"components\":[{\"name\":\"operatorId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stake\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]}],\"stateMutability\":\"view\"}]", + Bin: "0x608060405234801561001057600080fd5b506114cc806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80633563b0d1146100465780634f739f741461006f578063cefdc1d41461008f575b600080fd5b610059610054366004610d22565b6100b0565b6040516100669190610e6a565b60405180910390f35b61008261007d366004610ed0565b61042b565b6040516100669190610fd4565b6100a261009d36600461108f565b610ab2565b6040516100669291906110d1565b60606000846001600160a01b031663683048356040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061011691906110f2565b90506000856001600160a01b0316639e9923c26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610158573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061017c91906110f2565b90506000855167ffffffffffffffff81111561019a5761019a610cb9565b6040519080825280602002602001820160405280156101cd57816020015b60608152602001906001900390816101b85790505b50905060005b86518110156104205760008782815181106101f0576101f061110f565b016020015160405163889ae3e560e01b815260f89190911c6004820181905263ffffffff8916602483015291506000906001600160a01b0386169063889ae3e590604401600060405180830381865afa158015610251573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102799190810190611149565b9050805167ffffffffffffffff81111561029557610295610cb9565b6040519080825280602002602001820160405280156102da57816020015b60408051808201909152600080825260208201528152602001906001900390816102b35790505b508484815181106102ed576102ed61110f565b602002602001018190525060005b815181101561040a5760008282815181106103185761031861110f565b6020908102919091018101516040805180820182528281529051631b32722560e01b81526004810183905260ff8816602482015263ffffffff8e166044820152919350918201906001600160a01b038b1690631b32722590606401602060405180830381865afa158015610390573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b491906111df565b6001600160601b03168152508686815181106103d2576103d261110f565b602002602001015183815181106103eb576103eb61110f565b60200260200101819052505080806104029061121e565b9150506102fb565b50505080806104189061121e565b9150506101d3565b509695505050505050565b6104566040518060800160405280606081526020016060815260200160608152602001606081525090565b6000876001600160a01b031663683048356040518163ffffffff1660e01b8152600401602060405180830381865afa158015610496573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ba91906110f2565b90506104e76040518060800160405280606081526020016060815260200160608152602001606081525090565b6040516385020d4960e01b81526001600160a01b038a16906385020d4990610517908b9089908990600401611239565b600060405180830381865afa158015610534573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261055c9190810190611283565b815260405163e192e9ad60e01b81526001600160a01b0383169063e192e9ad9061058e908b908b908b9060040161133b565b600060405180830381865afa1580156105ab573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105d39190810190611283565b60408201528567ffffffffffffffff8111156105f1576105f1610cb9565b60405190808252806020026020018201604052801561062457816020015b606081526020019060019003908161060f5790505b50606082015260005b60ff81168711156109c35760008567ffffffffffffffff81111561065357610653610cb9565b60405190808252806020026020018201604052801561067c578160200160208202803683370190505b5083606001518360ff16815181106106965761069661110f565b602002602001018190525060005b868110156108c25760008c6001600160a01b0316633064620d8a8a858181106106cf576106cf61110f565b905060200201358e886000015186815181106106ed576106ed61110f565b60200260200101516040518463ffffffff1660e01b815260040161072a9392919092835263ffffffff918216602084015216604082015260600190565b602060405180830381865afa158015610747573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076b9190611364565b90508a8a8560ff168181106107825761078261110f565b6001600160c01b03841692013560f81c9190911c6001908116141590506108af57856001600160a01b031663480858668a8a858181106107c4576107c461110f565b905060200201358d8d8860ff168181106107e0576107e061110f565b6040516001600160e01b031960e087901b1681526004810194909452919091013560f81c60248301525063ffffffff8f166044820152606401602060405180830381865afa158015610836573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085a919061138d565b85606001518560ff16815181106108735761087361110f565b6020026020010151848151811061088c5761088c61110f565b63ffffffff90921660209283029190910190910152826108ab8161121e565b9350505b50806108ba8161121e565b9150506106a4565b5060008167ffffffffffffffff8111156108de576108de610cb9565b604051908082528060200260200182016040528015610907578160200160208202803683370190505b50905060005b828110156109885784606001518460ff168151811061092e5761092e61110f565b602002602001015181815181106109475761094761110f565b60200260200101518282815181106109615761096161110f565b63ffffffff90921660209283029190910190910152806109808161121e565b91505061090d565b508084606001518460ff16815181106109a3576109a361110f565b6020026020010181905250505080806109bb906113aa565b91505061062d565b506000896001600160a01b0316633561deb16040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2891906110f2565b60405163eda1076360e01b81529091506001600160a01b0382169063eda1076390610a5b908b908b908e906004016113ca565b600060405180830381865afa158015610a78573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610aa09190810190611283565b60208301525098975050505050505050565b6040805160018082528183019092526000916060918391602080830190803683370190505090508481600081518110610aed57610aed61110f565b60209081029190910101526040516385020d4960e01b81526000906001600160a01b038816906385020d4990610b2990889086906004016113f4565b600060405180830381865afa158015610b46573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b6e9190810190611283565b600081518110610b8057610b8061110f565b6020908102919091010151604051633064620d60e01b81526004810188905263ffffffff87811660248301529091166044820181905291506000906001600160a01b03891690633064620d90606401602060405180830381865afa158015610bec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c109190611364565b6001600160c01b031690506000610c2682610c44565b905081610c348a838a6100b0565b9550955050505050935093915050565b60606000805b610100811015610c9a576001811b915083821615610c8a57828160f81b604051602001610c78929190611448565b60405160208183030381529060405292505b610c938161121e565b9050610c4a565b5050919050565b6001600160a01b0381168114610cb657600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610cf857610cf8610cb9565b604052919050565b63ffffffff81168114610cb657600080fd5b8035610d1d81610d00565b919050565b600080600060608486031215610d3757600080fd5b8335610d4281610ca1565b925060208481013567ffffffffffffffff80821115610d6057600080fd5b818701915087601f830112610d7457600080fd5b813581811115610d8657610d86610cb9565b610d98601f8201601f19168501610ccf565b91508082528884828501011115610dae57600080fd5b8084840185840137600084828401015250809450505050610dd160408501610d12565b90509250925092565b600081518084526020808501808196508360051b810191508286016000805b86811015610e5c578385038a52825180518087529087019087870190845b81811015610e47578351805184528a01516001600160601b03168a84015292890192604090920191600101610e17565b50509a87019a95505091850191600101610df9565b509298975050505050505050565b602081526000610e7d6020830184610dda565b9392505050565b60008083601f840112610e9657600080fd5b50813567ffffffffffffffff811115610eae57600080fd5b6020830191508360208260051b8501011115610ec957600080fd5b9250929050565b60008060008060008060808789031215610ee957600080fd5b8635610ef481610ca1565b95506020870135610f0481610d00565b9450604087013567ffffffffffffffff80821115610f2157600080fd5b818901915089601f830112610f3557600080fd5b813581811115610f4457600080fd5b8a6020828501011115610f5657600080fd5b602083019650809550506060890135915080821115610f7457600080fd5b50610f8189828a01610e84565b979a9699509497509295939492505050565b600081518084526020808501945080840160005b83811015610fc957815163ffffffff1687529582019590820190600101610fa7565b509495945050505050565b600060208083528351608082850152610ff060a0850182610f93565b905081850151601f198086840301604087015261100d8383610f93565b9250604087015191508086840301606087015261102a8383610f93565b60608801518782038301608089015280518083529194508501925084840190600581901b8501860160005b82811015611081578487830301845261106f828751610f93565b95880195938801939150600101611055565b509998505050505050505050565b6000806000606084860312156110a457600080fd5b83356110af81610ca1565b92506020840135915060408401356110c681610d00565b809150509250925092565b8281526040602082015260006110ea6040830184610dda565b949350505050565b60006020828403121561110457600080fd5b8151610e7d81610ca1565b634e487b7160e01b600052603260045260246000fd5b600067ffffffffffffffff82111561113f5761113f610cb9565b5060051b60200190565b6000602080838503121561115c57600080fd5b825167ffffffffffffffff81111561117357600080fd5b8301601f8101851361118457600080fd5b805161119761119282611125565b610ccf565b81815260059190911b820183019083810190878311156111b657600080fd5b928401925b828410156111d4578351825292840192908401906111bb565b979650505050505050565b6000602082840312156111f157600080fd5b81516001600160601b0381168114610e7d57600080fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561123257611232611208565b5060010190565b63ffffffff84168152604060208201819052810182905260006001600160fb1b0383111561126657600080fd5b8260051b8085606085013760009201606001918252509392505050565b6000602080838503121561129657600080fd5b825167ffffffffffffffff8111156112ad57600080fd5b8301601f810185136112be57600080fd5b80516112cc61119282611125565b81815260059190911b820183019083810190878311156112eb57600080fd5b928401925b828410156111d457835161130381610d00565b825292840192908401906112f0565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b63ffffffff8416815260406020820152600061135b604083018486611312565b95945050505050565b60006020828403121561137657600080fd5b81516001600160c01b0381168114610e7d57600080fd5b60006020828403121561139f57600080fd5b8151610e7d81610d00565b600060ff821660ff8114156113c1576113c1611208565b60010192915050565b6040815260006113de604083018587611312565b905063ffffffff83166020830152949350505050565b60006040820163ffffffff851683526020604081850152818551808452606086019150828701935060005b8181101561143b5784518352938301939183019160010161141f565b5090979650505050505050565b6000835160005b81811015611469576020818701810151858301520161144f565b81811115611478576000828501525b506001600160f81b031993909316919092019081526001019291505056fea2646970667358221220bb7598eb8c072001f48565267ff944a12ddc3fb3ea780fbc65699e9c973fa08964736f6c634300080c0033", } // ContractBLSOperatorStateRetrieverABI is the input ABI used to generate the binding from. diff --git a/contracts/bindings/BLSPubkeyRegistry/binding.go b/contracts/bindings/BLSPubkeyRegistry/binding.go index 17d176c179..4de7f62a62 100644 --- a/contracts/bindings/BLSPubkeyRegistry/binding.go +++ b/contracts/bindings/BLSPubkeyRegistry/binding.go @@ -44,8 +44,8 @@ type IBLSPubkeyRegistryApkUpdate struct { // ContractBLSPubkeyRegistryMetaData contains all meta data concerning the ContractBLSPubkeyRegistry contract. var ContractBLSPubkeyRegistryMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"contractIRegistryCoordinator\",\"name\":\"_registryCoordinator\",\"type\":\"address\"},{\"internalType\":\"contractIBLSPublicKeyCompendium\",\"name\":\"_pubkeyCompendium\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"quorumNumbers\",\"type\":\"bytes\"}],\"name\":\"OperatorAddedToQuorums\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"quorumNumbers\",\"type\":\"bytes\"}],\"name\":\"OperatorRemovedFromQuorums\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"quorumNumbers\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"structBN254.G1Point\",\"name\":\"pubkey\",\"type\":\"tuple\"}],\"name\":\"deregisterOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"}],\"name\":\"getApkForQuorum\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"structBN254.G1Point\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"blockNumber\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getApkHashForQuorumAtBlockNumberFromIndex\",\"outputs\":[{\"internalType\":\"bytes24\",\"name\":\"\",\"type\":\"bytes24\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"quorumNumbers\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"}],\"name\":\"getApkIndicesForQuorumsAtBlockNumber\",\"outputs\":[{\"internalType\":\"uint32[]\",\"name\":\"\",\"type\":\"uint32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getApkUpdateForQuorumByIndex\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes24\",\"name\":\"apkHash\",\"type\":\"bytes24\"},{\"internalType\":\"uint32\",\"name\":\"updateBlockNumber\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"nextUpdateBlockNumber\",\"type\":\"uint32\"}],\"internalType\":\"structIBLSPubkeyRegistry.ApkUpdate\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"pubkeyHash\",\"type\":\"bytes32\"}],\"name\":\"getOperatorFromPubkeyHash\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"}],\"name\":\"getQuorumApkHistoryLength\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pubkeyCompendium\",\"outputs\":[{\"internalType\":\"contractIBLSPublicKeyCompendium\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"name\":\"quorumApk\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"quorumApkUpdates\",\"outputs\":[{\"internalType\":\"bytes24\",\"name\":\"apkHash\",\"type\":\"bytes24\"},{\"internalType\":\"uint32\",\"name\":\"updateBlockNumber\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"nextUpdateBlockNumber\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"quorumNumbers\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"structBN254.G1Point\",\"name\":\"pubkey\",\"type\":\"tuple\"}],\"name\":\"registerOperator\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"registryCoordinator\",\"outputs\":[{\"internalType\":\"contractIRegistryCoordinator\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60c06040523480156200001157600080fd5b506040516200158d3803806200158d833981016040819052620000349162000138565b6001600160a01b03808316608052811660a0528181620000536200005d565b5050505062000177565b600054610100900460ff1615620000ca5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811610156200011d576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200013557600080fd5b50565b600080604083850312156200014c57600080fd5b825162000159816200011f565b60208401519092506200016c816200011f565b809150509250929050565b60805160a0516113dc620001b16000396000818160e401526105990152600081816101f10152818161033401526104ac01526113dc6000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c80636d14a987116100715780636d14a987146101ec5780637225057e146102135780637f5eccbb14610261578063c1af6b24146102a2578063eda10763146102cf578063fb81a7be146102ef57600080fd5b806303ce4bad146100b9578063187548c8146100df57806324369b2a1461011e57806332de63081461013357806347b314e81461016f57806363a9451014610182575b600080fd5b6100cc6100c7366004610f4d565b610327565b6040519081526020015b60405180910390f35b6101067f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100d6565b61013161012c366004610f4d565b6104a1565b005b61015a610141366004611017565b6002602052600090815260409020805460019091015482565b604080519283526020830191909152016100d6565b61010661017d366004611039565b610580565b6101d1610190366004611017565b60408051808201909152600080825260208201525060ff16600090815260026020908152604091829020825180840190935280548352600101549082015290565b604080518251815260209283015192810192909252016100d6565b6101067f000000000000000000000000000000000000000000000000000000000000000081565b610226610221366004611052565b610612565b60408051825167ffffffffffffffff1916815260208084015163ffffffff9081169183019190915292820151909216908201526060016100d6565b61027461026f366004611052565b6106a4565b6040805167ffffffffffffffff19909416845263ffffffff92831660208501529116908201526060016100d6565b6102b56102b036600461107c565b6106ef565b60405167ffffffffffffffff1990911681526020016100d6565b6102e26102dd3660046110c4565b610778565b6040516100d6919061113c565b6103126102fd366004611017565b60ff1660009081526001602052604090205490565b60405163ffffffff90911681526020016100d6565b6000336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461037a5760405162461bcd60e51b815260040161037190611186565b60405180910390fd5b6000610385836109d0565b90507fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb581141561041d5760405162461bcd60e51b815260206004820152603f60248201527f424c535075626b657952656769737472792e72656769737465724f706572617460448201527f6f723a2063616e6e6f74207265676973746572207a65726f207075626b6579006064820152608401610371565b846001600160a01b031661043082610580565b6001600160a01b0316146104565760405162461bcd60e51b8152600401610371906111fd565b6104608484610a13565b7f5358c5b42179178c8fc757734ac2a3198f9071c765ee0d8389211525f5005246858560405161049192919061125b565b60405180910390a1949350505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104e95760405162461bcd60e51b815260040161037190611186565b60006104f4826109d0565b9050836001600160a01b031661050982610580565b6001600160a01b03161461052f5760405162461bcd60e51b8152600401610371906111fd565b6105418361053c84610bd2565b610a13565b7f14a5172b312e9d2c22b8468f9c70ec2caa9de934fe380734fbc6f3beff2b14ba848460405161057292919061125b565b60405180910390a150505050565b60405163745dcd7360e11b8152600481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063e8bb9ae690602401602060405180830381865afa1580156105e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060c91906112c0565b92915050565b604080516060810182526000808252602080830182905282840182905260ff86168252600190529190912080548390811061064f5761064f6112dd565b600091825260209182902060408051606081018252919092015467ffffffffffffffff1981841b16825263ffffffff600160c01b8204811694830194909452600160e01b900490921690820152905092915050565b600160205281600052604060002081815481106106c057600080fd5b600091825260209091200154604081901b925063ffffffff600160c01b820481169250600160e01b9091041683565b60ff83166000908152600160205260408120805482919084908110610716576107166112dd565b600091825260209182902060408051606081018252919092015467ffffffffffffffff1981841b16825263ffffffff600160c01b8204811694830194909452600160e01b900490921690820152905061076f8185610c91565b51949350505050565b606060008367ffffffffffffffff81111561079557610795610eb7565b6040519080825280602002602001820160405280156107be578160200160208202803683370190505b50905060005b848110156109c75760008686838181106107e0576107e06112dd565b919091013560f81c600081815260016020526040902054909250905063ffffffff81161580610849575060ff82166000908152600160205260408120805490919061082d5761082d6112dd565b600091825260209091200154600160c01b900463ffffffff1686105b156108e25760405162461bcd60e51b815260206004820152605e60248201527f424c535075626b657952656769737472792e67657441706b496e64696365734660448201527f6f7251756f72756d734174426c6f636b4e756d6265723a20626c6f636b4e756d60648201527f626572206973206265666f726520746865206669727374207570646174650000608482015260a401610371565b60005b8163ffffffff168163ffffffff1610156109b15760ff83166000908152600160208190526040909120889161091a8486611309565b6109249190611309565b63ffffffff168154811061093a5761093a6112dd565b600091825260209091200154600160c01b900463ffffffff161161099f5760016109648284611309565b61096e9190611309565b858581518110610980576109806112dd565b602002602001019063ffffffff16908163ffffffff16815250506109b1565b806109a98161132e565b9150506108e5565b50505080806109bf90611352565b9150506107c4565b50949350505050565b6000816000015182602001516040516020016109f6929190918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b604080518082019091526000808252602082015260005b8351811015610bcc576000848281518110610a4757610a476112dd565b0160209081015160f81c600081815260019092526040909120549091508015610ac75760ff821660009081526001602081905260409091204391610a8b908461136d565b81548110610a9b57610a9b6112dd565b90600052602060002001600001601c6101000a81548163ffffffff021916908363ffffffff1602179055505b60ff82166000908152600260209081526040918290208251808401909352805483526001015490820152610afb9086610dde565b60ff8316600090815260026020908152604080832084518155828501516001909101558051606081018252838152918201839052810191909152909450610b41856109d0565b67ffffffffffffffff1916815263ffffffff438116602080840191825260ff90951660009081526001808752604080832080548084018255908452979092208551970180549351958301518516600160e01b026001600160e01b0396909516600160c01b026001600160e01b03199094169790921c9690961791909117929092161790555001610a2a565b50505050565b60408051808201909152600080825260208201528151158015610bf757506020820151155b15610c15575050604080518082019091526000808252602082015290565b6040518060400160405280836000015181526020017f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478460200151610c5a9190611384565b610c84907f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4761136d565b905292915050565b919050565b816020015163ffffffff168163ffffffff161015610d2a5760405162461bcd60e51b815260206004820152604a60248201527f424c535075626b657952656769737472792e5f76616c696461746541706b486160448201527f7368466f7251756f72756d4174426c6f636b4e756d6265723a20696e646578206064820152691d1bdbc81c9958d95b9d60b21b608482015260a401610371565b604082015163ffffffff161580610d505750816040015163ffffffff168163ffffffff16105b610dda5760405162461bcd60e51b815260206004820152604f60248201527f424c535075626b657952656769737472792e5f76616c696461746541706b486160448201527f7368466f7251756f72756d4174426c6f636b4e756d6265723a206e6f74206c6160648201526e746573742061706b2075706461746560881b608482015260a401610371565b5050565b6040805180820190915260008082526020820152610dfa610e81565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa9050808015610e3957610e3b565bfe5b5080610e795760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b6044820152606401610371565b505092915050565b60405180608001604052806004906020820280368337509192915050565b6001600160a01b0381168114610eb457600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610ef657610ef6610eb7565b604052919050565b600060408284031215610f1057600080fd5b6040516040810181811067ffffffffffffffff82111715610f3357610f33610eb7565b604052823581526020928301359281019290925250919050565b600080600060808486031215610f6257600080fd5b8335610f6d81610e9f565b925060208481013567ffffffffffffffff80821115610f8b57600080fd5b818701915087601f830112610f9f57600080fd5b813581811115610fb157610fb1610eb7565b610fc3601f8201601f19168501610ecd565b91508082528884828501011115610fd957600080fd5b8084840185840137600084828401015250809450505050610ffd8560408601610efe565b90509250925092565b803560ff81168114610c8c57600080fd5b60006020828403121561102957600080fd5b61103282611006565b9392505050565b60006020828403121561104b57600080fd5b5035919050565b6000806040838503121561106557600080fd5b61106e83611006565b946020939093013593505050565b60008060006060848603121561109157600080fd5b61109a84611006565b9250602084013563ffffffff811681146110b357600080fd5b929592945050506040919091013590565b6000806000604084860312156110d957600080fd5b833567ffffffffffffffff808211156110f157600080fd5b818601915086601f83011261110557600080fd5b81358181111561111457600080fd5b87602082850101111561112657600080fd5b6020928301989097509590910135949350505050565b6020808252825182820181905260009190848201906040850190845b8181101561117a57835163ffffffff1683529284019291840191600101611158565b50909695505050505050565b60208082526051908201527f424c535075626b657952656769737472792e6f6e6c795265676973747279436f60408201527f6f7264696e61746f723a2063616c6c6572206973206e6f74207468652072656760608201527034b9ba393c9031b7b7b93234b730ba37b960791b608082015260a00190565b602080825260409082018190527f424c535075626b657952656769737472792e72656769737465724f7065726174908201527f6f723a206f70657261746f7220646f6573206e6f74206f776e207075626b6579606082015260800190565b60018060a01b038316815260006020604081840152835180604085015260005b818110156112975785810183015185820160600152820161127b565b818111156112a9576000606083870101525b50601f01601f191692909201606001949350505050565b6000602082840312156112d257600080fd5b815161103281610e9f565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600063ffffffff83811690831681811015611326576113266112f3565b039392505050565b600063ffffffff80831681811415611348576113486112f3565b6001019392505050565b6000600019821415611366576113666112f3565b5060010190565b60008282101561137f5761137f6112f3565b500390565b6000826113a157634e487b7160e01b600052601260045260246000fd5b50069056fea264697066735822122095fd528c82c0a70b37f00e8cc25059ea0ee7857c605d0eb6c4b529b365d8b24264736f6c634300080c0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_registryCoordinator\",\"type\":\"address\",\"internalType\":\"contractIRegistryCoordinator\"},{\"name\":\"_pubkeyCompendium\",\"type\":\"address\",\"internalType\":\"contractIBLSPublicKeyCompendium\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deregisterOperator\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"pubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getApkForQuorum\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getApkHashForQuorumAtBlockNumberFromIndex\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"blockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes24\",\"internalType\":\"bytes24\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getApkIndicesForQuorumsAtBlockNumber\",\"inputs\":[{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"blockNumber\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getApkUpdateForQuorumByIndex\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIBLSPubkeyRegistry.ApkUpdate\",\"components\":[{\"name\":\"apkHash\",\"type\":\"bytes24\",\"internalType\":\"bytes24\"},{\"name\":\"updateBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"nextUpdateBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorFromPubkeyHash\",\"inputs\":[{\"name\":\"pubkeyHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getQuorumApkHistoryLength\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pubkeyCompendium\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIBLSPublicKeyCompendium\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"quorumApk\",\"inputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"quorumApkUpdates\",\"inputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"apkHash\",\"type\":\"bytes24\",\"internalType\":\"bytes24\"},{\"name\":\"updateBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"nextUpdateBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registerOperator\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"pubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registryCoordinator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIRegistryCoordinator\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorAddedToQuorums\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorRemovedFromQuorums\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false}]", + Bin: "0x60c06040523480156200001157600080fd5b506040516200158d3803806200158d833981016040819052620000349162000138565b6001600160a01b03808316608052811660a0528181620000536200005d565b5050505062000177565b600054610100900460ff1615620000ca5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811610156200011d576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200013557600080fd5b50565b600080604083850312156200014c57600080fd5b825162000159816200011f565b60208401519092506200016c816200011f565b809150509250929050565b60805160a0516113dc620001b16000396000818160e401526105990152600081816101f10152818161033401526104ac01526113dc6000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c80636d14a987116100715780636d14a987146101ec5780637225057e146102135780637f5eccbb14610261578063c1af6b24146102a2578063eda10763146102cf578063fb81a7be146102ef57600080fd5b806303ce4bad146100b9578063187548c8146100df57806324369b2a1461011e57806332de63081461013357806347b314e81461016f57806363a9451014610182575b600080fd5b6100cc6100c7366004610f4d565b610327565b6040519081526020015b60405180910390f35b6101067f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100d6565b61013161012c366004610f4d565b6104a1565b005b61015a610141366004611017565b6002602052600090815260409020805460019091015482565b604080519283526020830191909152016100d6565b61010661017d366004611039565b610580565b6101d1610190366004611017565b60408051808201909152600080825260208201525060ff16600090815260026020908152604091829020825180840190935280548352600101549082015290565b604080518251815260209283015192810192909252016100d6565b6101067f000000000000000000000000000000000000000000000000000000000000000081565b610226610221366004611052565b610612565b60408051825167ffffffffffffffff1916815260208084015163ffffffff9081169183019190915292820151909216908201526060016100d6565b61027461026f366004611052565b6106a4565b6040805167ffffffffffffffff19909416845263ffffffff92831660208501529116908201526060016100d6565b6102b56102b036600461107c565b6106ef565b60405167ffffffffffffffff1990911681526020016100d6565b6102e26102dd3660046110c4565b610778565b6040516100d6919061113c565b6103126102fd366004611017565b60ff1660009081526001602052604090205490565b60405163ffffffff90911681526020016100d6565b6000336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461037a5760405162461bcd60e51b815260040161037190611186565b60405180910390fd5b6000610385836109d0565b90507fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb581141561041d5760405162461bcd60e51b815260206004820152603f60248201527f424c535075626b657952656769737472792e72656769737465724f706572617460448201527f6f723a2063616e6e6f74207265676973746572207a65726f207075626b6579006064820152608401610371565b846001600160a01b031661043082610580565b6001600160a01b0316146104565760405162461bcd60e51b8152600401610371906111fd565b6104608484610a13565b7f5358c5b42179178c8fc757734ac2a3198f9071c765ee0d8389211525f5005246858560405161049192919061125b565b60405180910390a1949350505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104e95760405162461bcd60e51b815260040161037190611186565b60006104f4826109d0565b9050836001600160a01b031661050982610580565b6001600160a01b03161461052f5760405162461bcd60e51b8152600401610371906111fd565b6105418361053c84610bd2565b610a13565b7f14a5172b312e9d2c22b8468f9c70ec2caa9de934fe380734fbc6f3beff2b14ba848460405161057292919061125b565b60405180910390a150505050565b60405163745dcd7360e11b8152600481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063e8bb9ae690602401602060405180830381865afa1580156105e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060c91906112c0565b92915050565b604080516060810182526000808252602080830182905282840182905260ff86168252600190529190912080548390811061064f5761064f6112dd565b600091825260209182902060408051606081018252919092015467ffffffffffffffff1981841b16825263ffffffff600160c01b8204811694830194909452600160e01b900490921690820152905092915050565b600160205281600052604060002081815481106106c057600080fd5b600091825260209091200154604081901b925063ffffffff600160c01b820481169250600160e01b9091041683565b60ff83166000908152600160205260408120805482919084908110610716576107166112dd565b600091825260209182902060408051606081018252919092015467ffffffffffffffff1981841b16825263ffffffff600160c01b8204811694830194909452600160e01b900490921690820152905061076f8185610c91565b51949350505050565b606060008367ffffffffffffffff81111561079557610795610eb7565b6040519080825280602002602001820160405280156107be578160200160208202803683370190505b50905060005b848110156109c75760008686838181106107e0576107e06112dd565b919091013560f81c600081815260016020526040902054909250905063ffffffff81161580610849575060ff82166000908152600160205260408120805490919061082d5761082d6112dd565b600091825260209091200154600160c01b900463ffffffff1686105b156108e25760405162461bcd60e51b815260206004820152605e60248201527f424c535075626b657952656769737472792e67657441706b496e64696365734660448201527f6f7251756f72756d734174426c6f636b4e756d6265723a20626c6f636b4e756d60648201527f626572206973206265666f726520746865206669727374207570646174650000608482015260a401610371565b60005b8163ffffffff168163ffffffff1610156109b15760ff83166000908152600160208190526040909120889161091a8486611309565b6109249190611309565b63ffffffff168154811061093a5761093a6112dd565b600091825260209091200154600160c01b900463ffffffff161161099f5760016109648284611309565b61096e9190611309565b858581518110610980576109806112dd565b602002602001019063ffffffff16908163ffffffff16815250506109b1565b806109a98161132e565b9150506108e5565b50505080806109bf90611352565b9150506107c4565b50949350505050565b6000816000015182602001516040516020016109f6929190918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b604080518082019091526000808252602082015260005b8351811015610bcc576000848281518110610a4757610a476112dd565b0160209081015160f81c600081815260019092526040909120549091508015610ac75760ff821660009081526001602081905260409091204391610a8b908461136d565b81548110610a9b57610a9b6112dd565b90600052602060002001600001601c6101000a81548163ffffffff021916908363ffffffff1602179055505b60ff82166000908152600260209081526040918290208251808401909352805483526001015490820152610afb9086610dde565b60ff8316600090815260026020908152604080832084518155828501516001909101558051606081018252838152918201839052810191909152909450610b41856109d0565b67ffffffffffffffff1916815263ffffffff438116602080840191825260ff90951660009081526001808752604080832080548084018255908452979092208551970180549351958301518516600160e01b026001600160e01b0396909516600160c01b026001600160e01b03199094169790921c9690961791909117929092161790555001610a2a565b50505050565b60408051808201909152600080825260208201528151158015610bf757506020820151155b15610c15575050604080518082019091526000808252602082015290565b6040518060400160405280836000015181526020017f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478460200151610c5a9190611384565b610c84907f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4761136d565b905292915050565b919050565b816020015163ffffffff168163ffffffff161015610d2a5760405162461bcd60e51b815260206004820152604a60248201527f424c535075626b657952656769737472792e5f76616c696461746541706b486160448201527f7368466f7251756f72756d4174426c6f636b4e756d6265723a20696e646578206064820152691d1bdbc81c9958d95b9d60b21b608482015260a401610371565b604082015163ffffffff161580610d505750816040015163ffffffff168163ffffffff16105b610dda5760405162461bcd60e51b815260206004820152604f60248201527f424c535075626b657952656769737472792e5f76616c696461746541706b486160448201527f7368466f7251756f72756d4174426c6f636b4e756d6265723a206e6f74206c6160648201526e746573742061706b2075706461746560881b608482015260a401610371565b5050565b6040805180820190915260008082526020820152610dfa610e81565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa9050808015610e3957610e3b565bfe5b5080610e795760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b6044820152606401610371565b505092915050565b60405180608001604052806004906020820280368337509192915050565b6001600160a01b0381168114610eb457600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610ef657610ef6610eb7565b604052919050565b600060408284031215610f1057600080fd5b6040516040810181811067ffffffffffffffff82111715610f3357610f33610eb7565b604052823581526020928301359281019290925250919050565b600080600060808486031215610f6257600080fd5b8335610f6d81610e9f565b925060208481013567ffffffffffffffff80821115610f8b57600080fd5b818701915087601f830112610f9f57600080fd5b813581811115610fb157610fb1610eb7565b610fc3601f8201601f19168501610ecd565b91508082528884828501011115610fd957600080fd5b8084840185840137600084828401015250809450505050610ffd8560408601610efe565b90509250925092565b803560ff81168114610c8c57600080fd5b60006020828403121561102957600080fd5b61103282611006565b9392505050565b60006020828403121561104b57600080fd5b5035919050565b6000806040838503121561106557600080fd5b61106e83611006565b946020939093013593505050565b60008060006060848603121561109157600080fd5b61109a84611006565b9250602084013563ffffffff811681146110b357600080fd5b929592945050506040919091013590565b6000806000604084860312156110d957600080fd5b833567ffffffffffffffff808211156110f157600080fd5b818601915086601f83011261110557600080fd5b81358181111561111457600080fd5b87602082850101111561112657600080fd5b6020928301989097509590910135949350505050565b6020808252825182820181905260009190848201906040850190845b8181101561117a57835163ffffffff1683529284019291840191600101611158565b50909695505050505050565b60208082526051908201527f424c535075626b657952656769737472792e6f6e6c795265676973747279436f60408201527f6f7264696e61746f723a2063616c6c6572206973206e6f74207468652072656760608201527034b9ba393c9031b7b7b93234b730ba37b960791b608082015260a00190565b602080825260409082018190527f424c535075626b657952656769737472792e72656769737465724f7065726174908201527f6f723a206f70657261746f7220646f6573206e6f74206f776e207075626b6579606082015260800190565b60018060a01b038316815260006020604081840152835180604085015260005b818110156112975785810183015185820160600152820161127b565b818111156112a9576000606083870101525b50601f01601f191692909201606001949350505050565b6000602082840312156112d257600080fd5b815161103281610e9f565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600063ffffffff83811690831681811015611326576113266112f3565b039392505050565b600063ffffffff80831681811415611348576113486112f3565b6001019392505050565b6000600019821415611366576113666112f3565b5060010190565b60008282101561137f5761137f6112f3565b500390565b6000826113a157634e487b7160e01b600052601260045260246000fd5b50069056fea26469706673582212202b869eb5c17656b23a1f20a21ed234d4b252b6a8cf629742fe7019133b5e390f64736f6c634300080c0033", } // ContractBLSPubkeyRegistryABI is the input ABI used to generate the binding from. diff --git a/contracts/bindings/BLSPublicKeyCompendium/binding.go b/contracts/bindings/BLSPublicKeyCompendium/binding.go index f09dfad2bb..d085ae7c79 100644 --- a/contracts/bindings/BLSPublicKeyCompendium/binding.go +++ b/contracts/bindings/BLSPublicKeyCompendium/binding.go @@ -43,8 +43,8 @@ type BN254G2Point struct { // ContractBLSPublicKeyCompendiumMetaData contains all meta data concerning the ContractBLSPublicKeyCompendium contract. var ContractBLSPublicKeyCompendiumMetaData = &bind.MetaData{ - ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structBN254.G1Point\",\"name\":\"pubkeyG1\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"X\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"Y\",\"type\":\"uint256[2]\"}],\"indexed\":false,\"internalType\":\"structBN254.G2Point\",\"name\":\"pubkeyG2\",\"type\":\"tuple\"}],\"name\":\"NewPubkeyRegistration\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"getMessageHash\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"structBN254.G1Point\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"operatorToPubkeyHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"pubkeyHashToOperator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"structBN254.G1Point\",\"name\":\"signedMessageHash\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"structBN254.G1Point\",\"name\":\"pubkeyG1\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"X\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"Y\",\"type\":\"uint256[2]\"}],\"internalType\":\"structBN254.G2Point\",\"name\":\"pubkeyG2\",\"type\":\"tuple\"}],\"name\":\"registerBLSPublicKey\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b50610f81806100206000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c8063161a334d146100515780631f5ac1b214610066578063de29fac01461008f578063e8bb9ae6146100bd575b600080fd5b61006461005f366004610d03565b6100fe565b005b610079610074366004610d7c565b61045b565b6040516100869190610dac565b60405180910390f35b6100af61009d366004610d7c565b60006020819052908152604090205481565b604051908152602001610086565b6100e66100cb366004610dc3565b6001602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610086565b6000610109836104f6565b33600090815260208190526040902054909150156101ac5760405162461bcd60e51b815260206004820152604f60248201527f424c535075626c69634b6579436f6d70656e6469756d2e72656769737465724260448201527f4c535075626c69634b65793a206f70657261746f7220616c726561647920726560648201526e6769737465726564207075626b657960881b608482015260a4015b60405180910390fd5b6000818152600160205260409020546001600160a01b03161561024a5760405162461bcd60e51b815260206004820152604a60248201527f424c535075626c69634b6579436f6d70656e6469756d2e72656769737465724260448201527f4c535075626c69634b65793a207075626c6963206b657920616c7265616479206064820152691c9959da5cdd195c995960b21b608482015260a4016101a3565b60006102553361045b565b8551602080880151875188830151885189850151875186890151604051999a506000997f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001996102ad9990989796959493929101610e05565b6040516020818303038152906040528051906020012060001c6102d09190610e51565b90506103376102e96102e28784610539565b88906105d0565b6102f1610664565b61033161032a85610324604080518082018252600080825260209182015281518083019092526001825260029082015290565b90610539565b86906105d0565b87610724565b6103ec5760405162461bcd60e51b815260206004820152607460248201527f424c535075626c69634b6579436f6d70656e6469756d2e72656769737465724260448201527f4c535075626c69634b65793a2065697468657220746865204731207369676e6160648201527f747572652069732077726f6e672c206f7220473120616e6420473220707269766084820152730c2e8ca40d6caf240c8de40dcdee840dac2e8c6d60631b60a482015260c4016101a3565b3360008181526020818152604080832087905586835260019091529081902080546001600160a01b03191683179055517fe3fb6613af2e8930cf85d47fcf6db10192224a64c6cbe8023e0eee1ba38280419061044b9088908890610e73565b60405180910390a2505050505050565b60408051808201909152600080825260208201526040516bffffffffffffffffffffffff19606084811b8216602084015230901b1660348201524660488201527f456967656e4c617965725f424e3235345f5075626b65795f52656769737472616068820152633a34b7b760e11b60888201526104f090608c0160405160208183030381529060405280519060200120610991565b92915050565b60008160000151826020015160405160200161051c929190918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b6040805180820190915260008082526020820152610555610b4b565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa90508080156105885761058a565bfe5b50806105c85760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b60448201526064016101a3565b505092915050565b60408051808201909152600080825260208201526105ec610b69565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa90508080156105885750806105c85760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b60448201526064016101a3565b61066c610b87565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b604080518082018252858152602080820185905282518084019093528583528201839052600091610753610bac565b60005b600281101561091857600061076c826006610ed9565b905084826002811061078057610780610ead565b60200201515183610792836000610ef8565b600c81106107a2576107a2610ead565b60200201528482600281106107b9576107b9610ead565b602002015160200151838260016107d09190610ef8565b600c81106107e0576107e0610ead565b60200201528382600281106107f7576107f7610ead565b602002015151518361080a836002610ef8565b600c811061081a5761081a610ead565b602002015283826002811061083157610831610ead565b602002015151600160200201518361084a836003610ef8565b600c811061085a5761085a610ead565b602002015283826002811061087157610871610ead565b60200201516020015160006002811061088c5761088c610ead565b60200201518361089d836004610ef8565b600c81106108ad576108ad610ead565b60200201528382600281106108c4576108c4610ead565b6020020151602001516001600281106108df576108df610ead565b6020020151836108f0836005610ef8565b600c811061090057610900610ead565b6020020152508061091081610f10565b915050610756565b50610921610bcb565b60006020826101808560086107d05a03fa90508080156105885750806109815760405162461bcd60e51b81526020600482015260156024820152741c185a5c9a5b99cb5bdc18dbd9194b59985a5b1959605a1b60448201526064016101a3565b5051151598975050505050505050565b6040805180820190915260008082526020820152600080806109c1600080516020610f2c83398151915286610e51565b90505b6109cd81610a21565b9093509150600080516020610f2c833981519152828309831415610a07576040805180820190915290815260208101919091529392505050565b600080516020610f2c8339815191526001820890506109c4565b60008080600080516020610f2c8339815191526003600080516020610f2c83398151915286600080516020610f2c833981519152888909090890506000610a97827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f52600080516020610f2c833981519152610aa3565b91959194509092505050565b600080610aae610bcb565b610ab6610be9565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa9250828015610588575082610b405760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c75726500000000000060448201526064016101a3565b505195945050505050565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6040518060400160405280610b9a610c07565b8152602001610ba7610c07565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715610c5e57610c5e610c25565b60405290565b600060408284031215610c7657600080fd5b6040516040810181811067ffffffffffffffff82111715610c9957610c99610c25565b604052823581526020928301359281019290925250919050565b600082601f830112610cc457600080fd5b610ccc610c3b565b806040840185811115610cde57600080fd5b845b81811015610cf8578035845260209384019301610ce0565b509095945050505050565b6000806000838503610100811215610d1a57600080fd5b610d248686610c64565b9350610d338660408701610c64565b92506080607f1982011215610d4757600080fd5b50610d50610c3b565b610d5d8660808701610cb3565b8152610d6c8660c08701610cb3565b6020820152809150509250925092565b600060208284031215610d8e57600080fd5b81356001600160a01b0381168114610da557600080fd5b9392505050565b8151815260208083015190820152604081016104f0565b600060208284031215610dd557600080fd5b5035919050565b8060005b6002811015610dff578151845260209384019390910190600101610de0565b50505050565b888152876020820152866040820152856060820152610e276080820186610ddc565b610e3460c0820185610ddc565b610100810192909252610120820152610140019695505050505050565b600082610e6e57634e487b7160e01b600052601260045260246000fd5b500690565b825181526020808401519082015260c08101610e93604083018451610ddc565b6020830151610ea56080840182610ddc565b509392505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615610ef357610ef3610ec3565b500290565b60008219821115610f0b57610f0b610ec3565b500190565b6000600019821415610f2457610f24610ec3565b506001019056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47a264697066735822122033dc2b8540eeda70a430dedae2c97a36ac4fab2c6b44d9ff472cc6e0e3a3dbad64736f6c634300080c0033", + ABI: "[{\"type\":\"function\",\"name\":\"getMessageHash\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorToPubkeyHash\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pubkeyHashToOperator\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registerBLSPublicKey\",\"inputs\":[{\"name\":\"signedMessageHash\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"pubkeyG1\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"pubkeyG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"NewPubkeyRegistration\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"pubkeyG1\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"pubkeyG2\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]}],\"anonymous\":false}]", + Bin: "0x608060405234801561001057600080fd5b50610f81806100206000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c8063161a334d146100515780631f5ac1b214610066578063de29fac01461008f578063e8bb9ae6146100bd575b600080fd5b61006461005f366004610d03565b6100fe565b005b610079610074366004610d7c565b61045b565b6040516100869190610dac565b60405180910390f35b6100af61009d366004610d7c565b60006020819052908152604090205481565b604051908152602001610086565b6100e66100cb366004610dc3565b6001602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610086565b6000610109836104f6565b33600090815260208190526040902054909150156101ac5760405162461bcd60e51b815260206004820152604f60248201527f424c535075626c69634b6579436f6d70656e6469756d2e72656769737465724260448201527f4c535075626c69634b65793a206f70657261746f7220616c726561647920726560648201526e6769737465726564207075626b657960881b608482015260a4015b60405180910390fd5b6000818152600160205260409020546001600160a01b03161561024a5760405162461bcd60e51b815260206004820152604a60248201527f424c535075626c69634b6579436f6d70656e6469756d2e72656769737465724260448201527f4c535075626c69634b65793a207075626c6963206b657920616c7265616479206064820152691c9959da5cdd195c995960b21b608482015260a4016101a3565b60006102553361045b565b8551602080880151875188830151885189850151875186890151604051999a506000997f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001996102ad9990989796959493929101610e05565b6040516020818303038152906040528051906020012060001c6102d09190610e51565b90506103376102e96102e28784610539565b88906105d0565b6102f1610664565b61033161032a85610324604080518082018252600080825260209182015281518083019092526001825260029082015290565b90610539565b86906105d0565b87610724565b6103ec5760405162461bcd60e51b815260206004820152607460248201527f424c535075626c69634b6579436f6d70656e6469756d2e72656769737465724260448201527f4c535075626c69634b65793a2065697468657220746865204731207369676e6160648201527f747572652069732077726f6e672c206f7220473120616e6420473220707269766084820152730c2e8ca40d6caf240c8de40dcdee840dac2e8c6d60631b60a482015260c4016101a3565b3360008181526020818152604080832087905586835260019091529081902080546001600160a01b03191683179055517fe3fb6613af2e8930cf85d47fcf6db10192224a64c6cbe8023e0eee1ba38280419061044b9088908890610e73565b60405180910390a2505050505050565b60408051808201909152600080825260208201526040516bffffffffffffffffffffffff19606084811b8216602084015230901b1660348201524660488201527f456967656e4c617965725f424e3235345f5075626b65795f52656769737472616068820152633a34b7b760e11b60888201526104f090608c0160405160208183030381529060405280519060200120610991565b92915050565b60008160000151826020015160405160200161051c929190918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b6040805180820190915260008082526020820152610555610b4b565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa90508080156105885761058a565bfe5b50806105c85760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b60448201526064016101a3565b505092915050565b60408051808201909152600080825260208201526105ec610b69565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa90508080156105885750806105c85760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b60448201526064016101a3565b61066c610b87565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b604080518082018252858152602080820185905282518084019093528583528201839052600091610753610bac565b60005b600281101561091857600061076c826006610ed9565b905084826002811061078057610780610ead565b60200201515183610792836000610ef8565b600c81106107a2576107a2610ead565b60200201528482600281106107b9576107b9610ead565b602002015160200151838260016107d09190610ef8565b600c81106107e0576107e0610ead565b60200201528382600281106107f7576107f7610ead565b602002015151518361080a836002610ef8565b600c811061081a5761081a610ead565b602002015283826002811061083157610831610ead565b602002015151600160200201518361084a836003610ef8565b600c811061085a5761085a610ead565b602002015283826002811061087157610871610ead565b60200201516020015160006002811061088c5761088c610ead565b60200201518361089d836004610ef8565b600c81106108ad576108ad610ead565b60200201528382600281106108c4576108c4610ead565b6020020151602001516001600281106108df576108df610ead565b6020020151836108f0836005610ef8565b600c811061090057610900610ead565b6020020152508061091081610f10565b915050610756565b50610921610bcb565b60006020826101808560086107d05a03fa90508080156105885750806109815760405162461bcd60e51b81526020600482015260156024820152741c185a5c9a5b99cb5bdc18dbd9194b59985a5b1959605a1b60448201526064016101a3565b5051151598975050505050505050565b6040805180820190915260008082526020820152600080806109c1600080516020610f2c83398151915286610e51565b90505b6109cd81610a21565b9093509150600080516020610f2c833981519152828309831415610a07576040805180820190915290815260208101919091529392505050565b600080516020610f2c8339815191526001820890506109c4565b60008080600080516020610f2c8339815191526003600080516020610f2c83398151915286600080516020610f2c833981519152888909090890506000610a97827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f52600080516020610f2c833981519152610aa3565b91959194509092505050565b600080610aae610bcb565b610ab6610be9565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa9250828015610588575082610b405760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c75726500000000000060448201526064016101a3565b505195945050505050565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6040518060400160405280610b9a610c07565b8152602001610ba7610c07565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715610c5e57610c5e610c25565b60405290565b600060408284031215610c7657600080fd5b6040516040810181811067ffffffffffffffff82111715610c9957610c99610c25565b604052823581526020928301359281019290925250919050565b600082601f830112610cc457600080fd5b610ccc610c3b565b806040840185811115610cde57600080fd5b845b81811015610cf8578035845260209384019301610ce0565b509095945050505050565b6000806000838503610100811215610d1a57600080fd5b610d248686610c64565b9350610d338660408701610c64565b92506080607f1982011215610d4757600080fd5b50610d50610c3b565b610d5d8660808701610cb3565b8152610d6c8660c08701610cb3565b6020820152809150509250925092565b600060208284031215610d8e57600080fd5b81356001600160a01b0381168114610da557600080fd5b9392505050565b8151815260208083015190820152604081016104f0565b600060208284031215610dd557600080fd5b5035919050565b8060005b6002811015610dff578151845260209384019390910190600101610de0565b50505050565b888152876020820152866040820152856060820152610e276080820186610ddc565b610e3460c0820185610ddc565b610100810192909252610120820152610140019695505050505050565b600082610e6e57634e487b7160e01b600052601260045260246000fd5b500690565b825181526020808401519082015260c08101610e93604083018451610ddc565b6020830151610ea56080840182610ddc565b509392505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615610ef357610ef3610ec3565b500290565b60008219821115610f0b57610f0b610ec3565b500190565b6000600019821415610f2457610f24610ec3565b506001019056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47a2646970667358221220977090042295bd82a2aa3914aa3ffcc077d62695f06783c3ff2d0cc5f80f6b2864736f6c634300080c0033", } // ContractBLSPublicKeyCompendiumABI is the input ABI used to generate the binding from. diff --git a/contracts/bindings/BLSRegistryCoordinatorWithIndices/binding.go b/contracts/bindings/BLSRegistryCoordinatorWithIndices/binding.go index 9870526b85..84092f61e0 100644 --- a/contracts/bindings/BLSRegistryCoordinatorWithIndices/binding.go +++ b/contracts/bindings/BLSRegistryCoordinatorWithIndices/binding.go @@ -71,8 +71,8 @@ type ISignatureUtilsSignatureWithSaltAndExpiry struct { // ContractBLSRegistryCoordinatorWithIndicesMetaData contains all meta data concerning the ContractBLSRegistryCoordinatorWithIndices contract. var ContractBLSRegistryCoordinatorWithIndicesMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"contractISlasher\",\"name\":\"_slasher\",\"type\":\"address\"},{\"internalType\":\"contractIServiceManager\",\"name\":\"_serviceManager\",\"type\":\"address\"},{\"internalType\":\"contractIStakeRegistry\",\"name\":\"_stakeRegistry\",\"type\":\"address\"},{\"internalType\":\"contractIBLSPubkeyRegistry\",\"name\":\"_blsPubkeyRegistry\",\"type\":\"address\"},{\"internalType\":\"contractIIndexRegistry\",\"name\":\"_indexRegistry\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"prevChurnApprover\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newChurnApprover\",\"type\":\"address\"}],\"name\":\"ChurnApproverUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"prevEjector\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newEjector\",\"type\":\"address\"}],\"name\":\"EjectorUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"operatorId\",\"type\":\"bytes32\"}],\"name\":\"OperatorDeregistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"operatorId\",\"type\":\"bytes32\"}],\"name\":\"OperatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"maxOperatorCount\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"kickBIPsOfOperatorStake\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"kickBIPsOfTotalStake\",\"type\":\"uint16\"}],\"indexed\":false,\"internalType\":\"structIBLSRegistryCoordinatorWithIndices.OperatorSetParam\",\"name\":\"operatorSetParams\",\"type\":\"tuple\"}],\"name\":\"OperatorSetParamsUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"operatorId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"socket\",\"type\":\"string\"}],\"name\":\"OperatorSocketUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPausedStatus\",\"type\":\"uint256\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contractIPauserRegistry\",\"name\":\"pauserRegistry\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"contractIPauserRegistry\",\"name\":\"newPauserRegistry\",\"type\":\"address\"}],\"name\":\"PauserRegistrySet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPausedStatus\",\"type\":\"uint256\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"OPERATOR_CHURN_APPROVAL_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blsPubkeyRegistry\",\"outputs\":[{\"internalType\":\"contractIBLSPubkeyRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"registeringOperatorId\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"structBN254.G1Point\",\"name\":\"pubkey\",\"type\":\"tuple\"}],\"internalType\":\"structIBLSRegistryCoordinatorWithIndices.OperatorKickParam[]\",\"name\":\"operatorKickParams\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"}],\"name\":\"calculateOperatorChurnApprovalDigestHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"churnApprover\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"quorumNumbers\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"structBN254.G1Point\",\"name\":\"pubkey\",\"type\":\"tuple\"}],\"name\":\"deregisterOperatorWithCoordinator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"quorumNumbers\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"deregistrationData\",\"type\":\"bytes\"}],\"name\":\"deregisterOperatorWithCoordinator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"quorumNumbers\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"structBN254.G1Point\",\"name\":\"pubkey\",\"type\":\"tuple\"}],\"name\":\"ejectOperatorFromCoordinator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ejector\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"operatorId\",\"type\":\"bytes32\"}],\"name\":\"getCurrentQuorumBitmapByOperatorId\",\"outputs\":[{\"internalType\":\"uint192\",\"name\":\"\",\"type\":\"uint192\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"getOperator\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"operatorId\",\"type\":\"bytes32\"},{\"internalType\":\"enumIRegistryCoordinator.OperatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"internalType\":\"structIRegistryCoordinator.Operator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"operatorId\",\"type\":\"bytes32\"}],\"name\":\"getOperatorFromId\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"getOperatorId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"}],\"name\":\"getOperatorSetParams\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"maxOperatorCount\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"kickBIPsOfOperatorStake\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"kickBIPsOfTotalStake\",\"type\":\"uint16\"}],\"internalType\":\"structIBLSRegistryCoordinatorWithIndices.OperatorSetParam\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"getOperatorStatus\",\"outputs\":[{\"internalType\":\"enumIRegistryCoordinator.OperatorStatus\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"operatorId\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"blockNumber\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getQuorumBitmapByOperatorIdAtBlockNumberByIndex\",\"outputs\":[{\"internalType\":\"uint192\",\"name\":\"\",\"type\":\"uint192\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"blockNumber\",\"type\":\"uint32\"},{\"internalType\":\"bytes32[]\",\"name\":\"operatorIds\",\"type\":\"bytes32[]\"}],\"name\":\"getQuorumBitmapIndicesByOperatorIdsAtBlockNumber\",\"outputs\":[{\"internalType\":\"uint32[]\",\"name\":\"\",\"type\":\"uint32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"operatorId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getQuorumBitmapUpdateByOperatorIdByIndex\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"updateBlockNumber\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"nextUpdateBlockNumber\",\"type\":\"uint32\"},{\"internalType\":\"uint192\",\"name\":\"quorumBitmap\",\"type\":\"uint192\"}],\"internalType\":\"structIRegistryCoordinator.QuorumBitmapUpdate\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"operatorId\",\"type\":\"bytes32\"}],\"name\":\"getQuorumBitmapUpdateByOperatorIdLength\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"indexRegistry\",\"outputs\":[{\"internalType\":\"contractIIndexRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_churnApprover\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_ejector\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"maxOperatorCount\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"kickBIPsOfOperatorStake\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"kickBIPsOfTotalStake\",\"type\":\"uint16\"}],\"internalType\":\"structIBLSRegistryCoordinatorWithIndices.OperatorSetParam[]\",\"name\":\"_operatorSetParams\",\"type\":\"tuple[]\"},{\"internalType\":\"contractIPauserRegistry\",\"name\":\"_pauserRegistry\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_initialPausedStatus\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"isChurnApproverSaltUsed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"numRegistries\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newPausedStatus\",\"type\":\"uint256\"}],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"index\",\"type\":\"uint8\"}],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauserRegistry\",\"outputs\":[{\"internalType\":\"contractIPauserRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"quorumNumbers\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"structBN254.G1Point\",\"name\":\"pubkey\",\"type\":\"tuple\"},{\"internalType\":\"string\",\"name\":\"socket\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"structBN254.G1Point\",\"name\":\"pubkey\",\"type\":\"tuple\"}],\"internalType\":\"structIBLSRegistryCoordinatorWithIndices.OperatorKickParam[]\",\"name\":\"operatorKickParams\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"}],\"internalType\":\"structISignatureUtils.SignatureWithSaltAndExpiry\",\"name\":\"signatureWithSaltAndExpiry\",\"type\":\"tuple\"}],\"name\":\"registerOperatorWithCoordinator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"quorumNumbers\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"registrationData\",\"type\":\"bytes\"}],\"name\":\"registerOperatorWithCoordinator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"quorumNumbers\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"structBN254.G1Point\",\"name\":\"pubkey\",\"type\":\"tuple\"},{\"internalType\":\"string\",\"name\":\"socket\",\"type\":\"string\"}],\"name\":\"registerOperatorWithCoordinator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"registries\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"serviceManager\",\"outputs\":[{\"internalType\":\"contractIServiceManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_churnApprover\",\"type\":\"address\"}],\"name\":\"setChurnApprover\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_ejector\",\"type\":\"address\"}],\"name\":\"setEjector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"maxOperatorCount\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"kickBIPsOfOperatorStake\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"kickBIPsOfTotalStake\",\"type\":\"uint16\"}],\"internalType\":\"structIBLSRegistryCoordinatorWithIndices.OperatorSetParam\",\"name\":\"operatorSetParam\",\"type\":\"tuple\"}],\"name\":\"setOperatorSetParams\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIPauserRegistry\",\"name\":\"newPauserRegistry\",\"type\":\"address\"}],\"name\":\"setPauserRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"slasher\",\"outputs\":[{\"internalType\":\"contractISlasher\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakeRegistry\",\"outputs\":[{\"internalType\":\"contractIStakeRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newPausedStatus\",\"type\":\"uint256\"}],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"socket\",\"type\":\"string\"}],\"name\":\"updateSocket\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x6101e06040523480156200001257600080fd5b50604051620051bf380380620051bf833981016040819052620000359162000183565b604080518082018252601681527f4156535265676973747279436f6f7264696e61746f720000000000000000000060208083019182528351808501909452600684526576302e302e3160d01b908401528151902060e08190527f6bda7e3f385e48841048390444cced5cc795af87758af67622e5f4f0882c4a996101008190524660a0529192917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6200012d8184846040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6080523060c05261012052505050506001600160a01b0394851661014052928416610160529083166101a052821661018052166101c05262000203565b6001600160a01b03811681146200018057600080fd5b50565b600080600080600060a086880312156200019c57600080fd5b8551620001a9816200016a565b6020870151909550620001bc816200016a565b6040870151909450620001cf816200016a565b6060870151909350620001e2816200016a565b6080870151909250620001f5816200016a565b809150509295509295909350565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c051614ec5620002fa600039600081816105890152818161187801528181612646015261302601526000818161052901528181610d7b01528181610e6201528181610ed301528181611802015281816125c10152612fa601526000818161042d0152818161120901528181611841015281816125290152612f260152600081816104540152818161127e015281816113390152611ba1015260006105c3015260006139d001526000613a1f015260006139fa015260006139530152600061397d015260006139a70152614ec56000f3fe608060405234801561001057600080fd5b50600436106102485760003560e01c80635865c60c1161013b578063ab269b2d116100b8578063ca0de8821161007c578063ca0de8821461061e578063d72d8dd614610645578063e65797ad1461064d578063fabc1cbc146106f0578063fd39105a1461070357600080fd5b8063ab269b2d146105ab578063b1344271146105be578063b8347acc146105e5578063c66ab9ca146105f8578063c81b1ff41461060b57600080fd5b80636347c900116100ff5780636347c90014610511578063683048351461052457806385020d491461054b578063886f11951461056b5780639e9923c21461058457600080fd5b80635865c60c146104af578063595c6a67146104cf5780635ac86ab7146104d75780635b0b829f146104f65780635c975abb1461050957600080fd5b8063296bb064116101c95780633561deb11161018d5780633561deb1146104285780633998fdd31461044f578063455a43fc146104765780634b76b9d514610489578063526ea94e1461049c57600080fd5b8063296bb064146103b157806329d1e0c3146103c45780632cdd1e86146103d75780633064620d146103ea5780633431af251461041557600080fd5b806313542a4e1161021057806313542a4e1461031c578063136439dd146103455780631478851f14610358578063250075761461038b57806328f61b311461039e57600080fd5b80630159f1ce1461024d578063054310e61461029b578063055a62b6146102c65780630cf4b767146102f457806310d67a2f14610309575b600080fd5b61026061025b366004613dda565b61073f565b60408051825163ffffffff908116825260208085015190911690820152918101516001600160c01b0316908201526060015b60405180910390f35b6037546102ae906001600160a01b031681565b6040516001600160a01b039091168152602001610292565b6102e66102d4366004613dfc565b60009081526033602052604090205490565b604051908152602001610292565b610307610302366004613f01565b6107d0565b005b610307610317366004613f5a565b6108d1565b6102e661032a366004613f5a565b6001600160a01b031660009081526034602052604090205490565b610307610353366004613dfc565b610984565b61037b610366366004613dfc565b60356020526000908152604090205460ff1681565b6040519015158152602001610292565b610307610399366004614075565b610ac1565b6038546102ae906001600160a01b031681565b6102ae6103bf366004613dfc565b6111f0565b6103076103d2366004613f5a565b61127c565b6103076103e5366004613f5a565b611337565b6103fd6103f8366004614189565b6113f2565b6040516001600160c01b039091168152602001610292565b6103fd610423366004613dfc565b6115f3565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b6103076104843660046141c1565b6116a9565b61030761049736600461429d565b6116e2565b6103076104aa36600461437a565b611a0e565b6104c26104bd366004613f5a565b611a5f565b604051610292919061441d565b610307611ad3565b61037b6104e5366004614450565b6001805460ff9092161b9081161490565b61030761050436600461446b565b611b9f565b6001546102e6565b6102ae61051f366004613dfc565b611c5f565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b61055e61055936600461449f565b611c89565b6040516102929190614544565b6000546102ae906201000090046001600160a01b031681565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b6102e66105b93660046145d5565b611fc4565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b6103076105f3366004614689565b612028565b6103076106063660046146f0565b6120b3565b61030761061936600461437a565b61211e565b6102e67fae63aa1318751f64ef850e045417f86811eaecee1cebc226904d237b80704d9281565b6036546102e6565b6106bc61065b366004614450565b60408051606080820183526000808352602080840182905292840181905260ff9490941684526032825292829020825193840183525463ffffffff8116845261ffff600160201b8204811692850192909252600160301b9004169082015290565b60408051825163ffffffff16815260208084015161ffff908116918301919091529282015190921690820152606001610292565b6103076106fe366004613dfc565b612161565b610732610711366004613f5a565b6001600160a01b031660009081526034602052604090206001015460ff1690565b6040516102929190614774565b6040805160608101825260008082526020820181905291810191909152600083815260336020526040902080548390811061077c5761077c614782565b600091825260209182902060408051606081018252919092015463ffffffff8082168352600160201b820416938201939093526001600160c01b03600160401b909304929092169082015290505b92915050565b60013360009081526034602052604090206001015460ff1660028111156107f9576107f96143e5565b146108855760405162461bcd60e51b815260206004820152604b60248201527f424c535265676973747279436f6f7264696e61746f7257697468496e6469636960448201527f65732e757064617465536f636b65743a206f70657261746f72206973206e6f7460648201526a081c9959da5cdd195c995960aa1b608482015260a4015b60405180910390fd5b33600090815260346020526040908190205490517fec2963ab21c1e50e1e582aa542af2e4bf7bf38e6e1403c27b42e1c5d6e621eaa906108c69084906147f0565b60405180910390a250565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610924573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109489190614803565b6001600160a01b0316336001600160a01b0316146109785760405162461bcd60e51b815260040161087c90614820565b610981816122bd565b50565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa1580156109d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f5919061486a565b610a115760405162461bcd60e51b815260040161087c9061488c565b60015481811614610a8a5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c6974790000000000000000606482015260840161087c565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020016108c6565b600180546000919081161415610ae95760405162461bcd60e51b815260040161087c906148d4565b6000610b2e338b8b8b8b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506123c292505050565b6040805160018082528183019092529192506000919060208083019080368337019050509050610b5d89612a15565b81600081518110610b7057610b70614782565b602002602001018181525050610bf381600081518110610b9257610b92614782565b60200260200101518787808060200260200160405190810160405280939291908181526020016000905b82821015610be857610bd96080830286013681900381019061490b565b81526020019060010190610bbc565b505050505086612a58565b6000805b8b8110156111e15760008d8d83818110610c1357610c13614782565b919091013560f81c6000818152603260209081526040918290208251606081018452905463ffffffff811680835261ffff600160201b8304811694840194909452600160301b90910490921692810192909252885192945090925090879085908110610c8157610c81614782565b602002602001015163ffffffff1611610c9b5750506111cf565b8160ff168a8a86818110610cb157610cb1614782565b610cc79260206080909202019081019150614450565b60ff1614610d605760405162461bcd60e51b81526020600482015260666024820152600080516020614e7083398151915260448201527f732e72656769737465724f70657261746f7257697468436f6f7264696e61746f60648201527f723a2071756f72756d4e756d626572206e6f74207468652073616d65206173206084820152651cda59db995960d21b60a482015260c40161087c565b604051630c8f739d60e41b815260ff831660048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063c8f739d090602401602060405180830381865afa158015610dca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dee9190614927565b90506000603460008d8d88818110610e0857610e08614782565b9050608002016020016020810190610e209190613f5a565b6001600160a01b039081168252602082019290925260409081016000908120549151631aad4e3560e21b81526004810183905260ff88166024820152919350917f00000000000000000000000000000000000000000000000000000000000000001690636ab538d490604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ecd9190614927565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636ab538d48a600081518110610f1357610f13614782565b6020026020010151886040518363ffffffff1660e01b8152600401610f4592919091825260ff16602082015260400190565b602060405180830381865afa158015610f62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f869190614927565b602086015190915061271090610fa09061ffff1684614966565b610faa9190614995565b6001600160601b0316816001600160601b03161161106a5760405162461bcd60e51b815260206004820152607d6024820152600080516020614e7083398151915260448201527f732e72656769737465724f70657261746f7257697468436f6f7264696e61746f60648201527f723a207265676973746572696e67206f70657261746f7220686173206c65737360848201527f207468616e206b69636b424950734f664f70657261746f725374616b6500000060a482015260c40161087c565b6040850151612710906110819061ffff1686614966565b61108b9190614995565b6001600160601b0316826001600160601b0316106111445760405162461bcd60e51b81526020600482015260766024820152600080516020614e7083398151915260448201527f732e72656769737465724f70657261746f7257697468436f6f7264696e61746f60648201527f723a206f70657261746f7220746f206b69636b20686173206d6f7265207468616084820152756e206b69636b424950534f66546f74616c5374616b6560501b60a482015260c40161087c565b8761114e816149c9565b9850505050505050506111cf88888381811061116c5761116c614782565b90506080020160200160208101906111849190613f5a565b8e838f6111928260016149e4565b9261119f939291906149fc565b8b8b868181106111b1576111b1614782565b9050608002016040018036038101906111ca9190614a26565b612c25565b806111d9816149c9565b915050610bf7565b50505050505050505050505050565b6040516308f6629d60e31b8152600481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906347b314e890602401602060405180830381865afa158015611258573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ca9190614803565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112fe9190614803565b6001600160a01b0316336001600160a01b03161461132e5760405162461bcd60e51b815260040161087c90614a42565b610981816131d2565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611395573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b99190614803565b6001600160a01b0316336001600160a01b0316146113e95760405162461bcd60e51b815260040161087c90614a42565b6109818161323b565b600083815260336020526040812080548291908490811061141557611415614782565b600091825260209182902060408051606081018252929091015463ffffffff808216808552600160201b8304821695850195909552600160401b9091046001600160c01b031691830191909152909250851610156115155760405162461bcd60e51b815260206004820152607f6024820152600080516020614e7083398151915260448201527f732e67657451756f72756d4269746d617042794f70657261746f72496441744260648201527f6c6f636b4e756d6265724279496e6465783a2071756f72756d4269746d61705560848201527f70646174652069732066726f6d20616674657220626c6f636b4e756d6265720060a482015260c40161087c565b8363ffffffff16816020015163ffffffff16118061153b5750602081015163ffffffff16155b6115e75760405162461bcd60e51b81526020600482015260806024820152600080516020614e7083398151915260448201527f732e67657451756f72756d4269746d617042794f70657261746f72496441744260648201527f6c6f636b4e756d6265724279496e6465783a2071756f72756d4269746d61705560848201527f70646174652069732066726f6d206265666f726520626c6f636b4e756d62657260a482015260c40161087c565b60400151949350505050565b60008181526033602052604081205480158061164f57506000838152603360205260409020611623600183614abe565b8154811061163357611633614782565b600091825260209091200154600160201b900463ffffffff1615155b1561165d5750600092915050565b6000838152603360205260409020611676600183614abe565b8154811061168657611686614782565b600091825260209091200154600160401b90046001600160c01b03169392505050565b60018054600290811614156116d05760405162461bcd60e51b815260040161087c906148d4565b6116dc33858585612c25565b50505050565b600054610100900460ff16158080156117025750600054600160ff909116105b8061171c5750303b15801561171c575060005460ff166001145b61177f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161087c565b6000805460ff1916600117905580156117a2576000805461ff0019166101001790555b6117ac83836132a4565b6117b5866131d2565b6117be8561323b565b603680546001808201835560008390527f4a11f94e20a93c79f6ec743a1954ec4fc2c08429ae2122118bf234b2185c81b891820180546001600160a01b03199081167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03908116918217909355855480850187558501805483167f0000000000000000000000000000000000000000000000000000000000000000851617905585549384019095559190920180549091167f0000000000000000000000000000000000000000000000000000000000000000909216919091179055845160408051639aa1653d60e01b81529051919291639aa1653d916004808201926020929091908290030181865afa1580156118e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119049190614ad5565b61ffff16146119785760405162461bcd60e51b81526020600482015260466024820152600080516020614e7083398151915260448201527f733a206f70657261746f722073657420706172616d73206c656e677468206d696064820152650e6dac2e8c6d60d31b608482015260a40161087c565b60005b84518160ff1610156119bf576119ad81868360ff16815181106119a0576119a0614782565b6020026020010151613390565b806119b781614af2565b91505061197b565b508015611a06576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b600180546000919081161415611a365760405162461bcd60e51b815260040161087c906148d4565b600080611a4584860186614b12565b91509150611a56338888858561343d565b50505050505050565b60408051808201909152600080825260208201526001600160a01b0382166000908152603460209081526040918290208251808401909352805483526001810154909183019060ff166002811115611ab957611ab96143e5565b6002811115611aca57611aca6143e5565b90525092915050565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015611b20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b44919061486a565b611b605760405162461bcd60e51b815260040161087c9061488c565b600019600181905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c219190614803565b6001600160a01b0316336001600160a01b031614611c515760405162461bcd60e51b815260040161087c90614a42565b611c5b8282613390565b5050565b60368181548110611c6f57600080fd5b6000918252602090912001546001600160a01b0316905081565b6060600082516001600160401b03811115611ca657611ca6613e15565b604051908082528060200260200182016040528015611ccf578160200160208202803683370190505b50905060005b8351811015611fbc57600060336000868481518110611cf657611cf6614782565b6020026020010151815260200190815260200160002080549050905060005b8163ffffffff168163ffffffff161015611fa7578663ffffffff1660336000888681518110611d4657611d46614782565b6020026020010151815260200190815260200160002060018385611d6a9190614b60565b611d749190614b60565b63ffffffff1681548110611d8a57611d8a614782565b60009182526020909120015463ffffffff1611611f955760336000878581518110611db757611db7614782565b6020026020010151815260200190815260200160002060018284611ddb9190614b60565b611de59190614b60565b63ffffffff1681548110611dfb57611dfb614782565b600091825260209091200154600160201b900463ffffffff161580611e9757508663ffffffff1660336000888681518110611e3857611e38614782565b6020026020010151815260200190815260200160002060018385611e5c9190614b60565b611e669190614b60565b63ffffffff1681548110611e7c57611e7c614782565b600091825260209091200154600160201b900463ffffffff16115b611f4e5760405162461bcd60e51b81526020600482015260826024820152600080516020614e7083398151915260448201527f732e67657451756f72756d4269746d6170496e646963657342794f706572617460648201527f6f724964734174426c6f636b4e756d6265723a206f70657261746f724964206860848201527f6173206e6f2071756f72756d4269746d61707320617420626c6f636b4e756d6260a48201526132b960f11b60c482015260e40161087c565b6001611f5a8284614b60565b611f649190614b60565b848481518110611f7657611f76614782565b602002602001019063ffffffff16908163ffffffff1681525050611fa7565b80611f9f81614b85565b915050611d15565b50508080611fb4906149c9565b915050611cd5565b509392505050565b600061201d7fae63aa1318751f64ef850e045417f86811eaecee1cebc226904d237b80704d9286868686604051602001612002959493929190614ba9565b60405160208183030381529060405280519060200120613554565b90505b949350505050565b6038546001600160a01b031633146120a75760405162461bcd60e51b81526020600482015260486024820152600080516020614e7083398151915260448201527f732e6f6e6c79456a6563746f723a2063616c6c6572206973206e6f74207468656064820152671032b532b1ba37b960c11b608482015260a40161087c565b6116dc84848484612c25565b6001805460009190811614156120db5760405162461bcd60e51b815260040161087c906148d4565b611a063387878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061343d92505050565b60018054600290811614156121455760405162461bcd60e51b815260040161087c906148d4565b600061215383850185614a26565b9050611a0633878784612c25565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121d89190614803565b6001600160a01b0316336001600160a01b0316146122085760405162461bcd60e51b815260040161087c90614820565b6001541981196001541916146122865760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c6974790000000000000000606482015260840161087c565b600181905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016108c6565b6001600160a01b03811661234b5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a40161087c565b600054604080516001600160a01b03620100009093048316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6060600061240586868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506135a292505050565b90506001600160c01b0381111561249a5760405162461bcd60e51b815260206004820152606b6024820152600080516020614e708339815191526044820152600080516020614e5083398151915260648201527f6f723a2071756f72756d4269746d61702065786365656473206f66206d61782060848201526a6269746d61702073697a6560a81b60a482015260c40161087c565b8061250f5760405162461bcd60e51b815260206004820152605c6024820152600080516020614e708339815191526044820152600080516020614e5083398151915260648201527f6f723a2071756f72756d4269746d61702063616e6e6f74206265203000000000608482015260a40161087c565b6040516303ce4bad60e01b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906303ce4bad90612564908b908b908b908b90600401614c66565b6020604051808303816000875af1158015612583573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125a79190614ca3565b604051632550477760e01b81529091506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906325504777906125fc908b9085908c908c90600401614cbc565b600060405180830381600087803b15801561261657600080fd5b505af115801561262a573d6000803e3d6000fd5b505060405162bff04d60e01b8152600092506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016915062bff04d9061267f9085908c908c90600401614cee565b6000604051808303816000875af115801561269e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526126c69190810190614d08565b6000838152603360205260409020549091508015801590612726575060008381526033602052604090206126fb600183614abe565b8154811061270b5761270b614782565b600091825260209091200154600160201b900463ffffffff16155b1561287d576000838152603360205260408120612744600184614abe565b8154811061275457612754614782565b6000918252602090912001546001600160c01b03600160401b9091048181169250861616156128215760405162461bcd60e51b81526020600482015260856024820152600080516020614e708339815191526044820152600080516020614e5083398151915260648201527f6f723a206f70657261746f7220616c726561647920726567697374657265642060848201527f666f7220736f6d652071756f72756d73206265696e672072656769737465726560a48201526432103337b960d91b60c482015260e40161087c565b6000848152603360205260409020948117944390612840600185614abe565b8154811061285057612850614782565b9060005260206000200160000160046101000a81548163ffffffff021916908363ffffffff160217905550505b6000838152603360209081526040808320815160608101835263ffffffff43811682528185018681526001600160c01b038b8116848701908152855460018082018855968a52888a2095519501805493519151909216600160401b026001600160401b03918516600160201b0267ffffffffffffffff19909416959094169490941791909117929092161790556001600160a01b038e168452603490925290912081015460ff166002811115612935576129356143e5565b146129ce57604080518082018252848152600160208083018281526001600160a01b038f166000908152603490925293902082518155925183820180549394939192909160ff191690836002811115612990576129906143e5565b0217905550506040518491506001600160a01b038c16907fe8e68cef1c3a761ed7be7e8463a375f27f7bc335e51824223cacce636ec5c3fe90600090a35b827fec2963ab21c1e50e1e582aa542af2e4bf7bf38e6e1403c27b42e1c5d6e621eaa876040516129fe91906147f0565b60405180910390a250925050505b95945050505050565b600081600001518260200151604051602001612a3b929190918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b60208082015160009081526035909152604090205460ff1615612b1d5760405162461bcd60e51b81526020600482015260776024820152600080516020614e7083398151915260448201527f732e5f766572696679436875726e417070726f7665725369676e61747572654f60648201527f6e4f70657261746f72436875726e417070726f76616c3a20636875726e41707060848201527f726f7665722073616c7420616c7265616479207573656400000000000000000060a482015260c40161087c565b4281604001511015612bd15760405162461bcd60e51b81526020600482015260776024820152600080516020614e7083398151915260448201527f732e5f766572696679436875726e417070726f7665725369676e61747572654f60648201527f6e4f70657261746f72436875726e417070726f76616c3a20636875726e41707060848201527f726f766572207369676e6174757265206578706972656400000000000000000060a482015260c40161087c565b6020808201805160009081526035909252604091829020805460ff19166001179055603754905191830151612c20926001600160a01b0390921691612c199187918791611fc4565b835161372f565b505050565b60016001600160a01b03851660009081526034602052604090206001015460ff166002811115612c5757612c576143e5565b14612cde5760405162461bcd60e51b81526020600482015260606024820152600080516020614e7083398151915260448201527f732e5f646572656769737465724f70657261746f7257697468436f6f7264696e60648201527f61746f723a206f70657261746f72206973206e6f742072656769737465726564608482015260a40161087c565b6001600160a01b038416600090815260346020526040902054612d0082612a15565b8114612d9c5760405162461bcd60e51b815260206004820152606b6024820152600080516020614e7083398151915260448201527f732e5f646572656769737465724f70657261746f7257697468436f6f7264696e60648201527f61746f723a206f70657261746f72496420646f6573206e6f74206d617463682060848201526a0e0eac4d6caf240d0c2e6d60ab1b60a482015260c40161087c565b6000612ddd85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506135a292505050565b60008381526033602052604081205491925090612dfc90600190614abe565b60008481526033602052604081208054929350909183908110612e2157612e21614782565b6000918252602082200154600160401b90049384166001600160c01b0390811694169150612e4e846138e9565b9050805160001415612f025760405162461bcd60e51b81526020600482015260806024820152600080516020614e7083398151915260448201527f732e5f646572656769737465724f70657261746f7257697468436f6f7264696e60648201527f61746f723a206f70657261746f72206973206e6f74207265676973746572656460848201527f20666f7220616e79206f66207468652070726f76696465642071756f72756d7360a482015260c40161087c565b60405163121b4d9560e11b81526001600160c01b0383168514906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906324369b2a90612f5f908d9086908c90600401614da1565b600060405180830381600087803b158015612f7957600080fd5b505af1158015612f8d573d6000803e3d6000fd5b505060405163bd29b8cd60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016925063bd29b8cd9150612fdf9089908690600401614ddd565b600060405180830381600087803b158015612ff957600080fd5b505af115801561300d573d6000803e3d6000fd5b505060405163bd29b8cd60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016925063bd29b8cd915061305f9089908690600401614ddd565b600060405180830381600087803b15801561307957600080fd5b505af115801561308d573d6000803e3d6000fd5b50505060008781526033602052604090208054439250869081106130b3576130b3614782565b9060005260206000200160000160046101000a81548163ffffffff021916908363ffffffff16021790555080613177576000868152603360209081526040808320815160608101835263ffffffff43811682528185018681526001600160c01b038c198b168116958401958652845460018101865594885295909620915191909201805495519351909416600160401b026001600160401b03938316600160201b0267ffffffffffffffff19909616919092161793909317169190911790556131c6565b6001600160a01b038a16600081815260346020526040808220600101805460ff19166002179055518892917f396fdcb180cb0fea26928113fb0fd1c3549863f9cd563e6a184f1d578116c8e491a35b50505050505050505050565b603754604080516001600160a01b03928316815291831660208301527f315457d8a8fe60f04af17c16e2f5a5e1db612b31648e58030360759ef8f3528c910160405180910390a1603780546001600160a01b0319166001600160a01b0392909216919091179055565b603854604080516001600160a01b03928316815291831660208301527f8f30ab09f43a6c157d7fce7e0a13c003042c1c95e8a72e7a146a21c0caa24dc9910160405180910390a1603880546001600160a01b0319166001600160a01b0392909216919091179055565b6000546201000090046001600160a01b03161580156132cb57506001600160a01b03821615155b61334d5760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a40161087c565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2611c5b826122bd565b60ff8216600081815260326020908152604091829020845181548684018051888701805163ffffffff90951665ffffffffffff199094168417600160201b61ffff938416021767ffff0000000000001916600160301b95831695909502949094179094558551918252518316938101939093525116918101919091527f3ee6fe8d54610244c3e9d3c066ae4aee997884aa28f10616ae821925401318ac9060600160405180910390a25050565b600061344c86868686866123c2565b905060005b8151811015611a56576032600087878481811061347057613470614782565b919091013560f81c825250602081019190915260400160002054825163ffffffff909116908390839081106134a7576134a7614782565b602002602001015163ffffffff1611156135425760405162461bcd60e51b815260206004820152606e6024820152600080516020614e708339815191526044820152600080516020614e5083398151915260648201527f6f72416e644e6f4f76657266696c6c656451756f72756d733a2071756f72756d60848201526d081a5cc81bdd995c999a5b1b195960921b60a482015260c40161087c565b8061354c816149c9565b915050613451565b60006107ca613561613946565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b60006101008251111561362b5760405162461bcd60e51b8152602060048201526044602482018190527f4269746d61705574696c732e6f72646572656442797465734172726179546f42908201527f69746d61703a206f7264657265644279746573417272617920697320746f6f206064820152636c6f6e6760e01b608482015260a40161087c565b815161363957506000919050565b6000808360008151811061364f5761364f614782565b0160200151600160f89190911c81901b92505b84518110156137265784818151811061367d5761367d614782565b0160200151600160f89190911c1b91508282116137125760405162461bcd60e51b815260206004820152604760248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206f72646572656442797465734172726179206973206e6f74206064820152661bdc99195c995960ca1b608482015260a40161087c565b9181179161371f816149c9565b9050613662565b50909392505050565b6001600160a01b0383163b1561384957604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e9061376f9086908690600401614ddd565b602060405180830381865afa15801561378c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137b09190614df6565b6001600160e01b03191614612c205760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a40161087c565b826001600160a01b031661385d8383613a6d565b6001600160a01b031614612c205760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a40161087c565b60606000805b61010081101561393f576001811b91508382161561392f57828160f81b60405160200161391d929190614e20565b60405160208183030381529060405292505b613938816149c9565b90506138ef565b5050919050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561399f57507f000000000000000000000000000000000000000000000000000000000000000046145b156139c957507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000806000613a7c8585613a89565b91509150611fbc81613af9565b600080825160411415613ac05760208301516040840151606085015160001a613ab487828585613cb4565b94509450505050613af2565b825160401415613aea5760208301516040840151613adf868383613da1565b935093505050613af2565b506000905060025b9250929050565b6000816004811115613b0d57613b0d6143e5565b1415613b165750565b6001816004811115613b2a57613b2a6143e5565b1415613b785760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161087c565b6002816004811115613b8c57613b8c6143e5565b1415613bda5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161087c565b6003816004811115613bee57613bee6143e5565b1415613c475760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b606482015260840161087c565b6004816004811115613c5b57613c5b6143e5565b14156109815760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b606482015260840161087c565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115613ceb5750600090506003613d98565b8460ff16601b14158015613d0357508460ff16601c14155b15613d145750600090506004613d98565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015613d68573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116613d9157600060019250925050613d98565b9150600090505b94509492505050565b6000806001600160ff1b03831681613dbe60ff86901c601b6149e4565b9050613dcc87828885613cb4565b935093505050935093915050565b60008060408385031215613ded57600080fd5b50508035926020909101359150565b600060208284031215613e0e57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715613e4d57613e4d613e15565b60405290565b604051601f8201601f191681016001600160401b0381118282101715613e7b57613e7b613e15565b604052919050565b60006001600160401b03831115613e9c57613e9c613e15565b613eaf601f8401601f1916602001613e53565b9050828152838383011115613ec357600080fd5b828260208301376000602084830101529392505050565b600082601f830112613eeb57600080fd5b613efa83833560208501613e83565b9392505050565b600060208284031215613f1357600080fd5b81356001600160401b03811115613f2957600080fd5b61202084828501613eda565b6001600160a01b038116811461098157600080fd5b8035613f5581613f35565b919050565b600060208284031215613f6c57600080fd5b8135613efa81613f35565b60008083601f840112613f8957600080fd5b5081356001600160401b03811115613fa057600080fd5b602083019150836020828501011115613af257600080fd5b600060408284031215613fca57600080fd5b604051604081018181106001600160401b0382111715613fec57613fec613e15565b604052823581526020928301359281019290925250919050565b60006060828403121561401857600080fd5b614020613e2b565b905081356001600160401b0381111561403857600080fd5b8201601f8101841361404957600080fd5b61405884823560208401613e83565b825250602082013560208201526040820135604082015292915050565b60008060008060008060008060c0898b03121561409157600080fd5b88356001600160401b03808211156140a857600080fd5b6140b48c838d01613f77565b909a5098508891506140c98c60208d01613fb8565b975060608b01359150808211156140df57600080fd5b6140eb8c838d01613f77565b909750955060808b013591508082111561410457600080fd5b818b0191508b601f83011261411857600080fd5b81358181111561412757600080fd5b8c60208260071b850101111561413c57600080fd5b6020830195508094505060a08b013591508082111561415a57600080fd5b506141678b828c01614006565b9150509295985092959890939650565b63ffffffff8116811461098157600080fd5b60008060006060848603121561419e57600080fd5b8335925060208401356141b081614177565b929592945050506040919091013590565b6000806000606084860312156141d657600080fd5b83356001600160401b038111156141ec57600080fd5b6141f886828701613f77565b909450925061420c90508560208601613fb8565b90509250925092565b60006001600160401b0382111561422e5761422e613e15565b5060051b60200190565b61ffff8116811461098157600080fd5b60006060828403121561425a57600080fd5b614262613e2b565b9050813561426f81614177565b8152602082013561427f81614238565b6020820152604082013561429281614238565b604082015292915050565b600080600080600060a086880312156142b557600080fd5b85356142c081613f35565b94506020868101356142d181613f35565b945060408701356001600160401b038111156142ec57600080fd5b8701601f810189136142fd57600080fd5b803561431061430b82614215565b613e53565b8181526060918202830184019184820191908c84111561432f57600080fd5b938501935b83851015614355576143468d86614248565b83529384019391850191614334565b819850614363818d01613f4a565b9a9d999c50979a6080013598975050505050505050565b6000806000806040858703121561439057600080fd5b84356001600160401b03808211156143a757600080fd5b6143b388838901613f77565b909650945060208701359150808211156143cc57600080fd5b506143d987828801613f77565b95989497509550505050565b634e487b7160e01b600052602160045260246000fd5b6003811061441957634e487b7160e01b600052602160045260246000fd5b9052565b815181526020808301516040830191614438908401826143fb565b5092915050565b803560ff81168114613f5557600080fd5b60006020828403121561446257600080fd5b613efa8261443f565b6000806080838503121561447e57600080fd5b6144878361443f565b91506144968460208501614248565b90509250929050565b600080604083850312156144b257600080fd5b82356144bd81614177565b91506020838101356001600160401b038111156144d957600080fd5b8401601f810186136144ea57600080fd5b80356144f861430b82614215565b81815260059190911b8201830190838101908883111561451757600080fd5b928401925b828410156145355783358252928401929084019061451c565b80955050505050509250929050565b6020808252825182820181905260009190848201906040850190845b8181101561458257835163ffffffff1683529284019291840191600101614560565b50909695505050505050565b6000608082840312156145a057600080fd5b6145a8613e2b565b90506145b38261443f565b815260208201356145c381613f35565b60208201526142928360408401613fb8565b60008060008060808086880312156145ec57600080fd5b853594506020808701356001600160401b0381111561460a57600080fd5b8701601f8101891361461b57600080fd5b803561462961430b82614215565b81815260079190911b8201830190838101908b83111561464857600080fd5b928401925b8284101561466e5761465f8c8561458e565b8252928501929084019061464d565b989b989a505050506040870135966060013595945050505050565b6000806000806080858703121561469f57600080fd5b84356146aa81613f35565b935060208501356001600160401b038111156146c557600080fd5b6146d187828801613f77565b90945092506146e590508660408701613fb8565b905092959194509250565b60008060008060006080868803121561470857600080fd5b85356001600160401b038082111561471f57600080fd5b61472b89838a01613f77565b90975095508591506147408960208a01613fb8565b9450606088013591508082111561475657600080fd5b5061476388828901613f77565b969995985093965092949392505050565b602081016107ca82846143fb565b634e487b7160e01b600052603260045260246000fd5b60005b838110156147b357818101518382015260200161479b565b838111156116dc5750506000910152565b600081518084526147dc816020860160208601614798565b601f01601f19169290920160200192915050565b602081526000613efa60208301846147c4565b60006020828403121561481557600080fd5b8151613efa81613f35565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60006020828403121561487c57600080fd5b81518015158114613efa57600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b60208082526019908201527f5061757361626c653a20696e6465782069732070617573656400000000000000604082015260600190565b60006080828403121561491d57600080fd5b613efa838361458e565b60006020828403121561493957600080fd5b81516001600160601b0381168114613efa57600080fd5b634e487b7160e01b600052601160045260246000fd5b60006001600160601b038083168185168183048111821515161561498c5761498c614950565b02949350505050565b60006001600160601b03808416806149bd57634e487b7160e01b600052601260045260246000fd5b92169190910492915050565b60006000198214156149dd576149dd614950565b5060010190565b600082198211156149f7576149f7614950565b500190565b60008085851115614a0c57600080fd5b83861115614a1957600080fd5b5050820193919092039150565b600060408284031215614a3857600080fd5b613efa8383613fb8565b6020808252606290820152600080516020614e7083398151915260408201527f732e6f6e6c79536572766963654d616e616765724f776e65723a2063616c6c6560608201527f72206973206e6f74207468652073657276696365206d616e61676572206f776e60808201526132b960f11b60a082015260c00190565b600082821015614ad057614ad0614950565b500390565b600060208284031215614ae757600080fd5b8151613efa81614238565b600060ff821660ff811415614b0957614b09614950565b60010192915050565b60008060608385031215614b2557600080fd5b614b2f8484613fb8565b915060408301356001600160401b03811115614b4a57600080fd5b614b5685828601613eda565b9150509250929050565b600063ffffffff83811690831681811015614b7d57614b7d614950565b039392505050565b600063ffffffff80831681811415614b9f57614b9f614950565b6001019392505050565b600060a0820187835260208781850152604060a08186015282885180855260c087019150838a01945060005b81811015614c24578551805160ff168452858101516001600160a01b031686850152840151614c108585018280518252602090810151910152565b509484019460809290920191600101614bd5565b5050606086019790975250505050608001529392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0385168152608060208201819052600090614c8b9083018587614c3d565b83516040840152602084015160608401529050612a0c565b600060208284031215614cb557600080fd5b5051919050565b60018060a01b0385168152836020820152606060408201526000614ce4606083018486614c3d565b9695505050505050565b83815260406020820152600061201d604083018486614c3d565b60006020808385031215614d1b57600080fd5b82516001600160401b03811115614d3157600080fd5b8301601f81018513614d4257600080fd5b8051614d5061430b82614215565b81815260059190911b82018301908381019087831115614d6f57600080fd5b928401925b82841015614d96578351614d8781614177565b82529284019290840190614d74565b979650505050505050565b6001600160a01b0384168152608060208201819052600090614dc5908301856147c4565b83516040840152602084015160608401529050612020565b82815260406020820152600061202060408301846147c4565b600060208284031215614e0857600080fd5b81516001600160e01b031981168114613efa57600080fd5b60008351614e32818460208801614798565b6001600160f81b031993909316919092019081526001019291505056fe732e5f72656769737465724f70657261746f7257697468436f6f7264696e6174424c535265676973747279436f6f7264696e61746f7257697468496e64696365a26469706673582212201a124988845f1ffa3043f7da4ea1df113a0d43430d000dde4fb969c4e4a06e2f64736f6c634300080c0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_slasher\",\"type\":\"address\",\"internalType\":\"contractISlasher\"},{\"name\":\"_serviceManager\",\"type\":\"address\",\"internalType\":\"contractIServiceManager\"},{\"name\":\"_stakeRegistry\",\"type\":\"address\",\"internalType\":\"contractIStakeRegistry\"},{\"name\":\"_blsPubkeyRegistry\",\"type\":\"address\",\"internalType\":\"contractIBLSPubkeyRegistry\"},{\"name\":\"_indexRegistry\",\"type\":\"address\",\"internalType\":\"contractIIndexRegistry\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"OPERATOR_CHURN_APPROVAL_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"blsPubkeyRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIBLSPubkeyRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateOperatorChurnApprovalDigestHash\",\"inputs\":[{\"name\":\"registeringOperatorId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"operatorKickParams\",\"type\":\"tuple[]\",\"internalType\":\"structIBLSRegistryCoordinatorWithIndices.OperatorKickParam[]\",\"components\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"pubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"churnApprover\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deregisterOperatorWithCoordinator\",\"inputs\":[{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"pubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deregisterOperatorWithCoordinator\",\"inputs\":[{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"deregistrationData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ejectOperatorFromCoordinator\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"pubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ejector\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getCurrentQuorumBitmapByOperatorId\",\"inputs\":[{\"name\":\"operatorId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint192\",\"internalType\":\"uint192\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperator\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIRegistryCoordinator.Operator\",\"components\":[{\"name\":\"operatorId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"status\",\"type\":\"uint8\",\"internalType\":\"enumIRegistryCoordinator.OperatorStatus\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorFromId\",\"inputs\":[{\"name\":\"operatorId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorId\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorSetParams\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIBLSRegistryCoordinatorWithIndices.OperatorSetParam\",\"components\":[{\"name\":\"maxOperatorCount\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"kickBIPsOfOperatorStake\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"kickBIPsOfTotalStake\",\"type\":\"uint16\",\"internalType\":\"uint16\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorStatus\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIRegistryCoordinator.OperatorStatus\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getQuorumBitmapByOperatorIdAtBlockNumberByIndex\",\"inputs\":[{\"name\":\"operatorId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"blockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint192\",\"internalType\":\"uint192\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getQuorumBitmapIndicesByOperatorIdsAtBlockNumber\",\"inputs\":[{\"name\":\"blockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"operatorIds\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getQuorumBitmapUpdateByOperatorIdByIndex\",\"inputs\":[{\"name\":\"operatorId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIRegistryCoordinator.QuorumBitmapUpdate\",\"components\":[{\"name\":\"updateBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"nextUpdateBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"quorumBitmap\",\"type\":\"uint192\",\"internalType\":\"uint192\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getQuorumBitmapUpdateByOperatorIdLength\",\"inputs\":[{\"name\":\"operatorId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"indexRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIIndexRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_churnApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_ejector\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_operatorSetParams\",\"type\":\"tuple[]\",\"internalType\":\"structIBLSRegistryCoordinatorWithIndices.OperatorSetParam[]\",\"components\":[{\"name\":\"maxOperatorCount\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"kickBIPsOfOperatorStake\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"kickBIPsOfTotalStake\",\"type\":\"uint16\",\"internalType\":\"uint16\"}]},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"_initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isChurnApproverSaltUsed\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"numRegistries\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseAll\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pauserRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registerOperatorWithCoordinator\",\"inputs\":[{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"pubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"socket\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"operatorKickParams\",\"type\":\"tuple[]\",\"internalType\":\"structIBLSRegistryCoordinatorWithIndices.OperatorKickParam[]\",\"components\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"pubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]},{\"name\":\"signatureWithSaltAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.SignatureWithSaltAndExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registerOperatorWithCoordinator\",\"inputs\":[{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"registrationData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registerOperatorWithCoordinator\",\"inputs\":[{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"pubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"socket\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registries\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"serviceManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIServiceManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setChurnApprover\",\"inputs\":[{\"name\":\"_churnApprover\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setEjector\",\"inputs\":[{\"name\":\"_ejector\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorSetParams\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"operatorSetParam\",\"type\":\"tuple\",\"internalType\":\"structIBLSRegistryCoordinatorWithIndices.OperatorSetParam\",\"components\":[{\"name\":\"maxOperatorCount\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"kickBIPsOfOperatorStake\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"kickBIPsOfTotalStake\",\"type\":\"uint16\",\"internalType\":\"uint16\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"slasher\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISlasher\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakeRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStakeRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateSocket\",\"inputs\":[{\"name\":\"socket\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"ChurnApproverUpdated\",\"inputs\":[{\"name\":\"prevChurnApprover\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newChurnApprover\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"EjectorUpdated\",\"inputs\":[{\"name\":\"prevEjector\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newEjector\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorDeregistered\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorId\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorRegistered\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorId\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetParamsUpdated\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"uint8\"},{\"name\":\"operatorSetParams\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIBLSRegistryCoordinatorWithIndices.OperatorSetParam\",\"components\":[{\"name\":\"maxOperatorCount\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"kickBIPsOfOperatorStake\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"kickBIPsOfTotalStake\",\"type\":\"uint16\",\"internalType\":\"uint16\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSocketUpdate\",\"inputs\":[{\"name\":\"operatorId\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"socket\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false}]", + Bin: "0x6101e06040523480156200001257600080fd5b50604051620051bf380380620051bf833981016040819052620000359162000183565b604080518082018252601681527f4156535265676973747279436f6f7264696e61746f720000000000000000000060208083019182528351808501909452600684526576302e302e3160d01b908401528151902060e08190527f6bda7e3f385e48841048390444cced5cc795af87758af67622e5f4f0882c4a996101008190524660a0529192917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6200012d8184846040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6080523060c05261012052505050506001600160a01b0394851661014052928416610160529083166101a052821661018052166101c05262000203565b6001600160a01b03811681146200018057600080fd5b50565b600080600080600060a086880312156200019c57600080fd5b8551620001a9816200016a565b6020870151909550620001bc816200016a565b6040870151909450620001cf816200016a565b6060870151909350620001e2816200016a565b6080870151909250620001f5816200016a565b809150509295509295909350565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c051614ec5620002fa600039600081816105890152818161187801528181612646015261302601526000818161052901528181610d7b01528181610e6201528181610ed301528181611802015281816125c10152612fa601526000818161042d0152818161120901528181611841015281816125290152612f260152600081816104540152818161127e015281816113390152611ba1015260006105c3015260006139d001526000613a1f015260006139fa015260006139530152600061397d015260006139a70152614ec56000f3fe608060405234801561001057600080fd5b50600436106102485760003560e01c80635865c60c1161013b578063ab269b2d116100b8578063ca0de8821161007c578063ca0de8821461061e578063d72d8dd614610645578063e65797ad1461064d578063fabc1cbc146106f0578063fd39105a1461070357600080fd5b8063ab269b2d146105ab578063b1344271146105be578063b8347acc146105e5578063c66ab9ca146105f8578063c81b1ff41461060b57600080fd5b80636347c900116100ff5780636347c90014610511578063683048351461052457806385020d491461054b578063886f11951461056b5780639e9923c21461058457600080fd5b80635865c60c146104af578063595c6a67146104cf5780635ac86ab7146104d75780635b0b829f146104f65780635c975abb1461050957600080fd5b8063296bb064116101c95780633561deb11161018d5780633561deb1146104285780633998fdd31461044f578063455a43fc146104765780634b76b9d514610489578063526ea94e1461049c57600080fd5b8063296bb064146103b157806329d1e0c3146103c45780632cdd1e86146103d75780633064620d146103ea5780633431af251461041557600080fd5b806313542a4e1161021057806313542a4e1461031c578063136439dd146103455780631478851f14610358578063250075761461038b57806328f61b311461039e57600080fd5b80630159f1ce1461024d578063054310e61461029b578063055a62b6146102c65780630cf4b767146102f457806310d67a2f14610309575b600080fd5b61026061025b366004613dda565b61073f565b60408051825163ffffffff908116825260208085015190911690820152918101516001600160c01b0316908201526060015b60405180910390f35b6037546102ae906001600160a01b031681565b6040516001600160a01b039091168152602001610292565b6102e66102d4366004613dfc565b60009081526033602052604090205490565b604051908152602001610292565b610307610302366004613f01565b6107d0565b005b610307610317366004613f5a565b6108d1565b6102e661032a366004613f5a565b6001600160a01b031660009081526034602052604090205490565b610307610353366004613dfc565b610984565b61037b610366366004613dfc565b60356020526000908152604090205460ff1681565b6040519015158152602001610292565b610307610399366004614075565b610ac1565b6038546102ae906001600160a01b031681565b6102ae6103bf366004613dfc565b6111f0565b6103076103d2366004613f5a565b61127c565b6103076103e5366004613f5a565b611337565b6103fd6103f8366004614189565b6113f2565b6040516001600160c01b039091168152602001610292565b6103fd610423366004613dfc565b6115f3565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b6103076104843660046141c1565b6116a9565b61030761049736600461429d565b6116e2565b6103076104aa36600461437a565b611a0e565b6104c26104bd366004613f5a565b611a5f565b604051610292919061441d565b610307611ad3565b61037b6104e5366004614450565b6001805460ff9092161b9081161490565b61030761050436600461446b565b611b9f565b6001546102e6565b6102ae61051f366004613dfc565b611c5f565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b61055e61055936600461449f565b611c89565b6040516102929190614544565b6000546102ae906201000090046001600160a01b031681565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b6102e66105b93660046145d5565b611fc4565b6102ae7f000000000000000000000000000000000000000000000000000000000000000081565b6103076105f3366004614689565b612028565b6103076106063660046146f0565b6120b3565b61030761061936600461437a565b61211e565b6102e67fae63aa1318751f64ef850e045417f86811eaecee1cebc226904d237b80704d9281565b6036546102e6565b6106bc61065b366004614450565b60408051606080820183526000808352602080840182905292840181905260ff9490941684526032825292829020825193840183525463ffffffff8116845261ffff600160201b8204811692850192909252600160301b9004169082015290565b60408051825163ffffffff16815260208084015161ffff908116918301919091529282015190921690820152606001610292565b6103076106fe366004613dfc565b612161565b610732610711366004613f5a565b6001600160a01b031660009081526034602052604090206001015460ff1690565b6040516102929190614774565b6040805160608101825260008082526020820181905291810191909152600083815260336020526040902080548390811061077c5761077c614782565b600091825260209182902060408051606081018252919092015463ffffffff8082168352600160201b820416938201939093526001600160c01b03600160401b909304929092169082015290505b92915050565b60013360009081526034602052604090206001015460ff1660028111156107f9576107f96143e5565b146108855760405162461bcd60e51b815260206004820152604b60248201527f424c535265676973747279436f6f7264696e61746f7257697468496e6469636960448201527f65732e757064617465536f636b65743a206f70657261746f72206973206e6f7460648201526a081c9959da5cdd195c995960aa1b608482015260a4015b60405180910390fd5b33600090815260346020526040908190205490517fec2963ab21c1e50e1e582aa542af2e4bf7bf38e6e1403c27b42e1c5d6e621eaa906108c69084906147f0565b60405180910390a250565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610924573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109489190614803565b6001600160a01b0316336001600160a01b0316146109785760405162461bcd60e51b815260040161087c90614820565b610981816122bd565b50565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa1580156109d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f5919061486a565b610a115760405162461bcd60e51b815260040161087c9061488c565b60015481811614610a8a5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c6974790000000000000000606482015260840161087c565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020016108c6565b600180546000919081161415610ae95760405162461bcd60e51b815260040161087c906148d4565b6000610b2e338b8b8b8b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506123c292505050565b6040805160018082528183019092529192506000919060208083019080368337019050509050610b5d89612a15565b81600081518110610b7057610b70614782565b602002602001018181525050610bf381600081518110610b9257610b92614782565b60200260200101518787808060200260200160405190810160405280939291908181526020016000905b82821015610be857610bd96080830286013681900381019061490b565b81526020019060010190610bbc565b505050505086612a58565b6000805b8b8110156111e15760008d8d83818110610c1357610c13614782565b919091013560f81c6000818152603260209081526040918290208251606081018452905463ffffffff811680835261ffff600160201b8304811694840194909452600160301b90910490921692810192909252885192945090925090879085908110610c8157610c81614782565b602002602001015163ffffffff1611610c9b5750506111cf565b8160ff168a8a86818110610cb157610cb1614782565b610cc79260206080909202019081019150614450565b60ff1614610d605760405162461bcd60e51b81526020600482015260666024820152600080516020614e7083398151915260448201527f732e72656769737465724f70657261746f7257697468436f6f7264696e61746f60648201527f723a2071756f72756d4e756d626572206e6f74207468652073616d65206173206084820152651cda59db995960d21b60a482015260c40161087c565b604051630c8f739d60e41b815260ff831660048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063c8f739d090602401602060405180830381865afa158015610dca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dee9190614927565b90506000603460008d8d89818110610e0857610e08614782565b9050608002016020016020810190610e209190613f5a565b6001600160a01b039081168252602082019290925260409081016000908120549151631aad4e3560e21b81526004810183905260ff88166024820152919350917f00000000000000000000000000000000000000000000000000000000000000001690636ab538d490604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ecd9190614927565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636ab538d48a600081518110610f1357610f13614782565b6020026020010151886040518363ffffffff1660e01b8152600401610f4592919091825260ff16602082015260400190565b602060405180830381865afa158015610f62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f869190614927565b602086015190915061271090610fa09061ffff1684614966565b610faa9190614995565b6001600160601b0316816001600160601b03161161106a5760405162461bcd60e51b815260206004820152607d6024820152600080516020614e7083398151915260448201527f732e72656769737465724f70657261746f7257697468436f6f7264696e61746f60648201527f723a207265676973746572696e67206f70657261746f7220686173206c65737360848201527f207468616e206b69636b424950734f664f70657261746f725374616b6500000060a482015260c40161087c565b6040850151612710906110819061ffff1686614966565b61108b9190614995565b6001600160601b0316826001600160601b0316106111445760405162461bcd60e51b81526020600482015260766024820152600080516020614e7083398151915260448201527f732e72656769737465724f70657261746f7257697468436f6f7264696e61746f60648201527f723a206f70657261746f7220746f206b69636b20686173206d6f7265207468616084820152756e206b69636b424950534f66546f74616c5374616b6560501b60a482015260c40161087c565b8761114e816149c9565b9850505050505050506111cf88888381811061116c5761116c614782565b90506080020160200160208101906111849190613f5a565b8e838f6111928260016149e4565b9261119f939291906149fc565b8b8b868181106111b1576111b1614782565b9050608002016040018036038101906111ca9190614a26565b612c25565b806111d9816149c9565b915050610bf7565b50505050505050505050505050565b6040516308f6629d60e31b8152600481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906347b314e890602401602060405180830381865afa158015611258573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ca9190614803565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112fe9190614803565b6001600160a01b0316336001600160a01b03161461132e5760405162461bcd60e51b815260040161087c90614a42565b610981816131d2565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611395573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b99190614803565b6001600160a01b0316336001600160a01b0316146113e95760405162461bcd60e51b815260040161087c90614a42565b6109818161323b565b600083815260336020526040812080548291908490811061141557611415614782565b600091825260209182902060408051606081018252929091015463ffffffff808216808552600160201b8304821695850195909552600160401b9091046001600160c01b031691830191909152909250851610156115155760405162461bcd60e51b815260206004820152607f6024820152600080516020614e7083398151915260448201527f732e67657451756f72756d4269746d617042794f70657261746f72496441744260648201527f6c6f636b4e756d6265724279496e6465783a2071756f72756d4269746d61705560848201527f70646174652069732066726f6d20616674657220626c6f636b4e756d6265720060a482015260c40161087c565b8363ffffffff16816020015163ffffffff16118061153b5750602081015163ffffffff16155b6115e75760405162461bcd60e51b81526020600482015260806024820152600080516020614e7083398151915260448201527f732e67657451756f72756d4269746d617042794f70657261746f72496441744260648201527f6c6f636b4e756d6265724279496e6465783a2071756f72756d4269746d61705560848201527f70646174652069732066726f6d206265666f726520626c6f636b4e756d62657260a482015260c40161087c565b60400151949350505050565b60008181526033602052604081205480158061164f57506000838152603360205260409020611623600183614abe565b8154811061163357611633614782565b600091825260209091200154600160201b900463ffffffff1615155b1561165d5750600092915050565b6000838152603360205260409020611676600183614abe565b8154811061168657611686614782565b600091825260209091200154600160401b90046001600160c01b03169392505050565b60018054600290811614156116d05760405162461bcd60e51b815260040161087c906148d4565b6116dc33858585612c25565b50505050565b600054610100900460ff16158080156117025750600054600160ff909116105b8061171c5750303b15801561171c575060005460ff166001145b61177f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161087c565b6000805460ff1916600117905580156117a2576000805461ff0019166101001790555b6117ac83836132a4565b6117b5866131d2565b6117be8561323b565b603680546001808201835560008390527f4a11f94e20a93c79f6ec743a1954ec4fc2c08429ae2122118bf234b2185c81b891820180546001600160a01b03199081167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03908116918217909355855480850187558501805483167f0000000000000000000000000000000000000000000000000000000000000000851617905585549384019095559190920180549091167f0000000000000000000000000000000000000000000000000000000000000000909216919091179055845160408051639aa1653d60e01b81529051919291639aa1653d916004808201926020929091908290030181865afa1580156118e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119049190614ad5565b61ffff16146119785760405162461bcd60e51b81526020600482015260466024820152600080516020614e7083398151915260448201527f733a206f70657261746f722073657420706172616d73206c656e677468206d696064820152650e6dac2e8c6d60d31b608482015260a40161087c565b60005b84518160ff1610156119bf576119ad81868360ff16815181106119a0576119a0614782565b6020026020010151613390565b806119b781614af2565b91505061197b565b508015611a06576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b600180546000919081161415611a365760405162461bcd60e51b815260040161087c906148d4565b600080611a4584860186614b12565b91509150611a56338888858561343d565b50505050505050565b60408051808201909152600080825260208201526001600160a01b0382166000908152603460209081526040918290208251808401909352805483526001810154909183019060ff166002811115611ab957611ab96143e5565b6002811115611aca57611aca6143e5565b90525092915050565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015611b20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b44919061486a565b611b605760405162461bcd60e51b815260040161087c9061488c565b600019600181905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c219190614803565b6001600160a01b0316336001600160a01b031614611c515760405162461bcd60e51b815260040161087c90614a42565b611c5b8282613390565b5050565b60368181548110611c6f57600080fd5b6000918252602090912001546001600160a01b0316905081565b6060600082516001600160401b03811115611ca657611ca6613e15565b604051908082528060200260200182016040528015611ccf578160200160208202803683370190505b50905060005b8351811015611fbc57600060336000868481518110611cf657611cf6614782565b6020026020010151815260200190815260200160002080549050905060005b8163ffffffff168163ffffffff161015611fa7578663ffffffff1660336000888681518110611d4657611d46614782565b6020026020010151815260200190815260200160002060018385611d6a9190614b60565b611d749190614b60565b63ffffffff1681548110611d8a57611d8a614782565b60009182526020909120015463ffffffff1611611f955760336000878581518110611db757611db7614782565b6020026020010151815260200190815260200160002060018284611ddb9190614b60565b611de59190614b60565b63ffffffff1681548110611dfb57611dfb614782565b600091825260209091200154600160201b900463ffffffff161580611e9757508663ffffffff1660336000888681518110611e3857611e38614782565b6020026020010151815260200190815260200160002060018385611e5c9190614b60565b611e669190614b60565b63ffffffff1681548110611e7c57611e7c614782565b600091825260209091200154600160201b900463ffffffff16115b611f4e5760405162461bcd60e51b81526020600482015260826024820152600080516020614e7083398151915260448201527f732e67657451756f72756d4269746d6170496e646963657342794f706572617460648201527f6f724964734174426c6f636b4e756d6265723a206f70657261746f724964206860848201527f6173206e6f2071756f72756d4269746d61707320617420626c6f636b4e756d6260a48201526132b960f11b60c482015260e40161087c565b6001611f5a8284614b60565b611f649190614b60565b848481518110611f7657611f76614782565b602002602001019063ffffffff16908163ffffffff1681525050611fa7565b80611f9f81614b85565b915050611d15565b50508080611fb4906149c9565b915050611cd5565b509392505050565b600061201d7fae63aa1318751f64ef850e045417f86811eaecee1cebc226904d237b80704d9286868686604051602001612002959493929190614ba9565b60405160208183030381529060405280519060200120613554565b90505b949350505050565b6038546001600160a01b031633146120a75760405162461bcd60e51b81526020600482015260486024820152600080516020614e7083398151915260448201527f732e6f6e6c79456a6563746f723a2063616c6c6572206973206e6f74207468656064820152671032b532b1ba37b960c11b608482015260a40161087c565b6116dc84848484612c25565b6001805460009190811614156120db5760405162461bcd60e51b815260040161087c906148d4565b611a063387878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061343d92505050565b60018054600290811614156121455760405162461bcd60e51b815260040161087c906148d4565b600061215383850185614a26565b9050611a0633878784612c25565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121d89190614803565b6001600160a01b0316336001600160a01b0316146122085760405162461bcd60e51b815260040161087c90614820565b6001541981196001541916146122865760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c6974790000000000000000606482015260840161087c565b600181905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016108c6565b6001600160a01b03811661234b5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a40161087c565b600054604080516001600160a01b03620100009093048316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6060600061240586868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506135a292505050565b90506001600160c01b0381111561249a5760405162461bcd60e51b815260206004820152606b6024820152600080516020614e708339815191526044820152600080516020614e5083398151915260648201527f6f723a2071756f72756d4269746d61702065786365656473206f66206d61782060848201526a6269746d61702073697a6560a81b60a482015260c40161087c565b8061250f5760405162461bcd60e51b815260206004820152605c6024820152600080516020614e708339815191526044820152600080516020614e5083398151915260648201527f6f723a2071756f72756d4269746d61702063616e6e6f74206265203000000000608482015260a40161087c565b6040516303ce4bad60e01b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906303ce4bad90612564908b908b908b908b90600401614c66565b6020604051808303816000875af1158015612583573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125a79190614ca3565b604051632550477760e01b81529091506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906325504777906125fc908b9085908c908c90600401614cbc565b600060405180830381600087803b15801561261657600080fd5b505af115801561262a573d6000803e3d6000fd5b505060405162bff04d60e01b8152600092506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016915062bff04d9061267f9085908c908c90600401614cee565b6000604051808303816000875af115801561269e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526126c69190810190614d08565b6000838152603360205260409020549091508015801590612726575060008381526033602052604090206126fb600183614abe565b8154811061270b5761270b614782565b600091825260209091200154600160201b900463ffffffff16155b1561287d576000838152603360205260408120612744600184614abe565b8154811061275457612754614782565b6000918252602090912001546001600160c01b03600160401b9091048181169250861616156128215760405162461bcd60e51b81526020600482015260856024820152600080516020614e708339815191526044820152600080516020614e5083398151915260648201527f6f723a206f70657261746f7220616c726561647920726567697374657265642060848201527f666f7220736f6d652071756f72756d73206265696e672072656769737465726560a48201526432103337b960d91b60c482015260e40161087c565b6000848152603360205260409020948117944390612840600185614abe565b8154811061285057612850614782565b9060005260206000200160000160046101000a81548163ffffffff021916908363ffffffff160217905550505b6000838152603360209081526040808320815160608101835263ffffffff43811682528185018681526001600160c01b038b8116848701908152855460018082018855968a52888a2095519501805493519151909216600160401b026001600160401b03918516600160201b0267ffffffffffffffff19909416959094169490941791909117929092161790556001600160a01b038e168452603490925290912081015460ff166002811115612935576129356143e5565b146129ce57604080518082018252848152600160208083018281526001600160a01b038f166000908152603490925293902082518155925183820180549394939192909160ff191690836002811115612990576129906143e5565b0217905550506040518491506001600160a01b038c16907fe8e68cef1c3a761ed7be7e8463a375f27f7bc335e51824223cacce636ec5c3fe90600090a35b827fec2963ab21c1e50e1e582aa542af2e4bf7bf38e6e1403c27b42e1c5d6e621eaa876040516129fe91906147f0565b60405180910390a250925050505b95945050505050565b600081600001518260200151604051602001612a3b929190918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b60208082015160009081526035909152604090205460ff1615612b1d5760405162461bcd60e51b81526020600482015260776024820152600080516020614e7083398151915260448201527f732e5f766572696679436875726e417070726f7665725369676e61747572654f60648201527f6e4f70657261746f72436875726e417070726f76616c3a20636875726e41707060848201527f726f7665722073616c7420616c7265616479207573656400000000000000000060a482015260c40161087c565b4281604001511015612bd15760405162461bcd60e51b81526020600482015260776024820152600080516020614e7083398151915260448201527f732e5f766572696679436875726e417070726f7665725369676e61747572654f60648201527f6e4f70657261746f72436875726e417070726f76616c3a20636875726e41707060848201527f726f766572207369676e6174757265206578706972656400000000000000000060a482015260c40161087c565b6020808201805160009081526035909252604091829020805460ff19166001179055603754905191830151612c20926001600160a01b0390921691612c199187918791611fc4565b835161372f565b505050565b60016001600160a01b03851660009081526034602052604090206001015460ff166002811115612c5757612c576143e5565b14612cde5760405162461bcd60e51b81526020600482015260606024820152600080516020614e7083398151915260448201527f732e5f646572656769737465724f70657261746f7257697468436f6f7264696e60648201527f61746f723a206f70657261746f72206973206e6f742072656769737465726564608482015260a40161087c565b6001600160a01b038416600090815260346020526040902054612d0082612a15565b8114612d9c5760405162461bcd60e51b815260206004820152606b6024820152600080516020614e7083398151915260448201527f732e5f646572656769737465724f70657261746f7257697468436f6f7264696e60648201527f61746f723a206f70657261746f72496420646f6573206e6f74206d617463682060848201526a0e0eac4d6caf240d0c2e6d60ab1b60a482015260c40161087c565b6000612ddd85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506135a292505050565b60008381526033602052604081205491925090612dfc90600190614abe565b60008481526033602052604081208054929350909183908110612e2157612e21614782565b6000918252602082200154600160401b90049384166001600160c01b0390811694169150612e4e846138e9565b9050805160001415612f025760405162461bcd60e51b81526020600482015260806024820152600080516020614e7083398151915260448201527f732e5f646572656769737465724f70657261746f7257697468436f6f7264696e60648201527f61746f723a206f70657261746f72206973206e6f74207265676973746572656460848201527f20666f7220616e79206f66207468652070726f76696465642071756f72756d7360a482015260c40161087c565b60405163121b4d9560e11b81526001600160c01b0383168514906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906324369b2a90612f5f908d9086908c90600401614da1565b600060405180830381600087803b158015612f7957600080fd5b505af1158015612f8d573d6000803e3d6000fd5b505060405163bd29b8cd60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016925063bd29b8cd9150612fdf9089908690600401614ddd565b600060405180830381600087803b158015612ff957600080fd5b505af115801561300d573d6000803e3d6000fd5b505060405163bd29b8cd60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016925063bd29b8cd915061305f9089908690600401614ddd565b600060405180830381600087803b15801561307957600080fd5b505af115801561308d573d6000803e3d6000fd5b50505060008781526033602052604090208054439250869081106130b3576130b3614782565b9060005260206000200160000160046101000a81548163ffffffff021916908363ffffffff16021790555080613177576000868152603360209081526040808320815160608101835263ffffffff43811682528185018681526001600160c01b038c198b168116958401958652845460018101865594885295909620915191909201805495519351909416600160401b026001600160401b03938316600160201b0267ffffffffffffffff19909616919092161793909317169190911790556131c6565b6001600160a01b038a16600081815260346020526040808220600101805460ff19166002179055518892917f396fdcb180cb0fea26928113fb0fd1c3549863f9cd563e6a184f1d578116c8e491a35b50505050505050505050565b603754604080516001600160a01b03928316815291831660208301527f315457d8a8fe60f04af17c16e2f5a5e1db612b31648e58030360759ef8f3528c910160405180910390a1603780546001600160a01b0319166001600160a01b0392909216919091179055565b603854604080516001600160a01b03928316815291831660208301527f8f30ab09f43a6c157d7fce7e0a13c003042c1c95e8a72e7a146a21c0caa24dc9910160405180910390a1603880546001600160a01b0319166001600160a01b0392909216919091179055565b6000546201000090046001600160a01b03161580156132cb57506001600160a01b03821615155b61334d5760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a40161087c565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2611c5b826122bd565b60ff8216600081815260326020908152604091829020845181548684018051888701805163ffffffff90951665ffffffffffff199094168417600160201b61ffff938416021767ffff0000000000001916600160301b95831695909502949094179094558551918252518316938101939093525116918101919091527f3ee6fe8d54610244c3e9d3c066ae4aee997884aa28f10616ae821925401318ac9060600160405180910390a25050565b600061344c86868686866123c2565b905060005b8151811015611a56576032600087878481811061347057613470614782565b919091013560f81c825250602081019190915260400160002054825163ffffffff909116908390839081106134a7576134a7614782565b602002602001015163ffffffff1611156135425760405162461bcd60e51b815260206004820152606e6024820152600080516020614e708339815191526044820152600080516020614e5083398151915260648201527f6f72416e644e6f4f76657266696c6c656451756f72756d733a2071756f72756d60848201526d081a5cc81bdd995c999a5b1b195960921b60a482015260c40161087c565b8061354c816149c9565b915050613451565b60006107ca613561613946565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b60006101008251111561362b5760405162461bcd60e51b8152602060048201526044602482018190527f4269746d61705574696c732e6f72646572656442797465734172726179546f42908201527f69746d61703a206f7264657265644279746573417272617920697320746f6f206064820152636c6f6e6760e01b608482015260a40161087c565b815161363957506000919050565b6000808360008151811061364f5761364f614782565b0160200151600160f89190911c81901b92505b84518110156137265784818151811061367d5761367d614782565b0160200151600160f89190911c1b91508282116137125760405162461bcd60e51b815260206004820152604760248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206f72646572656442797465734172726179206973206e6f74206064820152661bdc99195c995960ca1b608482015260a40161087c565b9181179161371f816149c9565b9050613662565b50909392505050565b6001600160a01b0383163b1561384957604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e9061376f9086908690600401614ddd565b602060405180830381865afa15801561378c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137b09190614df6565b6001600160e01b03191614612c205760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a40161087c565b826001600160a01b031661385d8383613a6d565b6001600160a01b031614612c205760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a40161087c565b60606000805b61010081101561393f576001811b91508382161561392f57828160f81b60405160200161391d929190614e20565b60405160208183030381529060405292505b613938816149c9565b90506138ef565b5050919050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561399f57507f000000000000000000000000000000000000000000000000000000000000000046145b156139c957507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000806000613a7c8585613a89565b91509150611fbc81613af9565b600080825160411415613ac05760208301516040840151606085015160001a613ab487828585613cb4565b94509450505050613af2565b825160401415613aea5760208301516040840151613adf868383613da1565b935093505050613af2565b506000905060025b9250929050565b6000816004811115613b0d57613b0d6143e5565b1415613b165750565b6001816004811115613b2a57613b2a6143e5565b1415613b785760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161087c565b6002816004811115613b8c57613b8c6143e5565b1415613bda5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161087c565b6003816004811115613bee57613bee6143e5565b1415613c475760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b606482015260840161087c565b6004816004811115613c5b57613c5b6143e5565b14156109815760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b606482015260840161087c565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115613ceb5750600090506003613d98565b8460ff16601b14158015613d0357508460ff16601c14155b15613d145750600090506004613d98565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015613d68573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116613d9157600060019250925050613d98565b9150600090505b94509492505050565b6000806001600160ff1b03831681613dbe60ff86901c601b6149e4565b9050613dcc87828885613cb4565b935093505050935093915050565b60008060408385031215613ded57600080fd5b50508035926020909101359150565b600060208284031215613e0e57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715613e4d57613e4d613e15565b60405290565b604051601f8201601f191681016001600160401b0381118282101715613e7b57613e7b613e15565b604052919050565b60006001600160401b03831115613e9c57613e9c613e15565b613eaf601f8401601f1916602001613e53565b9050828152838383011115613ec357600080fd5b828260208301376000602084830101529392505050565b600082601f830112613eeb57600080fd5b613efa83833560208501613e83565b9392505050565b600060208284031215613f1357600080fd5b81356001600160401b03811115613f2957600080fd5b61202084828501613eda565b6001600160a01b038116811461098157600080fd5b8035613f5581613f35565b919050565b600060208284031215613f6c57600080fd5b8135613efa81613f35565b60008083601f840112613f8957600080fd5b5081356001600160401b03811115613fa057600080fd5b602083019150836020828501011115613af257600080fd5b600060408284031215613fca57600080fd5b604051604081018181106001600160401b0382111715613fec57613fec613e15565b604052823581526020928301359281019290925250919050565b60006060828403121561401857600080fd5b614020613e2b565b905081356001600160401b0381111561403857600080fd5b8201601f8101841361404957600080fd5b61405884823560208401613e83565b825250602082013560208201526040820135604082015292915050565b60008060008060008060008060c0898b03121561409157600080fd5b88356001600160401b03808211156140a857600080fd5b6140b48c838d01613f77565b909a5098508891506140c98c60208d01613fb8565b975060608b01359150808211156140df57600080fd5b6140eb8c838d01613f77565b909750955060808b013591508082111561410457600080fd5b818b0191508b601f83011261411857600080fd5b81358181111561412757600080fd5b8c60208260071b850101111561413c57600080fd5b6020830195508094505060a08b013591508082111561415a57600080fd5b506141678b828c01614006565b9150509295985092959890939650565b63ffffffff8116811461098157600080fd5b60008060006060848603121561419e57600080fd5b8335925060208401356141b081614177565b929592945050506040919091013590565b6000806000606084860312156141d657600080fd5b83356001600160401b038111156141ec57600080fd5b6141f886828701613f77565b909450925061420c90508560208601613fb8565b90509250925092565b60006001600160401b0382111561422e5761422e613e15565b5060051b60200190565b61ffff8116811461098157600080fd5b60006060828403121561425a57600080fd5b614262613e2b565b9050813561426f81614177565b8152602082013561427f81614238565b6020820152604082013561429281614238565b604082015292915050565b600080600080600060a086880312156142b557600080fd5b85356142c081613f35565b94506020868101356142d181613f35565b945060408701356001600160401b038111156142ec57600080fd5b8701601f810189136142fd57600080fd5b803561431061430b82614215565b613e53565b8181526060918202830184019184820191908c84111561432f57600080fd5b938501935b83851015614355576143468d86614248565b83529384019391850191614334565b819850614363818d01613f4a565b9a9d999c50979a6080013598975050505050505050565b6000806000806040858703121561439057600080fd5b84356001600160401b03808211156143a757600080fd5b6143b388838901613f77565b909650945060208701359150808211156143cc57600080fd5b506143d987828801613f77565b95989497509550505050565b634e487b7160e01b600052602160045260246000fd5b6003811061441957634e487b7160e01b600052602160045260246000fd5b9052565b815181526020808301516040830191614438908401826143fb565b5092915050565b803560ff81168114613f5557600080fd5b60006020828403121561446257600080fd5b613efa8261443f565b6000806080838503121561447e57600080fd5b6144878361443f565b91506144968460208501614248565b90509250929050565b600080604083850312156144b257600080fd5b82356144bd81614177565b91506020838101356001600160401b038111156144d957600080fd5b8401601f810186136144ea57600080fd5b80356144f861430b82614215565b81815260059190911b8201830190838101908883111561451757600080fd5b928401925b828410156145355783358252928401929084019061451c565b80955050505050509250929050565b6020808252825182820181905260009190848201906040850190845b8181101561458257835163ffffffff1683529284019291840191600101614560565b50909695505050505050565b6000608082840312156145a057600080fd5b6145a8613e2b565b90506145b38261443f565b815260208201356145c381613f35565b60208201526142928360408401613fb8565b60008060008060808086880312156145ec57600080fd5b853594506020808701356001600160401b0381111561460a57600080fd5b8701601f8101891361461b57600080fd5b803561462961430b82614215565b81815260079190911b8201830190838101908b83111561464857600080fd5b928401925b8284101561466e5761465f8c8561458e565b8252928501929084019061464d565b989b989a505050506040870135966060013595945050505050565b6000806000806080858703121561469f57600080fd5b84356146aa81613f35565b935060208501356001600160401b038111156146c557600080fd5b6146d187828801613f77565b90945092506146e590508660408701613fb8565b905092959194509250565b60008060008060006080868803121561470857600080fd5b85356001600160401b038082111561471f57600080fd5b61472b89838a01613f77565b90975095508591506147408960208a01613fb8565b9450606088013591508082111561475657600080fd5b5061476388828901613f77565b969995985093965092949392505050565b602081016107ca82846143fb565b634e487b7160e01b600052603260045260246000fd5b60005b838110156147b357818101518382015260200161479b565b838111156116dc5750506000910152565b600081518084526147dc816020860160208601614798565b601f01601f19169290920160200192915050565b602081526000613efa60208301846147c4565b60006020828403121561481557600080fd5b8151613efa81613f35565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60006020828403121561487c57600080fd5b81518015158114613efa57600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b60208082526019908201527f5061757361626c653a20696e6465782069732070617573656400000000000000604082015260600190565b60006080828403121561491d57600080fd5b613efa838361458e565b60006020828403121561493957600080fd5b81516001600160601b0381168114613efa57600080fd5b634e487b7160e01b600052601160045260246000fd5b60006001600160601b038083168185168183048111821515161561498c5761498c614950565b02949350505050565b60006001600160601b03808416806149bd57634e487b7160e01b600052601260045260246000fd5b92169190910492915050565b60006000198214156149dd576149dd614950565b5060010190565b600082198211156149f7576149f7614950565b500190565b60008085851115614a0c57600080fd5b83861115614a1957600080fd5b5050820193919092039150565b600060408284031215614a3857600080fd5b613efa8383613fb8565b6020808252606290820152600080516020614e7083398151915260408201527f732e6f6e6c79536572766963654d616e616765724f776e65723a2063616c6c6560608201527f72206973206e6f74207468652073657276696365206d616e61676572206f776e60808201526132b960f11b60a082015260c00190565b600082821015614ad057614ad0614950565b500390565b600060208284031215614ae757600080fd5b8151613efa81614238565b600060ff821660ff811415614b0957614b09614950565b60010192915050565b60008060608385031215614b2557600080fd5b614b2f8484613fb8565b915060408301356001600160401b03811115614b4a57600080fd5b614b5685828601613eda565b9150509250929050565b600063ffffffff83811690831681811015614b7d57614b7d614950565b039392505050565b600063ffffffff80831681811415614b9f57614b9f614950565b6001019392505050565b600060a0820187835260208781850152604060a08186015282885180855260c087019150838a01945060005b81811015614c24578551805160ff168452858101516001600160a01b031686850152840151614c108585018280518252602090810151910152565b509484019460809290920191600101614bd5565b5050606086019790975250505050608001529392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0385168152608060208201819052600090614c8b9083018587614c3d565b83516040840152602084015160608401529050612a0c565b600060208284031215614cb557600080fd5b5051919050565b60018060a01b0385168152836020820152606060408201526000614ce4606083018486614c3d565b9695505050505050565b83815260406020820152600061201d604083018486614c3d565b60006020808385031215614d1b57600080fd5b82516001600160401b03811115614d3157600080fd5b8301601f81018513614d4257600080fd5b8051614d5061430b82614215565b81815260059190911b82018301908381019087831115614d6f57600080fd5b928401925b82841015614d96578351614d8781614177565b82529284019290840190614d74565b979650505050505050565b6001600160a01b0384168152608060208201819052600090614dc5908301856147c4565b83516040840152602084015160608401529050612020565b82815260406020820152600061202060408301846147c4565b600060208284031215614e0857600080fd5b81516001600160e01b031981168114613efa57600080fd5b60008351614e32818460208801614798565b6001600160f81b031993909316919092019081526001019291505056fe732e5f72656769737465724f70657261746f7257697468436f6f7264696e6174424c535265676973747279436f6f7264696e61746f7257697468496e64696365a2646970667358221220dac06bf6cf041be7705070ab0d9d580cc67c938cea5884160143fd213eec13e364736f6c634300080c0033", } // ContractBLSRegistryCoordinatorWithIndicesABI is the input ABI used to generate the binding from. diff --git a/contracts/bindings/BN254/binding.go b/contracts/bindings/BN254/binding.go index 2bccbea722..b2e590483c 100644 --- a/contracts/bindings/BN254/binding.go +++ b/contracts/bindings/BN254/binding.go @@ -32,7 +32,7 @@ var ( // ContractBN254MetaData contains all meta data concerning the ContractBN254 contract. var ContractBN254MetaData = &bind.MetaData{ ABI: "[]", - Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122039b7e6e5fcbf2d9c98f042951e90c859223d2121028bfc2549bfe132eb2422bc64736f6c634300080c0033", + Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220882629219b4c242edd982fdb72abc5561e3573f52fb7c6cfa854980515a5328064736f6c634300080c0033", } // ContractBN254ABI is the input ABI used to generate the binding from. diff --git a/contracts/bindings/BitmapUtils/binding.go b/contracts/bindings/BitmapUtils/binding.go index 5118faa9c8..740c553f56 100644 --- a/contracts/bindings/BitmapUtils/binding.go +++ b/contracts/bindings/BitmapUtils/binding.go @@ -32,7 +32,7 @@ var ( // ContractBitmapUtilsMetaData contains all meta data concerning the ContractBitmapUtils contract. var ContractBitmapUtilsMetaData = &bind.MetaData{ ABI: "[]", - Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220143410270af4dc6f53e3d9889e049213450421673b4a2e7a1d65c2e2167100e764736f6c634300080c0033", + Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220c1e2b17d465dc20a6ad9436b1c9952f73e06771fc5e769227fde5aad621e0ffc64736f6c634300080c0033", } // ContractBitmapUtilsABI is the input ABI used to generate the binding from. diff --git a/contracts/bindings/DelegationManager/binding.go b/contracts/bindings/DelegationManager/binding.go new file mode 100644 index 0000000000..2d2287bbf2 --- /dev/null +++ b/contracts/bindings/DelegationManager/binding.go @@ -0,0 +1,4300 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package contractDelegationManager + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// IDelegationManagerOperatorDetails is an auto generated low-level Go binding around an user-defined struct. +type IDelegationManagerOperatorDetails struct { + EarningsReceiver common.Address + DelegationApprover common.Address + StakerOptOutWindowBlocks uint32 +} + +// IDelegationManagerQueuedWithdrawalParams is an auto generated low-level Go binding around an user-defined struct. +type IDelegationManagerQueuedWithdrawalParams struct { + Strategies []common.Address + Shares []*big.Int + Withdrawer common.Address +} + +// IDelegationManagerWithdrawal is an auto generated low-level Go binding around an user-defined struct. +type IDelegationManagerWithdrawal struct { + Staker common.Address + DelegatedTo common.Address + Withdrawer common.Address + Nonce *big.Int + StartBlock uint32 + Strategies []common.Address + Shares []*big.Int +} + +// ISignatureUtilsSignatureWithExpiry is an auto generated low-level Go binding around an user-defined struct. +type ISignatureUtilsSignatureWithExpiry struct { + Signature []byte + Expiry *big.Int +} + +// IStrategyManagerDeprecatedStructQueuedWithdrawal is an auto generated low-level Go binding around an user-defined struct. +type IStrategyManagerDeprecatedStructQueuedWithdrawal struct { + Strategies []common.Address + Shares []*big.Int + Staker common.Address + WithdrawerAndNonce IStrategyManagerDeprecatedStructWithdrawerAndNonce + WithdrawalStartBlock uint32 + DelegatedAddress common.Address +} + +// IStrategyManagerDeprecatedStructWithdrawerAndNonce is an auto generated low-level Go binding around an user-defined struct. +type IStrategyManagerDeprecatedStructWithdrawerAndNonce struct { + Withdrawer common.Address + Nonce *big.Int +} + +// ContractDelegationManagerMetaData contains all meta data concerning the ContractDelegationManager contract. +var ContractDelegationManagerMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_strategyManager\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"},{\"name\":\"_slasher\",\"type\":\"address\",\"internalType\":\"contractISlasher\"},{\"name\":\"_eigenPodManager\",\"type\":\"address\",\"internalType\":\"contractIEigenPodManager\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DELEGATION_APPROVAL_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DOMAIN_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_STAKER_OPT_OUT_WINDOW_BLOCKS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_WITHDRAWAL_DELAY_BLOCKS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"STAKER_DELEGATION_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"beaconChainETHStrategy\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateCurrentStakerDelegationDigestHash\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateDelegationApprovalDigestHash\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"approverSalt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateStakerDelegationDigestHash\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_stakerNonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateWithdrawalRoot\",\"inputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.Withdrawal\",\"components\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegatedTo\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"completeQueuedWithdrawal\",\"inputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.Withdrawal\",\"components\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegatedTo\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"tokens\",\"type\":\"address[]\",\"internalType\":\"contractIERC20[]\"},{\"name\":\"middlewareTimesIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"receiveAsTokens\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeQueuedWithdrawals\",\"inputs\":[{\"name\":\"withdrawals\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManager.Withdrawal[]\",\"components\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegatedTo\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"tokens\",\"type\":\"address[][]\",\"internalType\":\"contractIERC20[][]\"},{\"name\":\"middlewareTimesIndexes\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"receiveAsTokens\",\"type\":\"bool[]\",\"internalType\":\"bool[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"cumulativeWithdrawalsQueued\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"decreaseDelegatedShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegateTo\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"approverSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.SignatureWithExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"approverSalt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegateToBySignature\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.SignatureWithExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"approverSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.SignatureWithExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"approverSalt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegatedTo\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"delegationApprover\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"delegationApproverSaltIsSpent\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"domainSeparator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"earningsReceiver\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"eigenPodManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIEigenPodManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDelegatableShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getWithdrawalDelay\",\"inputs\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"increaseDelegatedShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minWithdrawalDelayBlocks\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"_withdrawalDelayBlocks\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isDelegated\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperator\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"migrateQueuedWithdrawals\",\"inputs\":[{\"name\":\"withdrawalsToMigrate\",\"type\":\"tuple[]\",\"internalType\":\"structIStrategyManager.DeprecatedStruct_QueuedWithdrawal[]\",\"components\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"withdrawerAndNonce\",\"type\":\"tuple\",\"internalType\":\"structIStrategyManager.DeprecatedStruct_WithdrawerAndNonce\",\"components\":[{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"withdrawalStartBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"delegatedAddress\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"minWithdrawalDelayBlocks\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"modifyOperatorDetails\",\"inputs\":[{\"name\":\"newOperatorDetails\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"operatorDetails\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorShares\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseAll\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pauserRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pendingWithdrawals\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"queueWithdrawals\",\"inputs\":[{\"name\":\"queuedWithdrawalParams\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManager.QueuedWithdrawalParams[]\",\"components\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registerAsOperator\",\"inputs\":[{\"name\":\"registeringOperatorDetails\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setStrategyWithdrawalDelayBlocks\",\"inputs\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"withdrawalDelayBlocks\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"slasher\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISlasher\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerNonce\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerOptOutWindowBlocks\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyWithdrawalDelayBlocks\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"undelegate\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"withdrawalRoots\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateOperatorMetadataURI\",\"inputs\":[{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MinWithdrawalDelayBlocksSet\",\"inputs\":[{\"name\":\"previousValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"newValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorDetailsModified\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOperatorDetails\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorMetadataURIUpdated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"metadataURI\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorRegistered\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorDetails\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSharesDecreased\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"staker\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSharesIncreased\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"staker\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StakerDelegated\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StakerForceUndelegated\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StakerUndelegated\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategyWithdrawalDelayBlocksSet\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"previousValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"newValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalCompleted\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalMigrated\",\"inputs\":[{\"name\":\"oldWithdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"newWithdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalQueued\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"withdrawal\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManager.Withdrawal\",\"components\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegatedTo\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"anonymous\":false}]", + Bin: "0x6101006040523480156200001257600080fd5b5060405162005ff438038062005ff4833981016040819052620000359162000140565b6001600160a01b0380841660805280821660c052821660a0526200005862000065565b50504660e0525062000194565b600054610100900460ff1615620000d25760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000125576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200013d57600080fd5b50565b6000806000606084860312156200015657600080fd5b8351620001638162000127565b6020850151909350620001768162000127565b6040850151909250620001898162000127565b809150509250925092565b60805160a05160c05160e051615dc46200023060003960006126380152600081816105b101528181611058015281816113d401528181611ccc015281816129910152818161400401526144f00152600061076e0152600081816104f901528181611026015281816113a2015281816116ca01528181611d6001528181612a5e01528181612be10152818161412a01526145960152615dc46000f3fe608060405234801561001057600080fd5b50600436106103425760003560e01c80635f966f14116101b8578063b7f06ebe11610104578063cf80873e116100a2578063f16172b01161007c578063f16172b014610914578063f2fde38b14610927578063f698da251461093a578063fabc1cbc1461094257600080fd5b8063cf80873e146108cd578063da8be864146108ee578063eea9064b1461090157600080fd5b8063c488375a116100de578063c488375a146107ea578063c5e480db1461080a578063c94b5111146108b0578063ca661c04146108c357600080fd5b8063b7f06ebe14610790578063bb45fef2146107b3578063c448feb8146107e157600080fd5b80637f548071116101715780639104c3191161014b5780639104c3191461071b57806399be81c814610736578063a178848414610749578063b13442711461076957600080fd5b80637f548071146106e4578063886f1195146106f75780638da5cb5b1461070a57600080fd5b80635f966f141461063657806360d7faed1461066257806365da1264146106755780636d70f7ae1461069e578063715018a6146106b1578063778e55f3146106b957600080fd5b806328a573ae116102925780634665bcda11610230578063597b36da1161020a578063597b36da146105e55780635ac86ab7146105f85780635c975abb1461061b5780635cfe8d2c1461062357600080fd5b80634665bcda146105ac5780634fc40b61146105d3578063595c6a67146105dd57600080fd5b806339b70e381161026c57806339b70e38146104f45780633cdeb5e0146105335780633e28391d14610562578063433773821461058557600080fd5b806328a573ae146104ae57806329c77d4f146104c157806333404396146104e157600080fd5b8063132d4967116102ff57806316928365116102d957806316928365146104285780631bbce0911461046157806320606b701461047457806322bf40e41461049b57600080fd5b8063132d4967146103ef578063136439dd146104025780631522bf021461041557600080fd5b80630449ca391461034757806304a4f9791461036d5780630b9f487a146103945780630dd8dd02146103a75780630f589e59146103c757806310d67a2f146103dc575b600080fd5b61035a6103553660046149a6565b610955565b6040519081526020015b60405180910390f35b61035a7f3b89fca151cbe5122d58acee86cf184413d751d585779bdd19d3bbfa3a306dce81565b61035a6103a2366004614a0c565b6109da565b6103ba6103b53660046149a6565b610a9c565b6040516103649190614a67565b6103da6103d5366004614b04565b610e18565b005b6103da6103ea366004614b57565b610f68565b6103da6103fd366004614b7b565b61101b565b6103da610410366004614bbc565b6110d2565b6103da610423366004614bd5565b611211565b61035a610436366004614b57565b6001600160a01b0316600090815260996020526040902060010154600160a01b900463ffffffff1690565b61035a61046f366004614b7b565b611225565b61035a7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6103da6104a9366004614c40565b611253565b6103da6104bc366004614b7b565b611397565b61035a6104cf366004614b57565b609b6020526000908152604090205481565b6103da6104ef366004614ce7565b611447565b61051b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610364565b61051b610541366004614b57565b6001600160a01b039081166000908152609960205260409020600101541690565b610575610570366004614b57565b611584565b6040519015158152602001610364565b61035a7f39111bc4a4d688e1f685123d7497d4615370152a8ee4a0593e647bd06ad8bb0b81565b61051b7f000000000000000000000000000000000000000000000000000000000000000081565b61035a6213c68081565b6103da6115a4565b61035a6105f3366004615006565b61166b565b610575610606366004615042565b606654600160ff9092169190911b9081161490565b60665461035a565b6103da6106313660046150b8565b61169b565b61051b610644366004614b57565b6001600160a01b039081166000908152609960205260409020541690565b6103da610670366004615218565b611946565b61051b610683366004614b57565b609a602052600090815260409020546001600160a01b031681565b6105756106ac366004614b57565b6119e1565b6103da611a01565b61035a6106c73660046152a7565b609860209081526000928352604080842090915290825290205481565b6103da6106f2366004615388565b611a15565b60655461051b906001600160a01b031681565b6033546001600160a01b031661051b565b61051b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b6103da610744366004615418565b611b1a565b61035a610757366004614b57565b609f6020526000908152604090205481565b61051b7f000000000000000000000000000000000000000000000000000000000000000081565b61057561079e366004614bbc565b609e6020526000908152604090205460ff1681565b6105756107c136600461544d565b609c60209081526000928352604080842090915290825290205460ff1681565b61035a609d5481565b61035a6107f8366004614b57565b60a16020526000908152604090205481565b61087a610818366004614b57565b6040805160608082018352600080835260208084018290529284018190526001600160a01b03948516815260998352839020835191820184528054851682526001015493841691810191909152600160a01b90920463ffffffff169082015290565b6040805182516001600160a01b039081168252602080850151909116908201529181015163ffffffff1690820152606001610364565b61035a6108be366004615479565b611bec565b61035a62034bc081565b6108e06108db366004614b57565b611ca5565b604051610364929190615535565b6103ba6108fc366004614b57565b61205d565b6103da61090f36600461555a565b612521565b6103da6109223660046155b2565b61252d565b6103da610935366004614b57565b6125be565b61035a612634565b6103da610950366004614bbc565b612672565b609d54600090815b838110156109d257600060a1600087878581811061097d5761097d6155ce565b90506020020160208101906109929190614b57565b6001600160a01b03166001600160a01b03168152602001908152602001600020549050828111156109c1578092505b506109cb816155fa565b905061095d565b509392505050565b604080517f3b89fca151cbe5122d58acee86cf184413d751d585779bdd19d3bbfa3a306dce6020808301919091526001600160a01b038681168385015288811660608401528716608083015260a0820185905260c08083018590528351808403909101815260e0909201909252805191012060009081610a58612634565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f19018152919052805160209091012098975050505050505050565b60665460609060019060029081161415610ad15760405162461bcd60e51b8152600401610ac890615615565b60405180910390fd5b6000836001600160401b03811115610aeb57610aeb614d89565b604051908082528060200260200182016040528015610b14578160200160208202803683370190505b50336000908152609a60205260408120549192506001600160a01b03909116905b85811015610e0d57868682818110610b4f57610b4f6155ce565b9050602002810190610b61919061564c565b610b6f90602081019061566c565b9050878783818110610b8357610b836155ce565b9050602002810190610b95919061564c565b610b9f908061566c565b905014610c145760405162461bcd60e51b815260206004820152603860248201527f44656c65676174696f6e4d616e616765722e717565756557697468647261776160448201527f6c3a20696e707574206c656e677468206d69736d6174636800000000000000006064820152608401610ac8565b6000878783818110610c2857610c286155ce565b9050602002810190610c3a919061564c565b610c4b906060810190604001614b57565b6001600160a01b03161415610cd95760405162461bcd60e51b815260206004820152604860248201527f44656c65676174696f6e4d616e616765722e717565756557697468647261776160448201527f6c3a206d7573742070726f766964652076616c6964207769746864726177616c606482015267206164647265737360c01b608482015260a401610ac8565b610dde3383898985818110610cf057610cf06155ce565b9050602002810190610d02919061564c565b610d13906060810190604001614b57565b8a8a86818110610d2557610d256155ce565b9050602002810190610d37919061564c565b610d41908061566c565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508e92508d9150889050818110610d8757610d876155ce565b9050602002810190610d99919061564c565b610da790602081019061566c565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506127ce92505050565b838281518110610df057610df06155ce565b602090810291909101015280610e05816155fa565b915050610b35565b509095945050505050565b336000908152609960205260409020546001600160a01b031615610eb25760405162461bcd60e51b815260206004820152604560248201527f44656c65676174696f6e4d616e616765722e726567697374657241734f70657260448201527f61746f723a206f70657261746f722068617320616c72656164792072656769736064820152641d195c995960da1b608482015260a401610ac8565b610ebc3384612d8e565b604080518082019091526060815260006020820152610ede338083600061302a565b336001600160a01b03167f8e8485583a2310d41f7c82b9427d0bd49bad74bb9cff9d3402a29d8f9b28a0e285604051610f1791906156b5565b60405180910390a2336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908484604051610f5a929190615707565b60405180910390a250505050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fdf9190615736565b6001600160a01b0316336001600160a01b03161461100f5760405162461bcd60e51b8152600401610ac890615753565b611018816133cf565b50565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061107a5750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b6110965760405162461bcd60e51b8152600401610ac89061579d565b61109f83611584565b156110cd576001600160a01b038084166000908152609a6020526040902054166110cb818585856134c6565b505b505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa15801561111a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113e91906157fa565b61115a5760405162461bcd60e51b8152600401610ac890615817565b606654818116146111d35760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610ac8565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b611219613541565b6110cb8484848461359b565b6001600160a01b0383166000908152609b602052604081205461124a85828686611bec565b95945050505050565b600054610100900460ff16158080156112735750600054600160ff909116105b8061128d5750303b15801561128d575060005460ff166001145b6112f05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610ac8565b6000805460ff191660011790558015611313576000805461ff0019166101001790555b61131d88886137c1565b6113256138a7565b6097556113318961393e565b61133a86613990565b6113468585858561359b565b801561138c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113f65750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b6114125760405162461bcd60e51b8152600401610ac89061579d565b61141b83611584565b156110cd576001600160a01b038084166000908152609a6020526040902054166110cb81858585613a96565b606654600290600490811614156114705760405162461bcd60e51b8152600401610ac890615615565b600260c95414156114c35760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610ac8565b600260c95560005b88811015611573576115638a8a838181106114e8576114e86155ce565b90506020028101906114fa919061585f565b89898481811061150c5761150c6155ce565b905060200281019061151e919061566c565b898986818110611530576115306155ce565b90506020020135888887818110611549576115496155ce565b905060200201602081019061155e9190615875565b613b11565b61156c816155fa565b90506114cb565b5050600160c9555050505050505050565b6001600160a01b039081166000908152609a602052604090205416151590565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156115ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061161091906157fa565b61162c5760405162461bcd60e51b8152600401610ac890615817565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b60008160405160200161167e9190615906565b604051602081830303815290604052805190602001209050919050565b60005b81518110156119425760008282815181106116bb576116bb6155ce565b602002602001015190506000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663cd293f6f846040518263ffffffff1660e01b81526004016117149190615919565b60408051808303816000875af1158015611732573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061175691906159c5565b915091508115611934576040808401516001600160a01b0381166000908152609f6020529182208054919282919061178d836155fa565b919050555060006040518060e00160405280846001600160a01b031681526020018760a001516001600160a01b031681526020018760600151600001516001600160a01b03168152602001838152602001876080015163ffffffff1681526020018760000151815260200187602001518152509050600061180d8261166b565b6000818152609e602052604090205490915060ff16156118a35760405162461bcd60e51b815260206004820152604560248201527f44656c65676174696f6e4d616e616765722e6d6967726174655175657565645760448201527f69746864726177616c733a207769746864726177616c20616c72656164792065606482015264786973747360d81b608482015260a401610ac8565b6000818152609e602052604090819020805460ff19166001179055517f9009ab153e8014fbfb02f2217f5cde7aa7f9ad734ae85ca3ee3f4ca2fdd499f9906118ee90839085906159f3565b60405180910390a160408051868152602081018390527fdc00758b65eef71dc3780c04ebe36cab6bdb266c3a698187e29e0f0dca012630910160405180910390a1505050505b83600101935050505061169e565b5050565b6066546002906004908116141561196f5760405162461bcd60e51b8152600401610ac890615615565b600260c95414156119c25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610ac8565b600260c9556119d48686868686613b11565b5050600160c95550505050565b6001600160a01b0390811660009081526099602052604090205416151590565b611a09613541565b611a13600061393e565b565b4283602001511015611a995760405162461bcd60e51b815260206004820152604160248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f4279536960448201527f676e61747572653a207374616b6572207369676e6174757265206578706972656064820152601960fa1b608482015260a401610ac8565b6000609b6000876001600160a01b03166001600160a01b031681526020019081526020016000205490506000611ad58783888860200151611bec565b6001600160a01b0388166000908152609b602052604090206001840190558551909150611b0590889083906142fb565b611b118787868661302a565b50505050505050565b611b23336119e1565b611ba55760405162461bcd60e51b815260206004820152604760248201527f44656c65676174696f6e4d616e616765722e7570646174654f70657261746f7260448201527f4d657461646174615552493a2063616c6c6572206d75737420626520616e206f6064820152663832b930ba37b960c91b608482015260a401610ac8565b336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908383604051611be0929190615707565b60405180910390a25050565b604080517f39111bc4a4d688e1f685123d7497d4615370152a8ee4a0593e647bd06ad8bb0b6020808301919091526001600160a01b0387811683850152851660608301526080820186905260a08083018590528351808403909101815260c0909201909252805191012060009081611c62612634565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f190181529190528051602090910120979650505050505050565b6040516360f4062b60e01b81526001600160a01b03828116600483015260609182916000917f0000000000000000000000000000000000000000000000000000000000000000909116906360f4062b90602401602060405180830381865afa158015611d15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d399190615a0c565b6040516394f649dd60e01b81526001600160a01b03868116600483015291925060009182917f0000000000000000000000000000000000000000000000000000000000000000909116906394f649dd90602401600060405180830381865afa158015611da9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611dd19190810190615a80565b9150915060008313611de857909590945092505050565b606080835160001415611ea2576040805160018082528183019092529060208083019080368337505060408051600180825281830190925292945090506020808301908036833701905050905073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac082600081518110611e5d57611e5d6155ce565b60200260200101906001600160a01b031690816001600160a01b0316815250508481600081518110611e9157611e916155ce565b602002602001018181525050612050565b8351611eaf906001615b44565b6001600160401b03811115611ec657611ec6614d89565b604051908082528060200260200182016040528015611eef578160200160208202803683370190505b50915081516001600160401b03811115611f0b57611f0b614d89565b604051908082528060200260200182016040528015611f34578160200160208202803683370190505b50905060005b8451811015611fce57848181518110611f5557611f556155ce565b6020026020010151838281518110611f6f57611f6f6155ce565b60200260200101906001600160a01b031690816001600160a01b031681525050838181518110611fa157611fa16155ce565b6020026020010151828281518110611fbb57611fbb6155ce565b6020908102919091010152600101611f3a565b5073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac08260018451611ff39190615b5c565b81518110612003576120036155ce565b60200260200101906001600160a01b031690816001600160a01b0316815250508481600184516120339190615b5c565b81518110612043576120436155ce565b6020026020010181815250505b9097909650945050505050565b606654606090600190600290811614156120895760405162461bcd60e51b8152600401610ac890615615565b61209283611584565b6121125760405162461bcd60e51b8152602060048201526044602482018190527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a207374908201527f616b6572206d7573742062652064656c65676174656420746f20756e64656c656064820152636761746560e01b608482015260a401610ac8565b61211b836119e1565b1561218e5760405162461bcd60e51b815260206004820152603d60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a206f7060448201527f657261746f72732063616e6e6f7420626520756e64656c6567617465640000006064820152608401610ac8565b6001600160a01b03831661220a5760405162461bcd60e51b815260206004820152603c60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a20636160448201527f6e6e6f7420756e64656c6567617465207a65726f2061646472657373000000006064820152608401610ac8565b6001600160a01b038084166000818152609a60205260409020549091169033148061223d5750336001600160a01b038216145b8061226457506001600160a01b038181166000908152609960205260409020600101541633145b6122d65760405162461bcd60e51b815260206004820152603d60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a20636160448201527f6c6c65722063616e6e6f7420756e64656c6567617465207374616b65720000006064820152608401610ac8565b6000806122e286611ca5565b9092509050336001600160a01b0387161461233857826001600160a01b0316866001600160a01b03167ff0eddf07e6ea14f388b47e1e94a0f464ecbd9eed4171130e0fc0e99fb4030a8a60405160405180910390a35b826001600160a01b0316866001600160a01b03167ffee30966a256b71e14bc0ebfc94315e28ef4a97a7131a9e2b7a310a73af4467660405160405180910390a36001600160a01b0386166000908152609a6020526040902080546001600160a01b031916905581516123ba576040805160008152602081019091529450612518565b81516001600160401b038111156123d3576123d3614d89565b6040519080825280602002602001820160405280156123fc578160200160208202803683370190505b50945060005b825181101561251657604080516001808252818301909252600091602080830190803683375050604080516001808252818301909252929350600092915060208083019080368337019050509050848381518110612462576124626155ce565b60200260200101518260008151811061247d5761247d6155ce565b60200260200101906001600160a01b031690816001600160a01b0316815250508383815181106124af576124af6155ce565b6020026020010151816000815181106124ca576124ca6155ce565b6020026020010181815250506124e389878b85856127ce565b8884815181106124f5576124f56155ce565b6020026020010181815250505050808061250e906155fa565b915050612402565b505b50505050919050565b6110cd3384848461302a565b612536336119e1565b6125b45760405162461bcd60e51b815260206004820152604360248201527f44656c65676174696f6e4d616e616765722e6d6f646966794f70657261746f7260448201527f44657461696c733a2063616c6c6572206d75737420626520616e206f706572616064820152623a37b960e91b608482015260a401610ac8565b6110183382612d8e565b6125c6613541565b6001600160a01b03811661262b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ac8565b6110188161393e565b60007f0000000000000000000000000000000000000000000000000000000000000000461415612665575060975490565b61266d6138a7565b905090565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126e99190615736565b6001600160a01b0316336001600160a01b0316146127195760405162461bcd60e51b8152600401610ac890615753565b6066541981196066541916146127975760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610ac8565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001611206565b60006001600160a01b0386166128655760405162461bcd60e51b815260206004820152605060248201527f44656c65676174696f6e4d616e616765722e5f72656d6f76655368617265734160448201527f6e6451756575655769746864726177616c3a207374616b65722063616e6e6f7460648201526f206265207a65726f206164647265737360801b608482015260a401610ac8565b82516128ef5760405162461bcd60e51b815260206004820152604d60248201527f44656c65676174696f6e4d616e616765722e5f72656d6f76655368617265734160448201527f6e6451756575655769746864726177616c3a207374726174656769657320636160648201526c6e6e6f7420626520656d70747960981b608482015260a401610ac8565b60005b8351811015612c9c576001600160a01b03861615612948576129488688868481518110612921576129216155ce565b602002602001015186858151811061293b5761293b6155ce565b60200260200101516134c6565b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06001600160a01b0316848281518110612978576129786155ce565b60200260200101516001600160a01b03161415612a41577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663beffbb89888584815181106129d1576129d16155ce565b60200260200101516040518363ffffffff1660e01b8152600401612a0a9291906001600160a01b03929092168252602082015260400190565b600060405180830381600087803b158015612a2457600080fd5b505af1158015612a38573d6000803e3d6000fd5b50505050612c94565b846001600160a01b0316876001600160a01b03161480612b1357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639b4da03d858381518110612a9d57612a9d6155ce565b60200260200101516040518263ffffffff1660e01b8152600401612ad091906001600160a01b0391909116815260200190565b602060405180830381865afa158015612aed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b1191906157fa565b155b612bdf5760405162461bcd60e51b8152602060048201526084602482018190527f44656c65676174696f6e4d616e616765722e5f72656d6f76655368617265734160448301527f6e6451756575655769746864726177616c3a2077697468647261776572206d7560648301527f73742062652073616d652061646472657373206173207374616b657220696620908201527f746869726450617274795472616e7366657273466f7262696464656e2061726560a482015263081cd95d60e21b60c482015260e401610ac8565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638c80d4e588868481518110612c2157612c216155ce565b6020026020010151868581518110612c3b57612c3b6155ce565b60200260200101516040518463ffffffff1660e01b8152600401612c6193929190615b73565b600060405180830381600087803b158015612c7b57600080fd5b505af1158015612c8f573d6000803e3d6000fd5b505050505b6001016128f2565b506001600160a01b0386166000908152609f60205260408120805491829190612cc4836155fa565b919050555060006040518060e00160405280896001600160a01b03168152602001886001600160a01b03168152602001876001600160a01b031681526020018381526020014363ffffffff1681526020018681526020018581525090506000612d2c8261166b565b6000818152609e602052604090819020805460ff19166001179055519091507f9009ab153e8014fbfb02f2217f5cde7aa7f9ad734ae85ca3ee3f4ca2fdd499f990612d7a90839085906159f3565b60405180910390a198975050505050505050565b6000612d9d6020830183614b57565b6001600160a01b03161415612e375760405162461bcd60e51b815260206004820152605460248201527f44656c65676174696f6e4d616e616765722e5f7365744f70657261746f72446560448201527f7461696c733a2063616e6e6f742073657420606561726e696e677352656365696064820152737665726020746f207a65726f206164647265737360601b608482015260a401610ac8565b6213c680612e4b6060830160408401615b97565b63ffffffff161115612f005760405162461bcd60e51b815260206004820152606c60248201527f44656c65676174696f6e4d616e616765722e5f7365744f70657261746f72446560448201527f7461696c733a207374616b65724f70744f757457696e646f77426c6f636b732060648201527f63616e6e6f74206265203e204d41585f5354414b45525f4f50545f4f55545f5760848201526b494e444f575f424c4f434b5360a01b60a482015260c401610ac8565b6001600160a01b0382166000908152609960205260409081902060010154600160a01b900463ffffffff1690612f3c9060608401908401615b97565b63ffffffff161015612fd25760405162461bcd60e51b815260206004820152605360248201527f44656c65676174696f6e4d616e616765722e5f7365744f70657261746f72446560448201527f7461696c733a207374616b65724f70744f757457696e646f77426c6f636b732060648201527218d85b9b9bdd08189948191958dc99585cd959606a1b608482015260a401610ac8565b6001600160a01b03821660009081526099602052604090208190612ff68282615bd4565b505060405133907ffebe5cd24b2cbc7b065b9d0fdeb904461e4afcff57dd57acda1e7832031ba7ac90611be09084906156b5565b606654600090600190811614156130535760405162461bcd60e51b8152600401610ac890615615565b61305c85611584565b156130d95760405162461bcd60e51b815260206004820152604160248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a2073746160448201527f6b657220697320616c7265616479206163746976656c792064656c65676174656064820152601960fa1b608482015260a401610ac8565b6130e2846119e1565b6131625760405162461bcd60e51b815260206004820152604560248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a206f706560448201527f7261746f72206973206e6f74207265676973746572656420696e20456967656e6064820152642630bcb2b960d91b608482015260a401610ac8565b6001600160a01b038085166000908152609960205260409020600101541680158015906131985750336001600160a01b03821614155b80156131ad5750336001600160a01b03861614155b1561331a57428460200151101561322c5760405162461bcd60e51b815260206004820152603760248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a2061707060448201527f726f766572207369676e617475726520657870697265640000000000000000006064820152608401610ac8565b6001600160a01b0381166000908152609c6020908152604080832086845290915290205460ff16156132c65760405162461bcd60e51b815260206004820152603760248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a2061707060448201527f726f76657253616c7420616c7265616479207370656e740000000000000000006064820152608401610ac8565b6001600160a01b0381166000908152609c6020908152604080832086845282528220805460ff191660011790558501516133079088908890859088906109da565b9050613318828287600001516142fb565b505b6001600160a01b038681166000818152609a602052604080822080546001600160a01b031916948a169485179055517fc3ee9f2e5fda98e8066a1f745b2df9285f416fe98cf2559cd21484b3d87433049190a360008061337988611ca5565b9150915060005b825181101561138c576133c7888a8584815181106133a0576133a06155ce565b60200260200101518585815181106133ba576133ba6155ce565b6020026020010151613a96565b600101613380565b6001600160a01b03811661345d5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610ac8565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038085166000908152609860209081526040808320938616835292905290812080548392906134fd908490615b5c565b92505081905550836001600160a01b03167f6909600037b75d7b4733aedd815442b5ec018a827751c832aaff64eba5d6d2dd848484604051610f5a93929190615b73565b6033546001600160a01b03163314611a135760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ac8565b8281146136235760405162461bcd60e51b815260206004820152604a60248201527f44656c65676174696f6e4d616e616765722e5f7365745374726174656779576960448201527f746864726177616c44656c6179426c6f636b733a20696e707574206c656e67746064820152690d040dad2e6dac2e8c6d60b31b608482015260a401610ac8565b8260005b818110156137b9576000868683818110613643576136436155ce565b90506020020160208101906136589190614b57565b6001600160a01b038116600090815260a16020526040812054919250868685818110613686576136866155ce565b90506020020135905062034bc081111561374a5760405162461bcd60e51b815260206004820152607360248201527f44656c65676174696f6e4d616e616765722e5f7365745374726174656779576960448201527f746864726177616c44656c6179426c6f636b733a205f7769746864726177616c60648201527f44656c6179426c6f636b732063616e6e6f74206265203e204d41585f5749544860848201527244524157414c5f44454c41595f424c4f434b5360681b60a482015260c401610ac8565b6001600160a01b038316600081815260a160209081526040918290208490558151928352820184905281018290527f0e7efa738e8b0ce6376a0c1af471655540d2e9a81647d7b09ed823018426576d9060600160405180910390a1505050806137b2906155fa565b9050613627565b505050505050565b6065546001600160a01b03161580156137e257506001600160a01b03821615155b6138645760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610ac8565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2611942826133cf565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62034bc0811115613a555760405162461bcd60e51b815260206004820152607860248201527f44656c65676174696f6e4d616e616765722e5f696e697469616c697a654d696e60448201527f5769746864726177616c44656c6179426c6f636b733a205f6d696e576974686460648201527f726177616c44656c6179426c6f636b732063616e6e6f74206265203e204d415860848201527f5f5749544844524157414c5f44454c41595f424c4f434b53000000000000000060a482015260c401610ac8565b609d5460408051918252602082018390527fafa003cd76f87ff9d62b35beea889920f33c0c42b8d45b74954d61d50f4b6b69910160405180910390a1609d55565b6001600160a01b03808516600090815260986020908152604080832093861683529290529081208054839290613acd908490615b44565b92505081905550836001600160a01b03167f1ec042c965e2edd7107b51188ee0f383e22e76179041ab3a9d18ff151405166c848484604051610f5a93929190615b73565b6000613b1f6105f387615c37565b6000818152609e602052604090205490915060ff16613ba05760405162461bcd60e51b81526020600482015260436024820152600080516020615d6f83398151915260448201527f645769746864726177616c3a20616374696f6e206973206e6f7420696e20717560648201526265756560e81b608482015260a401610ac8565b609d544390613bb560a0890160808a01615b97565b63ffffffff16613bc59190615b44565b1115613c4d5760405162461bcd60e51b815260206004820152605f6024820152600080516020615d6f83398151915260448201527f645769746864726177616c3a206d696e5769746864726177616c44656c61794260648201527f6c6f636b7320706572696f6420686173206e6f74207965742070617373656400608482015260a401610ac8565b613c5d6060870160408801614b57565b6001600160a01b0316336001600160a01b031614613cea5760405162461bcd60e51b81526020600482015260506024820152600080516020615d6f83398151915260448201527f645769746864726177616c3a206f6e6c7920776974686472617765722063616e60648201526f1031b7b6b83632ba329030b1ba34b7b760811b608482015260a401610ac8565b8115613d6c57613cfd60a087018761566c565b85149050613d6c5760405162461bcd60e51b81526020600482015260426024820152600080516020615d6f83398151915260448201527f645769746864726177616c3a20696e707574206c656e677468206d69736d61746064820152610c6d60f31b608482015260a401610ac8565b6000818152609e60205260409020805460ff191690558115613ed15760005b613d9860a088018861566c565b9050811015613ecb574360a16000613db360a08b018b61566c565b85818110613dc357613dc36155ce565b9050602002016020810190613dd89190614b57565b6001600160a01b03168152602081019190915260400160002054613e0260a08a0160808b01615b97565b63ffffffff16613e129190615b44565b1115613e305760405162461bcd60e51b8152600401610ac890615c49565b613ec3613e406020890189614b57565b33613e4e60a08b018b61566c565b85818110613e5e57613e5e6155ce565b9050602002016020810190613e739190614b57565b613e8060c08c018c61566c565b86818110613e9057613e906155ce565b905060200201358a8a87818110613ea957613ea96155ce565b9050602002016020810190613ebe9190614b57565b6144b5565b600101613d8b565b506142c0565b336000908152609a60205260408120546001600160a01b0316905b613ef960a089018961566c565b90508110156142bd574360a16000613f1460a08c018c61566c565b85818110613f2457613f246155ce565b9050602002016020810190613f399190614b57565b6001600160a01b03168152602081019190915260400160002054613f6360a08b0160808c01615b97565b63ffffffff16613f739190615b44565b1115613f915760405162461bcd60e51b8152600401610ac890615c49565b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0613fb360a08a018a61566c565b83818110613fc357613fc36155ce565b9050602002016020810190613fd89190614b57565b6001600160a01b03161415614128576000613ff660208a018a614b57565b905060006001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016630e81073c8361403760c08e018e61566c565b87818110614047576140476155ce565b6040516001600160e01b031960e087901b1681526001600160a01b03909416600485015260200291909101356024830152506044016020604051808303816000875af115801561409b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140bf9190615a0c565b6001600160a01b038084166000908152609a60205260409020549192501680156141205761412081846140f560a08f018f61566c565b88818110614105576141056155ce565b905060200201602081019061411a9190614b57565b85613a96565b5050506142b5565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c4623ea13389898581811061416a5761416a6155ce565b905060200201602081019061417f9190614b57565b61418c60a08d018d61566c565b8681811061419c5761419c6155ce565b90506020020160208101906141b19190614b57565b6141be60c08e018e61566c565b878181106141ce576141ce6155ce565b60405160e088901b6001600160e01b03191681526001600160a01b03968716600482015294861660248601529290941660448401526020909102013560648201526084019050600060405180830381600087803b15801561422e57600080fd5b505af1158015614242573d6000803e3d6000fd5b505050506001600160a01b038216156142b5576142b5823361426760a08c018c61566c565b85818110614277576142776155ce565b905060200201602081019061428c9190614b57565b61429960c08d018d61566c565b868181106142a9576142a96155ce565b90506020020135613a96565b600101613eec565b50505b6040518181527fc97098c2f658800b4df29001527f7324bcdffcf6e8751a699ab920a1eced5b1d9060200160405180910390a1505050505050565b6001600160a01b0383163b1561441557604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e9061433b9086908690600401615cd1565b602060405180830381865afa158015614358573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061437c9190615d2e565b6001600160e01b031916146110cd5760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a401610ac8565b826001600160a01b031661442983836145f5565b6001600160a01b0316146110cd5760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a401610ac8565b6001600160a01b03831673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac014156145605760405162387b1360e81b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063387b13009061452990889088908790600401615b73565b600060405180830381600087803b15801561454357600080fd5b505af1158015614557573d6000803e3d6000fd5b505050506145ee565b60405163c608c7f360e01b81526001600160a01b03858116600483015284811660248301526044820184905282811660648301527f0000000000000000000000000000000000000000000000000000000000000000169063c608c7f390608401600060405180830381600087803b1580156145da57600080fd5b505af115801561138c573d6000803e3d6000fd5b5050505050565b60008060006146048585614611565b915091506109d281614681565b6000808251604114156146485760208301516040840151606085015160001a61463c8782858561483c565b9450945050505061467a565b8251604014156146725760208301516040840151614667868383614929565b93509350505061467a565b506000905060025b9250929050565b600081600481111561469557614695615d58565b141561469e5750565b60018160048111156146b2576146b2615d58565b14156147005760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610ac8565b600281600481111561471457614714615d58565b14156147625760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610ac8565b600381600481111561477657614776615d58565b14156147cf5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610ac8565b60048160048111156147e3576147e3615d58565b14156110185760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610ac8565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156148735750600090506003614920565b8460ff16601b1415801561488b57508460ff16601c14155b1561489c5750600090506004614920565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156148f0573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661491957600060019250925050614920565b9150600090505b94509492505050565b6000806001600160ff1b0383168161494660ff86901c601b615b44565b90506149548782888561483c565b935093505050935093915050565b60008083601f84011261497457600080fd5b5081356001600160401b0381111561498b57600080fd5b6020830191508360208260051b850101111561467a57600080fd5b600080602083850312156149b957600080fd5b82356001600160401b038111156149cf57600080fd5b6149db85828601614962565b90969095509350505050565b6001600160a01b038116811461101857600080fd5b8035614a07816149e7565b919050565b600080600080600060a08688031215614a2457600080fd5b8535614a2f816149e7565b94506020860135614a3f816149e7565b93506040860135614a4f816149e7565b94979396509394606081013594506080013592915050565b6020808252825182820181905260009190848201906040850190845b81811015614a9f57835183529284019291840191600101614a83565b50909695505050505050565b600060608284031215614abd57600080fd5b50919050565b60008083601f840112614ad557600080fd5b5081356001600160401b03811115614aec57600080fd5b60208301915083602082850101111561467a57600080fd5b600080600060808486031215614b1957600080fd5b614b238585614aab565b925060608401356001600160401b03811115614b3e57600080fd5b614b4a86828701614ac3565b9497909650939450505050565b600060208284031215614b6957600080fd5b8135614b74816149e7565b9392505050565b600080600060608486031215614b9057600080fd5b8335614b9b816149e7565b92506020840135614bab816149e7565b929592945050506040919091013590565b600060208284031215614bce57600080fd5b5035919050565b60008060008060408587031215614beb57600080fd5b84356001600160401b0380821115614c0257600080fd5b614c0e88838901614962565b90965094506020870135915080821115614c2757600080fd5b50614c3487828801614962565b95989497509550505050565b60008060008060008060008060c0898b031215614c5c57600080fd5b8835614c67816149e7565b97506020890135614c77816149e7565b9650604089013595506060890135945060808901356001600160401b0380821115614ca157600080fd5b614cad8c838d01614962565b909650945060a08b0135915080821115614cc657600080fd5b50614cd38b828c01614962565b999c989b5096995094979396929594505050565b6000806000806000806000806080898b031215614d0357600080fd5b88356001600160401b0380821115614d1a57600080fd5b614d268c838d01614962565b909a50985060208b0135915080821115614d3f57600080fd5b614d4b8c838d01614962565b909850965060408b0135915080821115614d6457600080fd5b614d708c838d01614962565b909650945060608b0135915080821115614cc657600080fd5b634e487b7160e01b600052604160045260246000fd5b60405160e081016001600160401b0381118282101715614dc157614dc1614d89565b60405290565b604080519081016001600160401b0381118282101715614dc157614dc1614d89565b60405160c081016001600160401b0381118282101715614dc157614dc1614d89565b604051601f8201601f191681016001600160401b0381118282101715614e3357614e33614d89565b604052919050565b63ffffffff8116811461101857600080fd5b8035614a0781614e3b565b60006001600160401b03821115614e7157614e71614d89565b5060051b60200190565b600082601f830112614e8c57600080fd5b81356020614ea1614e9c83614e58565b614e0b565b82815260059290921b84018101918181019086841115614ec057600080fd5b8286015b84811015614ee4578035614ed7816149e7565b8352918301918301614ec4565b509695505050505050565b600082601f830112614f0057600080fd5b81356020614f10614e9c83614e58565b82815260059290921b84018101918181019086841115614f2f57600080fd5b8286015b84811015614ee45780358352918301918301614f33565b600060e08284031215614f5c57600080fd5b614f64614d9f565b9050614f6f826149fc565b8152614f7d602083016149fc565b6020820152614f8e604083016149fc565b604082015260608201356060820152614fa960808301614e4d565b608082015260a08201356001600160401b0380821115614fc857600080fd5b614fd485838601614e7b565b60a084015260c0840135915080821115614fed57600080fd5b50614ffa84828501614eef565b60c08301525092915050565b60006020828403121561501857600080fd5b81356001600160401b0381111561502e57600080fd5b61503a84828501614f4a565b949350505050565b60006020828403121561505457600080fd5b813560ff81168114614b7457600080fd5b60006040828403121561507757600080fd5b61507f614dc7565b9050813561508c816149e7565b815260208201356bffffffffffffffffffffffff811681146150ad57600080fd5b602082015292915050565b600060208083850312156150cb57600080fd5b82356001600160401b03808211156150e257600080fd5b818501915085601f8301126150f657600080fd5b8135615104614e9c82614e58565b81815260059190911b8301840190848101908883111561512357600080fd5b8585015b838110156151fd5780358581111561513f5760008081fd5b860160e0818c03601f19018113156151575760008081fd5b61515f614de9565b89830135888111156151715760008081fd5b61517f8e8c83870101614e7b565b825250604080840135898111156151965760008081fd5b6151a48f8d83880101614eef565b8c8401525060606151b68186016149fc565b82840152608091506151ca8f838701615065565b908301526151da60c08501614e4d565b908201526151e98383016149fc565b60a082015285525050918601918601615127565b5098975050505050505050565b801515811461101857600080fd5b60008060008060006080868803121561523057600080fd5b85356001600160401b038082111561524757600080fd5b9087019060e0828a03121561525b57600080fd5b9095506020870135908082111561527157600080fd5b5061527e88828901614962565b9095509350506040860135915060608601356152998161520a565b809150509295509295909350565b600080604083850312156152ba57600080fd5b82356152c5816149e7565b915060208301356152d5816149e7565b809150509250929050565b6000604082840312156152f257600080fd5b6152fa614dc7565b905081356001600160401b038082111561531357600080fd5b818401915084601f83011261532757600080fd5b813560208282111561533b5761533b614d89565b61534d601f8301601f19168201614e0b565b9250818352868183860101111561536357600080fd5b8181850182850137600081838501015282855280860135818601525050505092915050565b600080600080600060a086880312156153a057600080fd5b85356153ab816149e7565b945060208601356153bb816149e7565b935060408601356001600160401b03808211156153d757600080fd5b6153e389838a016152e0565b945060608801359150808211156153f957600080fd5b50615406888289016152e0565b95989497509295608001359392505050565b6000806020838503121561542b57600080fd5b82356001600160401b0381111561544157600080fd5b6149db85828601614ac3565b6000806040838503121561546057600080fd5b823561546b816149e7565b946020939093013593505050565b6000806000806080858703121561548f57600080fd5b843561549a816149e7565b93506020850135925060408501356154b1816149e7565b9396929550929360600135925050565b600081518084526020808501945080840160005b838110156154fa5781516001600160a01b0316875295820195908201906001016154d5565b509495945050505050565b600081518084526020808501945080840160005b838110156154fa57815187529582019590820190600101615519565b60408152600061554860408301856154c1565b828103602084015261124a8185615505565b60008060006060848603121561556f57600080fd5b833561557a816149e7565b925060208401356001600160401b0381111561559557600080fd5b6155a1868287016152e0565b925050604084013590509250925092565b6000606082840312156155c457600080fd5b614b748383614aab565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561560e5761560e6155e4565b5060010190565b60208082526019908201527f5061757361626c653a20696e6465782069732070617573656400000000000000604082015260600190565b60008235605e1983360301811261566257600080fd5b9190910192915050565b6000808335601e1984360301811261568357600080fd5b8301803591506001600160401b0382111561569d57600080fd5b6020019150600581901b360382131561467a57600080fd5b6060810182356156c4816149e7565b6001600160a01b0390811683526020840135906156e0826149e7565b16602083015260408301356156f481614e3b565b63ffffffff811660408401525092915050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b60006020828403121561574857600080fd5b8151614b74816149e7565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60208082526037908201527f44656c65676174696f6e4d616e616765723a206f6e6c7953747261746567794d60408201527f616e616765724f72456967656e506f644d616e61676572000000000000000000606082015260800190565b60006020828403121561580c57600080fd5b8151614b748161520a565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b6000823560de1983360301811261566257600080fd5b60006020828403121561588757600080fd5b8135614b748161520a565b600060018060a01b03808351168452806020840151166020850152806040840151166040850152506060820151606084015263ffffffff608083015116608084015260a082015160e060a08501526158ed60e08501826154c1565b905060c083015184820360c086015261124a8282615505565b602081526000614b746020830184615892565b602081526000825160e060208401526159366101008401826154c1565b90506020840151601f198483030160408501526159538282615505565b915050604084015160018060a01b03808216606086015260608601519150808251166080860152506bffffffffffffffffffffffff60208201511660a08501525060808401516159ab60c085018263ffffffff169052565b5060a08401516001600160a01b03811660e08501526109d2565b600080604083850312156159d857600080fd5b82516159e38161520a565b6020939093015192949293505050565b82815260406020820152600061503a6040830184615892565b600060208284031215615a1e57600080fd5b5051919050565b600082601f830112615a3657600080fd5b81516020615a46614e9c83614e58565b82815260059290921b84018101918181019086841115615a6557600080fd5b8286015b84811015614ee45780518352918301918301615a69565b60008060408385031215615a9357600080fd5b82516001600160401b0380821115615aaa57600080fd5b818501915085601f830112615abe57600080fd5b81516020615ace614e9c83614e58565b82815260059290921b84018101918181019089841115615aed57600080fd5b948201945b83861015615b14578551615b05816149e7565b82529482019490820190615af2565b91880151919650909350505080821115615b2d57600080fd5b50615b3a85828601615a25565b9150509250929050565b60008219821115615b5757615b576155e4565b500190565b600082821015615b6e57615b6e6155e4565b500390565b6001600160a01b039384168152919092166020820152604081019190915260600190565b600060208284031215615ba957600080fd5b8135614b7481614e3b565b80546001600160a01b0319166001600160a01b0392909216919091179055565b8135615bdf816149e7565b615be98183615bb4565b50600181016020830135615bfc816149e7565b615c068183615bb4565b506040830135615c1581614e3b565b815463ffffffff60a01b191660a09190911b63ffffffff60a01b161790555050565b6000615c433683614f4a565b92915050565b6020808252606e90820152600080516020615d6f83398151915260408201527f645769746864726177616c3a207769746864726177616c44656c6179426c6f6360608201527f6b7320706572696f6420686173206e6f74207965742070617373656420666f7260808201526d207468697320737472617465677960901b60a082015260c00190565b82815260006020604081840152835180604085015260005b81811015615d0557858101830151858201606001528201615ce9565b81811115615d17576000606083870101525b50601f01601f191692909201606001949350505050565b600060208284031215615d4057600080fd5b81516001600160e01b031981168114614b7457600080fd5b634e487b7160e01b600052602160045260246000fdfe44656c65676174696f6e4d616e616765722e5f636f6d706c6574655175657565a2646970667358221220f15d3c716b0354e9ef470711e4e711af71ce80c4ba30d26754d2256af112976064736f6c634300080c0033", +} + +// ContractDelegationManagerABI is the input ABI used to generate the binding from. +// Deprecated: Use ContractDelegationManagerMetaData.ABI instead. +var ContractDelegationManagerABI = ContractDelegationManagerMetaData.ABI + +// ContractDelegationManagerBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use ContractDelegationManagerMetaData.Bin instead. +var ContractDelegationManagerBin = ContractDelegationManagerMetaData.Bin + +// DeployContractDelegationManager deploys a new Ethereum contract, binding an instance of ContractDelegationManager to it. +func DeployContractDelegationManager(auth *bind.TransactOpts, backend bind.ContractBackend, _strategyManager common.Address, _slasher common.Address, _eigenPodManager common.Address) (common.Address, *types.Transaction, *ContractDelegationManager, error) { + parsed, err := ContractDelegationManagerMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ContractDelegationManagerBin), backend, _strategyManager, _slasher, _eigenPodManager) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &ContractDelegationManager{ContractDelegationManagerCaller: ContractDelegationManagerCaller{contract: contract}, ContractDelegationManagerTransactor: ContractDelegationManagerTransactor{contract: contract}, ContractDelegationManagerFilterer: ContractDelegationManagerFilterer{contract: contract}}, nil +} + +// ContractDelegationManager is an auto generated Go binding around an Ethereum contract. +type ContractDelegationManager struct { + ContractDelegationManagerCaller // Read-only binding to the contract + ContractDelegationManagerTransactor // Write-only binding to the contract + ContractDelegationManagerFilterer // Log filterer for contract events +} + +// ContractDelegationManagerCaller is an auto generated read-only Go binding around an Ethereum contract. +type ContractDelegationManagerCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ContractDelegationManagerTransactor is an auto generated write-only Go binding around an Ethereum contract. +type ContractDelegationManagerTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ContractDelegationManagerFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type ContractDelegationManagerFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ContractDelegationManagerSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type ContractDelegationManagerSession struct { + Contract *ContractDelegationManager // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ContractDelegationManagerCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type ContractDelegationManagerCallerSession struct { + Contract *ContractDelegationManagerCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// ContractDelegationManagerTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type ContractDelegationManagerTransactorSession struct { + Contract *ContractDelegationManagerTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ContractDelegationManagerRaw is an auto generated low-level Go binding around an Ethereum contract. +type ContractDelegationManagerRaw struct { + Contract *ContractDelegationManager // Generic contract binding to access the raw methods on +} + +// ContractDelegationManagerCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type ContractDelegationManagerCallerRaw struct { + Contract *ContractDelegationManagerCaller // Generic read-only contract binding to access the raw methods on +} + +// ContractDelegationManagerTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type ContractDelegationManagerTransactorRaw struct { + Contract *ContractDelegationManagerTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewContractDelegationManager creates a new instance of ContractDelegationManager, bound to a specific deployed contract. +func NewContractDelegationManager(address common.Address, backend bind.ContractBackend) (*ContractDelegationManager, error) { + contract, err := bindContractDelegationManager(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ContractDelegationManager{ContractDelegationManagerCaller: ContractDelegationManagerCaller{contract: contract}, ContractDelegationManagerTransactor: ContractDelegationManagerTransactor{contract: contract}, ContractDelegationManagerFilterer: ContractDelegationManagerFilterer{contract: contract}}, nil +} + +// NewContractDelegationManagerCaller creates a new read-only instance of ContractDelegationManager, bound to a specific deployed contract. +func NewContractDelegationManagerCaller(address common.Address, caller bind.ContractCaller) (*ContractDelegationManagerCaller, error) { + contract, err := bindContractDelegationManager(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ContractDelegationManagerCaller{contract: contract}, nil +} + +// NewContractDelegationManagerTransactor creates a new write-only instance of ContractDelegationManager, bound to a specific deployed contract. +func NewContractDelegationManagerTransactor(address common.Address, transactor bind.ContractTransactor) (*ContractDelegationManagerTransactor, error) { + contract, err := bindContractDelegationManager(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ContractDelegationManagerTransactor{contract: contract}, nil +} + +// NewContractDelegationManagerFilterer creates a new log filterer instance of ContractDelegationManager, bound to a specific deployed contract. +func NewContractDelegationManagerFilterer(address common.Address, filterer bind.ContractFilterer) (*ContractDelegationManagerFilterer, error) { + contract, err := bindContractDelegationManager(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ContractDelegationManagerFilterer{contract: contract}, nil +} + +// bindContractDelegationManager binds a generic wrapper to an already deployed contract. +func bindContractDelegationManager(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ContractDelegationManagerMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ContractDelegationManager *ContractDelegationManagerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ContractDelegationManager.Contract.ContractDelegationManagerCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ContractDelegationManager *ContractDelegationManagerRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ContractDelegationManager.Contract.ContractDelegationManagerTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ContractDelegationManager *ContractDelegationManagerRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ContractDelegationManager.Contract.ContractDelegationManagerTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ContractDelegationManager *ContractDelegationManagerCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ContractDelegationManager.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ContractDelegationManager *ContractDelegationManagerTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ContractDelegationManager.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ContractDelegationManager *ContractDelegationManagerTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ContractDelegationManager.Contract.contract.Transact(opts, method, params...) +} + +// DELEGATIONAPPROVALTYPEHASH is a free data retrieval call binding the contract method 0x04a4f979. +// +// Solidity: function DELEGATION_APPROVAL_TYPEHASH() view returns(bytes32) +func (_ContractDelegationManager *ContractDelegationManagerCaller) DELEGATIONAPPROVALTYPEHASH(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ContractDelegationManager.contract.Call(opts, &out, "DELEGATION_APPROVAL_TYPEHASH") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// DELEGATIONAPPROVALTYPEHASH is a free data retrieval call binding the contract method 0x04a4f979. +// +// Solidity: function DELEGATION_APPROVAL_TYPEHASH() view returns(bytes32) +func (_ContractDelegationManager *ContractDelegationManagerSession) DELEGATIONAPPROVALTYPEHASH() ([32]byte, error) { + return _ContractDelegationManager.Contract.DELEGATIONAPPROVALTYPEHASH(&_ContractDelegationManager.CallOpts) +} + +// DELEGATIONAPPROVALTYPEHASH is a free data retrieval call binding the contract method 0x04a4f979. +// +// Solidity: function DELEGATION_APPROVAL_TYPEHASH() view returns(bytes32) +func (_ContractDelegationManager *ContractDelegationManagerCallerSession) DELEGATIONAPPROVALTYPEHASH() ([32]byte, error) { + return _ContractDelegationManager.Contract.DELEGATIONAPPROVALTYPEHASH(&_ContractDelegationManager.CallOpts) +} + +// DOMAINTYPEHASH is a free data retrieval call binding the contract method 0x20606b70. +// +// Solidity: function DOMAIN_TYPEHASH() view returns(bytes32) +func (_ContractDelegationManager *ContractDelegationManagerCaller) DOMAINTYPEHASH(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ContractDelegationManager.contract.Call(opts, &out, "DOMAIN_TYPEHASH") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// DOMAINTYPEHASH is a free data retrieval call binding the contract method 0x20606b70. +// +// Solidity: function DOMAIN_TYPEHASH() view returns(bytes32) +func (_ContractDelegationManager *ContractDelegationManagerSession) DOMAINTYPEHASH() ([32]byte, error) { + return _ContractDelegationManager.Contract.DOMAINTYPEHASH(&_ContractDelegationManager.CallOpts) +} + +// DOMAINTYPEHASH is a free data retrieval call binding the contract method 0x20606b70. +// +// Solidity: function DOMAIN_TYPEHASH() view returns(bytes32) +func (_ContractDelegationManager *ContractDelegationManagerCallerSession) DOMAINTYPEHASH() ([32]byte, error) { + return _ContractDelegationManager.Contract.DOMAINTYPEHASH(&_ContractDelegationManager.CallOpts) +} + +// MAXSTAKEROPTOUTWINDOWBLOCKS is a free data retrieval call binding the contract method 0x4fc40b61. +// +// Solidity: function MAX_STAKER_OPT_OUT_WINDOW_BLOCKS() view returns(uint256) +func (_ContractDelegationManager *ContractDelegationManagerCaller) MAXSTAKEROPTOUTWINDOWBLOCKS(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _ContractDelegationManager.contract.Call(opts, &out, "MAX_STAKER_OPT_OUT_WINDOW_BLOCKS") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// MAXSTAKEROPTOUTWINDOWBLOCKS is a free data retrieval call binding the contract method 0x4fc40b61. +// +// Solidity: function MAX_STAKER_OPT_OUT_WINDOW_BLOCKS() view returns(uint256) +func (_ContractDelegationManager *ContractDelegationManagerSession) MAXSTAKEROPTOUTWINDOWBLOCKS() (*big.Int, error) { + return _ContractDelegationManager.Contract.MAXSTAKEROPTOUTWINDOWBLOCKS(&_ContractDelegationManager.CallOpts) +} + +// MAXSTAKEROPTOUTWINDOWBLOCKS is a free data retrieval call binding the contract method 0x4fc40b61. +// +// Solidity: function MAX_STAKER_OPT_OUT_WINDOW_BLOCKS() view returns(uint256) +func (_ContractDelegationManager *ContractDelegationManagerCallerSession) MAXSTAKEROPTOUTWINDOWBLOCKS() (*big.Int, error) { + return _ContractDelegationManager.Contract.MAXSTAKEROPTOUTWINDOWBLOCKS(&_ContractDelegationManager.CallOpts) +} + +// MAXWITHDRAWALDELAYBLOCKS is a free data retrieval call binding the contract method 0xca661c04. +// +// Solidity: function MAX_WITHDRAWAL_DELAY_BLOCKS() view returns(uint256) +func (_ContractDelegationManager *ContractDelegationManagerCaller) MAXWITHDRAWALDELAYBLOCKS(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _ContractDelegationManager.contract.Call(opts, &out, "MAX_WITHDRAWAL_DELAY_BLOCKS") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// MAXWITHDRAWALDELAYBLOCKS is a free data retrieval call binding the contract method 0xca661c04. +// +// Solidity: function MAX_WITHDRAWAL_DELAY_BLOCKS() view returns(uint256) +func (_ContractDelegationManager *ContractDelegationManagerSession) MAXWITHDRAWALDELAYBLOCKS() (*big.Int, error) { + return _ContractDelegationManager.Contract.MAXWITHDRAWALDELAYBLOCKS(&_ContractDelegationManager.CallOpts) +} + +// MAXWITHDRAWALDELAYBLOCKS is a free data retrieval call binding the contract method 0xca661c04. +// +// Solidity: function MAX_WITHDRAWAL_DELAY_BLOCKS() view returns(uint256) +func (_ContractDelegationManager *ContractDelegationManagerCallerSession) MAXWITHDRAWALDELAYBLOCKS() (*big.Int, error) { + return _ContractDelegationManager.Contract.MAXWITHDRAWALDELAYBLOCKS(&_ContractDelegationManager.CallOpts) +} + +// STAKERDELEGATIONTYPEHASH is a free data retrieval call binding the contract method 0x43377382. +// +// Solidity: function STAKER_DELEGATION_TYPEHASH() view returns(bytes32) +func (_ContractDelegationManager *ContractDelegationManagerCaller) STAKERDELEGATIONTYPEHASH(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ContractDelegationManager.contract.Call(opts, &out, "STAKER_DELEGATION_TYPEHASH") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// STAKERDELEGATIONTYPEHASH is a free data retrieval call binding the contract method 0x43377382. +// +// Solidity: function STAKER_DELEGATION_TYPEHASH() view returns(bytes32) +func (_ContractDelegationManager *ContractDelegationManagerSession) STAKERDELEGATIONTYPEHASH() ([32]byte, error) { + return _ContractDelegationManager.Contract.STAKERDELEGATIONTYPEHASH(&_ContractDelegationManager.CallOpts) +} + +// STAKERDELEGATIONTYPEHASH is a free data retrieval call binding the contract method 0x43377382. +// +// Solidity: function STAKER_DELEGATION_TYPEHASH() view returns(bytes32) +func (_ContractDelegationManager *ContractDelegationManagerCallerSession) STAKERDELEGATIONTYPEHASH() ([32]byte, error) { + return _ContractDelegationManager.Contract.STAKERDELEGATIONTYPEHASH(&_ContractDelegationManager.CallOpts) +} + +// BeaconChainETHStrategy is a free data retrieval call binding the contract method 0x9104c319. +// +// Solidity: function beaconChainETHStrategy() view returns(address) +func (_ContractDelegationManager *ContractDelegationManagerCaller) BeaconChainETHStrategy(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ContractDelegationManager.contract.Call(opts, &out, "beaconChainETHStrategy") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// BeaconChainETHStrategy is a free data retrieval call binding the contract method 0x9104c319. +// +// Solidity: function beaconChainETHStrategy() view returns(address) +func (_ContractDelegationManager *ContractDelegationManagerSession) BeaconChainETHStrategy() (common.Address, error) { + return _ContractDelegationManager.Contract.BeaconChainETHStrategy(&_ContractDelegationManager.CallOpts) +} + +// BeaconChainETHStrategy is a free data retrieval call binding the contract method 0x9104c319. +// +// Solidity: function beaconChainETHStrategy() view returns(address) +func (_ContractDelegationManager *ContractDelegationManagerCallerSession) BeaconChainETHStrategy() (common.Address, error) { + return _ContractDelegationManager.Contract.BeaconChainETHStrategy(&_ContractDelegationManager.CallOpts) +} + +// CalculateCurrentStakerDelegationDigestHash is a free data retrieval call binding the contract method 0x1bbce091. +// +// Solidity: function calculateCurrentStakerDelegationDigestHash(address staker, address operator, uint256 expiry) view returns(bytes32) +func (_ContractDelegationManager *ContractDelegationManagerCaller) CalculateCurrentStakerDelegationDigestHash(opts *bind.CallOpts, staker common.Address, operator common.Address, expiry *big.Int) ([32]byte, error) { + var out []interface{} + err := _ContractDelegationManager.contract.Call(opts, &out, "calculateCurrentStakerDelegationDigestHash", staker, operator, expiry) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// CalculateCurrentStakerDelegationDigestHash is a free data retrieval call binding the contract method 0x1bbce091. +// +// Solidity: function calculateCurrentStakerDelegationDigestHash(address staker, address operator, uint256 expiry) view returns(bytes32) +func (_ContractDelegationManager *ContractDelegationManagerSession) CalculateCurrentStakerDelegationDigestHash(staker common.Address, operator common.Address, expiry *big.Int) ([32]byte, error) { + return _ContractDelegationManager.Contract.CalculateCurrentStakerDelegationDigestHash(&_ContractDelegationManager.CallOpts, staker, operator, expiry) +} + +// CalculateCurrentStakerDelegationDigestHash is a free data retrieval call binding the contract method 0x1bbce091. +// +// Solidity: function calculateCurrentStakerDelegationDigestHash(address staker, address operator, uint256 expiry) view returns(bytes32) +func (_ContractDelegationManager *ContractDelegationManagerCallerSession) CalculateCurrentStakerDelegationDigestHash(staker common.Address, operator common.Address, expiry *big.Int) ([32]byte, error) { + return _ContractDelegationManager.Contract.CalculateCurrentStakerDelegationDigestHash(&_ContractDelegationManager.CallOpts, staker, operator, expiry) +} + +// CalculateDelegationApprovalDigestHash is a free data retrieval call binding the contract method 0x0b9f487a. +// +// Solidity: function calculateDelegationApprovalDigestHash(address staker, address operator, address _delegationApprover, bytes32 approverSalt, uint256 expiry) view returns(bytes32) +func (_ContractDelegationManager *ContractDelegationManagerCaller) CalculateDelegationApprovalDigestHash(opts *bind.CallOpts, staker common.Address, operator common.Address, _delegationApprover common.Address, approverSalt [32]byte, expiry *big.Int) ([32]byte, error) { + var out []interface{} + err := _ContractDelegationManager.contract.Call(opts, &out, "calculateDelegationApprovalDigestHash", staker, operator, _delegationApprover, approverSalt, expiry) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// CalculateDelegationApprovalDigestHash is a free data retrieval call binding the contract method 0x0b9f487a. +// +// Solidity: function calculateDelegationApprovalDigestHash(address staker, address operator, address _delegationApprover, bytes32 approverSalt, uint256 expiry) view returns(bytes32) +func (_ContractDelegationManager *ContractDelegationManagerSession) CalculateDelegationApprovalDigestHash(staker common.Address, operator common.Address, _delegationApprover common.Address, approverSalt [32]byte, expiry *big.Int) ([32]byte, error) { + return _ContractDelegationManager.Contract.CalculateDelegationApprovalDigestHash(&_ContractDelegationManager.CallOpts, staker, operator, _delegationApprover, approverSalt, expiry) +} + +// CalculateDelegationApprovalDigestHash is a free data retrieval call binding the contract method 0x0b9f487a. +// +// Solidity: function calculateDelegationApprovalDigestHash(address staker, address operator, address _delegationApprover, bytes32 approverSalt, uint256 expiry) view returns(bytes32) +func (_ContractDelegationManager *ContractDelegationManagerCallerSession) CalculateDelegationApprovalDigestHash(staker common.Address, operator common.Address, _delegationApprover common.Address, approverSalt [32]byte, expiry *big.Int) ([32]byte, error) { + return _ContractDelegationManager.Contract.CalculateDelegationApprovalDigestHash(&_ContractDelegationManager.CallOpts, staker, operator, _delegationApprover, approverSalt, expiry) +} + +// CalculateStakerDelegationDigestHash is a free data retrieval call binding the contract method 0xc94b5111. +// +// Solidity: function calculateStakerDelegationDigestHash(address staker, uint256 _stakerNonce, address operator, uint256 expiry) view returns(bytes32) +func (_ContractDelegationManager *ContractDelegationManagerCaller) CalculateStakerDelegationDigestHash(opts *bind.CallOpts, staker common.Address, _stakerNonce *big.Int, operator common.Address, expiry *big.Int) ([32]byte, error) { + var out []interface{} + err := _ContractDelegationManager.contract.Call(opts, &out, "calculateStakerDelegationDigestHash", staker, _stakerNonce, operator, expiry) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// CalculateStakerDelegationDigestHash is a free data retrieval call binding the contract method 0xc94b5111. +// +// Solidity: function calculateStakerDelegationDigestHash(address staker, uint256 _stakerNonce, address operator, uint256 expiry) view returns(bytes32) +func (_ContractDelegationManager *ContractDelegationManagerSession) CalculateStakerDelegationDigestHash(staker common.Address, _stakerNonce *big.Int, operator common.Address, expiry *big.Int) ([32]byte, error) { + return _ContractDelegationManager.Contract.CalculateStakerDelegationDigestHash(&_ContractDelegationManager.CallOpts, staker, _stakerNonce, operator, expiry) +} + +// CalculateStakerDelegationDigestHash is a free data retrieval call binding the contract method 0xc94b5111. +// +// Solidity: function calculateStakerDelegationDigestHash(address staker, uint256 _stakerNonce, address operator, uint256 expiry) view returns(bytes32) +func (_ContractDelegationManager *ContractDelegationManagerCallerSession) CalculateStakerDelegationDigestHash(staker common.Address, _stakerNonce *big.Int, operator common.Address, expiry *big.Int) ([32]byte, error) { + return _ContractDelegationManager.Contract.CalculateStakerDelegationDigestHash(&_ContractDelegationManager.CallOpts, staker, _stakerNonce, operator, expiry) +} + +// CalculateWithdrawalRoot is a free data retrieval call binding the contract method 0x597b36da. +// +// Solidity: function calculateWithdrawalRoot((address,address,address,uint256,uint32,address[],uint256[]) withdrawal) pure returns(bytes32) +func (_ContractDelegationManager *ContractDelegationManagerCaller) CalculateWithdrawalRoot(opts *bind.CallOpts, withdrawal IDelegationManagerWithdrawal) ([32]byte, error) { + var out []interface{} + err := _ContractDelegationManager.contract.Call(opts, &out, "calculateWithdrawalRoot", withdrawal) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// CalculateWithdrawalRoot is a free data retrieval call binding the contract method 0x597b36da. +// +// Solidity: function calculateWithdrawalRoot((address,address,address,uint256,uint32,address[],uint256[]) withdrawal) pure returns(bytes32) +func (_ContractDelegationManager *ContractDelegationManagerSession) CalculateWithdrawalRoot(withdrawal IDelegationManagerWithdrawal) ([32]byte, error) { + return _ContractDelegationManager.Contract.CalculateWithdrawalRoot(&_ContractDelegationManager.CallOpts, withdrawal) +} + +// CalculateWithdrawalRoot is a free data retrieval call binding the contract method 0x597b36da. +// +// Solidity: function calculateWithdrawalRoot((address,address,address,uint256,uint32,address[],uint256[]) withdrawal) pure returns(bytes32) +func (_ContractDelegationManager *ContractDelegationManagerCallerSession) CalculateWithdrawalRoot(withdrawal IDelegationManagerWithdrawal) ([32]byte, error) { + return _ContractDelegationManager.Contract.CalculateWithdrawalRoot(&_ContractDelegationManager.CallOpts, withdrawal) +} + +// CumulativeWithdrawalsQueued is a free data retrieval call binding the contract method 0xa1788484. +// +// Solidity: function cumulativeWithdrawalsQueued(address ) view returns(uint256) +func (_ContractDelegationManager *ContractDelegationManagerCaller) CumulativeWithdrawalsQueued(opts *bind.CallOpts, arg0 common.Address) (*big.Int, error) { + var out []interface{} + err := _ContractDelegationManager.contract.Call(opts, &out, "cumulativeWithdrawalsQueued", arg0) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// CumulativeWithdrawalsQueued is a free data retrieval call binding the contract method 0xa1788484. +// +// Solidity: function cumulativeWithdrawalsQueued(address ) view returns(uint256) +func (_ContractDelegationManager *ContractDelegationManagerSession) CumulativeWithdrawalsQueued(arg0 common.Address) (*big.Int, error) { + return _ContractDelegationManager.Contract.CumulativeWithdrawalsQueued(&_ContractDelegationManager.CallOpts, arg0) +} + +// CumulativeWithdrawalsQueued is a free data retrieval call binding the contract method 0xa1788484. +// +// Solidity: function cumulativeWithdrawalsQueued(address ) view returns(uint256) +func (_ContractDelegationManager *ContractDelegationManagerCallerSession) CumulativeWithdrawalsQueued(arg0 common.Address) (*big.Int, error) { + return _ContractDelegationManager.Contract.CumulativeWithdrawalsQueued(&_ContractDelegationManager.CallOpts, arg0) +} + +// DelegatedTo is a free data retrieval call binding the contract method 0x65da1264. +// +// Solidity: function delegatedTo(address ) view returns(address) +func (_ContractDelegationManager *ContractDelegationManagerCaller) DelegatedTo(opts *bind.CallOpts, arg0 common.Address) (common.Address, error) { + var out []interface{} + err := _ContractDelegationManager.contract.Call(opts, &out, "delegatedTo", arg0) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// DelegatedTo is a free data retrieval call binding the contract method 0x65da1264. +// +// Solidity: function delegatedTo(address ) view returns(address) +func (_ContractDelegationManager *ContractDelegationManagerSession) DelegatedTo(arg0 common.Address) (common.Address, error) { + return _ContractDelegationManager.Contract.DelegatedTo(&_ContractDelegationManager.CallOpts, arg0) +} + +// DelegatedTo is a free data retrieval call binding the contract method 0x65da1264. +// +// Solidity: function delegatedTo(address ) view returns(address) +func (_ContractDelegationManager *ContractDelegationManagerCallerSession) DelegatedTo(arg0 common.Address) (common.Address, error) { + return _ContractDelegationManager.Contract.DelegatedTo(&_ContractDelegationManager.CallOpts, arg0) +} + +// DelegationApprover is a free data retrieval call binding the contract method 0x3cdeb5e0. +// +// Solidity: function delegationApprover(address operator) view returns(address) +func (_ContractDelegationManager *ContractDelegationManagerCaller) DelegationApprover(opts *bind.CallOpts, operator common.Address) (common.Address, error) { + var out []interface{} + err := _ContractDelegationManager.contract.Call(opts, &out, "delegationApprover", operator) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// DelegationApprover is a free data retrieval call binding the contract method 0x3cdeb5e0. +// +// Solidity: function delegationApprover(address operator) view returns(address) +func (_ContractDelegationManager *ContractDelegationManagerSession) DelegationApprover(operator common.Address) (common.Address, error) { + return _ContractDelegationManager.Contract.DelegationApprover(&_ContractDelegationManager.CallOpts, operator) +} + +// DelegationApprover is a free data retrieval call binding the contract method 0x3cdeb5e0. +// +// Solidity: function delegationApprover(address operator) view returns(address) +func (_ContractDelegationManager *ContractDelegationManagerCallerSession) DelegationApprover(operator common.Address) (common.Address, error) { + return _ContractDelegationManager.Contract.DelegationApprover(&_ContractDelegationManager.CallOpts, operator) +} + +// DelegationApproverSaltIsSpent is a free data retrieval call binding the contract method 0xbb45fef2. +// +// Solidity: function delegationApproverSaltIsSpent(address , bytes32 ) view returns(bool) +func (_ContractDelegationManager *ContractDelegationManagerCaller) DelegationApproverSaltIsSpent(opts *bind.CallOpts, arg0 common.Address, arg1 [32]byte) (bool, error) { + var out []interface{} + err := _ContractDelegationManager.contract.Call(opts, &out, "delegationApproverSaltIsSpent", arg0, arg1) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// DelegationApproverSaltIsSpent is a free data retrieval call binding the contract method 0xbb45fef2. +// +// Solidity: function delegationApproverSaltIsSpent(address , bytes32 ) view returns(bool) +func (_ContractDelegationManager *ContractDelegationManagerSession) DelegationApproverSaltIsSpent(arg0 common.Address, arg1 [32]byte) (bool, error) { + return _ContractDelegationManager.Contract.DelegationApproverSaltIsSpent(&_ContractDelegationManager.CallOpts, arg0, arg1) +} + +// DelegationApproverSaltIsSpent is a free data retrieval call binding the contract method 0xbb45fef2. +// +// Solidity: function delegationApproverSaltIsSpent(address , bytes32 ) view returns(bool) +func (_ContractDelegationManager *ContractDelegationManagerCallerSession) DelegationApproverSaltIsSpent(arg0 common.Address, arg1 [32]byte) (bool, error) { + return _ContractDelegationManager.Contract.DelegationApproverSaltIsSpent(&_ContractDelegationManager.CallOpts, arg0, arg1) +} + +// DomainSeparator is a free data retrieval call binding the contract method 0xf698da25. +// +// Solidity: function domainSeparator() view returns(bytes32) +func (_ContractDelegationManager *ContractDelegationManagerCaller) DomainSeparator(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ContractDelegationManager.contract.Call(opts, &out, "domainSeparator") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// DomainSeparator is a free data retrieval call binding the contract method 0xf698da25. +// +// Solidity: function domainSeparator() view returns(bytes32) +func (_ContractDelegationManager *ContractDelegationManagerSession) DomainSeparator() ([32]byte, error) { + return _ContractDelegationManager.Contract.DomainSeparator(&_ContractDelegationManager.CallOpts) +} + +// DomainSeparator is a free data retrieval call binding the contract method 0xf698da25. +// +// Solidity: function domainSeparator() view returns(bytes32) +func (_ContractDelegationManager *ContractDelegationManagerCallerSession) DomainSeparator() ([32]byte, error) { + return _ContractDelegationManager.Contract.DomainSeparator(&_ContractDelegationManager.CallOpts) +} + +// EarningsReceiver is a free data retrieval call binding the contract method 0x5f966f14. +// +// Solidity: function earningsReceiver(address operator) view returns(address) +func (_ContractDelegationManager *ContractDelegationManagerCaller) EarningsReceiver(opts *bind.CallOpts, operator common.Address) (common.Address, error) { + var out []interface{} + err := _ContractDelegationManager.contract.Call(opts, &out, "earningsReceiver", operator) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// EarningsReceiver is a free data retrieval call binding the contract method 0x5f966f14. +// +// Solidity: function earningsReceiver(address operator) view returns(address) +func (_ContractDelegationManager *ContractDelegationManagerSession) EarningsReceiver(operator common.Address) (common.Address, error) { + return _ContractDelegationManager.Contract.EarningsReceiver(&_ContractDelegationManager.CallOpts, operator) +} + +// EarningsReceiver is a free data retrieval call binding the contract method 0x5f966f14. +// +// Solidity: function earningsReceiver(address operator) view returns(address) +func (_ContractDelegationManager *ContractDelegationManagerCallerSession) EarningsReceiver(operator common.Address) (common.Address, error) { + return _ContractDelegationManager.Contract.EarningsReceiver(&_ContractDelegationManager.CallOpts, operator) +} + +// EigenPodManager is a free data retrieval call binding the contract method 0x4665bcda. +// +// Solidity: function eigenPodManager() view returns(address) +func (_ContractDelegationManager *ContractDelegationManagerCaller) EigenPodManager(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ContractDelegationManager.contract.Call(opts, &out, "eigenPodManager") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// EigenPodManager is a free data retrieval call binding the contract method 0x4665bcda. +// +// Solidity: function eigenPodManager() view returns(address) +func (_ContractDelegationManager *ContractDelegationManagerSession) EigenPodManager() (common.Address, error) { + return _ContractDelegationManager.Contract.EigenPodManager(&_ContractDelegationManager.CallOpts) +} + +// EigenPodManager is a free data retrieval call binding the contract method 0x4665bcda. +// +// Solidity: function eigenPodManager() view returns(address) +func (_ContractDelegationManager *ContractDelegationManagerCallerSession) EigenPodManager() (common.Address, error) { + return _ContractDelegationManager.Contract.EigenPodManager(&_ContractDelegationManager.CallOpts) +} + +// GetDelegatableShares is a free data retrieval call binding the contract method 0xcf80873e. +// +// Solidity: function getDelegatableShares(address staker) view returns(address[], uint256[]) +func (_ContractDelegationManager *ContractDelegationManagerCaller) GetDelegatableShares(opts *bind.CallOpts, staker common.Address) ([]common.Address, []*big.Int, error) { + var out []interface{} + err := _ContractDelegationManager.contract.Call(opts, &out, "getDelegatableShares", staker) + + if err != nil { + return *new([]common.Address), *new([]*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) + out1 := *abi.ConvertType(out[1], new([]*big.Int)).(*[]*big.Int) + + return out0, out1, err + +} + +// GetDelegatableShares is a free data retrieval call binding the contract method 0xcf80873e. +// +// Solidity: function getDelegatableShares(address staker) view returns(address[], uint256[]) +func (_ContractDelegationManager *ContractDelegationManagerSession) GetDelegatableShares(staker common.Address) ([]common.Address, []*big.Int, error) { + return _ContractDelegationManager.Contract.GetDelegatableShares(&_ContractDelegationManager.CallOpts, staker) +} + +// GetDelegatableShares is a free data retrieval call binding the contract method 0xcf80873e. +// +// Solidity: function getDelegatableShares(address staker) view returns(address[], uint256[]) +func (_ContractDelegationManager *ContractDelegationManagerCallerSession) GetDelegatableShares(staker common.Address) ([]common.Address, []*big.Int, error) { + return _ContractDelegationManager.Contract.GetDelegatableShares(&_ContractDelegationManager.CallOpts, staker) +} + +// GetWithdrawalDelay is a free data retrieval call binding the contract method 0x0449ca39. +// +// Solidity: function getWithdrawalDelay(address[] strategies) view returns(uint256) +func (_ContractDelegationManager *ContractDelegationManagerCaller) GetWithdrawalDelay(opts *bind.CallOpts, strategies []common.Address) (*big.Int, error) { + var out []interface{} + err := _ContractDelegationManager.contract.Call(opts, &out, "getWithdrawalDelay", strategies) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetWithdrawalDelay is a free data retrieval call binding the contract method 0x0449ca39. +// +// Solidity: function getWithdrawalDelay(address[] strategies) view returns(uint256) +func (_ContractDelegationManager *ContractDelegationManagerSession) GetWithdrawalDelay(strategies []common.Address) (*big.Int, error) { + return _ContractDelegationManager.Contract.GetWithdrawalDelay(&_ContractDelegationManager.CallOpts, strategies) +} + +// GetWithdrawalDelay is a free data retrieval call binding the contract method 0x0449ca39. +// +// Solidity: function getWithdrawalDelay(address[] strategies) view returns(uint256) +func (_ContractDelegationManager *ContractDelegationManagerCallerSession) GetWithdrawalDelay(strategies []common.Address) (*big.Int, error) { + return _ContractDelegationManager.Contract.GetWithdrawalDelay(&_ContractDelegationManager.CallOpts, strategies) +} + +// IsDelegated is a free data retrieval call binding the contract method 0x3e28391d. +// +// Solidity: function isDelegated(address staker) view returns(bool) +func (_ContractDelegationManager *ContractDelegationManagerCaller) IsDelegated(opts *bind.CallOpts, staker common.Address) (bool, error) { + var out []interface{} + err := _ContractDelegationManager.contract.Call(opts, &out, "isDelegated", staker) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsDelegated is a free data retrieval call binding the contract method 0x3e28391d. +// +// Solidity: function isDelegated(address staker) view returns(bool) +func (_ContractDelegationManager *ContractDelegationManagerSession) IsDelegated(staker common.Address) (bool, error) { + return _ContractDelegationManager.Contract.IsDelegated(&_ContractDelegationManager.CallOpts, staker) +} + +// IsDelegated is a free data retrieval call binding the contract method 0x3e28391d. +// +// Solidity: function isDelegated(address staker) view returns(bool) +func (_ContractDelegationManager *ContractDelegationManagerCallerSession) IsDelegated(staker common.Address) (bool, error) { + return _ContractDelegationManager.Contract.IsDelegated(&_ContractDelegationManager.CallOpts, staker) +} + +// IsOperator is a free data retrieval call binding the contract method 0x6d70f7ae. +// +// Solidity: function isOperator(address operator) view returns(bool) +func (_ContractDelegationManager *ContractDelegationManagerCaller) IsOperator(opts *bind.CallOpts, operator common.Address) (bool, error) { + var out []interface{} + err := _ContractDelegationManager.contract.Call(opts, &out, "isOperator", operator) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsOperator is a free data retrieval call binding the contract method 0x6d70f7ae. +// +// Solidity: function isOperator(address operator) view returns(bool) +func (_ContractDelegationManager *ContractDelegationManagerSession) IsOperator(operator common.Address) (bool, error) { + return _ContractDelegationManager.Contract.IsOperator(&_ContractDelegationManager.CallOpts, operator) +} + +// IsOperator is a free data retrieval call binding the contract method 0x6d70f7ae. +// +// Solidity: function isOperator(address operator) view returns(bool) +func (_ContractDelegationManager *ContractDelegationManagerCallerSession) IsOperator(operator common.Address) (bool, error) { + return _ContractDelegationManager.Contract.IsOperator(&_ContractDelegationManager.CallOpts, operator) +} + +// MinWithdrawalDelayBlocks is a free data retrieval call binding the contract method 0xc448feb8. +// +// Solidity: function minWithdrawalDelayBlocks() view returns(uint256) +func (_ContractDelegationManager *ContractDelegationManagerCaller) MinWithdrawalDelayBlocks(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _ContractDelegationManager.contract.Call(opts, &out, "minWithdrawalDelayBlocks") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// MinWithdrawalDelayBlocks is a free data retrieval call binding the contract method 0xc448feb8. +// +// Solidity: function minWithdrawalDelayBlocks() view returns(uint256) +func (_ContractDelegationManager *ContractDelegationManagerSession) MinWithdrawalDelayBlocks() (*big.Int, error) { + return _ContractDelegationManager.Contract.MinWithdrawalDelayBlocks(&_ContractDelegationManager.CallOpts) +} + +// MinWithdrawalDelayBlocks is a free data retrieval call binding the contract method 0xc448feb8. +// +// Solidity: function minWithdrawalDelayBlocks() view returns(uint256) +func (_ContractDelegationManager *ContractDelegationManagerCallerSession) MinWithdrawalDelayBlocks() (*big.Int, error) { + return _ContractDelegationManager.Contract.MinWithdrawalDelayBlocks(&_ContractDelegationManager.CallOpts) +} + +// OperatorDetails is a free data retrieval call binding the contract method 0xc5e480db. +// +// Solidity: function operatorDetails(address operator) view returns((address,address,uint32)) +func (_ContractDelegationManager *ContractDelegationManagerCaller) OperatorDetails(opts *bind.CallOpts, operator common.Address) (IDelegationManagerOperatorDetails, error) { + var out []interface{} + err := _ContractDelegationManager.contract.Call(opts, &out, "operatorDetails", operator) + + if err != nil { + return *new(IDelegationManagerOperatorDetails), err + } + + out0 := *abi.ConvertType(out[0], new(IDelegationManagerOperatorDetails)).(*IDelegationManagerOperatorDetails) + + return out0, err + +} + +// OperatorDetails is a free data retrieval call binding the contract method 0xc5e480db. +// +// Solidity: function operatorDetails(address operator) view returns((address,address,uint32)) +func (_ContractDelegationManager *ContractDelegationManagerSession) OperatorDetails(operator common.Address) (IDelegationManagerOperatorDetails, error) { + return _ContractDelegationManager.Contract.OperatorDetails(&_ContractDelegationManager.CallOpts, operator) +} + +// OperatorDetails is a free data retrieval call binding the contract method 0xc5e480db. +// +// Solidity: function operatorDetails(address operator) view returns((address,address,uint32)) +func (_ContractDelegationManager *ContractDelegationManagerCallerSession) OperatorDetails(operator common.Address) (IDelegationManagerOperatorDetails, error) { + return _ContractDelegationManager.Contract.OperatorDetails(&_ContractDelegationManager.CallOpts, operator) +} + +// OperatorShares is a free data retrieval call binding the contract method 0x778e55f3. +// +// Solidity: function operatorShares(address , address ) view returns(uint256) +func (_ContractDelegationManager *ContractDelegationManagerCaller) OperatorShares(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address) (*big.Int, error) { + var out []interface{} + err := _ContractDelegationManager.contract.Call(opts, &out, "operatorShares", arg0, arg1) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// OperatorShares is a free data retrieval call binding the contract method 0x778e55f3. +// +// Solidity: function operatorShares(address , address ) view returns(uint256) +func (_ContractDelegationManager *ContractDelegationManagerSession) OperatorShares(arg0 common.Address, arg1 common.Address) (*big.Int, error) { + return _ContractDelegationManager.Contract.OperatorShares(&_ContractDelegationManager.CallOpts, arg0, arg1) +} + +// OperatorShares is a free data retrieval call binding the contract method 0x778e55f3. +// +// Solidity: function operatorShares(address , address ) view returns(uint256) +func (_ContractDelegationManager *ContractDelegationManagerCallerSession) OperatorShares(arg0 common.Address, arg1 common.Address) (*big.Int, error) { + return _ContractDelegationManager.Contract.OperatorShares(&_ContractDelegationManager.CallOpts, arg0, arg1) +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_ContractDelegationManager *ContractDelegationManagerCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ContractDelegationManager.contract.Call(opts, &out, "owner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_ContractDelegationManager *ContractDelegationManagerSession) Owner() (common.Address, error) { + return _ContractDelegationManager.Contract.Owner(&_ContractDelegationManager.CallOpts) +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_ContractDelegationManager *ContractDelegationManagerCallerSession) Owner() (common.Address, error) { + return _ContractDelegationManager.Contract.Owner(&_ContractDelegationManager.CallOpts) +} + +// Paused is a free data retrieval call binding the contract method 0x5ac86ab7. +// +// Solidity: function paused(uint8 index) view returns(bool) +func (_ContractDelegationManager *ContractDelegationManagerCaller) Paused(opts *bind.CallOpts, index uint8) (bool, error) { + var out []interface{} + err := _ContractDelegationManager.contract.Call(opts, &out, "paused", index) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// Paused is a free data retrieval call binding the contract method 0x5ac86ab7. +// +// Solidity: function paused(uint8 index) view returns(bool) +func (_ContractDelegationManager *ContractDelegationManagerSession) Paused(index uint8) (bool, error) { + return _ContractDelegationManager.Contract.Paused(&_ContractDelegationManager.CallOpts, index) +} + +// Paused is a free data retrieval call binding the contract method 0x5ac86ab7. +// +// Solidity: function paused(uint8 index) view returns(bool) +func (_ContractDelegationManager *ContractDelegationManagerCallerSession) Paused(index uint8) (bool, error) { + return _ContractDelegationManager.Contract.Paused(&_ContractDelegationManager.CallOpts, index) +} + +// Paused0 is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(uint256) +func (_ContractDelegationManager *ContractDelegationManagerCaller) Paused0(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _ContractDelegationManager.contract.Call(opts, &out, "paused0") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// Paused0 is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(uint256) +func (_ContractDelegationManager *ContractDelegationManagerSession) Paused0() (*big.Int, error) { + return _ContractDelegationManager.Contract.Paused0(&_ContractDelegationManager.CallOpts) +} + +// Paused0 is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(uint256) +func (_ContractDelegationManager *ContractDelegationManagerCallerSession) Paused0() (*big.Int, error) { + return _ContractDelegationManager.Contract.Paused0(&_ContractDelegationManager.CallOpts) +} + +// PauserRegistry is a free data retrieval call binding the contract method 0x886f1195. +// +// Solidity: function pauserRegistry() view returns(address) +func (_ContractDelegationManager *ContractDelegationManagerCaller) PauserRegistry(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ContractDelegationManager.contract.Call(opts, &out, "pauserRegistry") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// PauserRegistry is a free data retrieval call binding the contract method 0x886f1195. +// +// Solidity: function pauserRegistry() view returns(address) +func (_ContractDelegationManager *ContractDelegationManagerSession) PauserRegistry() (common.Address, error) { + return _ContractDelegationManager.Contract.PauserRegistry(&_ContractDelegationManager.CallOpts) +} + +// PauserRegistry is a free data retrieval call binding the contract method 0x886f1195. +// +// Solidity: function pauserRegistry() view returns(address) +func (_ContractDelegationManager *ContractDelegationManagerCallerSession) PauserRegistry() (common.Address, error) { + return _ContractDelegationManager.Contract.PauserRegistry(&_ContractDelegationManager.CallOpts) +} + +// PendingWithdrawals is a free data retrieval call binding the contract method 0xb7f06ebe. +// +// Solidity: function pendingWithdrawals(bytes32 ) view returns(bool) +func (_ContractDelegationManager *ContractDelegationManagerCaller) PendingWithdrawals(opts *bind.CallOpts, arg0 [32]byte) (bool, error) { + var out []interface{} + err := _ContractDelegationManager.contract.Call(opts, &out, "pendingWithdrawals", arg0) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// PendingWithdrawals is a free data retrieval call binding the contract method 0xb7f06ebe. +// +// Solidity: function pendingWithdrawals(bytes32 ) view returns(bool) +func (_ContractDelegationManager *ContractDelegationManagerSession) PendingWithdrawals(arg0 [32]byte) (bool, error) { + return _ContractDelegationManager.Contract.PendingWithdrawals(&_ContractDelegationManager.CallOpts, arg0) +} + +// PendingWithdrawals is a free data retrieval call binding the contract method 0xb7f06ebe. +// +// Solidity: function pendingWithdrawals(bytes32 ) view returns(bool) +func (_ContractDelegationManager *ContractDelegationManagerCallerSession) PendingWithdrawals(arg0 [32]byte) (bool, error) { + return _ContractDelegationManager.Contract.PendingWithdrawals(&_ContractDelegationManager.CallOpts, arg0) +} + +// Slasher is a free data retrieval call binding the contract method 0xb1344271. +// +// Solidity: function slasher() view returns(address) +func (_ContractDelegationManager *ContractDelegationManagerCaller) Slasher(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ContractDelegationManager.contract.Call(opts, &out, "slasher") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Slasher is a free data retrieval call binding the contract method 0xb1344271. +// +// Solidity: function slasher() view returns(address) +func (_ContractDelegationManager *ContractDelegationManagerSession) Slasher() (common.Address, error) { + return _ContractDelegationManager.Contract.Slasher(&_ContractDelegationManager.CallOpts) +} + +// Slasher is a free data retrieval call binding the contract method 0xb1344271. +// +// Solidity: function slasher() view returns(address) +func (_ContractDelegationManager *ContractDelegationManagerCallerSession) Slasher() (common.Address, error) { + return _ContractDelegationManager.Contract.Slasher(&_ContractDelegationManager.CallOpts) +} + +// StakerNonce is a free data retrieval call binding the contract method 0x29c77d4f. +// +// Solidity: function stakerNonce(address ) view returns(uint256) +func (_ContractDelegationManager *ContractDelegationManagerCaller) StakerNonce(opts *bind.CallOpts, arg0 common.Address) (*big.Int, error) { + var out []interface{} + err := _ContractDelegationManager.contract.Call(opts, &out, "stakerNonce", arg0) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// StakerNonce is a free data retrieval call binding the contract method 0x29c77d4f. +// +// Solidity: function stakerNonce(address ) view returns(uint256) +func (_ContractDelegationManager *ContractDelegationManagerSession) StakerNonce(arg0 common.Address) (*big.Int, error) { + return _ContractDelegationManager.Contract.StakerNonce(&_ContractDelegationManager.CallOpts, arg0) +} + +// StakerNonce is a free data retrieval call binding the contract method 0x29c77d4f. +// +// Solidity: function stakerNonce(address ) view returns(uint256) +func (_ContractDelegationManager *ContractDelegationManagerCallerSession) StakerNonce(arg0 common.Address) (*big.Int, error) { + return _ContractDelegationManager.Contract.StakerNonce(&_ContractDelegationManager.CallOpts, arg0) +} + +// StakerOptOutWindowBlocks is a free data retrieval call binding the contract method 0x16928365. +// +// Solidity: function stakerOptOutWindowBlocks(address operator) view returns(uint256) +func (_ContractDelegationManager *ContractDelegationManagerCaller) StakerOptOutWindowBlocks(opts *bind.CallOpts, operator common.Address) (*big.Int, error) { + var out []interface{} + err := _ContractDelegationManager.contract.Call(opts, &out, "stakerOptOutWindowBlocks", operator) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// StakerOptOutWindowBlocks is a free data retrieval call binding the contract method 0x16928365. +// +// Solidity: function stakerOptOutWindowBlocks(address operator) view returns(uint256) +func (_ContractDelegationManager *ContractDelegationManagerSession) StakerOptOutWindowBlocks(operator common.Address) (*big.Int, error) { + return _ContractDelegationManager.Contract.StakerOptOutWindowBlocks(&_ContractDelegationManager.CallOpts, operator) +} + +// StakerOptOutWindowBlocks is a free data retrieval call binding the contract method 0x16928365. +// +// Solidity: function stakerOptOutWindowBlocks(address operator) view returns(uint256) +func (_ContractDelegationManager *ContractDelegationManagerCallerSession) StakerOptOutWindowBlocks(operator common.Address) (*big.Int, error) { + return _ContractDelegationManager.Contract.StakerOptOutWindowBlocks(&_ContractDelegationManager.CallOpts, operator) +} + +// StrategyManager is a free data retrieval call binding the contract method 0x39b70e38. +// +// Solidity: function strategyManager() view returns(address) +func (_ContractDelegationManager *ContractDelegationManagerCaller) StrategyManager(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ContractDelegationManager.contract.Call(opts, &out, "strategyManager") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// StrategyManager is a free data retrieval call binding the contract method 0x39b70e38. +// +// Solidity: function strategyManager() view returns(address) +func (_ContractDelegationManager *ContractDelegationManagerSession) StrategyManager() (common.Address, error) { + return _ContractDelegationManager.Contract.StrategyManager(&_ContractDelegationManager.CallOpts) +} + +// StrategyManager is a free data retrieval call binding the contract method 0x39b70e38. +// +// Solidity: function strategyManager() view returns(address) +func (_ContractDelegationManager *ContractDelegationManagerCallerSession) StrategyManager() (common.Address, error) { + return _ContractDelegationManager.Contract.StrategyManager(&_ContractDelegationManager.CallOpts) +} + +// StrategyWithdrawalDelayBlocks is a free data retrieval call binding the contract method 0xc488375a. +// +// Solidity: function strategyWithdrawalDelayBlocks(address ) view returns(uint256) +func (_ContractDelegationManager *ContractDelegationManagerCaller) StrategyWithdrawalDelayBlocks(opts *bind.CallOpts, arg0 common.Address) (*big.Int, error) { + var out []interface{} + err := _ContractDelegationManager.contract.Call(opts, &out, "strategyWithdrawalDelayBlocks", arg0) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// StrategyWithdrawalDelayBlocks is a free data retrieval call binding the contract method 0xc488375a. +// +// Solidity: function strategyWithdrawalDelayBlocks(address ) view returns(uint256) +func (_ContractDelegationManager *ContractDelegationManagerSession) StrategyWithdrawalDelayBlocks(arg0 common.Address) (*big.Int, error) { + return _ContractDelegationManager.Contract.StrategyWithdrawalDelayBlocks(&_ContractDelegationManager.CallOpts, arg0) +} + +// StrategyWithdrawalDelayBlocks is a free data retrieval call binding the contract method 0xc488375a. +// +// Solidity: function strategyWithdrawalDelayBlocks(address ) view returns(uint256) +func (_ContractDelegationManager *ContractDelegationManagerCallerSession) StrategyWithdrawalDelayBlocks(arg0 common.Address) (*big.Int, error) { + return _ContractDelegationManager.Contract.StrategyWithdrawalDelayBlocks(&_ContractDelegationManager.CallOpts, arg0) +} + +// CompleteQueuedWithdrawal is a paid mutator transaction binding the contract method 0x60d7faed. +// +// Solidity: function completeQueuedWithdrawal((address,address,address,uint256,uint32,address[],uint256[]) withdrawal, address[] tokens, uint256 middlewareTimesIndex, bool receiveAsTokens) returns() +func (_ContractDelegationManager *ContractDelegationManagerTransactor) CompleteQueuedWithdrawal(opts *bind.TransactOpts, withdrawal IDelegationManagerWithdrawal, tokens []common.Address, middlewareTimesIndex *big.Int, receiveAsTokens bool) (*types.Transaction, error) { + return _ContractDelegationManager.contract.Transact(opts, "completeQueuedWithdrawal", withdrawal, tokens, middlewareTimesIndex, receiveAsTokens) +} + +// CompleteQueuedWithdrawal is a paid mutator transaction binding the contract method 0x60d7faed. +// +// Solidity: function completeQueuedWithdrawal((address,address,address,uint256,uint32,address[],uint256[]) withdrawal, address[] tokens, uint256 middlewareTimesIndex, bool receiveAsTokens) returns() +func (_ContractDelegationManager *ContractDelegationManagerSession) CompleteQueuedWithdrawal(withdrawal IDelegationManagerWithdrawal, tokens []common.Address, middlewareTimesIndex *big.Int, receiveAsTokens bool) (*types.Transaction, error) { + return _ContractDelegationManager.Contract.CompleteQueuedWithdrawal(&_ContractDelegationManager.TransactOpts, withdrawal, tokens, middlewareTimesIndex, receiveAsTokens) +} + +// CompleteQueuedWithdrawal is a paid mutator transaction binding the contract method 0x60d7faed. +// +// Solidity: function completeQueuedWithdrawal((address,address,address,uint256,uint32,address[],uint256[]) withdrawal, address[] tokens, uint256 middlewareTimesIndex, bool receiveAsTokens) returns() +func (_ContractDelegationManager *ContractDelegationManagerTransactorSession) CompleteQueuedWithdrawal(withdrawal IDelegationManagerWithdrawal, tokens []common.Address, middlewareTimesIndex *big.Int, receiveAsTokens bool) (*types.Transaction, error) { + return _ContractDelegationManager.Contract.CompleteQueuedWithdrawal(&_ContractDelegationManager.TransactOpts, withdrawal, tokens, middlewareTimesIndex, receiveAsTokens) +} + +// CompleteQueuedWithdrawals is a paid mutator transaction binding the contract method 0x33404396. +// +// Solidity: function completeQueuedWithdrawals((address,address,address,uint256,uint32,address[],uint256[])[] withdrawals, address[][] tokens, uint256[] middlewareTimesIndexes, bool[] receiveAsTokens) returns() +func (_ContractDelegationManager *ContractDelegationManagerTransactor) CompleteQueuedWithdrawals(opts *bind.TransactOpts, withdrawals []IDelegationManagerWithdrawal, tokens [][]common.Address, middlewareTimesIndexes []*big.Int, receiveAsTokens []bool) (*types.Transaction, error) { + return _ContractDelegationManager.contract.Transact(opts, "completeQueuedWithdrawals", withdrawals, tokens, middlewareTimesIndexes, receiveAsTokens) +} + +// CompleteQueuedWithdrawals is a paid mutator transaction binding the contract method 0x33404396. +// +// Solidity: function completeQueuedWithdrawals((address,address,address,uint256,uint32,address[],uint256[])[] withdrawals, address[][] tokens, uint256[] middlewareTimesIndexes, bool[] receiveAsTokens) returns() +func (_ContractDelegationManager *ContractDelegationManagerSession) CompleteQueuedWithdrawals(withdrawals []IDelegationManagerWithdrawal, tokens [][]common.Address, middlewareTimesIndexes []*big.Int, receiveAsTokens []bool) (*types.Transaction, error) { + return _ContractDelegationManager.Contract.CompleteQueuedWithdrawals(&_ContractDelegationManager.TransactOpts, withdrawals, tokens, middlewareTimesIndexes, receiveAsTokens) +} + +// CompleteQueuedWithdrawals is a paid mutator transaction binding the contract method 0x33404396. +// +// Solidity: function completeQueuedWithdrawals((address,address,address,uint256,uint32,address[],uint256[])[] withdrawals, address[][] tokens, uint256[] middlewareTimesIndexes, bool[] receiveAsTokens) returns() +func (_ContractDelegationManager *ContractDelegationManagerTransactorSession) CompleteQueuedWithdrawals(withdrawals []IDelegationManagerWithdrawal, tokens [][]common.Address, middlewareTimesIndexes []*big.Int, receiveAsTokens []bool) (*types.Transaction, error) { + return _ContractDelegationManager.Contract.CompleteQueuedWithdrawals(&_ContractDelegationManager.TransactOpts, withdrawals, tokens, middlewareTimesIndexes, receiveAsTokens) +} + +// DecreaseDelegatedShares is a paid mutator transaction binding the contract method 0x132d4967. +// +// Solidity: function decreaseDelegatedShares(address staker, address strategy, uint256 shares) returns() +func (_ContractDelegationManager *ContractDelegationManagerTransactor) DecreaseDelegatedShares(opts *bind.TransactOpts, staker common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { + return _ContractDelegationManager.contract.Transact(opts, "decreaseDelegatedShares", staker, strategy, shares) +} + +// DecreaseDelegatedShares is a paid mutator transaction binding the contract method 0x132d4967. +// +// Solidity: function decreaseDelegatedShares(address staker, address strategy, uint256 shares) returns() +func (_ContractDelegationManager *ContractDelegationManagerSession) DecreaseDelegatedShares(staker common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { + return _ContractDelegationManager.Contract.DecreaseDelegatedShares(&_ContractDelegationManager.TransactOpts, staker, strategy, shares) +} + +// DecreaseDelegatedShares is a paid mutator transaction binding the contract method 0x132d4967. +// +// Solidity: function decreaseDelegatedShares(address staker, address strategy, uint256 shares) returns() +func (_ContractDelegationManager *ContractDelegationManagerTransactorSession) DecreaseDelegatedShares(staker common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { + return _ContractDelegationManager.Contract.DecreaseDelegatedShares(&_ContractDelegationManager.TransactOpts, staker, strategy, shares) +} + +// DelegateTo is a paid mutator transaction binding the contract method 0xeea9064b. +// +// Solidity: function delegateTo(address operator, (bytes,uint256) approverSignatureAndExpiry, bytes32 approverSalt) returns() +func (_ContractDelegationManager *ContractDelegationManagerTransactor) DelegateTo(opts *bind.TransactOpts, operator common.Address, approverSignatureAndExpiry ISignatureUtilsSignatureWithExpiry, approverSalt [32]byte) (*types.Transaction, error) { + return _ContractDelegationManager.contract.Transact(opts, "delegateTo", operator, approverSignatureAndExpiry, approverSalt) +} + +// DelegateTo is a paid mutator transaction binding the contract method 0xeea9064b. +// +// Solidity: function delegateTo(address operator, (bytes,uint256) approverSignatureAndExpiry, bytes32 approverSalt) returns() +func (_ContractDelegationManager *ContractDelegationManagerSession) DelegateTo(operator common.Address, approverSignatureAndExpiry ISignatureUtilsSignatureWithExpiry, approverSalt [32]byte) (*types.Transaction, error) { + return _ContractDelegationManager.Contract.DelegateTo(&_ContractDelegationManager.TransactOpts, operator, approverSignatureAndExpiry, approverSalt) +} + +// DelegateTo is a paid mutator transaction binding the contract method 0xeea9064b. +// +// Solidity: function delegateTo(address operator, (bytes,uint256) approverSignatureAndExpiry, bytes32 approverSalt) returns() +func (_ContractDelegationManager *ContractDelegationManagerTransactorSession) DelegateTo(operator common.Address, approverSignatureAndExpiry ISignatureUtilsSignatureWithExpiry, approverSalt [32]byte) (*types.Transaction, error) { + return _ContractDelegationManager.Contract.DelegateTo(&_ContractDelegationManager.TransactOpts, operator, approverSignatureAndExpiry, approverSalt) +} + +// DelegateToBySignature is a paid mutator transaction binding the contract method 0x7f548071. +// +// Solidity: function delegateToBySignature(address staker, address operator, (bytes,uint256) stakerSignatureAndExpiry, (bytes,uint256) approverSignatureAndExpiry, bytes32 approverSalt) returns() +func (_ContractDelegationManager *ContractDelegationManagerTransactor) DelegateToBySignature(opts *bind.TransactOpts, staker common.Address, operator common.Address, stakerSignatureAndExpiry ISignatureUtilsSignatureWithExpiry, approverSignatureAndExpiry ISignatureUtilsSignatureWithExpiry, approverSalt [32]byte) (*types.Transaction, error) { + return _ContractDelegationManager.contract.Transact(opts, "delegateToBySignature", staker, operator, stakerSignatureAndExpiry, approverSignatureAndExpiry, approverSalt) +} + +// DelegateToBySignature is a paid mutator transaction binding the contract method 0x7f548071. +// +// Solidity: function delegateToBySignature(address staker, address operator, (bytes,uint256) stakerSignatureAndExpiry, (bytes,uint256) approverSignatureAndExpiry, bytes32 approverSalt) returns() +func (_ContractDelegationManager *ContractDelegationManagerSession) DelegateToBySignature(staker common.Address, operator common.Address, stakerSignatureAndExpiry ISignatureUtilsSignatureWithExpiry, approverSignatureAndExpiry ISignatureUtilsSignatureWithExpiry, approverSalt [32]byte) (*types.Transaction, error) { + return _ContractDelegationManager.Contract.DelegateToBySignature(&_ContractDelegationManager.TransactOpts, staker, operator, stakerSignatureAndExpiry, approverSignatureAndExpiry, approverSalt) +} + +// DelegateToBySignature is a paid mutator transaction binding the contract method 0x7f548071. +// +// Solidity: function delegateToBySignature(address staker, address operator, (bytes,uint256) stakerSignatureAndExpiry, (bytes,uint256) approverSignatureAndExpiry, bytes32 approverSalt) returns() +func (_ContractDelegationManager *ContractDelegationManagerTransactorSession) DelegateToBySignature(staker common.Address, operator common.Address, stakerSignatureAndExpiry ISignatureUtilsSignatureWithExpiry, approverSignatureAndExpiry ISignatureUtilsSignatureWithExpiry, approverSalt [32]byte) (*types.Transaction, error) { + return _ContractDelegationManager.Contract.DelegateToBySignature(&_ContractDelegationManager.TransactOpts, staker, operator, stakerSignatureAndExpiry, approverSignatureAndExpiry, approverSalt) +} + +// IncreaseDelegatedShares is a paid mutator transaction binding the contract method 0x28a573ae. +// +// Solidity: function increaseDelegatedShares(address staker, address strategy, uint256 shares) returns() +func (_ContractDelegationManager *ContractDelegationManagerTransactor) IncreaseDelegatedShares(opts *bind.TransactOpts, staker common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { + return _ContractDelegationManager.contract.Transact(opts, "increaseDelegatedShares", staker, strategy, shares) +} + +// IncreaseDelegatedShares is a paid mutator transaction binding the contract method 0x28a573ae. +// +// Solidity: function increaseDelegatedShares(address staker, address strategy, uint256 shares) returns() +func (_ContractDelegationManager *ContractDelegationManagerSession) IncreaseDelegatedShares(staker common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { + return _ContractDelegationManager.Contract.IncreaseDelegatedShares(&_ContractDelegationManager.TransactOpts, staker, strategy, shares) +} + +// IncreaseDelegatedShares is a paid mutator transaction binding the contract method 0x28a573ae. +// +// Solidity: function increaseDelegatedShares(address staker, address strategy, uint256 shares) returns() +func (_ContractDelegationManager *ContractDelegationManagerTransactorSession) IncreaseDelegatedShares(staker common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { + return _ContractDelegationManager.Contract.IncreaseDelegatedShares(&_ContractDelegationManager.TransactOpts, staker, strategy, shares) +} + +// Initialize is a paid mutator transaction binding the contract method 0x22bf40e4. +// +// Solidity: function initialize(address initialOwner, address _pauserRegistry, uint256 initialPausedStatus, uint256 _minWithdrawalDelayBlocks, address[] _strategies, uint256[] _withdrawalDelayBlocks) returns() +func (_ContractDelegationManager *ContractDelegationManagerTransactor) Initialize(opts *bind.TransactOpts, initialOwner common.Address, _pauserRegistry common.Address, initialPausedStatus *big.Int, _minWithdrawalDelayBlocks *big.Int, _strategies []common.Address, _withdrawalDelayBlocks []*big.Int) (*types.Transaction, error) { + return _ContractDelegationManager.contract.Transact(opts, "initialize", initialOwner, _pauserRegistry, initialPausedStatus, _minWithdrawalDelayBlocks, _strategies, _withdrawalDelayBlocks) +} + +// Initialize is a paid mutator transaction binding the contract method 0x22bf40e4. +// +// Solidity: function initialize(address initialOwner, address _pauserRegistry, uint256 initialPausedStatus, uint256 _minWithdrawalDelayBlocks, address[] _strategies, uint256[] _withdrawalDelayBlocks) returns() +func (_ContractDelegationManager *ContractDelegationManagerSession) Initialize(initialOwner common.Address, _pauserRegistry common.Address, initialPausedStatus *big.Int, _minWithdrawalDelayBlocks *big.Int, _strategies []common.Address, _withdrawalDelayBlocks []*big.Int) (*types.Transaction, error) { + return _ContractDelegationManager.Contract.Initialize(&_ContractDelegationManager.TransactOpts, initialOwner, _pauserRegistry, initialPausedStatus, _minWithdrawalDelayBlocks, _strategies, _withdrawalDelayBlocks) +} + +// Initialize is a paid mutator transaction binding the contract method 0x22bf40e4. +// +// Solidity: function initialize(address initialOwner, address _pauserRegistry, uint256 initialPausedStatus, uint256 _minWithdrawalDelayBlocks, address[] _strategies, uint256[] _withdrawalDelayBlocks) returns() +func (_ContractDelegationManager *ContractDelegationManagerTransactorSession) Initialize(initialOwner common.Address, _pauserRegistry common.Address, initialPausedStatus *big.Int, _minWithdrawalDelayBlocks *big.Int, _strategies []common.Address, _withdrawalDelayBlocks []*big.Int) (*types.Transaction, error) { + return _ContractDelegationManager.Contract.Initialize(&_ContractDelegationManager.TransactOpts, initialOwner, _pauserRegistry, initialPausedStatus, _minWithdrawalDelayBlocks, _strategies, _withdrawalDelayBlocks) +} + +// MigrateQueuedWithdrawals is a paid mutator transaction binding the contract method 0x5cfe8d2c. +// +// Solidity: function migrateQueuedWithdrawals((address[],uint256[],address,(address,uint96),uint32,address)[] withdrawalsToMigrate) returns() +func (_ContractDelegationManager *ContractDelegationManagerTransactor) MigrateQueuedWithdrawals(opts *bind.TransactOpts, withdrawalsToMigrate []IStrategyManagerDeprecatedStructQueuedWithdrawal) (*types.Transaction, error) { + return _ContractDelegationManager.contract.Transact(opts, "migrateQueuedWithdrawals", withdrawalsToMigrate) +} + +// MigrateQueuedWithdrawals is a paid mutator transaction binding the contract method 0x5cfe8d2c. +// +// Solidity: function migrateQueuedWithdrawals((address[],uint256[],address,(address,uint96),uint32,address)[] withdrawalsToMigrate) returns() +func (_ContractDelegationManager *ContractDelegationManagerSession) MigrateQueuedWithdrawals(withdrawalsToMigrate []IStrategyManagerDeprecatedStructQueuedWithdrawal) (*types.Transaction, error) { + return _ContractDelegationManager.Contract.MigrateQueuedWithdrawals(&_ContractDelegationManager.TransactOpts, withdrawalsToMigrate) +} + +// MigrateQueuedWithdrawals is a paid mutator transaction binding the contract method 0x5cfe8d2c. +// +// Solidity: function migrateQueuedWithdrawals((address[],uint256[],address,(address,uint96),uint32,address)[] withdrawalsToMigrate) returns() +func (_ContractDelegationManager *ContractDelegationManagerTransactorSession) MigrateQueuedWithdrawals(withdrawalsToMigrate []IStrategyManagerDeprecatedStructQueuedWithdrawal) (*types.Transaction, error) { + return _ContractDelegationManager.Contract.MigrateQueuedWithdrawals(&_ContractDelegationManager.TransactOpts, withdrawalsToMigrate) +} + +// ModifyOperatorDetails is a paid mutator transaction binding the contract method 0xf16172b0. +// +// Solidity: function modifyOperatorDetails((address,address,uint32) newOperatorDetails) returns() +func (_ContractDelegationManager *ContractDelegationManagerTransactor) ModifyOperatorDetails(opts *bind.TransactOpts, newOperatorDetails IDelegationManagerOperatorDetails) (*types.Transaction, error) { + return _ContractDelegationManager.contract.Transact(opts, "modifyOperatorDetails", newOperatorDetails) +} + +// ModifyOperatorDetails is a paid mutator transaction binding the contract method 0xf16172b0. +// +// Solidity: function modifyOperatorDetails((address,address,uint32) newOperatorDetails) returns() +func (_ContractDelegationManager *ContractDelegationManagerSession) ModifyOperatorDetails(newOperatorDetails IDelegationManagerOperatorDetails) (*types.Transaction, error) { + return _ContractDelegationManager.Contract.ModifyOperatorDetails(&_ContractDelegationManager.TransactOpts, newOperatorDetails) +} + +// ModifyOperatorDetails is a paid mutator transaction binding the contract method 0xf16172b0. +// +// Solidity: function modifyOperatorDetails((address,address,uint32) newOperatorDetails) returns() +func (_ContractDelegationManager *ContractDelegationManagerTransactorSession) ModifyOperatorDetails(newOperatorDetails IDelegationManagerOperatorDetails) (*types.Transaction, error) { + return _ContractDelegationManager.Contract.ModifyOperatorDetails(&_ContractDelegationManager.TransactOpts, newOperatorDetails) +} + +// Pause is a paid mutator transaction binding the contract method 0x136439dd. +// +// Solidity: function pause(uint256 newPausedStatus) returns() +func (_ContractDelegationManager *ContractDelegationManagerTransactor) Pause(opts *bind.TransactOpts, newPausedStatus *big.Int) (*types.Transaction, error) { + return _ContractDelegationManager.contract.Transact(opts, "pause", newPausedStatus) +} + +// Pause is a paid mutator transaction binding the contract method 0x136439dd. +// +// Solidity: function pause(uint256 newPausedStatus) returns() +func (_ContractDelegationManager *ContractDelegationManagerSession) Pause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _ContractDelegationManager.Contract.Pause(&_ContractDelegationManager.TransactOpts, newPausedStatus) +} + +// Pause is a paid mutator transaction binding the contract method 0x136439dd. +// +// Solidity: function pause(uint256 newPausedStatus) returns() +func (_ContractDelegationManager *ContractDelegationManagerTransactorSession) Pause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _ContractDelegationManager.Contract.Pause(&_ContractDelegationManager.TransactOpts, newPausedStatus) +} + +// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. +// +// Solidity: function pauseAll() returns() +func (_ContractDelegationManager *ContractDelegationManagerTransactor) PauseAll(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ContractDelegationManager.contract.Transact(opts, "pauseAll") +} + +// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. +// +// Solidity: function pauseAll() returns() +func (_ContractDelegationManager *ContractDelegationManagerSession) PauseAll() (*types.Transaction, error) { + return _ContractDelegationManager.Contract.PauseAll(&_ContractDelegationManager.TransactOpts) +} + +// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. +// +// Solidity: function pauseAll() returns() +func (_ContractDelegationManager *ContractDelegationManagerTransactorSession) PauseAll() (*types.Transaction, error) { + return _ContractDelegationManager.Contract.PauseAll(&_ContractDelegationManager.TransactOpts) +} + +// QueueWithdrawals is a paid mutator transaction binding the contract method 0x0dd8dd02. +// +// Solidity: function queueWithdrawals((address[],uint256[],address)[] queuedWithdrawalParams) returns(bytes32[]) +func (_ContractDelegationManager *ContractDelegationManagerTransactor) QueueWithdrawals(opts *bind.TransactOpts, queuedWithdrawalParams []IDelegationManagerQueuedWithdrawalParams) (*types.Transaction, error) { + return _ContractDelegationManager.contract.Transact(opts, "queueWithdrawals", queuedWithdrawalParams) +} + +// QueueWithdrawals is a paid mutator transaction binding the contract method 0x0dd8dd02. +// +// Solidity: function queueWithdrawals((address[],uint256[],address)[] queuedWithdrawalParams) returns(bytes32[]) +func (_ContractDelegationManager *ContractDelegationManagerSession) QueueWithdrawals(queuedWithdrawalParams []IDelegationManagerQueuedWithdrawalParams) (*types.Transaction, error) { + return _ContractDelegationManager.Contract.QueueWithdrawals(&_ContractDelegationManager.TransactOpts, queuedWithdrawalParams) +} + +// QueueWithdrawals is a paid mutator transaction binding the contract method 0x0dd8dd02. +// +// Solidity: function queueWithdrawals((address[],uint256[],address)[] queuedWithdrawalParams) returns(bytes32[]) +func (_ContractDelegationManager *ContractDelegationManagerTransactorSession) QueueWithdrawals(queuedWithdrawalParams []IDelegationManagerQueuedWithdrawalParams) (*types.Transaction, error) { + return _ContractDelegationManager.Contract.QueueWithdrawals(&_ContractDelegationManager.TransactOpts, queuedWithdrawalParams) +} + +// RegisterAsOperator is a paid mutator transaction binding the contract method 0x0f589e59. +// +// Solidity: function registerAsOperator((address,address,uint32) registeringOperatorDetails, string metadataURI) returns() +func (_ContractDelegationManager *ContractDelegationManagerTransactor) RegisterAsOperator(opts *bind.TransactOpts, registeringOperatorDetails IDelegationManagerOperatorDetails, metadataURI string) (*types.Transaction, error) { + return _ContractDelegationManager.contract.Transact(opts, "registerAsOperator", registeringOperatorDetails, metadataURI) +} + +// RegisterAsOperator is a paid mutator transaction binding the contract method 0x0f589e59. +// +// Solidity: function registerAsOperator((address,address,uint32) registeringOperatorDetails, string metadataURI) returns() +func (_ContractDelegationManager *ContractDelegationManagerSession) RegisterAsOperator(registeringOperatorDetails IDelegationManagerOperatorDetails, metadataURI string) (*types.Transaction, error) { + return _ContractDelegationManager.Contract.RegisterAsOperator(&_ContractDelegationManager.TransactOpts, registeringOperatorDetails, metadataURI) +} + +// RegisterAsOperator is a paid mutator transaction binding the contract method 0x0f589e59. +// +// Solidity: function registerAsOperator((address,address,uint32) registeringOperatorDetails, string metadataURI) returns() +func (_ContractDelegationManager *ContractDelegationManagerTransactorSession) RegisterAsOperator(registeringOperatorDetails IDelegationManagerOperatorDetails, metadataURI string) (*types.Transaction, error) { + return _ContractDelegationManager.Contract.RegisterAsOperator(&_ContractDelegationManager.TransactOpts, registeringOperatorDetails, metadataURI) +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_ContractDelegationManager *ContractDelegationManagerTransactor) RenounceOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ContractDelegationManager.contract.Transact(opts, "renounceOwnership") +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_ContractDelegationManager *ContractDelegationManagerSession) RenounceOwnership() (*types.Transaction, error) { + return _ContractDelegationManager.Contract.RenounceOwnership(&_ContractDelegationManager.TransactOpts) +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_ContractDelegationManager *ContractDelegationManagerTransactorSession) RenounceOwnership() (*types.Transaction, error) { + return _ContractDelegationManager.Contract.RenounceOwnership(&_ContractDelegationManager.TransactOpts) +} + +// SetPauserRegistry is a paid mutator transaction binding the contract method 0x10d67a2f. +// +// Solidity: function setPauserRegistry(address newPauserRegistry) returns() +func (_ContractDelegationManager *ContractDelegationManagerTransactor) SetPauserRegistry(opts *bind.TransactOpts, newPauserRegistry common.Address) (*types.Transaction, error) { + return _ContractDelegationManager.contract.Transact(opts, "setPauserRegistry", newPauserRegistry) +} + +// SetPauserRegistry is a paid mutator transaction binding the contract method 0x10d67a2f. +// +// Solidity: function setPauserRegistry(address newPauserRegistry) returns() +func (_ContractDelegationManager *ContractDelegationManagerSession) SetPauserRegistry(newPauserRegistry common.Address) (*types.Transaction, error) { + return _ContractDelegationManager.Contract.SetPauserRegistry(&_ContractDelegationManager.TransactOpts, newPauserRegistry) +} + +// SetPauserRegistry is a paid mutator transaction binding the contract method 0x10d67a2f. +// +// Solidity: function setPauserRegistry(address newPauserRegistry) returns() +func (_ContractDelegationManager *ContractDelegationManagerTransactorSession) SetPauserRegistry(newPauserRegistry common.Address) (*types.Transaction, error) { + return _ContractDelegationManager.Contract.SetPauserRegistry(&_ContractDelegationManager.TransactOpts, newPauserRegistry) +} + +// SetStrategyWithdrawalDelayBlocks is a paid mutator transaction binding the contract method 0x1522bf02. +// +// Solidity: function setStrategyWithdrawalDelayBlocks(address[] strategies, uint256[] withdrawalDelayBlocks) returns() +func (_ContractDelegationManager *ContractDelegationManagerTransactor) SetStrategyWithdrawalDelayBlocks(opts *bind.TransactOpts, strategies []common.Address, withdrawalDelayBlocks []*big.Int) (*types.Transaction, error) { + return _ContractDelegationManager.contract.Transact(opts, "setStrategyWithdrawalDelayBlocks", strategies, withdrawalDelayBlocks) +} + +// SetStrategyWithdrawalDelayBlocks is a paid mutator transaction binding the contract method 0x1522bf02. +// +// Solidity: function setStrategyWithdrawalDelayBlocks(address[] strategies, uint256[] withdrawalDelayBlocks) returns() +func (_ContractDelegationManager *ContractDelegationManagerSession) SetStrategyWithdrawalDelayBlocks(strategies []common.Address, withdrawalDelayBlocks []*big.Int) (*types.Transaction, error) { + return _ContractDelegationManager.Contract.SetStrategyWithdrawalDelayBlocks(&_ContractDelegationManager.TransactOpts, strategies, withdrawalDelayBlocks) +} + +// SetStrategyWithdrawalDelayBlocks is a paid mutator transaction binding the contract method 0x1522bf02. +// +// Solidity: function setStrategyWithdrawalDelayBlocks(address[] strategies, uint256[] withdrawalDelayBlocks) returns() +func (_ContractDelegationManager *ContractDelegationManagerTransactorSession) SetStrategyWithdrawalDelayBlocks(strategies []common.Address, withdrawalDelayBlocks []*big.Int) (*types.Transaction, error) { + return _ContractDelegationManager.Contract.SetStrategyWithdrawalDelayBlocks(&_ContractDelegationManager.TransactOpts, strategies, withdrawalDelayBlocks) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_ContractDelegationManager *ContractDelegationManagerTransactor) TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) { + return _ContractDelegationManager.contract.Transact(opts, "transferOwnership", newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_ContractDelegationManager *ContractDelegationManagerSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _ContractDelegationManager.Contract.TransferOwnership(&_ContractDelegationManager.TransactOpts, newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_ContractDelegationManager *ContractDelegationManagerTransactorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _ContractDelegationManager.Contract.TransferOwnership(&_ContractDelegationManager.TransactOpts, newOwner) +} + +// Undelegate is a paid mutator transaction binding the contract method 0xda8be864. +// +// Solidity: function undelegate(address staker) returns(bytes32[] withdrawalRoots) +func (_ContractDelegationManager *ContractDelegationManagerTransactor) Undelegate(opts *bind.TransactOpts, staker common.Address) (*types.Transaction, error) { + return _ContractDelegationManager.contract.Transact(opts, "undelegate", staker) +} + +// Undelegate is a paid mutator transaction binding the contract method 0xda8be864. +// +// Solidity: function undelegate(address staker) returns(bytes32[] withdrawalRoots) +func (_ContractDelegationManager *ContractDelegationManagerSession) Undelegate(staker common.Address) (*types.Transaction, error) { + return _ContractDelegationManager.Contract.Undelegate(&_ContractDelegationManager.TransactOpts, staker) +} + +// Undelegate is a paid mutator transaction binding the contract method 0xda8be864. +// +// Solidity: function undelegate(address staker) returns(bytes32[] withdrawalRoots) +func (_ContractDelegationManager *ContractDelegationManagerTransactorSession) Undelegate(staker common.Address) (*types.Transaction, error) { + return _ContractDelegationManager.Contract.Undelegate(&_ContractDelegationManager.TransactOpts, staker) +} + +// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc. +// +// Solidity: function unpause(uint256 newPausedStatus) returns() +func (_ContractDelegationManager *ContractDelegationManagerTransactor) Unpause(opts *bind.TransactOpts, newPausedStatus *big.Int) (*types.Transaction, error) { + return _ContractDelegationManager.contract.Transact(opts, "unpause", newPausedStatus) +} + +// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc. +// +// Solidity: function unpause(uint256 newPausedStatus) returns() +func (_ContractDelegationManager *ContractDelegationManagerSession) Unpause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _ContractDelegationManager.Contract.Unpause(&_ContractDelegationManager.TransactOpts, newPausedStatus) +} + +// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc. +// +// Solidity: function unpause(uint256 newPausedStatus) returns() +func (_ContractDelegationManager *ContractDelegationManagerTransactorSession) Unpause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _ContractDelegationManager.Contract.Unpause(&_ContractDelegationManager.TransactOpts, newPausedStatus) +} + +// UpdateOperatorMetadataURI is a paid mutator transaction binding the contract method 0x99be81c8. +// +// Solidity: function updateOperatorMetadataURI(string metadataURI) returns() +func (_ContractDelegationManager *ContractDelegationManagerTransactor) UpdateOperatorMetadataURI(opts *bind.TransactOpts, metadataURI string) (*types.Transaction, error) { + return _ContractDelegationManager.contract.Transact(opts, "updateOperatorMetadataURI", metadataURI) +} + +// UpdateOperatorMetadataURI is a paid mutator transaction binding the contract method 0x99be81c8. +// +// Solidity: function updateOperatorMetadataURI(string metadataURI) returns() +func (_ContractDelegationManager *ContractDelegationManagerSession) UpdateOperatorMetadataURI(metadataURI string) (*types.Transaction, error) { + return _ContractDelegationManager.Contract.UpdateOperatorMetadataURI(&_ContractDelegationManager.TransactOpts, metadataURI) +} + +// UpdateOperatorMetadataURI is a paid mutator transaction binding the contract method 0x99be81c8. +// +// Solidity: function updateOperatorMetadataURI(string metadataURI) returns() +func (_ContractDelegationManager *ContractDelegationManagerTransactorSession) UpdateOperatorMetadataURI(metadataURI string) (*types.Transaction, error) { + return _ContractDelegationManager.Contract.UpdateOperatorMetadataURI(&_ContractDelegationManager.TransactOpts, metadataURI) +} + +// ContractDelegationManagerInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the ContractDelegationManager contract. +type ContractDelegationManagerInitializedIterator struct { + Event *ContractDelegationManagerInitialized // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractDelegationManagerInitializedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractDelegationManagerInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractDelegationManagerInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractDelegationManagerInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractDelegationManagerInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractDelegationManagerInitialized represents a Initialized event raised by the ContractDelegationManager contract. +type ContractDelegationManagerInitialized struct { + Version uint8 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_ContractDelegationManager *ContractDelegationManagerFilterer) FilterInitialized(opts *bind.FilterOpts) (*ContractDelegationManagerInitializedIterator, error) { + + logs, sub, err := _ContractDelegationManager.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &ContractDelegationManagerInitializedIterator{contract: _ContractDelegationManager.contract, event: "Initialized", logs: logs, sub: sub}, nil +} + +// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_ContractDelegationManager *ContractDelegationManagerFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *ContractDelegationManagerInitialized) (event.Subscription, error) { + + logs, sub, err := _ContractDelegationManager.contract.WatchLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractDelegationManagerInitialized) + if err := _ContractDelegationManager.contract.UnpackLog(event, "Initialized", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_ContractDelegationManager *ContractDelegationManagerFilterer) ParseInitialized(log types.Log) (*ContractDelegationManagerInitialized, error) { + event := new(ContractDelegationManagerInitialized) + if err := _ContractDelegationManager.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ContractDelegationManagerMinWithdrawalDelayBlocksSetIterator is returned from FilterMinWithdrawalDelayBlocksSet and is used to iterate over the raw logs and unpacked data for MinWithdrawalDelayBlocksSet events raised by the ContractDelegationManager contract. +type ContractDelegationManagerMinWithdrawalDelayBlocksSetIterator struct { + Event *ContractDelegationManagerMinWithdrawalDelayBlocksSet // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractDelegationManagerMinWithdrawalDelayBlocksSetIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractDelegationManagerMinWithdrawalDelayBlocksSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractDelegationManagerMinWithdrawalDelayBlocksSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractDelegationManagerMinWithdrawalDelayBlocksSetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractDelegationManagerMinWithdrawalDelayBlocksSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractDelegationManagerMinWithdrawalDelayBlocksSet represents a MinWithdrawalDelayBlocksSet event raised by the ContractDelegationManager contract. +type ContractDelegationManagerMinWithdrawalDelayBlocksSet struct { + PreviousValue *big.Int + NewValue *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterMinWithdrawalDelayBlocksSet is a free log retrieval operation binding the contract event 0xafa003cd76f87ff9d62b35beea889920f33c0c42b8d45b74954d61d50f4b6b69. +// +// Solidity: event MinWithdrawalDelayBlocksSet(uint256 previousValue, uint256 newValue) +func (_ContractDelegationManager *ContractDelegationManagerFilterer) FilterMinWithdrawalDelayBlocksSet(opts *bind.FilterOpts) (*ContractDelegationManagerMinWithdrawalDelayBlocksSetIterator, error) { + + logs, sub, err := _ContractDelegationManager.contract.FilterLogs(opts, "MinWithdrawalDelayBlocksSet") + if err != nil { + return nil, err + } + return &ContractDelegationManagerMinWithdrawalDelayBlocksSetIterator{contract: _ContractDelegationManager.contract, event: "MinWithdrawalDelayBlocksSet", logs: logs, sub: sub}, nil +} + +// WatchMinWithdrawalDelayBlocksSet is a free log subscription operation binding the contract event 0xafa003cd76f87ff9d62b35beea889920f33c0c42b8d45b74954d61d50f4b6b69. +// +// Solidity: event MinWithdrawalDelayBlocksSet(uint256 previousValue, uint256 newValue) +func (_ContractDelegationManager *ContractDelegationManagerFilterer) WatchMinWithdrawalDelayBlocksSet(opts *bind.WatchOpts, sink chan<- *ContractDelegationManagerMinWithdrawalDelayBlocksSet) (event.Subscription, error) { + + logs, sub, err := _ContractDelegationManager.contract.WatchLogs(opts, "MinWithdrawalDelayBlocksSet") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractDelegationManagerMinWithdrawalDelayBlocksSet) + if err := _ContractDelegationManager.contract.UnpackLog(event, "MinWithdrawalDelayBlocksSet", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseMinWithdrawalDelayBlocksSet is a log parse operation binding the contract event 0xafa003cd76f87ff9d62b35beea889920f33c0c42b8d45b74954d61d50f4b6b69. +// +// Solidity: event MinWithdrawalDelayBlocksSet(uint256 previousValue, uint256 newValue) +func (_ContractDelegationManager *ContractDelegationManagerFilterer) ParseMinWithdrawalDelayBlocksSet(log types.Log) (*ContractDelegationManagerMinWithdrawalDelayBlocksSet, error) { + event := new(ContractDelegationManagerMinWithdrawalDelayBlocksSet) + if err := _ContractDelegationManager.contract.UnpackLog(event, "MinWithdrawalDelayBlocksSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ContractDelegationManagerOperatorDetailsModifiedIterator is returned from FilterOperatorDetailsModified and is used to iterate over the raw logs and unpacked data for OperatorDetailsModified events raised by the ContractDelegationManager contract. +type ContractDelegationManagerOperatorDetailsModifiedIterator struct { + Event *ContractDelegationManagerOperatorDetailsModified // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractDelegationManagerOperatorDetailsModifiedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractDelegationManagerOperatorDetailsModified) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractDelegationManagerOperatorDetailsModified) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractDelegationManagerOperatorDetailsModifiedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractDelegationManagerOperatorDetailsModifiedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractDelegationManagerOperatorDetailsModified represents a OperatorDetailsModified event raised by the ContractDelegationManager contract. +type ContractDelegationManagerOperatorDetailsModified struct { + Operator common.Address + NewOperatorDetails IDelegationManagerOperatorDetails + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOperatorDetailsModified is a free log retrieval operation binding the contract event 0xfebe5cd24b2cbc7b065b9d0fdeb904461e4afcff57dd57acda1e7832031ba7ac. +// +// Solidity: event OperatorDetailsModified(address indexed operator, (address,address,uint32) newOperatorDetails) +func (_ContractDelegationManager *ContractDelegationManagerFilterer) FilterOperatorDetailsModified(opts *bind.FilterOpts, operator []common.Address) (*ContractDelegationManagerOperatorDetailsModifiedIterator, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _ContractDelegationManager.contract.FilterLogs(opts, "OperatorDetailsModified", operatorRule) + if err != nil { + return nil, err + } + return &ContractDelegationManagerOperatorDetailsModifiedIterator{contract: _ContractDelegationManager.contract, event: "OperatorDetailsModified", logs: logs, sub: sub}, nil +} + +// WatchOperatorDetailsModified is a free log subscription operation binding the contract event 0xfebe5cd24b2cbc7b065b9d0fdeb904461e4afcff57dd57acda1e7832031ba7ac. +// +// Solidity: event OperatorDetailsModified(address indexed operator, (address,address,uint32) newOperatorDetails) +func (_ContractDelegationManager *ContractDelegationManagerFilterer) WatchOperatorDetailsModified(opts *bind.WatchOpts, sink chan<- *ContractDelegationManagerOperatorDetailsModified, operator []common.Address) (event.Subscription, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _ContractDelegationManager.contract.WatchLogs(opts, "OperatorDetailsModified", operatorRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractDelegationManagerOperatorDetailsModified) + if err := _ContractDelegationManager.contract.UnpackLog(event, "OperatorDetailsModified", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseOperatorDetailsModified is a log parse operation binding the contract event 0xfebe5cd24b2cbc7b065b9d0fdeb904461e4afcff57dd57acda1e7832031ba7ac. +// +// Solidity: event OperatorDetailsModified(address indexed operator, (address,address,uint32) newOperatorDetails) +func (_ContractDelegationManager *ContractDelegationManagerFilterer) ParseOperatorDetailsModified(log types.Log) (*ContractDelegationManagerOperatorDetailsModified, error) { + event := new(ContractDelegationManagerOperatorDetailsModified) + if err := _ContractDelegationManager.contract.UnpackLog(event, "OperatorDetailsModified", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ContractDelegationManagerOperatorMetadataURIUpdatedIterator is returned from FilterOperatorMetadataURIUpdated and is used to iterate over the raw logs and unpacked data for OperatorMetadataURIUpdated events raised by the ContractDelegationManager contract. +type ContractDelegationManagerOperatorMetadataURIUpdatedIterator struct { + Event *ContractDelegationManagerOperatorMetadataURIUpdated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractDelegationManagerOperatorMetadataURIUpdatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractDelegationManagerOperatorMetadataURIUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractDelegationManagerOperatorMetadataURIUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractDelegationManagerOperatorMetadataURIUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractDelegationManagerOperatorMetadataURIUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractDelegationManagerOperatorMetadataURIUpdated represents a OperatorMetadataURIUpdated event raised by the ContractDelegationManager contract. +type ContractDelegationManagerOperatorMetadataURIUpdated struct { + Operator common.Address + MetadataURI string + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOperatorMetadataURIUpdated is a free log retrieval operation binding the contract event 0x02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b6708090. +// +// Solidity: event OperatorMetadataURIUpdated(address indexed operator, string metadataURI) +func (_ContractDelegationManager *ContractDelegationManagerFilterer) FilterOperatorMetadataURIUpdated(opts *bind.FilterOpts, operator []common.Address) (*ContractDelegationManagerOperatorMetadataURIUpdatedIterator, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _ContractDelegationManager.contract.FilterLogs(opts, "OperatorMetadataURIUpdated", operatorRule) + if err != nil { + return nil, err + } + return &ContractDelegationManagerOperatorMetadataURIUpdatedIterator{contract: _ContractDelegationManager.contract, event: "OperatorMetadataURIUpdated", logs: logs, sub: sub}, nil +} + +// WatchOperatorMetadataURIUpdated is a free log subscription operation binding the contract event 0x02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b6708090. +// +// Solidity: event OperatorMetadataURIUpdated(address indexed operator, string metadataURI) +func (_ContractDelegationManager *ContractDelegationManagerFilterer) WatchOperatorMetadataURIUpdated(opts *bind.WatchOpts, sink chan<- *ContractDelegationManagerOperatorMetadataURIUpdated, operator []common.Address) (event.Subscription, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _ContractDelegationManager.contract.WatchLogs(opts, "OperatorMetadataURIUpdated", operatorRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractDelegationManagerOperatorMetadataURIUpdated) + if err := _ContractDelegationManager.contract.UnpackLog(event, "OperatorMetadataURIUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseOperatorMetadataURIUpdated is a log parse operation binding the contract event 0x02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b6708090. +// +// Solidity: event OperatorMetadataURIUpdated(address indexed operator, string metadataURI) +func (_ContractDelegationManager *ContractDelegationManagerFilterer) ParseOperatorMetadataURIUpdated(log types.Log) (*ContractDelegationManagerOperatorMetadataURIUpdated, error) { + event := new(ContractDelegationManagerOperatorMetadataURIUpdated) + if err := _ContractDelegationManager.contract.UnpackLog(event, "OperatorMetadataURIUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ContractDelegationManagerOperatorRegisteredIterator is returned from FilterOperatorRegistered and is used to iterate over the raw logs and unpacked data for OperatorRegistered events raised by the ContractDelegationManager contract. +type ContractDelegationManagerOperatorRegisteredIterator struct { + Event *ContractDelegationManagerOperatorRegistered // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractDelegationManagerOperatorRegisteredIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractDelegationManagerOperatorRegistered) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractDelegationManagerOperatorRegistered) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractDelegationManagerOperatorRegisteredIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractDelegationManagerOperatorRegisteredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractDelegationManagerOperatorRegistered represents a OperatorRegistered event raised by the ContractDelegationManager contract. +type ContractDelegationManagerOperatorRegistered struct { + Operator common.Address + OperatorDetails IDelegationManagerOperatorDetails + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOperatorRegistered is a free log retrieval operation binding the contract event 0x8e8485583a2310d41f7c82b9427d0bd49bad74bb9cff9d3402a29d8f9b28a0e2. +// +// Solidity: event OperatorRegistered(address indexed operator, (address,address,uint32) operatorDetails) +func (_ContractDelegationManager *ContractDelegationManagerFilterer) FilterOperatorRegistered(opts *bind.FilterOpts, operator []common.Address) (*ContractDelegationManagerOperatorRegisteredIterator, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _ContractDelegationManager.contract.FilterLogs(opts, "OperatorRegistered", operatorRule) + if err != nil { + return nil, err + } + return &ContractDelegationManagerOperatorRegisteredIterator{contract: _ContractDelegationManager.contract, event: "OperatorRegistered", logs: logs, sub: sub}, nil +} + +// WatchOperatorRegistered is a free log subscription operation binding the contract event 0x8e8485583a2310d41f7c82b9427d0bd49bad74bb9cff9d3402a29d8f9b28a0e2. +// +// Solidity: event OperatorRegistered(address indexed operator, (address,address,uint32) operatorDetails) +func (_ContractDelegationManager *ContractDelegationManagerFilterer) WatchOperatorRegistered(opts *bind.WatchOpts, sink chan<- *ContractDelegationManagerOperatorRegistered, operator []common.Address) (event.Subscription, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _ContractDelegationManager.contract.WatchLogs(opts, "OperatorRegistered", operatorRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractDelegationManagerOperatorRegistered) + if err := _ContractDelegationManager.contract.UnpackLog(event, "OperatorRegistered", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseOperatorRegistered is a log parse operation binding the contract event 0x8e8485583a2310d41f7c82b9427d0bd49bad74bb9cff9d3402a29d8f9b28a0e2. +// +// Solidity: event OperatorRegistered(address indexed operator, (address,address,uint32) operatorDetails) +func (_ContractDelegationManager *ContractDelegationManagerFilterer) ParseOperatorRegistered(log types.Log) (*ContractDelegationManagerOperatorRegistered, error) { + event := new(ContractDelegationManagerOperatorRegistered) + if err := _ContractDelegationManager.contract.UnpackLog(event, "OperatorRegistered", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ContractDelegationManagerOperatorSharesDecreasedIterator is returned from FilterOperatorSharesDecreased and is used to iterate over the raw logs and unpacked data for OperatorSharesDecreased events raised by the ContractDelegationManager contract. +type ContractDelegationManagerOperatorSharesDecreasedIterator struct { + Event *ContractDelegationManagerOperatorSharesDecreased // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractDelegationManagerOperatorSharesDecreasedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractDelegationManagerOperatorSharesDecreased) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractDelegationManagerOperatorSharesDecreased) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractDelegationManagerOperatorSharesDecreasedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractDelegationManagerOperatorSharesDecreasedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractDelegationManagerOperatorSharesDecreased represents a OperatorSharesDecreased event raised by the ContractDelegationManager contract. +type ContractDelegationManagerOperatorSharesDecreased struct { + Operator common.Address + Staker common.Address + Strategy common.Address + Shares *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOperatorSharesDecreased is a free log retrieval operation binding the contract event 0x6909600037b75d7b4733aedd815442b5ec018a827751c832aaff64eba5d6d2dd. +// +// Solidity: event OperatorSharesDecreased(address indexed operator, address staker, address strategy, uint256 shares) +func (_ContractDelegationManager *ContractDelegationManagerFilterer) FilterOperatorSharesDecreased(opts *bind.FilterOpts, operator []common.Address) (*ContractDelegationManagerOperatorSharesDecreasedIterator, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _ContractDelegationManager.contract.FilterLogs(opts, "OperatorSharesDecreased", operatorRule) + if err != nil { + return nil, err + } + return &ContractDelegationManagerOperatorSharesDecreasedIterator{contract: _ContractDelegationManager.contract, event: "OperatorSharesDecreased", logs: logs, sub: sub}, nil +} + +// WatchOperatorSharesDecreased is a free log subscription operation binding the contract event 0x6909600037b75d7b4733aedd815442b5ec018a827751c832aaff64eba5d6d2dd. +// +// Solidity: event OperatorSharesDecreased(address indexed operator, address staker, address strategy, uint256 shares) +func (_ContractDelegationManager *ContractDelegationManagerFilterer) WatchOperatorSharesDecreased(opts *bind.WatchOpts, sink chan<- *ContractDelegationManagerOperatorSharesDecreased, operator []common.Address) (event.Subscription, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _ContractDelegationManager.contract.WatchLogs(opts, "OperatorSharesDecreased", operatorRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractDelegationManagerOperatorSharesDecreased) + if err := _ContractDelegationManager.contract.UnpackLog(event, "OperatorSharesDecreased", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseOperatorSharesDecreased is a log parse operation binding the contract event 0x6909600037b75d7b4733aedd815442b5ec018a827751c832aaff64eba5d6d2dd. +// +// Solidity: event OperatorSharesDecreased(address indexed operator, address staker, address strategy, uint256 shares) +func (_ContractDelegationManager *ContractDelegationManagerFilterer) ParseOperatorSharesDecreased(log types.Log) (*ContractDelegationManagerOperatorSharesDecreased, error) { + event := new(ContractDelegationManagerOperatorSharesDecreased) + if err := _ContractDelegationManager.contract.UnpackLog(event, "OperatorSharesDecreased", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ContractDelegationManagerOperatorSharesIncreasedIterator is returned from FilterOperatorSharesIncreased and is used to iterate over the raw logs and unpacked data for OperatorSharesIncreased events raised by the ContractDelegationManager contract. +type ContractDelegationManagerOperatorSharesIncreasedIterator struct { + Event *ContractDelegationManagerOperatorSharesIncreased // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractDelegationManagerOperatorSharesIncreasedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractDelegationManagerOperatorSharesIncreased) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractDelegationManagerOperatorSharesIncreased) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractDelegationManagerOperatorSharesIncreasedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractDelegationManagerOperatorSharesIncreasedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractDelegationManagerOperatorSharesIncreased represents a OperatorSharesIncreased event raised by the ContractDelegationManager contract. +type ContractDelegationManagerOperatorSharesIncreased struct { + Operator common.Address + Staker common.Address + Strategy common.Address + Shares *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOperatorSharesIncreased is a free log retrieval operation binding the contract event 0x1ec042c965e2edd7107b51188ee0f383e22e76179041ab3a9d18ff151405166c. +// +// Solidity: event OperatorSharesIncreased(address indexed operator, address staker, address strategy, uint256 shares) +func (_ContractDelegationManager *ContractDelegationManagerFilterer) FilterOperatorSharesIncreased(opts *bind.FilterOpts, operator []common.Address) (*ContractDelegationManagerOperatorSharesIncreasedIterator, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _ContractDelegationManager.contract.FilterLogs(opts, "OperatorSharesIncreased", operatorRule) + if err != nil { + return nil, err + } + return &ContractDelegationManagerOperatorSharesIncreasedIterator{contract: _ContractDelegationManager.contract, event: "OperatorSharesIncreased", logs: logs, sub: sub}, nil +} + +// WatchOperatorSharesIncreased is a free log subscription operation binding the contract event 0x1ec042c965e2edd7107b51188ee0f383e22e76179041ab3a9d18ff151405166c. +// +// Solidity: event OperatorSharesIncreased(address indexed operator, address staker, address strategy, uint256 shares) +func (_ContractDelegationManager *ContractDelegationManagerFilterer) WatchOperatorSharesIncreased(opts *bind.WatchOpts, sink chan<- *ContractDelegationManagerOperatorSharesIncreased, operator []common.Address) (event.Subscription, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _ContractDelegationManager.contract.WatchLogs(opts, "OperatorSharesIncreased", operatorRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractDelegationManagerOperatorSharesIncreased) + if err := _ContractDelegationManager.contract.UnpackLog(event, "OperatorSharesIncreased", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseOperatorSharesIncreased is a log parse operation binding the contract event 0x1ec042c965e2edd7107b51188ee0f383e22e76179041ab3a9d18ff151405166c. +// +// Solidity: event OperatorSharesIncreased(address indexed operator, address staker, address strategy, uint256 shares) +func (_ContractDelegationManager *ContractDelegationManagerFilterer) ParseOperatorSharesIncreased(log types.Log) (*ContractDelegationManagerOperatorSharesIncreased, error) { + event := new(ContractDelegationManagerOperatorSharesIncreased) + if err := _ContractDelegationManager.contract.UnpackLog(event, "OperatorSharesIncreased", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ContractDelegationManagerOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the ContractDelegationManager contract. +type ContractDelegationManagerOwnershipTransferredIterator struct { + Event *ContractDelegationManagerOwnershipTransferred // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractDelegationManagerOwnershipTransferredIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractDelegationManagerOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractDelegationManagerOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractDelegationManagerOwnershipTransferredIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractDelegationManagerOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractDelegationManagerOwnershipTransferred represents a OwnershipTransferred event raised by the ContractDelegationManager contract. +type ContractDelegationManagerOwnershipTransferred struct { + PreviousOwner common.Address + NewOwner common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOwnershipTransferred is a free log retrieval operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_ContractDelegationManager *ContractDelegationManagerFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*ContractDelegationManagerOwnershipTransferredIterator, error) { + + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + } + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) + } + + logs, sub, err := _ContractDelegationManager.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return &ContractDelegationManagerOwnershipTransferredIterator{contract: _ContractDelegationManager.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +// WatchOwnershipTransferred is a free log subscription operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_ContractDelegationManager *ContractDelegationManagerFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ContractDelegationManagerOwnershipTransferred, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { + + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + } + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) + } + + logs, sub, err := _ContractDelegationManager.contract.WatchLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractDelegationManagerOwnershipTransferred) + if err := _ContractDelegationManager.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseOwnershipTransferred is a log parse operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_ContractDelegationManager *ContractDelegationManagerFilterer) ParseOwnershipTransferred(log types.Log) (*ContractDelegationManagerOwnershipTransferred, error) { + event := new(ContractDelegationManagerOwnershipTransferred) + if err := _ContractDelegationManager.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ContractDelegationManagerPausedIterator is returned from FilterPaused and is used to iterate over the raw logs and unpacked data for Paused events raised by the ContractDelegationManager contract. +type ContractDelegationManagerPausedIterator struct { + Event *ContractDelegationManagerPaused // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractDelegationManagerPausedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractDelegationManagerPaused) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractDelegationManagerPaused) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractDelegationManagerPausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractDelegationManagerPausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractDelegationManagerPaused represents a Paused event raised by the ContractDelegationManager contract. +type ContractDelegationManagerPaused struct { + Account common.Address + NewPausedStatus *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterPaused is a free log retrieval operation binding the contract event 0xab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d. +// +// Solidity: event Paused(address indexed account, uint256 newPausedStatus) +func (_ContractDelegationManager *ContractDelegationManagerFilterer) FilterPaused(opts *bind.FilterOpts, account []common.Address) (*ContractDelegationManagerPausedIterator, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _ContractDelegationManager.contract.FilterLogs(opts, "Paused", accountRule) + if err != nil { + return nil, err + } + return &ContractDelegationManagerPausedIterator{contract: _ContractDelegationManager.contract, event: "Paused", logs: logs, sub: sub}, nil +} + +// WatchPaused is a free log subscription operation binding the contract event 0xab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d. +// +// Solidity: event Paused(address indexed account, uint256 newPausedStatus) +func (_ContractDelegationManager *ContractDelegationManagerFilterer) WatchPaused(opts *bind.WatchOpts, sink chan<- *ContractDelegationManagerPaused, account []common.Address) (event.Subscription, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _ContractDelegationManager.contract.WatchLogs(opts, "Paused", accountRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractDelegationManagerPaused) + if err := _ContractDelegationManager.contract.UnpackLog(event, "Paused", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParsePaused is a log parse operation binding the contract event 0xab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d. +// +// Solidity: event Paused(address indexed account, uint256 newPausedStatus) +func (_ContractDelegationManager *ContractDelegationManagerFilterer) ParsePaused(log types.Log) (*ContractDelegationManagerPaused, error) { + event := new(ContractDelegationManagerPaused) + if err := _ContractDelegationManager.contract.UnpackLog(event, "Paused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ContractDelegationManagerPauserRegistrySetIterator is returned from FilterPauserRegistrySet and is used to iterate over the raw logs and unpacked data for PauserRegistrySet events raised by the ContractDelegationManager contract. +type ContractDelegationManagerPauserRegistrySetIterator struct { + Event *ContractDelegationManagerPauserRegistrySet // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractDelegationManagerPauserRegistrySetIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractDelegationManagerPauserRegistrySet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractDelegationManagerPauserRegistrySet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractDelegationManagerPauserRegistrySetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractDelegationManagerPauserRegistrySetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractDelegationManagerPauserRegistrySet represents a PauserRegistrySet event raised by the ContractDelegationManager contract. +type ContractDelegationManagerPauserRegistrySet struct { + PauserRegistry common.Address + NewPauserRegistry common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterPauserRegistrySet is a free log retrieval operation binding the contract event 0x6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6. +// +// Solidity: event PauserRegistrySet(address pauserRegistry, address newPauserRegistry) +func (_ContractDelegationManager *ContractDelegationManagerFilterer) FilterPauserRegistrySet(opts *bind.FilterOpts) (*ContractDelegationManagerPauserRegistrySetIterator, error) { + + logs, sub, err := _ContractDelegationManager.contract.FilterLogs(opts, "PauserRegistrySet") + if err != nil { + return nil, err + } + return &ContractDelegationManagerPauserRegistrySetIterator{contract: _ContractDelegationManager.contract, event: "PauserRegistrySet", logs: logs, sub: sub}, nil +} + +// WatchPauserRegistrySet is a free log subscription operation binding the contract event 0x6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6. +// +// Solidity: event PauserRegistrySet(address pauserRegistry, address newPauserRegistry) +func (_ContractDelegationManager *ContractDelegationManagerFilterer) WatchPauserRegistrySet(opts *bind.WatchOpts, sink chan<- *ContractDelegationManagerPauserRegistrySet) (event.Subscription, error) { + + logs, sub, err := _ContractDelegationManager.contract.WatchLogs(opts, "PauserRegistrySet") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractDelegationManagerPauserRegistrySet) + if err := _ContractDelegationManager.contract.UnpackLog(event, "PauserRegistrySet", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParsePauserRegistrySet is a log parse operation binding the contract event 0x6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6. +// +// Solidity: event PauserRegistrySet(address pauserRegistry, address newPauserRegistry) +func (_ContractDelegationManager *ContractDelegationManagerFilterer) ParsePauserRegistrySet(log types.Log) (*ContractDelegationManagerPauserRegistrySet, error) { + event := new(ContractDelegationManagerPauserRegistrySet) + if err := _ContractDelegationManager.contract.UnpackLog(event, "PauserRegistrySet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ContractDelegationManagerStakerDelegatedIterator is returned from FilterStakerDelegated and is used to iterate over the raw logs and unpacked data for StakerDelegated events raised by the ContractDelegationManager contract. +type ContractDelegationManagerStakerDelegatedIterator struct { + Event *ContractDelegationManagerStakerDelegated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractDelegationManagerStakerDelegatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractDelegationManagerStakerDelegated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractDelegationManagerStakerDelegated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractDelegationManagerStakerDelegatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractDelegationManagerStakerDelegatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractDelegationManagerStakerDelegated represents a StakerDelegated event raised by the ContractDelegationManager contract. +type ContractDelegationManagerStakerDelegated struct { + Staker common.Address + Operator common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterStakerDelegated is a free log retrieval operation binding the contract event 0xc3ee9f2e5fda98e8066a1f745b2df9285f416fe98cf2559cd21484b3d8743304. +// +// Solidity: event StakerDelegated(address indexed staker, address indexed operator) +func (_ContractDelegationManager *ContractDelegationManagerFilterer) FilterStakerDelegated(opts *bind.FilterOpts, staker []common.Address, operator []common.Address) (*ContractDelegationManagerStakerDelegatedIterator, error) { + + var stakerRule []interface{} + for _, stakerItem := range staker { + stakerRule = append(stakerRule, stakerItem) + } + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _ContractDelegationManager.contract.FilterLogs(opts, "StakerDelegated", stakerRule, operatorRule) + if err != nil { + return nil, err + } + return &ContractDelegationManagerStakerDelegatedIterator{contract: _ContractDelegationManager.contract, event: "StakerDelegated", logs: logs, sub: sub}, nil +} + +// WatchStakerDelegated is a free log subscription operation binding the contract event 0xc3ee9f2e5fda98e8066a1f745b2df9285f416fe98cf2559cd21484b3d8743304. +// +// Solidity: event StakerDelegated(address indexed staker, address indexed operator) +func (_ContractDelegationManager *ContractDelegationManagerFilterer) WatchStakerDelegated(opts *bind.WatchOpts, sink chan<- *ContractDelegationManagerStakerDelegated, staker []common.Address, operator []common.Address) (event.Subscription, error) { + + var stakerRule []interface{} + for _, stakerItem := range staker { + stakerRule = append(stakerRule, stakerItem) + } + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _ContractDelegationManager.contract.WatchLogs(opts, "StakerDelegated", stakerRule, operatorRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractDelegationManagerStakerDelegated) + if err := _ContractDelegationManager.contract.UnpackLog(event, "StakerDelegated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseStakerDelegated is a log parse operation binding the contract event 0xc3ee9f2e5fda98e8066a1f745b2df9285f416fe98cf2559cd21484b3d8743304. +// +// Solidity: event StakerDelegated(address indexed staker, address indexed operator) +func (_ContractDelegationManager *ContractDelegationManagerFilterer) ParseStakerDelegated(log types.Log) (*ContractDelegationManagerStakerDelegated, error) { + event := new(ContractDelegationManagerStakerDelegated) + if err := _ContractDelegationManager.contract.UnpackLog(event, "StakerDelegated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ContractDelegationManagerStakerForceUndelegatedIterator is returned from FilterStakerForceUndelegated and is used to iterate over the raw logs and unpacked data for StakerForceUndelegated events raised by the ContractDelegationManager contract. +type ContractDelegationManagerStakerForceUndelegatedIterator struct { + Event *ContractDelegationManagerStakerForceUndelegated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractDelegationManagerStakerForceUndelegatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractDelegationManagerStakerForceUndelegated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractDelegationManagerStakerForceUndelegated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractDelegationManagerStakerForceUndelegatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractDelegationManagerStakerForceUndelegatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractDelegationManagerStakerForceUndelegated represents a StakerForceUndelegated event raised by the ContractDelegationManager contract. +type ContractDelegationManagerStakerForceUndelegated struct { + Staker common.Address + Operator common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterStakerForceUndelegated is a free log retrieval operation binding the contract event 0xf0eddf07e6ea14f388b47e1e94a0f464ecbd9eed4171130e0fc0e99fb4030a8a. +// +// Solidity: event StakerForceUndelegated(address indexed staker, address indexed operator) +func (_ContractDelegationManager *ContractDelegationManagerFilterer) FilterStakerForceUndelegated(opts *bind.FilterOpts, staker []common.Address, operator []common.Address) (*ContractDelegationManagerStakerForceUndelegatedIterator, error) { + + var stakerRule []interface{} + for _, stakerItem := range staker { + stakerRule = append(stakerRule, stakerItem) + } + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _ContractDelegationManager.contract.FilterLogs(opts, "StakerForceUndelegated", stakerRule, operatorRule) + if err != nil { + return nil, err + } + return &ContractDelegationManagerStakerForceUndelegatedIterator{contract: _ContractDelegationManager.contract, event: "StakerForceUndelegated", logs: logs, sub: sub}, nil +} + +// WatchStakerForceUndelegated is a free log subscription operation binding the contract event 0xf0eddf07e6ea14f388b47e1e94a0f464ecbd9eed4171130e0fc0e99fb4030a8a. +// +// Solidity: event StakerForceUndelegated(address indexed staker, address indexed operator) +func (_ContractDelegationManager *ContractDelegationManagerFilterer) WatchStakerForceUndelegated(opts *bind.WatchOpts, sink chan<- *ContractDelegationManagerStakerForceUndelegated, staker []common.Address, operator []common.Address) (event.Subscription, error) { + + var stakerRule []interface{} + for _, stakerItem := range staker { + stakerRule = append(stakerRule, stakerItem) + } + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _ContractDelegationManager.contract.WatchLogs(opts, "StakerForceUndelegated", stakerRule, operatorRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractDelegationManagerStakerForceUndelegated) + if err := _ContractDelegationManager.contract.UnpackLog(event, "StakerForceUndelegated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseStakerForceUndelegated is a log parse operation binding the contract event 0xf0eddf07e6ea14f388b47e1e94a0f464ecbd9eed4171130e0fc0e99fb4030a8a. +// +// Solidity: event StakerForceUndelegated(address indexed staker, address indexed operator) +func (_ContractDelegationManager *ContractDelegationManagerFilterer) ParseStakerForceUndelegated(log types.Log) (*ContractDelegationManagerStakerForceUndelegated, error) { + event := new(ContractDelegationManagerStakerForceUndelegated) + if err := _ContractDelegationManager.contract.UnpackLog(event, "StakerForceUndelegated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ContractDelegationManagerStakerUndelegatedIterator is returned from FilterStakerUndelegated and is used to iterate over the raw logs and unpacked data for StakerUndelegated events raised by the ContractDelegationManager contract. +type ContractDelegationManagerStakerUndelegatedIterator struct { + Event *ContractDelegationManagerStakerUndelegated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractDelegationManagerStakerUndelegatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractDelegationManagerStakerUndelegated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractDelegationManagerStakerUndelegated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractDelegationManagerStakerUndelegatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractDelegationManagerStakerUndelegatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractDelegationManagerStakerUndelegated represents a StakerUndelegated event raised by the ContractDelegationManager contract. +type ContractDelegationManagerStakerUndelegated struct { + Staker common.Address + Operator common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterStakerUndelegated is a free log retrieval operation binding the contract event 0xfee30966a256b71e14bc0ebfc94315e28ef4a97a7131a9e2b7a310a73af44676. +// +// Solidity: event StakerUndelegated(address indexed staker, address indexed operator) +func (_ContractDelegationManager *ContractDelegationManagerFilterer) FilterStakerUndelegated(opts *bind.FilterOpts, staker []common.Address, operator []common.Address) (*ContractDelegationManagerStakerUndelegatedIterator, error) { + + var stakerRule []interface{} + for _, stakerItem := range staker { + stakerRule = append(stakerRule, stakerItem) + } + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _ContractDelegationManager.contract.FilterLogs(opts, "StakerUndelegated", stakerRule, operatorRule) + if err != nil { + return nil, err + } + return &ContractDelegationManagerStakerUndelegatedIterator{contract: _ContractDelegationManager.contract, event: "StakerUndelegated", logs: logs, sub: sub}, nil +} + +// WatchStakerUndelegated is a free log subscription operation binding the contract event 0xfee30966a256b71e14bc0ebfc94315e28ef4a97a7131a9e2b7a310a73af44676. +// +// Solidity: event StakerUndelegated(address indexed staker, address indexed operator) +func (_ContractDelegationManager *ContractDelegationManagerFilterer) WatchStakerUndelegated(opts *bind.WatchOpts, sink chan<- *ContractDelegationManagerStakerUndelegated, staker []common.Address, operator []common.Address) (event.Subscription, error) { + + var stakerRule []interface{} + for _, stakerItem := range staker { + stakerRule = append(stakerRule, stakerItem) + } + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _ContractDelegationManager.contract.WatchLogs(opts, "StakerUndelegated", stakerRule, operatorRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractDelegationManagerStakerUndelegated) + if err := _ContractDelegationManager.contract.UnpackLog(event, "StakerUndelegated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseStakerUndelegated is a log parse operation binding the contract event 0xfee30966a256b71e14bc0ebfc94315e28ef4a97a7131a9e2b7a310a73af44676. +// +// Solidity: event StakerUndelegated(address indexed staker, address indexed operator) +func (_ContractDelegationManager *ContractDelegationManagerFilterer) ParseStakerUndelegated(log types.Log) (*ContractDelegationManagerStakerUndelegated, error) { + event := new(ContractDelegationManagerStakerUndelegated) + if err := _ContractDelegationManager.contract.UnpackLog(event, "StakerUndelegated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ContractDelegationManagerStrategyWithdrawalDelayBlocksSetIterator is returned from FilterStrategyWithdrawalDelayBlocksSet and is used to iterate over the raw logs and unpacked data for StrategyWithdrawalDelayBlocksSet events raised by the ContractDelegationManager contract. +type ContractDelegationManagerStrategyWithdrawalDelayBlocksSetIterator struct { + Event *ContractDelegationManagerStrategyWithdrawalDelayBlocksSet // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractDelegationManagerStrategyWithdrawalDelayBlocksSetIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractDelegationManagerStrategyWithdrawalDelayBlocksSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractDelegationManagerStrategyWithdrawalDelayBlocksSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractDelegationManagerStrategyWithdrawalDelayBlocksSetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractDelegationManagerStrategyWithdrawalDelayBlocksSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractDelegationManagerStrategyWithdrawalDelayBlocksSet represents a StrategyWithdrawalDelayBlocksSet event raised by the ContractDelegationManager contract. +type ContractDelegationManagerStrategyWithdrawalDelayBlocksSet struct { + Strategy common.Address + PreviousValue *big.Int + NewValue *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterStrategyWithdrawalDelayBlocksSet is a free log retrieval operation binding the contract event 0x0e7efa738e8b0ce6376a0c1af471655540d2e9a81647d7b09ed823018426576d. +// +// Solidity: event StrategyWithdrawalDelayBlocksSet(address strategy, uint256 previousValue, uint256 newValue) +func (_ContractDelegationManager *ContractDelegationManagerFilterer) FilterStrategyWithdrawalDelayBlocksSet(opts *bind.FilterOpts) (*ContractDelegationManagerStrategyWithdrawalDelayBlocksSetIterator, error) { + + logs, sub, err := _ContractDelegationManager.contract.FilterLogs(opts, "StrategyWithdrawalDelayBlocksSet") + if err != nil { + return nil, err + } + return &ContractDelegationManagerStrategyWithdrawalDelayBlocksSetIterator{contract: _ContractDelegationManager.contract, event: "StrategyWithdrawalDelayBlocksSet", logs: logs, sub: sub}, nil +} + +// WatchStrategyWithdrawalDelayBlocksSet is a free log subscription operation binding the contract event 0x0e7efa738e8b0ce6376a0c1af471655540d2e9a81647d7b09ed823018426576d. +// +// Solidity: event StrategyWithdrawalDelayBlocksSet(address strategy, uint256 previousValue, uint256 newValue) +func (_ContractDelegationManager *ContractDelegationManagerFilterer) WatchStrategyWithdrawalDelayBlocksSet(opts *bind.WatchOpts, sink chan<- *ContractDelegationManagerStrategyWithdrawalDelayBlocksSet) (event.Subscription, error) { + + logs, sub, err := _ContractDelegationManager.contract.WatchLogs(opts, "StrategyWithdrawalDelayBlocksSet") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractDelegationManagerStrategyWithdrawalDelayBlocksSet) + if err := _ContractDelegationManager.contract.UnpackLog(event, "StrategyWithdrawalDelayBlocksSet", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseStrategyWithdrawalDelayBlocksSet is a log parse operation binding the contract event 0x0e7efa738e8b0ce6376a0c1af471655540d2e9a81647d7b09ed823018426576d. +// +// Solidity: event StrategyWithdrawalDelayBlocksSet(address strategy, uint256 previousValue, uint256 newValue) +func (_ContractDelegationManager *ContractDelegationManagerFilterer) ParseStrategyWithdrawalDelayBlocksSet(log types.Log) (*ContractDelegationManagerStrategyWithdrawalDelayBlocksSet, error) { + event := new(ContractDelegationManagerStrategyWithdrawalDelayBlocksSet) + if err := _ContractDelegationManager.contract.UnpackLog(event, "StrategyWithdrawalDelayBlocksSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ContractDelegationManagerUnpausedIterator is returned from FilterUnpaused and is used to iterate over the raw logs and unpacked data for Unpaused events raised by the ContractDelegationManager contract. +type ContractDelegationManagerUnpausedIterator struct { + Event *ContractDelegationManagerUnpaused // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractDelegationManagerUnpausedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractDelegationManagerUnpaused) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractDelegationManagerUnpaused) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractDelegationManagerUnpausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractDelegationManagerUnpausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractDelegationManagerUnpaused represents a Unpaused event raised by the ContractDelegationManager contract. +type ContractDelegationManagerUnpaused struct { + Account common.Address + NewPausedStatus *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUnpaused is a free log retrieval operation binding the contract event 0x3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c. +// +// Solidity: event Unpaused(address indexed account, uint256 newPausedStatus) +func (_ContractDelegationManager *ContractDelegationManagerFilterer) FilterUnpaused(opts *bind.FilterOpts, account []common.Address) (*ContractDelegationManagerUnpausedIterator, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _ContractDelegationManager.contract.FilterLogs(opts, "Unpaused", accountRule) + if err != nil { + return nil, err + } + return &ContractDelegationManagerUnpausedIterator{contract: _ContractDelegationManager.contract, event: "Unpaused", logs: logs, sub: sub}, nil +} + +// WatchUnpaused is a free log subscription operation binding the contract event 0x3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c. +// +// Solidity: event Unpaused(address indexed account, uint256 newPausedStatus) +func (_ContractDelegationManager *ContractDelegationManagerFilterer) WatchUnpaused(opts *bind.WatchOpts, sink chan<- *ContractDelegationManagerUnpaused, account []common.Address) (event.Subscription, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _ContractDelegationManager.contract.WatchLogs(opts, "Unpaused", accountRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractDelegationManagerUnpaused) + if err := _ContractDelegationManager.contract.UnpackLog(event, "Unpaused", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseUnpaused is a log parse operation binding the contract event 0x3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c. +// +// Solidity: event Unpaused(address indexed account, uint256 newPausedStatus) +func (_ContractDelegationManager *ContractDelegationManagerFilterer) ParseUnpaused(log types.Log) (*ContractDelegationManagerUnpaused, error) { + event := new(ContractDelegationManagerUnpaused) + if err := _ContractDelegationManager.contract.UnpackLog(event, "Unpaused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ContractDelegationManagerWithdrawalCompletedIterator is returned from FilterWithdrawalCompleted and is used to iterate over the raw logs and unpacked data for WithdrawalCompleted events raised by the ContractDelegationManager contract. +type ContractDelegationManagerWithdrawalCompletedIterator struct { + Event *ContractDelegationManagerWithdrawalCompleted // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractDelegationManagerWithdrawalCompletedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractDelegationManagerWithdrawalCompleted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractDelegationManagerWithdrawalCompleted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractDelegationManagerWithdrawalCompletedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractDelegationManagerWithdrawalCompletedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractDelegationManagerWithdrawalCompleted represents a WithdrawalCompleted event raised by the ContractDelegationManager contract. +type ContractDelegationManagerWithdrawalCompleted struct { + WithdrawalRoot [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdrawalCompleted is a free log retrieval operation binding the contract event 0xc97098c2f658800b4df29001527f7324bcdffcf6e8751a699ab920a1eced5b1d. +// +// Solidity: event WithdrawalCompleted(bytes32 withdrawalRoot) +func (_ContractDelegationManager *ContractDelegationManagerFilterer) FilterWithdrawalCompleted(opts *bind.FilterOpts) (*ContractDelegationManagerWithdrawalCompletedIterator, error) { + + logs, sub, err := _ContractDelegationManager.contract.FilterLogs(opts, "WithdrawalCompleted") + if err != nil { + return nil, err + } + return &ContractDelegationManagerWithdrawalCompletedIterator{contract: _ContractDelegationManager.contract, event: "WithdrawalCompleted", logs: logs, sub: sub}, nil +} + +// WatchWithdrawalCompleted is a free log subscription operation binding the contract event 0xc97098c2f658800b4df29001527f7324bcdffcf6e8751a699ab920a1eced5b1d. +// +// Solidity: event WithdrawalCompleted(bytes32 withdrawalRoot) +func (_ContractDelegationManager *ContractDelegationManagerFilterer) WatchWithdrawalCompleted(opts *bind.WatchOpts, sink chan<- *ContractDelegationManagerWithdrawalCompleted) (event.Subscription, error) { + + logs, sub, err := _ContractDelegationManager.contract.WatchLogs(opts, "WithdrawalCompleted") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractDelegationManagerWithdrawalCompleted) + if err := _ContractDelegationManager.contract.UnpackLog(event, "WithdrawalCompleted", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseWithdrawalCompleted is a log parse operation binding the contract event 0xc97098c2f658800b4df29001527f7324bcdffcf6e8751a699ab920a1eced5b1d. +// +// Solidity: event WithdrawalCompleted(bytes32 withdrawalRoot) +func (_ContractDelegationManager *ContractDelegationManagerFilterer) ParseWithdrawalCompleted(log types.Log) (*ContractDelegationManagerWithdrawalCompleted, error) { + event := new(ContractDelegationManagerWithdrawalCompleted) + if err := _ContractDelegationManager.contract.UnpackLog(event, "WithdrawalCompleted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ContractDelegationManagerWithdrawalMigratedIterator is returned from FilterWithdrawalMigrated and is used to iterate over the raw logs and unpacked data for WithdrawalMigrated events raised by the ContractDelegationManager contract. +type ContractDelegationManagerWithdrawalMigratedIterator struct { + Event *ContractDelegationManagerWithdrawalMigrated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractDelegationManagerWithdrawalMigratedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractDelegationManagerWithdrawalMigrated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractDelegationManagerWithdrawalMigrated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractDelegationManagerWithdrawalMigratedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractDelegationManagerWithdrawalMigratedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractDelegationManagerWithdrawalMigrated represents a WithdrawalMigrated event raised by the ContractDelegationManager contract. +type ContractDelegationManagerWithdrawalMigrated struct { + OldWithdrawalRoot [32]byte + NewWithdrawalRoot [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdrawalMigrated is a free log retrieval operation binding the contract event 0xdc00758b65eef71dc3780c04ebe36cab6bdb266c3a698187e29e0f0dca012630. +// +// Solidity: event WithdrawalMigrated(bytes32 oldWithdrawalRoot, bytes32 newWithdrawalRoot) +func (_ContractDelegationManager *ContractDelegationManagerFilterer) FilterWithdrawalMigrated(opts *bind.FilterOpts) (*ContractDelegationManagerWithdrawalMigratedIterator, error) { + + logs, sub, err := _ContractDelegationManager.contract.FilterLogs(opts, "WithdrawalMigrated") + if err != nil { + return nil, err + } + return &ContractDelegationManagerWithdrawalMigratedIterator{contract: _ContractDelegationManager.contract, event: "WithdrawalMigrated", logs: logs, sub: sub}, nil +} + +// WatchWithdrawalMigrated is a free log subscription operation binding the contract event 0xdc00758b65eef71dc3780c04ebe36cab6bdb266c3a698187e29e0f0dca012630. +// +// Solidity: event WithdrawalMigrated(bytes32 oldWithdrawalRoot, bytes32 newWithdrawalRoot) +func (_ContractDelegationManager *ContractDelegationManagerFilterer) WatchWithdrawalMigrated(opts *bind.WatchOpts, sink chan<- *ContractDelegationManagerWithdrawalMigrated) (event.Subscription, error) { + + logs, sub, err := _ContractDelegationManager.contract.WatchLogs(opts, "WithdrawalMigrated") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractDelegationManagerWithdrawalMigrated) + if err := _ContractDelegationManager.contract.UnpackLog(event, "WithdrawalMigrated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseWithdrawalMigrated is a log parse operation binding the contract event 0xdc00758b65eef71dc3780c04ebe36cab6bdb266c3a698187e29e0f0dca012630. +// +// Solidity: event WithdrawalMigrated(bytes32 oldWithdrawalRoot, bytes32 newWithdrawalRoot) +func (_ContractDelegationManager *ContractDelegationManagerFilterer) ParseWithdrawalMigrated(log types.Log) (*ContractDelegationManagerWithdrawalMigrated, error) { + event := new(ContractDelegationManagerWithdrawalMigrated) + if err := _ContractDelegationManager.contract.UnpackLog(event, "WithdrawalMigrated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ContractDelegationManagerWithdrawalQueuedIterator is returned from FilterWithdrawalQueued and is used to iterate over the raw logs and unpacked data for WithdrawalQueued events raised by the ContractDelegationManager contract. +type ContractDelegationManagerWithdrawalQueuedIterator struct { + Event *ContractDelegationManagerWithdrawalQueued // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractDelegationManagerWithdrawalQueuedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractDelegationManagerWithdrawalQueued) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractDelegationManagerWithdrawalQueued) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractDelegationManagerWithdrawalQueuedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractDelegationManagerWithdrawalQueuedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractDelegationManagerWithdrawalQueued represents a WithdrawalQueued event raised by the ContractDelegationManager contract. +type ContractDelegationManagerWithdrawalQueued struct { + WithdrawalRoot [32]byte + Withdrawal IDelegationManagerWithdrawal + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdrawalQueued is a free log retrieval operation binding the contract event 0x9009ab153e8014fbfb02f2217f5cde7aa7f9ad734ae85ca3ee3f4ca2fdd499f9. +// +// Solidity: event WithdrawalQueued(bytes32 withdrawalRoot, (address,address,address,uint256,uint32,address[],uint256[]) withdrawal) +func (_ContractDelegationManager *ContractDelegationManagerFilterer) FilterWithdrawalQueued(opts *bind.FilterOpts) (*ContractDelegationManagerWithdrawalQueuedIterator, error) { + + logs, sub, err := _ContractDelegationManager.contract.FilterLogs(opts, "WithdrawalQueued") + if err != nil { + return nil, err + } + return &ContractDelegationManagerWithdrawalQueuedIterator{contract: _ContractDelegationManager.contract, event: "WithdrawalQueued", logs: logs, sub: sub}, nil +} + +// WatchWithdrawalQueued is a free log subscription operation binding the contract event 0x9009ab153e8014fbfb02f2217f5cde7aa7f9ad734ae85ca3ee3f4ca2fdd499f9. +// +// Solidity: event WithdrawalQueued(bytes32 withdrawalRoot, (address,address,address,uint256,uint32,address[],uint256[]) withdrawal) +func (_ContractDelegationManager *ContractDelegationManagerFilterer) WatchWithdrawalQueued(opts *bind.WatchOpts, sink chan<- *ContractDelegationManagerWithdrawalQueued) (event.Subscription, error) { + + logs, sub, err := _ContractDelegationManager.contract.WatchLogs(opts, "WithdrawalQueued") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractDelegationManagerWithdrawalQueued) + if err := _ContractDelegationManager.contract.UnpackLog(event, "WithdrawalQueued", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseWithdrawalQueued is a log parse operation binding the contract event 0x9009ab153e8014fbfb02f2217f5cde7aa7f9ad734ae85ca3ee3f4ca2fdd499f9. +// +// Solidity: event WithdrawalQueued(bytes32 withdrawalRoot, (address,address,address,uint256,uint32,address[],uint256[]) withdrawal) +func (_ContractDelegationManager *ContractDelegationManagerFilterer) ParseWithdrawalQueued(log types.Log) (*ContractDelegationManagerWithdrawalQueued, error) { + event := new(ContractDelegationManagerWithdrawalQueued) + if err := _ContractDelegationManager.contract.UnpackLog(event, "WithdrawalQueued", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/contracts/bindings/EigenDAServiceManager/binding.go b/contracts/bindings/EigenDAServiceManager/binding.go index 6fc4dbd5f3..3b283130fe 100644 --- a/contracts/bindings/EigenDAServiceManager/binding.go +++ b/contracts/bindings/EigenDAServiceManager/binding.go @@ -67,10 +67,17 @@ type IEigenDAServiceManagerBatchHeader struct { ReferenceBlockNumber uint32 } +// ISignatureUtilsSignatureWithSaltAndExpiry is an auto generated low-level Go binding around an user-defined struct. +type ISignatureUtilsSignatureWithSaltAndExpiry struct { + Signature []byte + Salt [32]byte + Expiry *big.Int +} + // ContractEigenDAServiceManagerMetaData contains all meta data concerning the ContractEigenDAServiceManager contract. var ContractEigenDAServiceManagerMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"contractIBLSRegistryCoordinatorWithIndices\",\"name\":\"_registryCoordinator\",\"type\":\"address\"},{\"internalType\":\"contractIStrategyManager\",\"name\":\"_strategyManager\",\"type\":\"address\"},{\"internalType\":\"contractIDelegationManager\",\"name\":\"_delegationMananger\",\"type\":\"address\"},{\"internalType\":\"contractISlasher\",\"name\":\"_slasher\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHeaderHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"batchId\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"fee\",\"type\":\"uint96\"}],\"name\":\"BatchConfirmed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"previousValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newValue\",\"type\":\"uint256\"}],\"name\":\"FeePerBytePerTimeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"FeeSetterChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPausedStatus\",\"type\":\"uint256\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contractIPauserRegistry\",\"name\":\"pauserRegistry\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"contractIPauserRegistry\",\"name\":\"newPauserRegistry\",\"type\":\"address\"}],\"name\":\"PauserRegistrySet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"PaymentManagerSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPausedStatus\",\"type\":\"uint256\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BLOCK_STALE_MEASURE\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STORE_DURATION_BLOCKS\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"THRESHOLD_DENOMINATOR\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batchId\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"name\":\"batchIdToBatchMetadataHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blsPubkeyRegistry\",\"outputs\":[{\"internalType\":\"contractIBLSPubkeyRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"totalBytes\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_feePerBytePerTime\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"storePeriodLength\",\"type\":\"uint32\"}],\"name\":\"calculateFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"quorumNumbers\",\"type\":\"bytes\"},{\"internalType\":\"uint32\",\"name\":\"referenceBlockNumber\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"uint32[]\",\"name\":\"nonSignerQuorumBitmapIndices\",\"type\":\"uint32[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"structBN254.G1Point[]\",\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"structBN254.G1Point[]\",\"name\":\"quorumApks\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"X\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"Y\",\"type\":\"uint256[2]\"}],\"internalType\":\"structBN254.G2Point\",\"name\":\"apkG2\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"structBN254.G1Point\",\"name\":\"sigma\",\"type\":\"tuple\"},{\"internalType\":\"uint32[]\",\"name\":\"quorumApkIndices\",\"type\":\"uint32[]\"},{\"internalType\":\"uint32[]\",\"name\":\"totalStakeIndices\",\"type\":\"uint32[]\"},{\"internalType\":\"uint32[][]\",\"name\":\"nonSignerStakeIndices\",\"type\":\"uint32[][]\"}],\"internalType\":\"structIBLSSignatureChecker.NonSignerStakesAndSignature\",\"name\":\"nonSignerStakesAndSignature\",\"type\":\"tuple\"}],\"name\":\"checkSignatures\",\"outputs\":[{\"components\":[{\"internalType\":\"uint96[]\",\"name\":\"signedStakeForQuorum\",\"type\":\"uint96[]\"},{\"internalType\":\"uint96[]\",\"name\":\"totalStakeForQuorum\",\"type\":\"uint96[]\"}],\"internalType\":\"structIBLSSignatureChecker.QuorumStakeTotals\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"blobHeadersRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"quorumNumbers\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"quorumThresholdPercentages\",\"type\":\"bytes\"},{\"internalType\":\"uint32\",\"name\":\"referenceBlockNumber\",\"type\":\"uint32\"}],\"internalType\":\"structIEigenDAServiceManager.BatchHeader\",\"name\":\"batchHeader\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32[]\",\"name\":\"nonSignerQuorumBitmapIndices\",\"type\":\"uint32[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"structBN254.G1Point[]\",\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"structBN254.G1Point[]\",\"name\":\"quorumApks\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"X\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"Y\",\"type\":\"uint256[2]\"}],\"internalType\":\"structBN254.G2Point\",\"name\":\"apkG2\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"structBN254.G1Point\",\"name\":\"sigma\",\"type\":\"tuple\"},{\"internalType\":\"uint32[]\",\"name\":\"quorumApkIndices\",\"type\":\"uint32[]\"},{\"internalType\":\"uint32[]\",\"name\":\"totalStakeIndices\",\"type\":\"uint32[]\"},{\"internalType\":\"uint32[][]\",\"name\":\"nonSignerStakeIndices\",\"type\":\"uint32[][]\"}],\"internalType\":\"structIBLSSignatureChecker.NonSignerStakesAndSignature\",\"name\":\"nonSignerStakesAndSignature\",\"type\":\"tuple\"}],\"name\":\"confirmBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delegationManager\",\"outputs\":[{\"internalType\":\"contractIDelegationManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feePerBytePerTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeSetter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"freezeOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIPauserRegistry\",\"name\":\"_pauserRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_feePerBytePerTime\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_feeSetter\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestServeUntilBlock\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newPausedStatus\",\"type\":\"uint256\"}],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"index\",\"type\":\"uint8\"}],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauserRegistry\",\"outputs\":[{\"internalType\":\"contractIPauserRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"serveUntilBlock\",\"type\":\"uint32\"}],\"name\":\"recordFirstStakeUpdate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"serveUntilBlock\",\"type\":\"uint32\"}],\"name\":\"recordLastStakeUpdateAndRevokeSlashingAbility\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"updateBlock\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"serveUntilBlock\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"prevElement\",\"type\":\"uint256\"}],\"name\":\"recordStakeUpdate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"registryCoordinator\",\"outputs\":[{\"internalType\":\"contractIRegistryCoordinator\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_feePerBytePerTime\",\"type\":\"uint256\"}],\"name\":\"setFeePerBytePerTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_feeSetter\",\"type\":\"address\"}],\"name\":\"setFeeSetter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIPauserRegistry\",\"name\":\"newPauserRegistry\",\"type\":\"address\"}],\"name\":\"setPauserRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"slasher\",\"outputs\":[{\"internalType\":\"contractISlasher\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakeRegistry\",\"outputs\":[{\"internalType\":\"contractIStakeRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"strategyManager\",\"outputs\":[{\"internalType\":\"contractIStrategyManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"taskNumber\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"structBN254.G1Point\",\"name\":\"apk\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"X\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"Y\",\"type\":\"uint256[2]\"}],\"internalType\":\"structBN254.G2Point\",\"name\":\"apkG2\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"structBN254.G1Point\",\"name\":\"sigma\",\"type\":\"tuple\"}],\"name\":\"trySignatureAndApkVerification\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"pairingSuccessful\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"siganatureIsValid\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newPausedStatus\",\"type\":\"uint256\"}],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x6101406040523480156200001257600080fd5b5060405162003cad38038062003cad833981016040819052620000359162000244565b83806001600160a01b03166080816001600160a01b031681525050806001600160a01b031663683048356040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200008f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000b59190620002ac565b6001600160a01b031660a0816001600160a01b031681525050806001600160a01b0316633561deb16040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200010d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001339190620002ac565b6001600160a01b0390811660c0528481166101005283811660e052821661012052506200015f62000169565b50505050620002d3565b600054610100900460ff1615620001d65760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000229576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200024157600080fd5b50565b600080600080608085870312156200025b57600080fd5b845162000268816200022b565b60208601519094506200027b816200022b565b60408601519093506200028e816200022b565b6060860151909250620002a1816200022b565b939692955090935050565b600060208284031215620002bf57600080fd5b8151620002cc816200022b565b9392505050565b60805160a05160c05160e05161010051610120516139606200034d600039600061048d015260006102e2015260006104f60152600081816102900152610ac00152600081816103a4015281816110ce015261126f0152600081816103cb0152818161057101528181610f220152611ba401526139606000f3fe608060405234801561001057600080fd5b506004361061021c5760003560e01c8063715018a611610125578063b19805af116100ad578063ea4d3c9b1161007c578063ea4d3c9b146104f1578063eccbbfc914610518578063ef02445814610538578063f2fde38b14610540578063fabc1cbc1461055357600080fd5b8063b19805af146104af578063be203094146104c2578063c747075b146104d5578063d21eed4f146104e857600080fd5b80637794965a116100f45780637794965a1461043f57806387cf3ef414610452578063886f11951461046d5780638da5cb5b14610480578063b13442711461048857600080fd5b8063715018a61461040e57806372d18e8d14610416578063758f8dba14610424578063772eefe31461042c57600080fd5b80634972134a116101a85780635e033476116101775780635e0334761461038d5780635e8b3f2d14610397578063683048351461039f5780636d14a987146103c65780636efb4636146103ed57600080fd5b80634972134a14610325578063595c6a671461034a5780635ac86ab7146103525780635c975abb1461038557600080fd5b8063175d3205116101ef578063175d3205146102215780633561deb11461028b57806338c8ee64146102ca57806339b70e38146102dd57806339fe2e711461030457600080fd5b80630ffabbce1461022157806310d67a2f14610236578063136439dd14610249578063171f1d5b1461025c575b600080fd5b61023461022f366004612ba3565b610566565b005b610234610244366004612bd8565b6105bb565b610234610257366004612bfc565b61066e565b61026f61026a366004612d7a565b6107ad565b6040805192151583529015156020830152015b60405180910390f35b6102b27f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610282565b6102346102d8366004612bd8565b610937565b6102b27f000000000000000000000000000000000000000000000000000000000000000081565b610317610312366004612dcb565b61099d565b604051908152602001610282565b6066546103359063ffffffff1681565b60405163ffffffff9091168152602001610282565b6102346109c2565b610375610360366004612e00565b606954600160ff9092169190911b9081161490565b6040519015158152602001610282565b606954610317565b610335620189c081565b610335609681565b6102b27f000000000000000000000000000000000000000000000000000000000000000081565b6102b27f000000000000000000000000000000000000000000000000000000000000000081565b6104006103fb3660046130c5565b610a89565b6040516102829291906131b8565b610234611502565b60665463ffffffff16610335565b610335611516565b61023461043a366004612bfc565b611536565b61023461044d366004613201565b6115ac565b6066546102b29064010000000090046001600160a01b031681565b6068546102b2906001600160a01b031681565b6102b2611a41565b6102b27f000000000000000000000000000000000000000000000000000000000000000081565b6102346104bd366004612bd8565b611a55565b6102346104d036600461326c565b611a66565b6102346104e33660046132bf565b611b99565b61031760655481565b6102b27f000000000000000000000000000000000000000000000000000000000000000081565b61031761052636600461330c565b60676020526000908152604090205481565b610317606481565b61023461054e366004612bd8565b611be7565b610234610561366004612bfc565b611c5d565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105b75760405162461bcd60e51b81526004016105ae90613327565b60405180910390fd5b5050565b606860009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561060e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610632919061337d565b6001600160a01b0316336001600160a01b0316146106625760405162461bcd60e51b81526004016105ae9061339a565b61066b81611db9565b50565b60685460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156106b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106da91906133e4565b6106f65760405162461bcd60e51b81526004016105ae90613406565b6069548181161461076f5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c697479000000000000000060648201526084016105ae565b606981905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b60008060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001878760000151886020015188600001516000600281106107f5576107f561344e565b60200201518951600160200201518a6020015160006002811061081a5761081a61344e565b60200201518b602001516001600281106108365761083661344e565b602090810291909101518c518d8301516040516108939a99989796959401988952602089019790975260408801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200190565b6040516020818303038152906040528051906020012060001c6108b69190613464565b90506109296108cf6108c88884611eb0565b8690611f47565b6108d7611fdb565b61091f6109108561090a604080518082018252600080825260209182015281518083019092526001825260029082015290565b90611eb0565b6109198c61209b565b90611f47565b886201d4c061212b565b909890975095505050505050565b60405162461bcd60e51b815260206004820152603560248201527f456967656e4441536572766963654d616e616765722e667265657a654f706572604482015274185d1bdc8e881b9bdd081a5b5c1b195b595b9d1959605a1b60648201526084016105ae565b600063ffffffff82166109b0848661349c565b6109ba919061349c565b949350505050565b60685460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610a0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2e91906133e4565b610a4a5760405162461bcd60e51b81526004016105ae90613406565b600019606981905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b60408051808201909152606080825260208201526040805180820190915260008082526020820181905290815b86811015610cb3577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c1af6b24898984818110610aff57610aff61344e565b9050013560f81c60f81b60f81c888860a001518581518110610b2357610b2361344e565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa158015610b7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba391906134bb565b6001600160401b031916610bd386604001518381518110610bc657610bc661344e565b602002602001015161234f565b67ffffffffffffffff191614610c6f5760405162461bcd60e51b8152602060048201526061602482015260008051602061390b83398151915260448201527f7265733a2071756f72756d41706b206861736820696e2073746f72616765206460648201527f6f6573206e6f74206d617463682070726f76696465642071756f72756d2061706084820152606b60f81b60a482015260c4016105ae565b610c9f85604001518281518110610c8857610c8861344e565b602002602001015183611f4790919063ffffffff16565b915080610cab816134e6565b915050610ab6565b506040805180820190915260608082526020820152866001600160401b03811115610ce057610ce0612c15565b604051908082528060200260200182016040528015610d09578160200160208202803683370190505b506020820152866001600160401b03811115610d2757610d27612c15565b604051908082528060200260200182016040528015610d50578160200160208202803683370190505b5081526020850151516000906001600160401b03811115610d7357610d73612c15565b604051908082528060200260200182016040528015610d9c578160200160208202803683370190505b50905060008660200151516001600160401b03811115610dbe57610dbe612c15565b604051908082528060200260200182016040528015610de7578160200160208202803683370190505b5090506000610e2b8b8b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061239292505050565b905060005b88602001515181101561109657610e5689602001518281518110610bc657610bc661344e565b848281518110610e6857610e6861344e565b60209081029190910101528015610f205783610e85600183613501565b81518110610e9557610e9561344e565b602002602001015160001c848281518110610eb257610eb261344e565b602002602001015160001c11610f20576040805162461bcd60e51b815260206004820152602481019190915260008051602061390b83398151915260448201527f7265733a206e6f6e5369676e65725075626b657973206e6f7420736f7274656460648201526084016105ae565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633064620d858381518110610f6157610f6161344e565b60200260200101518c8c600001518581518110610f8057610f8061344e565b60200260200101516040518463ffffffff1660e01b8152600401610fbd9392919092835263ffffffff918216602084015216604082015260600190565b602060405180830381865afa158015610fda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffe9190613518565b6001600160c01b03168382815181106110195761101961344e565b60200260200101818152505061108261107b61104f848685815181106110415761104161344e565b6020026020010151166124fb565b6110758c6020015185815181106110685761106861344e565b602002602001015161252c565b906125c7565b8790611f47565b95508061108e816134e6565b915050610e30565b505060005b60ff81168a11156113d65760008b8b8360ff168181106110bd576110bd61344e565b9050013560f81c60f81b60f81c90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c8294c56828c8c60c001518660ff16815181106111165761111661344e565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa158015611172573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111969190613541565b85602001518360ff16815181106111af576111af61344e565b6001600160601b03909216602092830291909101820152850151805160ff84169081106111de576111de61344e565b602002602001015185600001518360ff16815181106111ff576111ff61344e565b60200260200101906001600160601b031690816001600160601b03168152505060005b8960200151518163ffffffff1610156113cc576000611268858363ffffffff16815181106112525761125261344e565b60200260200101518460ff161c60019081161490565b156113b9577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a43cde89848e898663ffffffff16815181106112b6576112b661344e565b60200260200101518f60e001518960ff16815181106112d7576112d761344e565b60200260200101518663ffffffff16815181106112f6576112f661344e565b60209081029190910101516040516001600160e01b031960e087901b16815260ff909416600485015263ffffffff92831660248501526044840191909152166064820152608401602060405180830381865afa15801561135a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137e9190613541565b8751805160ff87169081106113955761139561344e565b602002602001018181516113a9919061356a565b6001600160601b03169052506001015b50806113c481613592565b915050611222565b505060010161109b565b50506000806113ef8c868a606001518b608001516107ad565b91509150816114605760405162461bcd60e51b8152602060048201526043602482015260008051602061390b83398151915260448201527f7265733a2070616972696e6720707265636f6d70696c652063616c6c206661696064820152621b195960ea1b608482015260a4016105ae565b806114c15760405162461bcd60e51b8152602060048201526039602482015260008051602061390b83398151915260448201527f7265733a207369676e617475726520697320696e76616c69640000000000000060648201526084016105ae565b5050600087826040516020016114d89291906135b6565b60408051808303601f190181529190528051602090910120929b929a509198505050505050505050565b61150a6126ac565b611514600061270b565b565b60006096611527620189c0436135fe565b61153191906135fe565b905090565b60665464010000000090046001600160a01b031633146115a35760405162461bcd60e51b815260206004820152602260248201527f6f6e6c794665655365747465723a206e6f742066726f6d20666565207365747460448201526132b960f11b60648201526084016105ae565b61066b8161275d565b606954600090600190811614156116055760405162461bcd60e51b815260206004820152601960248201527f5061757361626c653a20696e646578206973207061757365640000000000000060448201526064016105ae565b3233146116825760405162461bcd60e51b815260206004820152605160248201526000805160206138eb83398151915260448201527f63683a2068656164657220616e64206e6f6e7369676e65722064617461206d75606482015270737420626520696e2063616c6c6461746160781b608482015260a4016105ae565b43611693608085016060860161330c565b63ffffffff1611156117135760405162461bcd60e51b815260206004820152604f60248201526000805160206138eb83398151915260448201527f63683a20737065636966696564207265666572656e6365426c6f636b4e756d6260648201526e657220697320696e2066757475726560881b608482015260a4016105ae565b63ffffffff4316609661172c608086016060870161330c565b61173691906135fe565b63ffffffff1610156117bc5760405162461bcd60e51b815260206004820152605560248201526000805160206138eb83398151915260448201527f63683a20737065636966696564207265666572656e6365426c6f636b4e756d62606482015274195c881a5cc81d1bdbc819985c881a5b881c185cdd605a1b608482015260a4016105ae565b6000806117d06117cb86613695565b61279e565b90506000806117fc836117e660208a018a613735565b6117f660808c0160608d0161330c565b8a610a89565b9150915060005b6118106040890189613735565b9050811015611952576118266040890189613735565b828181106118365761183661344e565b9050013560f81c60f81b60f81c60ff168360200151828151811061185c5761185c61344e565b602002602001015161186e9190613782565b6001600160601b031660648460000151838151811061188f5761188f61344e565b60200260200101516001600160601b03166118aa919061349c565b10156119405760405162461bcd60e51b8152602060048201526064602482018190526000805160206138eb83398151915260448301527f63683a207369676e61746f7269657320646f206e6f74206f776e206174206c65908201527f617374207468726573686f6c642070657263656e74616765206f6620612071756084820152636f72756d60e01b60a482015260c4016105ae565b8061194a816134e6565b915050611803565b5060665463ffffffff16600061196789612800565b60408051602080820184905281830187905260a08a901b6001600160a01b03191660608301524360e01b6001600160e01b031916606c830152825160508184030181526070830180855281519183019190912063ffffffff8816600081815260679094529285902055526001600160601b0389166090820152905191925086917f2eaa707a79ac1f835863f5a6fdb5f27c0e295dc23adf970a445cd87d126c4d639181900360b00190a2611a1c8260016135fe565b6066805463ffffffff191663ffffffff92909216919091179055505050505050505050565b60006115316033546001600160a01b031690565b611a5d6126ac565b61066b81612813565b600054610100900460ff1615808015611a865750600054600160ff909116105b80611aa05750303b158015611aa0575060005460ff166001145b611b035760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016105ae565b6000805460ff191660011790558015611b26576000805461ff0019166101001790555b611b31856000612890565b611b3a8461270b565b611b438361275d565b611b4c82612813565b8015611b92576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611be15760405162461bcd60e51b81526004016105ae90613327565b50505050565b611bef6126ac565b6001600160a01b038116611c545760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105ae565b61066b8161270b565b606860009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cd4919061337d565b6001600160a01b0316336001600160a01b031614611d045760405162461bcd60e51b81526004016105ae9061339a565b606954198119606954191614611d825760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c697479000000000000000060648201526084016105ae565b606981905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016107a2565b6001600160a01b038116611e475760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a4016105ae565b606854604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606880546001600160a01b0319166001600160a01b0392909216919091179055565b6040805180820190915260008082526020820152611ecc612aa0565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa9050808015611eff57611f01565bfe5b5080611f3f5760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b60448201526064016105ae565b505092915050565b6040805180820190915260008082526020820152611f63612abe565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa9050808015611eff575080611f3f5760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b60448201526064016105ae565b611fe3612adc565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b6040805180820190915260008082526020820152600080806120cb6000805160206138cb83398151915286613464565b90505b6120d781612976565b90935091506000805160206138cb833981519152828309831415612111576040805180820190915290815260208101919091529392505050565b6000805160206138cb8339815191526001820890506120ce565b60408051808201825286815260208082018690528251808401909352868352820184905260009182919061215d612b01565b60005b600281101561232257600061217682600661349c565b905084826002811061218a5761218a61344e565b6020020151518361219c8360006137b1565b600c81106121ac576121ac61344e565b60200201528482600281106121c3576121c361344e565b602002015160200151838260016121da91906137b1565b600c81106121ea576121ea61344e565b60200201528382600281106122015761220161344e565b60200201515151836122148360026137b1565b600c81106122245761222461344e565b602002015283826002811061223b5761223b61344e565b60200201515160016020020151836122548360036137b1565b600c81106122645761226461344e565b602002015283826002811061227b5761227b61344e565b6020020151602001516000600281106122965761229661344e565b6020020151836122a78360046137b1565b600c81106122b7576122b761344e565b60200201528382600281106122ce576122ce61344e565b6020020151602001516001600281106122e9576122e961344e565b6020020151836122fa8360056137b1565b600c811061230a5761230a61344e565b6020020152508061231a816134e6565b915050612160565b5061232b612b20565b60006020826101808560088cfa9151919c9115159b50909950505050505050505050565b600081600001518260200151604051602001612375929190918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b6000610100825111156124065760405162461bcd60e51b815260206004820152603660248201527f4269746d61705574696c732e62797465734172726179546f4269746d61703a206044820152756279746573417272617920697320746f6f206c6f6e6760501b60648201526084016105ae565b815161241457506000919050565b6000808360008151811061242a5761242a61344e565b0160200151600160f89190911c81901b92505b84518110156124f2578481815181106124585761245861344e565b0160200151600160f89190911c1b9150828216156124de5760405162461bcd60e51b815260206004820152603a60248201527f4269746d61705574696c732e62797465734172726179546f4269746d61703a2060448201527f72657065617420656e74727920696e206279746573417272617900000000000060648201526084016105ae565b918117916124eb816134e6565b905061243d565b50909392505050565b6000805b821561252657612510600184613501565b909216918061251e816137c9565b9150506124ff565b92915050565b6040805180820190915260008082526020820152815115801561255157506020820151155b1561256f575050604080518082019091526000808252602082015290565b6040518060400160405280836000015181526020016000805160206138cb83398151915284602001516125a29190613464565b6125ba906000805160206138cb833981519152613501565b905292915050565b919050565b60408051808201909152600080825260208201526102008261ffff16106126235760405162461bcd60e51b815260206004820152601060248201526f7363616c61722d746f6f2d6c6172676560801b60448201526064016105ae565b8161ffff1660011415612637575081612526565b6040805180820190915260008082526020820181905284906001905b8161ffff168661ffff1611156126a157600161ffff871660ff83161c81161415612684576126818484611f47565b93505b61268e8384611f47565b92506201fffe600192831b169101612653565b509195945050505050565b336126b5611a41565b6001600160a01b0316146115145760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105ae565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60655460408051918252602082018390527fcd1b2c2a220284accd1f9effd811cdecb6beaa4638618b48bbea07ce7ae16996910160405180910390a1606555565b60006127db82604080518082019091526000808252602082015250604080518082019091528151815260609091015163ffffffff16602082015290565b6040805182516020808301919091529092015163ffffffff1690820152606001612375565b600081604051602001612375919061384f565b606654604080516001600160a01b036401000000009093048316815291831660208301527f774b126b94b3cc801460a024dd575406c3ebf27affd7c36198a53ac6655f056d910160405180910390a1606680546001600160a01b0390921664010000000002640100000000600160c01b0319909216919091179055565b6068546001600160a01b03161580156128b157506001600160a01b03821615155b6129335760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a4016105ae565b606981905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a26105b782611db9565b600080806000805160206138cb83398151915260036000805160206138cb833981519152866000805160206138cb8339815191528889090908905060006129ec827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f526000805160206138cb8339815191526129f8565b91959194509092505050565b600080612a03612b20565b612a0b612b3e565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa9250828015611eff575082612a955760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c75726500000000000060448201526064016105ae565b505195945050505050565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6040518060400160405280612aef612b5c565b8152602001612afc612b5c565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b6001600160a01b038116811461066b57600080fd5b803563ffffffff811681146125c257600080fd5b60008060408385031215612bb657600080fd5b8235612bc181612b7a565b9150612bcf60208401612b8f565b90509250929050565b600060208284031215612bea57600080fd5b8135612bf581612b7a565b9392505050565b600060208284031215612c0e57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715612c4d57612c4d612c15565b60405290565b60405161010081016001600160401b0381118282101715612c4d57612c4d612c15565b604051601f8201601f191681016001600160401b0381118282101715612c9e57612c9e612c15565b604052919050565b600060408284031215612cb857600080fd5b612cc0612c2b565b9050813581526020820135602082015292915050565b600082601f830112612ce757600080fd5b604051604081018181106001600160401b0382111715612d0957612d09612c15565b8060405250806040840185811115612d2057600080fd5b845b818110156126a1578035835260209283019201612d22565b600060808284031215612d4c57600080fd5b612d54612c2b565b9050612d608383612cd6565b8152612d6f8360408401612cd6565b602082015292915050565b6000806000806101208587031215612d9157600080fd5b84359350612da28660208701612ca6565b9250612db18660608701612d3a565b9150612dc08660e08701612ca6565b905092959194509250565b600080600060608486031215612de057600080fd5b8335925060208401359150612df760408501612b8f565b90509250925092565b600060208284031215612e1257600080fd5b813560ff81168114612bf557600080fd5b60006001600160401b03821115612e3c57612e3c612c15565b5060051b60200190565b600082601f830112612e5757600080fd5b81356020612e6c612e6783612e23565b612c76565b82815260059290921b84018101918181019086841115612e8b57600080fd5b8286015b84811015612ead57612ea081612b8f565b8352918301918301612e8f565b509695505050505050565b600082601f830112612ec957600080fd5b81356020612ed9612e6783612e23565b82815260069290921b84018101918181019086841115612ef857600080fd5b8286015b84811015612ead57612f0e8882612ca6565b835291830191604001612efc565b600082601f830112612f2d57600080fd5b81356020612f3d612e6783612e23565b82815260059290921b84018101918181019086841115612f5c57600080fd5b8286015b84811015612ead5780356001600160401b03811115612f7f5760008081fd5b612f8d8986838b0101612e46565b845250918301918301612f60565b60006101808284031215612fae57600080fd5b612fb6612c53565b905081356001600160401b0380821115612fcf57600080fd5b612fdb85838601612e46565b83526020840135915080821115612ff157600080fd5b612ffd85838601612eb8565b6020840152604084013591508082111561301657600080fd5b61302285838601612eb8565b60408401526130348560608601612d3a565b60608401526130468560e08601612ca6565b608084015261012084013591508082111561306057600080fd5b61306c85838601612e46565b60a084015261014084013591508082111561308657600080fd5b61309285838601612e46565b60c08401526101608401359150808211156130ac57600080fd5b506130b984828501612f1c565b60e08301525092915050565b6000806000806000608086880312156130dd57600080fd5b8535945060208601356001600160401b03808211156130fb57600080fd5b818801915088601f83011261310f57600080fd5b81358181111561311e57600080fd5b89602082850101111561313057600080fd5b602083019650945061314460408901612b8f565b9350606088013591508082111561315a57600080fd5b5061316788828901612f9b565b9150509295509295909350565b600081518084526020808501945080840160005b838110156131ad5781516001600160601b031687529582019590820190600101613188565b509495945050505050565b60408152600083516040808401526131d36080840182613174565b90506020850151603f198483030160608501526131f08282613174565b925050508260208301529392505050565b6000806040838503121561321457600080fd5b82356001600160401b038082111561322b57600080fd5b908401906080828703121561323f57600080fd5b9092506020840135908082111561325557600080fd5b5061326285828601612f9b565b9150509250929050565b6000806000806080858703121561328257600080fd5b843561328d81612b7a565b9350602085013561329d81612b7a565b92506040850135915060608501356132b481612b7a565b939692955090935050565b600080600080608085870312156132d557600080fd5b84356132e081612b7a565b93506132ee60208601612b8f565b92506132fc60408601612b8f565b9396929550929360600135925050565b60006020828403121561331e57600080fd5b612bf582612b8f565b60208082526036908201527f6f6e6c795265676973747279436f6f7264696e61746f723a206e6f742066726f60408201527536903932b3b4b9ba393c9031b7b7b93234b730ba37b960511b606082015260800190565b60006020828403121561338f57600080fd5b8151612bf581612b7a565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b6000602082840312156133f657600080fd5b81518015158114612bf557600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60008261348157634e487b7160e01b600052601260045260246000fd5b500690565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156134b6576134b6613486565b500290565b6000602082840312156134cd57600080fd5b815167ffffffffffffffff1981168114612bf557600080fd5b60006000198214156134fa576134fa613486565b5060010190565b60008282101561351357613513613486565b500390565b60006020828403121561352a57600080fd5b81516001600160c01b0381168114612bf557600080fd5b60006020828403121561355357600080fd5b81516001600160601b0381168114612bf557600080fd5b60006001600160601b038381169083168181101561358a5761358a613486565b039392505050565b600063ffffffff808316818114156135ac576135ac613486565b6001019392505050565b63ffffffff60e01b8360e01b1681526000600482018351602080860160005b838110156135f1578151855293820193908201906001016135d5565b5092979650505050505050565b600063ffffffff80831681851680830382111561361d5761361d613486565b01949350505050565b600082601f83011261363757600080fd5b81356001600160401b0381111561365057613650612c15565b613663601f8201601f1916602001612c76565b81815284602083860101111561367857600080fd5b816020850160208301376000918101602001919091529392505050565b6000608082360312156136a757600080fd5b604051608081016001600160401b0382821081831117156136ca576136ca612c15565b816040528435835260208501359150808211156136e657600080fd5b6136f236838701613626565b6020840152604085013591508082111561370b57600080fd5b5061371836828601613626565b60408301525061372a60608401612b8f565b606082015292915050565b6000808335601e1984360301811261374c57600080fd5b8301803591506001600160401b0382111561376657600080fd5b60200191503681900382131561377b57600080fd5b9250929050565b60006001600160601b03808316818516818304811182151516156137a8576137a8613486565b02949350505050565b600082198211156137c4576137c4613486565b500190565b600061ffff808316818114156135ac576135ac613486565b6000808335601e198436030181126137f857600080fd5b83016020810192503590506001600160401b0381111561381757600080fd5b80360383131561377b57600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6020815281356020820152600061386960208401846137e1565b6080604085015261387e60a085018284613826565b91505061388e60408501856137e1565b848303601f190160608601526138a5838284613826565b9250505063ffffffff6138ba60608601612b8f565b166080840152809150509291505056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47456967656e4441536572766963654d616e616765722e636f6e6669726d426174424c535369676e6174757265436865636b65722e636865636b5369676e617475a2646970667358221220b6662c47482c37dc520d2d20b6df96d1b74bf7274ab05a508bca365cd3acfa7964736f6c634300080c0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"__avsDirectory\",\"type\":\"address\",\"internalType\":\"contractIAVSDirectory\"},{\"name\":\"__registryCoordinator\",\"type\":\"address\",\"internalType\":\"contractIRegistryCoordinator\"},{\"name\":\"__stakeRegistry\",\"type\":\"address\",\"internalType\":\"contractIStakeRegistry\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"BLOCK_STALE_MEASURE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"STORE_DURATION_BLOCKS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"THRESHOLD_DENOMINATOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"avsDirectory\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"batchConfirmer\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"batchId\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"batchIdToBatchMetadataHash\",\"inputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"blsApkRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIBLSApkRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"checkSignatures\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"referenceBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"params\",\"type\":\"tuple\",\"internalType\":\"structIBLSSignatureChecker.NonSignerStakesAndSignature\",\"components\":[{\"name\":\"nonSignerQuorumBitmapIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApks\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apkG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"sigma\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApkIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"totalStakeIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerStakeIndices\",\"type\":\"uint32[][]\",\"internalType\":\"uint32[][]\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIBLSSignatureChecker.QuorumStakeTotals\",\"components\":[{\"name\":\"signedStakeForQuorum\",\"type\":\"uint96[]\",\"internalType\":\"uint96[]\"},{\"name\":\"totalStakeForQuorum\",\"type\":\"uint96[]\",\"internalType\":\"uint96[]\"}]},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"confirmBatch\",\"inputs\":[{\"name\":\"batchHeader\",\"type\":\"tuple\",\"internalType\":\"structIEigenDAServiceManager.BatchHeader\",\"components\":[{\"name\":\"blobHeadersRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"quorumThresholdPercentages\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"referenceBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"nonSignerStakesAndSignature\",\"type\":\"tuple\",\"internalType\":\"structIBLSSignatureChecker.NonSignerStakesAndSignature\",\"components\":[{\"name\":\"nonSignerQuorumBitmapIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApks\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apkG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"sigma\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApkIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"totalStakeIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerStakeIndices\",\"type\":\"uint32[][]\",\"internalType\":\"uint32[][]\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegation\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deregisterOperatorFromAVS\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getOperatorRestakedStrategies\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRestakeableStrategies\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"_initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_batchConfirmer\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"latestServeUntilBlock\",\"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\":\"pause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseAll\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pauserRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registerOperatorToAVS\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.SignatureWithSaltAndExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registryCoordinator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIRegistryCoordinator\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setBatchConfirmer\",\"inputs\":[{\"name\":\"_batchConfirmer\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setMetadataURI\",\"inputs\":[{\"name\":\"_metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setStaleStakesForbidden\",\"inputs\":[{\"name\":\"value\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"stakeRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStakeRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"staleStakesForbidden\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"taskNumber\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"trySignatureAndApkVerification\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"apk\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apkG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"sigma\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[{\"name\":\"pairingSuccessful\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"siganatureIsValid\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"BatchConfirmed\",\"inputs\":[{\"name\":\"batchHeaderHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"batchId\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BatchConfirmerChanged\",\"inputs\":[{\"name\":\"previousAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StaleStakesForbiddenUpdate\",\"inputs\":[{\"name\":\"value\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false}]", + Bin: "0x6101606040523480156200001257600080fd5b50604051620050a9380380620050a98339810160408190526200003591620002da565b6001600160a01b0380841660c052808316608052811660a052818381836200005c620001ff565b5050506001600160a01b03811660e081905260408051636830483560e01b815290516368304835916004808201926020929091908290030181865afa158015620000aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d091906200032e565b6001600160a01b0316610100816001600160a01b031681525050806001600160a01b0316635df459466040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000129573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200014f91906200032e565b6001600160a01b0316610120816001600160a01b031681525050610100516001600160a01b031663df5cf7236040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001d191906200032e565b6001600160a01b031661014052506097805460ff19166001179055620001f6620001ff565b50505062000355565b603254610100900460ff16156200026c5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60325460ff9081161015620002bf576032805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b0381168114620002d757600080fd5b50565b600080600060608486031215620002f057600080fd5b8351620002fd81620002c1565b60208501519093506200031081620002c1565b60408501519092506200032381620002c1565b809150509250925092565b6000602082840312156200034157600080fd5b81516200034e81620002c1565b9392505050565b60805160a05160c05160e051610100516101205161014051614c5f6200044a600039600081816104e101526116ed01526000818161034d01526118d001526000818161038601528181611aa60152611c680152600081816103d301528181610dc6015281816113b801528181611550015261178a0152600081816103aa01528181611f500152818161251801526125ec015260008181610aef01528181610c4a01528181610ce10152818161289201528181612a150152612ab401526000818161091a015281816109a901528181610a29015281816124c401528181612590015281816127d001526129700152614c5f6000f3fe608060405234801561001057600080fd5b506004361061021c5760003560e01c806372d18e8d11610125578063c0c53b8b116100ad578063eccbbfc91161007c578063eccbbfc91461050b578063ef0244581461052b578063f122098314610533578063f2fde38b14610546578063fabc1cbc1461055957600080fd5b8063c0c53b8b146104b6578063c4d66de8146104c9578063df5cf723146104dc578063e481af9d1461050357600080fd5b8063886f1195116100f4578063886f11951461045a5780638da5cb5b146104725780639926ee7d14610483578063a364f4da14610496578063b98d0908146104a957600080fd5b806372d18e8d1461041e578063750521f51461042c578063758f8dba1461043f5780637794965a1461044757600080fd5b80635c975abb116101a8578063683048351161017757806368304835146103815780636b3aa72e146103a85780636d14a987146103ce5780636efb4636146103f5578063715018a61461041657600080fd5b80635c975abb146103365780635df45946146103485780635e0334761461036f5780635e8b3f2d1461037957600080fd5b806339f309d5116101ef57806339f309d514610298578063416c7e5e146102c35780634972134a146102d6578063595c6a67146102fb5780635ac86ab71461030357600080fd5b806310d67a2f14610221578063136439dd14610236578063171f1d5b1461024957806333cfb7b714610278575b600080fd5b61023461022f366004613c63565b61056c565b005b610234610244366004613c80565b610628565b61025c610257366004613dea565b61076b565b6040805192151583529015156020830152015b60405180910390f35b61028b610286366004613c63565b6108f5565b60405161026f9190613e3b565b6002546102ab906001600160a01b031681565b6040516001600160a01b03909116815260200161026f565b6102346102d1366004613e96565b610dc4565b6000546102e69063ffffffff1681565b60405163ffffffff909116815260200161026f565b610234610f39565b610326610311366004613ec2565b609854600160ff9092169190911b9081161490565b604051901515815260200161026f565b6098545b60405190815260200161026f565b6102ab7f000000000000000000000000000000000000000000000000000000000000000081565b6102e6620189c081565b6102e6609681565b6102ab7f000000000000000000000000000000000000000000000000000000000000000081565b7f00000000000000000000000000000000000000000000000000000000000000006102ab565b6102ab7f000000000000000000000000000000000000000000000000000000000000000081565b610408610403366004614195565b611004565b60405161026f929190614288565b610234611f1d565b60005463ffffffff166102e6565b61023461043a366004614328565b611f31565b6102e6611fba565b610234610455366004614378565b611fda565b6097546102ab9061010090046001600160a01b031681565b6065546001600160a01b03166102ab565b61023461049136600461440a565b6124b9565b6102346104a4366004613c63565b612585565b6097546103269060ff1681565b6102346104c43660046144b5565b61261b565b6102346104d7366004613c63565b6126fd565b6102ab7f000000000000000000000000000000000000000000000000000000000000000081565b61028b6127ca565b61033a610519366004614500565b60016020526000908152604090205481565b61033a606481565b610234610541366004613c63565b612b93565b610234610554366004613c63565b612ba4565b610234610567366004613c80565b612c1a565b609760019054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105e3919061451b565b6001600160a01b0316336001600160a01b03161461061c5760405162461bcd60e51b815260040161061390614538565b60405180910390fd5b61062581612d76565b50565b60975460405163237dfb4760e11b81523360048201526101009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610674573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106989190614582565b6106b45760405162461bcd60e51b81526004016106139061459f565b6098548181161461072d5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610613565b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b60008060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001878760000151886020015188600001516000600281106107b3576107b36145e7565b60200201518951600160200201518a602001516000600281106107d8576107d86145e7565b60200201518b602001516001600281106107f4576107f46145e7565b602090810291909101518c518d8301516040516108519a99989796959401988952602089019790975260408801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200190565b6040516020818303038152906040528051906020012060001c61087491906145fd565b90506108e761088d6108868884612e78565b8690612f0f565b610895612fa3565b6108dd6108ce856108c8604080518082018252600080825260209182015281518083019092526001825260029082015290565b90612e78565b6108d78c613063565b90612f0f565b886201d4c06130f3565b909890975095505050505050565b6040516309aa152760e11b81526001600160a01b0382811660048301526060916000917f000000000000000000000000000000000000000000000000000000000000000016906313542a4e90602401602060405180830381865afa158015610961573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610985919061461f565b60405163871ef04960e01b8152600481018290529091506000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063871ef04990602401602060405180830381865afa1580156109f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a149190614638565b90506001600160c01b0381161580610aae57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa99190614661565b60ff16155b15610aca57505060408051600081526020810190915292915050565b6000610ade826001600160c01b0316613317565b90506000805b8251811015610bb4577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633ca5a5f5848381518110610b2e57610b2e6145e7565b01602001516040516001600160e01b031960e084901b16815260f89190911c6004820152602401602060405180830381865afa158015610b72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b96919061461f565b610ba09083614694565b915080610bac816146ac565b915050610ae4565b506000816001600160401b03811115610bcf57610bcf613c99565b604051908082528060200260200182016040528015610bf8578160200160208202803683370190505b5090506000805b8451811015610db7576000858281518110610c1c57610c1c6145e7565b0160200151604051633ca5a5f560e01b815260f89190911c6004820181905291506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633ca5a5f590602401602060405180830381865afa158015610c91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb5919061461f565b905060005b81811015610da1576040516356e4026d60e11b815260ff84166004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063adc804da906044016040805180830381865afa158015610d2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5391906146de565b60000151868681518110610d6957610d696145e7565b6001600160a01b039092166020928302919091019091015284610d8b816146ac565b9550508080610d99906146ac565b915050610cba565b5050508080610daf906146ac565b915050610bff565b5090979650505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e46919061451b565b6001600160a01b0316336001600160a01b031614610ef25760405162461bcd60e51b815260206004820152605c60248201527f424c535369676e6174757265436865636b65722e6f6e6c79436f6f7264696e6160448201527f746f724f776e65723a2063616c6c6572206973206e6f7420746865206f776e6560648201527f72206f6620746865207265676973747279436f6f7264696e61746f7200000000608482015260a401610613565b6097805460ff19168215159081179091556040519081527f40e4ed880a29e0f6ddce307457fb75cddf4feef7d3ecb0301bfdf4976a0e2dfc9060200160405180910390a150565b60975460405163237dfb4760e11b81523360048201526101009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610f85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa99190614582565b610fc55760405162461bcd60e51b81526004016106139061459f565b600019609881905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b604080518082019091526060808252602082015260008461107b5760405162461bcd60e51b81526020600482015260376024820152600080516020614c0a83398151915260448201527f7265733a20656d7074792071756f72756d20696e7075740000000000000000006064820152608401610613565b60408301515185148015611093575060a08301515185145b80156110a3575060c08301515185145b80156110b3575060e08301515185145b61111d5760405162461bcd60e51b81526020600482015260416024820152600080516020614c0a83398151915260448201527f7265733a20696e7075742071756f72756d206c656e677468206d69736d6174636064820152600d60fb1b608482015260a401610613565b825151602084015151146111955760405162461bcd60e51b815260206004820152604460248201819052600080516020614c0a833981519152908201527f7265733a20696e707574206e6f6e7369676e6572206c656e677468206d69736d6064820152630c2e8c6d60e31b608482015260a401610613565b4363ffffffff168463ffffffff1611156112055760405162461bcd60e51b815260206004820152603c6024820152600080516020614c0a83398151915260448201527f7265733a20696e76616c6964207265666572656e636520626c6f636b000000006064820152608401610613565b6040805180820182526000808252602080830191909152825180840190935260608084529083015290866001600160401b0381111561124657611246613c99565b60405190808252806020026020018201604052801561126f578160200160208202803683370190505b506020820152866001600160401b0381111561128d5761128d613c99565b6040519080825280602002602001820160405280156112b6578160200160208202803683370190505b50815260408051808201909152606080825260208201528560200151516001600160401b038111156112ea576112ea613c99565b604051908082528060200260200182016040528015611313578160200160208202803683370190505b5081526020860151516001600160401b0381111561133357611333613c99565b60405190808252806020026020018201604052801561135c578160200160208202803683370190505b508160200181905250600061142e8a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051639aa1653d60e01b815290516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169350639aa1653d925060048083019260209291908290030181865afa158015611405573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114299190614661565b6133d9565b905060005b8760200151518110156116c95761147888602001518281518110611459576114596145e7565b6020026020010151805160009081526020918201519091526040902090565b8360200151828151811061148e5761148e6145e7565b6020908102919091010152801561154e5760208301516114af60018361471d565b815181106114bf576114bf6145e7565b602002602001015160001c836020015182815181106114e0576114e06145e7565b602002602001015160001c1161154e576040805162461bcd60e51b8152602060048201526024810191909152600080516020614c0a83398151915260448201527f7265733a206e6f6e5369676e65725075626b657973206e6f7420736f727465646064820152608401610613565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166304ec635184602001518381518110611593576115936145e7565b60200260200101518b8b6000015185815181106115b2576115b26145e7565b60200260200101516040518463ffffffff1660e01b81526004016115ef9392919092835263ffffffff918216602084015216604082015260600190565b602060405180830381865afa15801561160c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116309190614638565b6001600160c01b03168360000151828151811061164f5761164f6145e7565b6020026020010181815250506116b5610886611689848660000151858151811061167b5761167b6145e7565b602002602001015116613494565b8a60200151848151811061169f5761169f6145e7565b60200260200101516134bf90919063ffffffff16565b9450806116c1816146ac565b915050611433565b50506116d4836135a3565b60975490935060ff166000816116eb57600061176d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c448feb86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611749573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176d919061461f565b905060005b8a811015611dec5782156118ce578963ffffffff16827f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663249a0c428f8f868181106117c9576117c96145e7565b60405160e085901b6001600160e01b031916815292013560f81c600483015250602401602060405180830381865afa158015611809573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182d919061461f565b6118379190614694565b10156118ce5760405162461bcd60e51b81526020600482015260666024820152600080516020614c0a83398151915260448201527f7265733a205374616b6552656769737472792075706461746573206d7573742060648201527f62652077697468696e207769746864726177616c44656c6179426c6f636b732060848201526577696e646f7760d01b60a482015260c401610613565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166368bccaac8d8d8481811061190f5761190f6145e7565b9050013560f81c60f81b60f81c8c8c60a001518581518110611933576119336145e7565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa15801561198f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b39190614734565b6001600160401b0319166119d68a604001518381518110611459576114596145e7565b67ffffffffffffffff191614611a725760405162461bcd60e51b81526020600482015260616024820152600080516020614c0a83398151915260448201527f7265733a2071756f72756d41706b206861736820696e2073746f72616765206460648201527f6f6573206e6f74206d617463682070726f76696465642071756f72756d2061706084820152606b60f81b60a482015260c401610613565b611aa289604001518281518110611a8b57611a8b6145e7565b602002602001015187612f0f90919063ffffffff16565b95507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c8294c568d8d84818110611ae557611ae56145e7565b9050013560f81c60f81b60f81c8c8c60c001518581518110611b0957611b096145e7565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa158015611b65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b89919061475f565b85602001518281518110611b9f57611b9f6145e7565b6001600160601b03909216602092830291909101820152850151805182908110611bcb57611bcb6145e7565b602002602001015185600001518281518110611be957611be96145e7565b60200260200101906001600160601b031690816001600160601b0316815250506000805b8a6020015151811015611dd757611c6186600001518281518110611c3357611c336145e7565b60200260200101518f8f86818110611c4d57611c4d6145e7565b600192013560f81c9290921c811614919050565b15611dc5577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f2be94ae8f8f86818110611ca757611ca76145e7565b9050013560f81c60f81b60f81c8e89602001518581518110611ccb57611ccb6145e7565b60200260200101518f60e001518881518110611ce957611ce96145e7565b60200260200101518781518110611d0257611d026145e7565b60209081029190910101516040516001600160e01b031960e087901b16815260ff909416600485015263ffffffff92831660248501526044840191909152166064820152608401602060405180830381865afa158015611d66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d8a919061475f565b8751805185908110611d9e57611d9e6145e7565b60200260200101818151611db2919061477a565b6001600160601b03169052506001909101905b80611dcf816146ac565b915050611c0d565b50508080611de4906146ac565b915050611772565b505050600080611e068c868a606001518b6080015161076b565b9150915081611e775760405162461bcd60e51b81526020600482015260436024820152600080516020614c0a83398151915260448201527f7265733a2070616972696e6720707265636f6d70696c652063616c6c206661696064820152621b195960ea1b608482015260a401610613565b80611ed85760405162461bcd60e51b81526020600482015260396024820152600080516020614c0a83398151915260448201527f7265733a207369676e617475726520697320696e76616c6964000000000000006064820152608401610613565b50506000878260200151604051602001611ef39291906147a2565b60408051808303601f190181529190528051602090910120929b929a509198505050505050505050565b611f2561363e565b611f2f6000613698565b565b611f3961363e565b60405163a98fb35560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a98fb35590611f85908490600401614837565b600060405180830381600087803b158015611f9f57600080fd5b505af1158015611fb3573d6000803e3d6000fd5b5050505050565b60006096611fcb620189c04361484a565b611fd5919061484a565b905090565b609854600090600190811614156120335760405162461bcd60e51b815260206004820152601960248201527f5061757361626c653a20696e64657820697320706175736564000000000000006044820152606401610613565b6002546001600160a01b031633146120a25760405162461bcd60e51b815260206004820152602c60248201527f6f6e6c794261746368436f6e6669726d65723a206e6f742066726f6d2062617460448201526b31b41031b7b73334b936b2b960a11b6064820152608401610613565b32331461211f5760405162461bcd60e51b81526020600482015260516024820152600080516020614bea83398151915260448201527f63683a2068656164657220616e64206e6f6e7369676e65722064617461206d75606482015270737420626520696e2063616c6c6461746160781b608482015260a401610613565b436121306080850160608601614500565b63ffffffff1611156121b05760405162461bcd60e51b815260206004820152604f6024820152600080516020614bea83398151915260448201527f63683a20737065636966696564207265666572656e6365426c6f636b4e756d6260648201526e657220697320696e2066757475726560881b608482015260a401610613565b63ffffffff431660966121c96080860160608701614500565b6121d3919061484a565b63ffffffff1610156122595760405162461bcd60e51b81526020600482015260556024820152600080516020614bea83398151915260448201527f63683a20737065636966696564207265666572656e6365426c6f636b4e756d62606482015274195c881a5cc81d1bdbc819985c881a5b881c185cdd605a1b608482015260a401610613565b600061226c61226785614872565b6136ea565b9050600080612298836122826020890189614912565b61229260808b0160608c01614500565b89611004565b9150915060005b6122ac6040880188614912565b90508110156123ee576122c26040880188614912565b828181106122d2576122d26145e7565b9050013560f81c60f81b60f81c60ff16836020015182815181106122f8576122f86145e7565b602002602001015161230a919061495f565b6001600160601b031660648460000151838151811061232b5761232b6145e7565b60200260200101516001600160601b0316612346919061498e565b10156123dc5760405162461bcd60e51b815260206004820152606460248201819052600080516020614bea83398151915260448301527f63683a207369676e61746f7269657320646f206e6f74206f776e206174206c65908201527f617374207468726573686f6c642070657263656e74616765206f6620612071756084820152636f72756d60e01b60a482015260c401610613565b806123e6816146ac565b91505061229f565b506000805463ffffffff169061240388613765565b6040805160208082018490528183018790524360e01b6001600160e01b0319166060830152825160448184030181526064830180855281519183019190912063ffffffff881660008181526001909452928590205552905191925086917fc75557c4ad49697e231449688be13ef11cb6be8ed0d18819d8dde074a5a16f8a9181900360840190a261249582600161484a565b6000805463ffffffff191663ffffffff929092169190911790555050505050505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146125015760405162461bcd60e51b8152600401610613906149ad565b604051639926ee7d60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639926ee7d9061254f9085908590600401614a25565b600060405180830381600087803b15801561256957600080fd5b505af115801561257d573d6000803e3d6000fd5b505050505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146125cd5760405162461bcd60e51b8152600401610613906149ad565b6040516351b27a6d60e11b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063a364f4da90602401611f85565b603254610100900460ff161580801561263b5750603254600160ff909116105b806126555750303b158015612655575060325460ff166001145b6126715760405162461bcd60e51b815260040161061390614a70565b6032805460ff191660011790558015612694576032805461ff0019166101001790555b61269f846000613778565b6126a883613698565b6126b182613863565b80156126f7576032805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b603254610100900460ff161580801561271d5750603254600160ff909116105b806127375750303b158015612737575060325460ff166001145b6127535760405162461bcd60e51b815260040161061390614a70565b6032805460ff191660011790558015612776576032805461ff0019166101001790555b61277f82613698565b80156127c6576032805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15b5050565b606060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561282c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128509190614661565b60ff1690508061286e57505060408051600081526020810190915290565b6000805b8281101561292357604051633ca5a5f560e01b815260ff821660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633ca5a5f590602401602060405180830381865afa1580156128e1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612905919061461f565b61290f9083614694565b91508061291b816146ac565b915050612872565b506000816001600160401b0381111561293e5761293e613c99565b604051908082528060200260200182016040528015612967578160200160208202803683370190505b5090506000805b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129f09190614661565b60ff16811015612b8957604051633ca5a5f560e01b815260ff821660048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633ca5a5f590602401602060405180830381865afa158015612a64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a88919061461f565b905060005b81811015612b74576040516356e4026d60e11b815260ff84166004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063adc804da906044016040805180830381865afa158015612b02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b2691906146de565b60000151858581518110612b3c57612b3c6145e7565b6001600160a01b039092166020928302919091019091015283612b5e816146ac565b9450508080612b6c906146ac565b915050612a8d565b50508080612b81906146ac565b91505061296e565b5090949350505050565b612b9b61363e565b61062581613863565b612bac61363e565b6001600160a01b038116612c115760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610613565b61062581613698565b609760019054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c91919061451b565b6001600160a01b0316336001600160a01b031614612cc15760405162461bcd60e51b815260040161061390614538565b609854198119609854191614612d3f5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610613565b609881905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610760565b6001600160a01b038116612e045760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610613565b609754604080516001600160a01b036101009093048316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1609780546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6040805180820190915260008082526020820152612e94613b74565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa9050808015612ec757612ec9565bfe5b5080612f075760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b6044820152606401610613565b505092915050565b6040805180820190915260008082526020820152612f2b613b92565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa9050808015612ec7575080612f075760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b6044820152606401610613565b612fab613bb0565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b604080518082019091526000808252602082015260008080613093600080516020614bca833981519152866145fd565b90505b61309f816138bd565b9093509150600080516020614bca8339815191528283098314156130d9576040805180820190915290815260208101919091529392505050565b600080516020614bca833981519152600182089050613096565b604080518082018252868152602080820186905282518084019093528683528201849052600091829190613125613bd5565b60005b60028110156132ea57600061313e82600661498e565b9050848260028110613152576131526145e7565b60200201515183613164836000614694565b600c8110613174576131746145e7565b602002015284826002811061318b5761318b6145e7565b602002015160200151838260016131a29190614694565b600c81106131b2576131b26145e7565b60200201528382600281106131c9576131c96145e7565b60200201515151836131dc836002614694565b600c81106131ec576131ec6145e7565b6020020152838260028110613203576132036145e7565b602002015151600160200201518361321c836003614694565b600c811061322c5761322c6145e7565b6020020152838260028110613243576132436145e7565b60200201516020015160006002811061325e5761325e6145e7565b60200201518361326f836004614694565b600c811061327f5761327f6145e7565b6020020152838260028110613296576132966145e7565b6020020151602001516001600281106132b1576132b16145e7565b6020020151836132c2836005614694565b600c81106132d2576132d26145e7565b602002015250806132e2816146ac565b915050613128565b506132f3613bf4565b60006020826101808560088cfa9151919c9115159b50909950505050505050505050565b606060008061332584613494565b61ffff166001600160401b0381111561334057613340613c99565b6040519080825280601f01601f19166020018201604052801561336a576020820181803683370190505b5090506000805b825182108015613382575061010081105b15612b89576001811b9350858416156133c9578060f81b8383815181106133ab576133ab6145e7565b60200101906001600160f81b031916908160001a9053508160010191505b6133d2816146ac565b9050613371565b6000806133e58461393f565b9050801561348b578260ff168460018651613400919061471d565b81518110613410576134106145e7565b016020015160f81c1061348b5760405162461bcd60e51b815260206004820152603f60248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206269746d61702065786365656473206d61782076616c7565006064820152608401610613565b90505b92915050565b6000805b821561348e576134a960018461471d565b90921691806134b781614abe565b915050613498565b60408051808201909152600080825260208201526102008261ffff161061351b5760405162461bcd60e51b815260206004820152601060248201526f7363616c61722d746f6f2d6c6172676560801b6044820152606401610613565b8161ffff166001141561352f57508161348e565b6040805180820190915260008082526020820181905284906001905b8161ffff168661ffff161061359857600161ffff871660ff83161c8116141561357b576135788484612f0f565b93505b6135858384612f0f565b92506201fffe600192831b16910161354b565b509195945050505050565b604080518082019091526000808252602082015281511580156135c857506020820151155b156135e6575050604080518082019091526000808252602082015290565b604051806040016040528083600001518152602001600080516020614bca833981519152846020015161361991906145fd565b61363190600080516020614bca83398151915261471d565b905292915050565b919050565b6065546001600160a01b03163314611f2f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610613565b606580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600061372782604080518082019091526000808252602082015250604080518082019091528151815260609091015163ffffffff16602082015290565b6040805182516020808301919091529092015163ffffffff16908201526060015b604051602081830303815290604052805190602001209050919050565b6000816040516020016137489190614b4e565b60975461010090046001600160a01b031615801561379e57506001600160a01b03821615155b6138205760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610613565b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a26127c682612d76565b600280546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527ff024af0387e1367ceb1c6a3b6a00db4e9917e56bfb22a289808100f8e2b2c08591016127bd565b60008080600080516020614bca8339815191526003600080516020614bca83398151915286600080516020614bca833981519152888909090890506000613933827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f52600080516020614bca833981519152613acc565b91959194509092505050565b6000610100825111156139c85760405162461bcd60e51b8152602060048201526044602482018190527f4269746d61705574696c732e6f72646572656442797465734172726179546f42908201527f69746d61703a206f7264657265644279746573417272617920697320746f6f206064820152636c6f6e6760e01b608482015260a401610613565b81516139d657506000919050565b600080836000815181106139ec576139ec6145e7565b0160200151600160f89190911c81901b92505b8451811015613ac357848181518110613a1a57613a1a6145e7565b0160200151600160f89190911c1b9150828211613aaf5760405162461bcd60e51b815260206004820152604760248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206f72646572656442797465734172726179206973206e6f74206064820152661bdc99195c995960ca1b608482015260a401610613565b91811791613abc816146ac565b90506139ff565b50909392505050565b600080613ad7613bf4565b613adf613c12565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa9250828015612ec7575082613b695760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c7572650000000000006044820152606401610613565b505195945050505050565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6040518060400160405280613bc3613c30565b8152602001613bd0613c30565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b6001600160a01b038116811461062557600080fd5b600060208284031215613c7557600080fd5b813561348b81613c4e565b600060208284031215613c9257600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715613cd157613cd1613c99565b60405290565b60405161010081016001600160401b0381118282101715613cd157613cd1613c99565b604051601f8201601f191681016001600160401b0381118282101715613d2257613d22613c99565b604052919050565b600060408284031215613d3c57600080fd5b613d44613caf565b9050813581526020820135602082015292915050565b600082601f830112613d6b57600080fd5b613d73613caf565b806040840185811115613d8557600080fd5b845b81811015613d9f578035845260209384019301613d87565b509095945050505050565b600060808284031215613dbc57600080fd5b613dc4613caf565b9050613dd08383613d5a565b8152613ddf8360408401613d5a565b602082015292915050565b6000806000806101208587031215613e0157600080fd5b84359350613e128660208701613d2a565b9250613e218660608701613daa565b9150613e308660e08701613d2a565b905092959194509250565b6020808252825182820181905260009190848201906040850190845b81811015613e7c5783516001600160a01b031683529284019291840191600101613e57565b50909695505050505050565b801515811461062557600080fd5b600060208284031215613ea857600080fd5b813561348b81613e88565b60ff8116811461062557600080fd5b600060208284031215613ed457600080fd5b813561348b81613eb3565b803563ffffffff8116811461363957600080fd5b60006001600160401b03821115613f0c57613f0c613c99565b5060051b60200190565b600082601f830112613f2757600080fd5b81356020613f3c613f3783613ef3565b613cfa565b82815260059290921b84018101918181019086841115613f5b57600080fd5b8286015b84811015613f7d57613f7081613edf565b8352918301918301613f5f565b509695505050505050565b600082601f830112613f9957600080fd5b81356020613fa9613f3783613ef3565b82815260069290921b84018101918181019086841115613fc857600080fd5b8286015b84811015613f7d57613fde8882613d2a565b835291830191604001613fcc565b600082601f830112613ffd57600080fd5b8135602061400d613f3783613ef3565b82815260059290921b8401810191818101908684111561402c57600080fd5b8286015b84811015613f7d5780356001600160401b0381111561404f5760008081fd5b61405d8986838b0101613f16565b845250918301918301614030565b6000610180828403121561407e57600080fd5b614086613cd7565b905081356001600160401b038082111561409f57600080fd5b6140ab85838601613f16565b835260208401359150808211156140c157600080fd5b6140cd85838601613f88565b602084015260408401359150808211156140e657600080fd5b6140f285838601613f88565b60408401526141048560608601613daa565b60608401526141168560e08601613d2a565b608084015261012084013591508082111561413057600080fd5b61413c85838601613f16565b60a084015261014084013591508082111561415657600080fd5b61416285838601613f16565b60c084015261016084013591508082111561417c57600080fd5b5061418984828501613fec565b60e08301525092915050565b6000806000806000608086880312156141ad57600080fd5b8535945060208601356001600160401b03808211156141cb57600080fd5b818801915088601f8301126141df57600080fd5b8135818111156141ee57600080fd5b89602082850101111561420057600080fd5b602083019650945061421460408901613edf565b9350606088013591508082111561422a57600080fd5b506142378882890161406b565b9150509295509295909350565b600081518084526020808501945080840160005b8381101561427d5781516001600160601b031687529582019590820190600101614258565b509495945050505050565b60408152600083516040808401526142a36080840182614244565b90506020850151603f198483030160608501526142c08282614244565b925050508260208301529392505050565b60006001600160401b038311156142ea576142ea613c99565b6142fd601f8401601f1916602001613cfa565b905082815283838301111561431157600080fd5b828260208301376000602084830101529392505050565b60006020828403121561433a57600080fd5b81356001600160401b0381111561435057600080fd5b8201601f8101841361436157600080fd5b614370848235602084016142d1565b949350505050565b6000806040838503121561438b57600080fd5b82356001600160401b03808211156143a257600080fd5b90840190608082870312156143b657600080fd5b909250602084013590808211156143cc57600080fd5b506143d98582860161406b565b9150509250929050565b600082601f8301126143f457600080fd5b614403838335602085016142d1565b9392505050565b6000806040838503121561441d57600080fd5b823561442881613c4e565b915060208301356001600160401b038082111561444457600080fd5b908401906060828703121561445857600080fd5b60405160608101818110838211171561447357614473613c99565b60405282358281111561448557600080fd5b614491888286016143e3565b82525060208301356020820152604083013560408201528093505050509250929050565b6000806000606084860312156144ca57600080fd5b83356144d581613c4e565b925060208401356144e581613c4e565b915060408401356144f581613c4e565b809150509250925092565b60006020828403121561451257600080fd5b61440382613edf565b60006020828403121561452d57600080fd5b815161348b81613c4e565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60006020828403121561459457600080fd5b815161348b81613e88565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60008261461a57634e487b7160e01b600052601260045260246000fd5b500690565b60006020828403121561463157600080fd5b5051919050565b60006020828403121561464a57600080fd5b81516001600160c01b038116811461348b57600080fd5b60006020828403121561467357600080fd5b815161348b81613eb3565b634e487b7160e01b600052601160045260246000fd5b600082198211156146a7576146a761467e565b500190565b60006000198214156146c0576146c061467e565b5060010190565b80516001600160601b038116811461363957600080fd5b6000604082840312156146f057600080fd5b6146f8613caf565b825161470381613c4e565b8152614711602084016146c7565b60208201529392505050565b60008282101561472f5761472f61467e565b500390565b60006020828403121561474657600080fd5b815167ffffffffffffffff198116811461348b57600080fd5b60006020828403121561477157600080fd5b614403826146c7565b60006001600160601b038381169083168181101561479a5761479a61467e565b039392505050565b63ffffffff60e01b8360e01b1681526000600482018351602080860160005b838110156147dd578151855293820193908201906001016147c1565b5092979650505050505050565b6000815180845260005b81811015614810576020818501810151868301820152016147f4565b81811115614822576000602083870101525b50601f01601f19169290920160200192915050565b60208152600061440360208301846147ea565b600063ffffffff8083168185168083038211156148695761486961467e565b01949350505050565b60006080823603121561488457600080fd5b604051608081016001600160401b0382821081831117156148a7576148a7613c99565b816040528435835260208501359150808211156148c357600080fd5b6148cf368387016143e3565b602084015260408501359150808211156148e857600080fd5b506148f5368286016143e3565b60408301525061490760608401613edf565b606082015292915050565b6000808335601e1984360301811261492957600080fd5b8301803591506001600160401b0382111561494357600080fd5b60200191503681900382131561495857600080fd5b9250929050565b60006001600160601b03808316818516818304811182151516156149855761498561467e565b02949350505050565b60008160001904831182151516156149a8576149a861467e565b500290565b60208082526052908201527f536572766963654d616e61676572426173652e6f6e6c7952656769737472794360408201527f6f6f7264696e61746f723a2063616c6c6572206973206e6f742074686520726560608201527133b4b9ba393c9031b7b7b93234b730ba37b960711b608082015260a00190565b60018060a01b0383168152604060208201526000825160606040840152614a4f60a08401826147ea565b90506020840151606084015260408401516080840152809150509392505050565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b600061ffff80831681811415614ad657614ad661467e565b6001019392505050565b6000808335601e19843603018112614af757600080fd5b83016020810192503590506001600160401b03811115614b1657600080fd5b80360383131561495857600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60208152813560208201526000614b686020840184614ae0565b60806040850152614b7d60a085018284614b25565b915050614b8d6040850185614ae0565b848303601f19016060860152614ba4838284614b25565b9250505063ffffffff614bb960608601613edf565b166080840152809150509291505056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47456967656e4441536572766963654d616e616765722e636f6e6669726d426174424c535369676e6174757265436865636b65722e636865636b5369676e617475a2646970667358221220975ebaf67783e98574646f2924ea367183e2dcd0932f7583db941cd8df958f8f64736f6c634300080c0033", } // ContractEigenDAServiceManagerABI is the input ABI used to generate the binding from. @@ -82,7 +89,7 @@ var ContractEigenDAServiceManagerABI = ContractEigenDAServiceManagerMetaData.ABI var ContractEigenDAServiceManagerBin = ContractEigenDAServiceManagerMetaData.Bin // DeployContractEigenDAServiceManager deploys a new Ethereum contract, binding an instance of ContractEigenDAServiceManager to it. -func DeployContractEigenDAServiceManager(auth *bind.TransactOpts, backend bind.ContractBackend, _registryCoordinator common.Address, _strategyManager common.Address, _delegationMananger common.Address, _slasher common.Address) (common.Address, *types.Transaction, *ContractEigenDAServiceManager, error) { +func DeployContractEigenDAServiceManager(auth *bind.TransactOpts, backend bind.ContractBackend, __avsDirectory common.Address, __registryCoordinator common.Address, __stakeRegistry common.Address) (common.Address, *types.Transaction, *ContractEigenDAServiceManager, error) { parsed, err := ContractEigenDAServiceManagerMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -91,7 +98,7 @@ func DeployContractEigenDAServiceManager(auth *bind.TransactOpts, backend bind.C return common.Address{}, nil, nil, errors.New("GetABI returned nil") } - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ContractEigenDAServiceManagerBin), backend, _registryCoordinator, _strategyManager, _delegationMananger, _slasher) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ContractEigenDAServiceManagerBin), backend, __avsDirectory, __registryCoordinator, __stakeRegistry) if err != nil { return common.Address{}, nil, nil, err } @@ -333,6 +340,68 @@ func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerCallerSession return _ContractEigenDAServiceManager.Contract.THRESHOLDDENOMINATOR(&_ContractEigenDAServiceManager.CallOpts) } +// AvsDirectory is a free data retrieval call binding the contract method 0x6b3aa72e. +// +// Solidity: function avsDirectory() view returns(address) +func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerCaller) AvsDirectory(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ContractEigenDAServiceManager.contract.Call(opts, &out, "avsDirectory") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// AvsDirectory is a free data retrieval call binding the contract method 0x6b3aa72e. +// +// Solidity: function avsDirectory() view returns(address) +func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerSession) AvsDirectory() (common.Address, error) { + return _ContractEigenDAServiceManager.Contract.AvsDirectory(&_ContractEigenDAServiceManager.CallOpts) +} + +// AvsDirectory is a free data retrieval call binding the contract method 0x6b3aa72e. +// +// Solidity: function avsDirectory() view returns(address) +func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerCallerSession) AvsDirectory() (common.Address, error) { + return _ContractEigenDAServiceManager.Contract.AvsDirectory(&_ContractEigenDAServiceManager.CallOpts) +} + +// BatchConfirmer is a free data retrieval call binding the contract method 0x39f309d5. +// +// Solidity: function batchConfirmer() view returns(address) +func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerCaller) BatchConfirmer(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ContractEigenDAServiceManager.contract.Call(opts, &out, "batchConfirmer") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// BatchConfirmer is a free data retrieval call binding the contract method 0x39f309d5. +// +// Solidity: function batchConfirmer() view returns(address) +func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerSession) BatchConfirmer() (common.Address, error) { + return _ContractEigenDAServiceManager.Contract.BatchConfirmer(&_ContractEigenDAServiceManager.CallOpts) +} + +// BatchConfirmer is a free data retrieval call binding the contract method 0x39f309d5. +// +// Solidity: function batchConfirmer() view returns(address) +func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerCallerSession) BatchConfirmer() (common.Address, error) { + return _ContractEigenDAServiceManager.Contract.BatchConfirmer(&_ContractEigenDAServiceManager.CallOpts) +} + // BatchId is a free data retrieval call binding the contract method 0x4972134a. // // Solidity: function batchId() view returns(uint32) @@ -395,12 +464,12 @@ func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerCallerSession return _ContractEigenDAServiceManager.Contract.BatchIdToBatchMetadataHash(&_ContractEigenDAServiceManager.CallOpts, arg0) } -// BlsPubkeyRegistry is a free data retrieval call binding the contract method 0x3561deb1. +// BlsApkRegistry is a free data retrieval call binding the contract method 0x5df45946. // -// Solidity: function blsPubkeyRegistry() view returns(address) -func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerCaller) BlsPubkeyRegistry(opts *bind.CallOpts) (common.Address, error) { +// Solidity: function blsApkRegistry() view returns(address) +func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerCaller) BlsApkRegistry(opts *bind.CallOpts) (common.Address, error) { var out []interface{} - err := _ContractEigenDAServiceManager.contract.Call(opts, &out, "blsPubkeyRegistry") + err := _ContractEigenDAServiceManager.contract.Call(opts, &out, "blsApkRegistry") if err != nil { return *new(common.Address), err @@ -412,57 +481,26 @@ func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerCaller) BlsPu } -// BlsPubkeyRegistry is a free data retrieval call binding the contract method 0x3561deb1. -// -// Solidity: function blsPubkeyRegistry() view returns(address) -func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerSession) BlsPubkeyRegistry() (common.Address, error) { - return _ContractEigenDAServiceManager.Contract.BlsPubkeyRegistry(&_ContractEigenDAServiceManager.CallOpts) -} - -// BlsPubkeyRegistry is a free data retrieval call binding the contract method 0x3561deb1. -// -// Solidity: function blsPubkeyRegistry() view returns(address) -func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerCallerSession) BlsPubkeyRegistry() (common.Address, error) { - return _ContractEigenDAServiceManager.Contract.BlsPubkeyRegistry(&_ContractEigenDAServiceManager.CallOpts) -} - -// CalculateFee is a free data retrieval call binding the contract method 0x39fe2e71. -// -// Solidity: function calculateFee(uint256 totalBytes, uint256 _feePerBytePerTime, uint32 storePeriodLength) pure returns(uint256) -func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerCaller) CalculateFee(opts *bind.CallOpts, totalBytes *big.Int, _feePerBytePerTime *big.Int, storePeriodLength uint32) (*big.Int, error) { - var out []interface{} - err := _ContractEigenDAServiceManager.contract.Call(opts, &out, "calculateFee", totalBytes, _feePerBytePerTime, storePeriodLength) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// CalculateFee is a free data retrieval call binding the contract method 0x39fe2e71. +// BlsApkRegistry is a free data retrieval call binding the contract method 0x5df45946. // -// Solidity: function calculateFee(uint256 totalBytes, uint256 _feePerBytePerTime, uint32 storePeriodLength) pure returns(uint256) -func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerSession) CalculateFee(totalBytes *big.Int, _feePerBytePerTime *big.Int, storePeriodLength uint32) (*big.Int, error) { - return _ContractEigenDAServiceManager.Contract.CalculateFee(&_ContractEigenDAServiceManager.CallOpts, totalBytes, _feePerBytePerTime, storePeriodLength) +// Solidity: function blsApkRegistry() view returns(address) +func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerSession) BlsApkRegistry() (common.Address, error) { + return _ContractEigenDAServiceManager.Contract.BlsApkRegistry(&_ContractEigenDAServiceManager.CallOpts) } -// CalculateFee is a free data retrieval call binding the contract method 0x39fe2e71. +// BlsApkRegistry is a free data retrieval call binding the contract method 0x5df45946. // -// Solidity: function calculateFee(uint256 totalBytes, uint256 _feePerBytePerTime, uint32 storePeriodLength) pure returns(uint256) -func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerCallerSession) CalculateFee(totalBytes *big.Int, _feePerBytePerTime *big.Int, storePeriodLength uint32) (*big.Int, error) { - return _ContractEigenDAServiceManager.Contract.CalculateFee(&_ContractEigenDAServiceManager.CallOpts, totalBytes, _feePerBytePerTime, storePeriodLength) +// Solidity: function blsApkRegistry() view returns(address) +func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerCallerSession) BlsApkRegistry() (common.Address, error) { + return _ContractEigenDAServiceManager.Contract.BlsApkRegistry(&_ContractEigenDAServiceManager.CallOpts) } // CheckSignatures is a free data retrieval call binding the contract method 0x6efb4636. // -// Solidity: function checkSignatures(bytes32 msgHash, bytes quorumNumbers, uint32 referenceBlockNumber, (uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]) nonSignerStakesAndSignature) view returns((uint96[],uint96[]), bytes32) -func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerCaller) CheckSignatures(opts *bind.CallOpts, msgHash [32]byte, quorumNumbers []byte, referenceBlockNumber uint32, nonSignerStakesAndSignature IBLSSignatureCheckerNonSignerStakesAndSignature) (IBLSSignatureCheckerQuorumStakeTotals, [32]byte, error) { +// Solidity: function checkSignatures(bytes32 msgHash, bytes quorumNumbers, uint32 referenceBlockNumber, (uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]) params) view returns((uint96[],uint96[]), bytes32) +func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerCaller) CheckSignatures(opts *bind.CallOpts, msgHash [32]byte, quorumNumbers []byte, referenceBlockNumber uint32, params IBLSSignatureCheckerNonSignerStakesAndSignature) (IBLSSignatureCheckerQuorumStakeTotals, [32]byte, error) { var out []interface{} - err := _ContractEigenDAServiceManager.contract.Call(opts, &out, "checkSignatures", msgHash, quorumNumbers, referenceBlockNumber, nonSignerStakesAndSignature) + err := _ContractEigenDAServiceManager.contract.Call(opts, &out, "checkSignatures", msgHash, quorumNumbers, referenceBlockNumber, params) if err != nil { return *new(IBLSSignatureCheckerQuorumStakeTotals), *new([32]byte), err @@ -477,24 +515,24 @@ func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerCaller) Check // CheckSignatures is a free data retrieval call binding the contract method 0x6efb4636. // -// Solidity: function checkSignatures(bytes32 msgHash, bytes quorumNumbers, uint32 referenceBlockNumber, (uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]) nonSignerStakesAndSignature) view returns((uint96[],uint96[]), bytes32) -func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerSession) CheckSignatures(msgHash [32]byte, quorumNumbers []byte, referenceBlockNumber uint32, nonSignerStakesAndSignature IBLSSignatureCheckerNonSignerStakesAndSignature) (IBLSSignatureCheckerQuorumStakeTotals, [32]byte, error) { - return _ContractEigenDAServiceManager.Contract.CheckSignatures(&_ContractEigenDAServiceManager.CallOpts, msgHash, quorumNumbers, referenceBlockNumber, nonSignerStakesAndSignature) +// Solidity: function checkSignatures(bytes32 msgHash, bytes quorumNumbers, uint32 referenceBlockNumber, (uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]) params) view returns((uint96[],uint96[]), bytes32) +func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerSession) CheckSignatures(msgHash [32]byte, quorumNumbers []byte, referenceBlockNumber uint32, params IBLSSignatureCheckerNonSignerStakesAndSignature) (IBLSSignatureCheckerQuorumStakeTotals, [32]byte, error) { + return _ContractEigenDAServiceManager.Contract.CheckSignatures(&_ContractEigenDAServiceManager.CallOpts, msgHash, quorumNumbers, referenceBlockNumber, params) } // CheckSignatures is a free data retrieval call binding the contract method 0x6efb4636. // -// Solidity: function checkSignatures(bytes32 msgHash, bytes quorumNumbers, uint32 referenceBlockNumber, (uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]) nonSignerStakesAndSignature) view returns((uint96[],uint96[]), bytes32) -func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerCallerSession) CheckSignatures(msgHash [32]byte, quorumNumbers []byte, referenceBlockNumber uint32, nonSignerStakesAndSignature IBLSSignatureCheckerNonSignerStakesAndSignature) (IBLSSignatureCheckerQuorumStakeTotals, [32]byte, error) { - return _ContractEigenDAServiceManager.Contract.CheckSignatures(&_ContractEigenDAServiceManager.CallOpts, msgHash, quorumNumbers, referenceBlockNumber, nonSignerStakesAndSignature) +// Solidity: function checkSignatures(bytes32 msgHash, bytes quorumNumbers, uint32 referenceBlockNumber, (uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]) params) view returns((uint96[],uint96[]), bytes32) +func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerCallerSession) CheckSignatures(msgHash [32]byte, quorumNumbers []byte, referenceBlockNumber uint32, params IBLSSignatureCheckerNonSignerStakesAndSignature) (IBLSSignatureCheckerQuorumStakeTotals, [32]byte, error) { + return _ContractEigenDAServiceManager.Contract.CheckSignatures(&_ContractEigenDAServiceManager.CallOpts, msgHash, quorumNumbers, referenceBlockNumber, params) } -// DelegationManager is a free data retrieval call binding the contract method 0xea4d3c9b. +// Delegation is a free data retrieval call binding the contract method 0xdf5cf723. // -// Solidity: function delegationManager() view returns(address) -func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerCaller) DelegationManager(opts *bind.CallOpts) (common.Address, error) { +// Solidity: function delegation() view returns(address) +func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerCaller) Delegation(opts *bind.CallOpts) (common.Address, error) { var out []interface{} - err := _ContractEigenDAServiceManager.contract.Call(opts, &out, "delegationManager") + err := _ContractEigenDAServiceManager.contract.Call(opts, &out, "delegation") if err != nil { return *new(common.Address), err @@ -506,80 +544,80 @@ func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerCaller) Deleg } -// DelegationManager is a free data retrieval call binding the contract method 0xea4d3c9b. +// Delegation is a free data retrieval call binding the contract method 0xdf5cf723. // -// Solidity: function delegationManager() view returns(address) -func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerSession) DelegationManager() (common.Address, error) { - return _ContractEigenDAServiceManager.Contract.DelegationManager(&_ContractEigenDAServiceManager.CallOpts) +// Solidity: function delegation() view returns(address) +func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerSession) Delegation() (common.Address, error) { + return _ContractEigenDAServiceManager.Contract.Delegation(&_ContractEigenDAServiceManager.CallOpts) } -// DelegationManager is a free data retrieval call binding the contract method 0xea4d3c9b. +// Delegation is a free data retrieval call binding the contract method 0xdf5cf723. // -// Solidity: function delegationManager() view returns(address) -func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerCallerSession) DelegationManager() (common.Address, error) { - return _ContractEigenDAServiceManager.Contract.DelegationManager(&_ContractEigenDAServiceManager.CallOpts) +// Solidity: function delegation() view returns(address) +func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerCallerSession) Delegation() (common.Address, error) { + return _ContractEigenDAServiceManager.Contract.Delegation(&_ContractEigenDAServiceManager.CallOpts) } -// FeePerBytePerTime is a free data retrieval call binding the contract method 0xd21eed4f. +// GetOperatorRestakedStrategies is a free data retrieval call binding the contract method 0x33cfb7b7. // -// Solidity: function feePerBytePerTime() view returns(uint256) -func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerCaller) FeePerBytePerTime(opts *bind.CallOpts) (*big.Int, error) { +// Solidity: function getOperatorRestakedStrategies(address operator) view returns(address[]) +func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerCaller) GetOperatorRestakedStrategies(opts *bind.CallOpts, operator common.Address) ([]common.Address, error) { var out []interface{} - err := _ContractEigenDAServiceManager.contract.Call(opts, &out, "feePerBytePerTime") + err := _ContractEigenDAServiceManager.contract.Call(opts, &out, "getOperatorRestakedStrategies", operator) if err != nil { - return *new(*big.Int), err + return *new([]common.Address), err } - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) return out0, err } -// FeePerBytePerTime is a free data retrieval call binding the contract method 0xd21eed4f. +// GetOperatorRestakedStrategies is a free data retrieval call binding the contract method 0x33cfb7b7. // -// Solidity: function feePerBytePerTime() view returns(uint256) -func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerSession) FeePerBytePerTime() (*big.Int, error) { - return _ContractEigenDAServiceManager.Contract.FeePerBytePerTime(&_ContractEigenDAServiceManager.CallOpts) +// Solidity: function getOperatorRestakedStrategies(address operator) view returns(address[]) +func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerSession) GetOperatorRestakedStrategies(operator common.Address) ([]common.Address, error) { + return _ContractEigenDAServiceManager.Contract.GetOperatorRestakedStrategies(&_ContractEigenDAServiceManager.CallOpts, operator) } -// FeePerBytePerTime is a free data retrieval call binding the contract method 0xd21eed4f. +// GetOperatorRestakedStrategies is a free data retrieval call binding the contract method 0x33cfb7b7. // -// Solidity: function feePerBytePerTime() view returns(uint256) -func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerCallerSession) FeePerBytePerTime() (*big.Int, error) { - return _ContractEigenDAServiceManager.Contract.FeePerBytePerTime(&_ContractEigenDAServiceManager.CallOpts) +// Solidity: function getOperatorRestakedStrategies(address operator) view returns(address[]) +func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerCallerSession) GetOperatorRestakedStrategies(operator common.Address) ([]common.Address, error) { + return _ContractEigenDAServiceManager.Contract.GetOperatorRestakedStrategies(&_ContractEigenDAServiceManager.CallOpts, operator) } -// FeeSetter is a free data retrieval call binding the contract method 0x87cf3ef4. +// GetRestakeableStrategies is a free data retrieval call binding the contract method 0xe481af9d. // -// Solidity: function feeSetter() view returns(address) -func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerCaller) FeeSetter(opts *bind.CallOpts) (common.Address, error) { +// Solidity: function getRestakeableStrategies() view returns(address[]) +func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerCaller) GetRestakeableStrategies(opts *bind.CallOpts) ([]common.Address, error) { var out []interface{} - err := _ContractEigenDAServiceManager.contract.Call(opts, &out, "feeSetter") + err := _ContractEigenDAServiceManager.contract.Call(opts, &out, "getRestakeableStrategies") if err != nil { - return *new(common.Address), err + return *new([]common.Address), err } - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) return out0, err } -// FeeSetter is a free data retrieval call binding the contract method 0x87cf3ef4. +// GetRestakeableStrategies is a free data retrieval call binding the contract method 0xe481af9d. // -// Solidity: function feeSetter() view returns(address) -func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerSession) FeeSetter() (common.Address, error) { - return _ContractEigenDAServiceManager.Contract.FeeSetter(&_ContractEigenDAServiceManager.CallOpts) +// Solidity: function getRestakeableStrategies() view returns(address[]) +func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerSession) GetRestakeableStrategies() ([]common.Address, error) { + return _ContractEigenDAServiceManager.Contract.GetRestakeableStrategies(&_ContractEigenDAServiceManager.CallOpts) } -// FeeSetter is a free data retrieval call binding the contract method 0x87cf3ef4. +// GetRestakeableStrategies is a free data retrieval call binding the contract method 0xe481af9d. // -// Solidity: function feeSetter() view returns(address) -func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerCallerSession) FeeSetter() (common.Address, error) { - return _ContractEigenDAServiceManager.Contract.FeeSetter(&_ContractEigenDAServiceManager.CallOpts) +// Solidity: function getRestakeableStrategies() view returns(address[]) +func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerCallerSession) GetRestakeableStrategies() ([]common.Address, error) { + return _ContractEigenDAServiceManager.Contract.GetRestakeableStrategies(&_ContractEigenDAServiceManager.CallOpts) } // LatestServeUntilBlock is a free data retrieval call binding the contract method 0x758f8dba. @@ -768,37 +806,6 @@ func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerCallerSession return _ContractEigenDAServiceManager.Contract.RegistryCoordinator(&_ContractEigenDAServiceManager.CallOpts) } -// Slasher is a free data retrieval call binding the contract method 0xb1344271. -// -// Solidity: function slasher() view returns(address) -func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerCaller) Slasher(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _ContractEigenDAServiceManager.contract.Call(opts, &out, "slasher") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// Slasher is a free data retrieval call binding the contract method 0xb1344271. -// -// Solidity: function slasher() view returns(address) -func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerSession) Slasher() (common.Address, error) { - return _ContractEigenDAServiceManager.Contract.Slasher(&_ContractEigenDAServiceManager.CallOpts) -} - -// Slasher is a free data retrieval call binding the contract method 0xb1344271. -// -// Solidity: function slasher() view returns(address) -func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerCallerSession) Slasher() (common.Address, error) { - return _ContractEigenDAServiceManager.Contract.Slasher(&_ContractEigenDAServiceManager.CallOpts) -} - // StakeRegistry is a free data retrieval call binding the contract method 0x68304835. // // Solidity: function stakeRegistry() view returns(address) @@ -830,35 +837,35 @@ func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerCallerSession return _ContractEigenDAServiceManager.Contract.StakeRegistry(&_ContractEigenDAServiceManager.CallOpts) } -// StrategyManager is a free data retrieval call binding the contract method 0x39b70e38. +// StaleStakesForbidden is a free data retrieval call binding the contract method 0xb98d0908. // -// Solidity: function strategyManager() view returns(address) -func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerCaller) StrategyManager(opts *bind.CallOpts) (common.Address, error) { +// Solidity: function staleStakesForbidden() view returns(bool) +func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerCaller) StaleStakesForbidden(opts *bind.CallOpts) (bool, error) { var out []interface{} - err := _ContractEigenDAServiceManager.contract.Call(opts, &out, "strategyManager") + err := _ContractEigenDAServiceManager.contract.Call(opts, &out, "staleStakesForbidden") if err != nil { - return *new(common.Address), err + return *new(bool), err } - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) return out0, err } -// StrategyManager is a free data retrieval call binding the contract method 0x39b70e38. +// StaleStakesForbidden is a free data retrieval call binding the contract method 0xb98d0908. // -// Solidity: function strategyManager() view returns(address) -func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerSession) StrategyManager() (common.Address, error) { - return _ContractEigenDAServiceManager.Contract.StrategyManager(&_ContractEigenDAServiceManager.CallOpts) +// Solidity: function staleStakesForbidden() view returns(bool) +func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerSession) StaleStakesForbidden() (bool, error) { + return _ContractEigenDAServiceManager.Contract.StaleStakesForbidden(&_ContractEigenDAServiceManager.CallOpts) } -// StrategyManager is a free data retrieval call binding the contract method 0x39b70e38. +// StaleStakesForbidden is a free data retrieval call binding the contract method 0xb98d0908. // -// Solidity: function strategyManager() view returns(address) -func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerCallerSession) StrategyManager() (common.Address, error) { - return _ContractEigenDAServiceManager.Contract.StrategyManager(&_ContractEigenDAServiceManager.CallOpts) +// Solidity: function staleStakesForbidden() view returns(bool) +func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerCallerSession) StaleStakesForbidden() (bool, error) { + return _ContractEigenDAServiceManager.Contract.StaleStakesForbidden(&_ContractEigenDAServiceManager.CallOpts) } // TaskNumber is a free data retrieval call binding the contract method 0x72d18e8d. @@ -958,46 +965,67 @@ func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerTransactorSes return _ContractEigenDAServiceManager.Contract.ConfirmBatch(&_ContractEigenDAServiceManager.TransactOpts, batchHeader, nonSignerStakesAndSignature) } -// FreezeOperator is a paid mutator transaction binding the contract method 0x38c8ee64. +// DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. +// +// Solidity: function deregisterOperatorFromAVS(address operator) returns() +func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerTransactor) DeregisterOperatorFromAVS(opts *bind.TransactOpts, operator common.Address) (*types.Transaction, error) { + return _ContractEigenDAServiceManager.contract.Transact(opts, "deregisterOperatorFromAVS", operator) +} + +// DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. +// +// Solidity: function deregisterOperatorFromAVS(address operator) returns() +func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerSession) DeregisterOperatorFromAVS(operator common.Address) (*types.Transaction, error) { + return _ContractEigenDAServiceManager.Contract.DeregisterOperatorFromAVS(&_ContractEigenDAServiceManager.TransactOpts, operator) +} + +// DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. +// +// Solidity: function deregisterOperatorFromAVS(address operator) returns() +func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerTransactorSession) DeregisterOperatorFromAVS(operator common.Address) (*types.Transaction, error) { + return _ContractEigenDAServiceManager.Contract.DeregisterOperatorFromAVS(&_ContractEigenDAServiceManager.TransactOpts, operator) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc0c53b8b. // -// Solidity: function freezeOperator(address ) returns() -func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerTransactor) FreezeOperator(opts *bind.TransactOpts, arg0 common.Address) (*types.Transaction, error) { - return _ContractEigenDAServiceManager.contract.Transact(opts, "freezeOperator", arg0) +// Solidity: function initialize(address _pauserRegistry, address _initialOwner, address _batchConfirmer) returns() +func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerTransactor) Initialize(opts *bind.TransactOpts, _pauserRegistry common.Address, _initialOwner common.Address, _batchConfirmer common.Address) (*types.Transaction, error) { + return _ContractEigenDAServiceManager.contract.Transact(opts, "initialize", _pauserRegistry, _initialOwner, _batchConfirmer) } -// FreezeOperator is a paid mutator transaction binding the contract method 0x38c8ee64. +// Initialize is a paid mutator transaction binding the contract method 0xc0c53b8b. // -// Solidity: function freezeOperator(address ) returns() -func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerSession) FreezeOperator(arg0 common.Address) (*types.Transaction, error) { - return _ContractEigenDAServiceManager.Contract.FreezeOperator(&_ContractEigenDAServiceManager.TransactOpts, arg0) +// Solidity: function initialize(address _pauserRegistry, address _initialOwner, address _batchConfirmer) returns() +func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerSession) Initialize(_pauserRegistry common.Address, _initialOwner common.Address, _batchConfirmer common.Address) (*types.Transaction, error) { + return _ContractEigenDAServiceManager.Contract.Initialize(&_ContractEigenDAServiceManager.TransactOpts, _pauserRegistry, _initialOwner, _batchConfirmer) } -// FreezeOperator is a paid mutator transaction binding the contract method 0x38c8ee64. +// Initialize is a paid mutator transaction binding the contract method 0xc0c53b8b. // -// Solidity: function freezeOperator(address ) returns() -func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerTransactorSession) FreezeOperator(arg0 common.Address) (*types.Transaction, error) { - return _ContractEigenDAServiceManager.Contract.FreezeOperator(&_ContractEigenDAServiceManager.TransactOpts, arg0) +// Solidity: function initialize(address _pauserRegistry, address _initialOwner, address _batchConfirmer) returns() +func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerTransactorSession) Initialize(_pauserRegistry common.Address, _initialOwner common.Address, _batchConfirmer common.Address) (*types.Transaction, error) { + return _ContractEigenDAServiceManager.Contract.Initialize(&_ContractEigenDAServiceManager.TransactOpts, _pauserRegistry, _initialOwner, _batchConfirmer) } -// Initialize is a paid mutator transaction binding the contract method 0xbe203094. +// Initialize0 is a paid mutator transaction binding the contract method 0xc4d66de8. // -// Solidity: function initialize(address _pauserRegistry, address initialOwner, uint256 _feePerBytePerTime, address _feeSetter) returns() -func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerTransactor) Initialize(opts *bind.TransactOpts, _pauserRegistry common.Address, initialOwner common.Address, _feePerBytePerTime *big.Int, _feeSetter common.Address) (*types.Transaction, error) { - return _ContractEigenDAServiceManager.contract.Transact(opts, "initialize", _pauserRegistry, initialOwner, _feePerBytePerTime, _feeSetter) +// Solidity: function initialize(address initialOwner) returns() +func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerTransactor) Initialize0(opts *bind.TransactOpts, initialOwner common.Address) (*types.Transaction, error) { + return _ContractEigenDAServiceManager.contract.Transact(opts, "initialize0", initialOwner) } -// Initialize is a paid mutator transaction binding the contract method 0xbe203094. +// Initialize0 is a paid mutator transaction binding the contract method 0xc4d66de8. // -// Solidity: function initialize(address _pauserRegistry, address initialOwner, uint256 _feePerBytePerTime, address _feeSetter) returns() -func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerSession) Initialize(_pauserRegistry common.Address, initialOwner common.Address, _feePerBytePerTime *big.Int, _feeSetter common.Address) (*types.Transaction, error) { - return _ContractEigenDAServiceManager.Contract.Initialize(&_ContractEigenDAServiceManager.TransactOpts, _pauserRegistry, initialOwner, _feePerBytePerTime, _feeSetter) +// Solidity: function initialize(address initialOwner) returns() +func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerSession) Initialize0(initialOwner common.Address) (*types.Transaction, error) { + return _ContractEigenDAServiceManager.Contract.Initialize0(&_ContractEigenDAServiceManager.TransactOpts, initialOwner) } -// Initialize is a paid mutator transaction binding the contract method 0xbe203094. +// Initialize0 is a paid mutator transaction binding the contract method 0xc4d66de8. // -// Solidity: function initialize(address _pauserRegistry, address initialOwner, uint256 _feePerBytePerTime, address _feeSetter) returns() -func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerTransactorSession) Initialize(_pauserRegistry common.Address, initialOwner common.Address, _feePerBytePerTime *big.Int, _feeSetter common.Address) (*types.Transaction, error) { - return _ContractEigenDAServiceManager.Contract.Initialize(&_ContractEigenDAServiceManager.TransactOpts, _pauserRegistry, initialOwner, _feePerBytePerTime, _feeSetter) +// Solidity: function initialize(address initialOwner) returns() +func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerTransactorSession) Initialize0(initialOwner common.Address) (*types.Transaction, error) { + return _ContractEigenDAServiceManager.Contract.Initialize0(&_ContractEigenDAServiceManager.TransactOpts, initialOwner) } // Pause is a paid mutator transaction binding the contract method 0x136439dd. @@ -1042,67 +1070,25 @@ func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerTransactorSes return _ContractEigenDAServiceManager.Contract.PauseAll(&_ContractEigenDAServiceManager.TransactOpts) } -// RecordFirstStakeUpdate is a paid mutator transaction binding the contract method 0x175d3205. +// RegisterOperatorToAVS is a paid mutator transaction binding the contract method 0x9926ee7d. // -// Solidity: function recordFirstStakeUpdate(address operator, uint32 serveUntilBlock) returns() -func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerTransactor) RecordFirstStakeUpdate(opts *bind.TransactOpts, operator common.Address, serveUntilBlock uint32) (*types.Transaction, error) { - return _ContractEigenDAServiceManager.contract.Transact(opts, "recordFirstStakeUpdate", operator, serveUntilBlock) +// Solidity: function registerOperatorToAVS(address operator, (bytes,bytes32,uint256) operatorSignature) returns() +func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerTransactor) RegisterOperatorToAVS(opts *bind.TransactOpts, operator common.Address, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _ContractEigenDAServiceManager.contract.Transact(opts, "registerOperatorToAVS", operator, operatorSignature) } -// RecordFirstStakeUpdate is a paid mutator transaction binding the contract method 0x175d3205. +// RegisterOperatorToAVS is a paid mutator transaction binding the contract method 0x9926ee7d. // -// Solidity: function recordFirstStakeUpdate(address operator, uint32 serveUntilBlock) returns() -func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerSession) RecordFirstStakeUpdate(operator common.Address, serveUntilBlock uint32) (*types.Transaction, error) { - return _ContractEigenDAServiceManager.Contract.RecordFirstStakeUpdate(&_ContractEigenDAServiceManager.TransactOpts, operator, serveUntilBlock) +// Solidity: function registerOperatorToAVS(address operator, (bytes,bytes32,uint256) operatorSignature) returns() +func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerSession) RegisterOperatorToAVS(operator common.Address, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _ContractEigenDAServiceManager.Contract.RegisterOperatorToAVS(&_ContractEigenDAServiceManager.TransactOpts, operator, operatorSignature) } -// RecordFirstStakeUpdate is a paid mutator transaction binding the contract method 0x175d3205. +// RegisterOperatorToAVS is a paid mutator transaction binding the contract method 0x9926ee7d. // -// Solidity: function recordFirstStakeUpdate(address operator, uint32 serveUntilBlock) returns() -func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerTransactorSession) RecordFirstStakeUpdate(operator common.Address, serveUntilBlock uint32) (*types.Transaction, error) { - return _ContractEigenDAServiceManager.Contract.RecordFirstStakeUpdate(&_ContractEigenDAServiceManager.TransactOpts, operator, serveUntilBlock) -} - -// RecordLastStakeUpdateAndRevokeSlashingAbility is a paid mutator transaction binding the contract method 0x0ffabbce. -// -// Solidity: function recordLastStakeUpdateAndRevokeSlashingAbility(address operator, uint32 serveUntilBlock) returns() -func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerTransactor) RecordLastStakeUpdateAndRevokeSlashingAbility(opts *bind.TransactOpts, operator common.Address, serveUntilBlock uint32) (*types.Transaction, error) { - return _ContractEigenDAServiceManager.contract.Transact(opts, "recordLastStakeUpdateAndRevokeSlashingAbility", operator, serveUntilBlock) -} - -// RecordLastStakeUpdateAndRevokeSlashingAbility is a paid mutator transaction binding the contract method 0x0ffabbce. -// -// Solidity: function recordLastStakeUpdateAndRevokeSlashingAbility(address operator, uint32 serveUntilBlock) returns() -func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerSession) RecordLastStakeUpdateAndRevokeSlashingAbility(operator common.Address, serveUntilBlock uint32) (*types.Transaction, error) { - return _ContractEigenDAServiceManager.Contract.RecordLastStakeUpdateAndRevokeSlashingAbility(&_ContractEigenDAServiceManager.TransactOpts, operator, serveUntilBlock) -} - -// RecordLastStakeUpdateAndRevokeSlashingAbility is a paid mutator transaction binding the contract method 0x0ffabbce. -// -// Solidity: function recordLastStakeUpdateAndRevokeSlashingAbility(address operator, uint32 serveUntilBlock) returns() -func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerTransactorSession) RecordLastStakeUpdateAndRevokeSlashingAbility(operator common.Address, serveUntilBlock uint32) (*types.Transaction, error) { - return _ContractEigenDAServiceManager.Contract.RecordLastStakeUpdateAndRevokeSlashingAbility(&_ContractEigenDAServiceManager.TransactOpts, operator, serveUntilBlock) -} - -// RecordStakeUpdate is a paid mutator transaction binding the contract method 0xc747075b. -// -// Solidity: function recordStakeUpdate(address operator, uint32 updateBlock, uint32 serveUntilBlock, uint256 prevElement) returns() -func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerTransactor) RecordStakeUpdate(opts *bind.TransactOpts, operator common.Address, updateBlock uint32, serveUntilBlock uint32, prevElement *big.Int) (*types.Transaction, error) { - return _ContractEigenDAServiceManager.contract.Transact(opts, "recordStakeUpdate", operator, updateBlock, serveUntilBlock, prevElement) -} - -// RecordStakeUpdate is a paid mutator transaction binding the contract method 0xc747075b. -// -// Solidity: function recordStakeUpdate(address operator, uint32 updateBlock, uint32 serveUntilBlock, uint256 prevElement) returns() -func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerSession) RecordStakeUpdate(operator common.Address, updateBlock uint32, serveUntilBlock uint32, prevElement *big.Int) (*types.Transaction, error) { - return _ContractEigenDAServiceManager.Contract.RecordStakeUpdate(&_ContractEigenDAServiceManager.TransactOpts, operator, updateBlock, serveUntilBlock, prevElement) -} - -// RecordStakeUpdate is a paid mutator transaction binding the contract method 0xc747075b. -// -// Solidity: function recordStakeUpdate(address operator, uint32 updateBlock, uint32 serveUntilBlock, uint256 prevElement) returns() -func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerTransactorSession) RecordStakeUpdate(operator common.Address, updateBlock uint32, serveUntilBlock uint32, prevElement *big.Int) (*types.Transaction, error) { - return _ContractEigenDAServiceManager.Contract.RecordStakeUpdate(&_ContractEigenDAServiceManager.TransactOpts, operator, updateBlock, serveUntilBlock, prevElement) +// Solidity: function registerOperatorToAVS(address operator, (bytes,bytes32,uint256) operatorSignature) returns() +func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerTransactorSession) RegisterOperatorToAVS(operator common.Address, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _ContractEigenDAServiceManager.Contract.RegisterOperatorToAVS(&_ContractEigenDAServiceManager.TransactOpts, operator, operatorSignature) } // RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. @@ -1126,46 +1112,46 @@ func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerTransactorSes return _ContractEigenDAServiceManager.Contract.RenounceOwnership(&_ContractEigenDAServiceManager.TransactOpts) } -// SetFeePerBytePerTime is a paid mutator transaction binding the contract method 0x772eefe3. +// SetBatchConfirmer is a paid mutator transaction binding the contract method 0xf1220983. // -// Solidity: function setFeePerBytePerTime(uint256 _feePerBytePerTime) returns() -func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerTransactor) SetFeePerBytePerTime(opts *bind.TransactOpts, _feePerBytePerTime *big.Int) (*types.Transaction, error) { - return _ContractEigenDAServiceManager.contract.Transact(opts, "setFeePerBytePerTime", _feePerBytePerTime) +// Solidity: function setBatchConfirmer(address _batchConfirmer) returns() +func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerTransactor) SetBatchConfirmer(opts *bind.TransactOpts, _batchConfirmer common.Address) (*types.Transaction, error) { + return _ContractEigenDAServiceManager.contract.Transact(opts, "setBatchConfirmer", _batchConfirmer) } -// SetFeePerBytePerTime is a paid mutator transaction binding the contract method 0x772eefe3. +// SetBatchConfirmer is a paid mutator transaction binding the contract method 0xf1220983. // -// Solidity: function setFeePerBytePerTime(uint256 _feePerBytePerTime) returns() -func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerSession) SetFeePerBytePerTime(_feePerBytePerTime *big.Int) (*types.Transaction, error) { - return _ContractEigenDAServiceManager.Contract.SetFeePerBytePerTime(&_ContractEigenDAServiceManager.TransactOpts, _feePerBytePerTime) +// Solidity: function setBatchConfirmer(address _batchConfirmer) returns() +func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerSession) SetBatchConfirmer(_batchConfirmer common.Address) (*types.Transaction, error) { + return _ContractEigenDAServiceManager.Contract.SetBatchConfirmer(&_ContractEigenDAServiceManager.TransactOpts, _batchConfirmer) } -// SetFeePerBytePerTime is a paid mutator transaction binding the contract method 0x772eefe3. +// SetBatchConfirmer is a paid mutator transaction binding the contract method 0xf1220983. // -// Solidity: function setFeePerBytePerTime(uint256 _feePerBytePerTime) returns() -func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerTransactorSession) SetFeePerBytePerTime(_feePerBytePerTime *big.Int) (*types.Transaction, error) { - return _ContractEigenDAServiceManager.Contract.SetFeePerBytePerTime(&_ContractEigenDAServiceManager.TransactOpts, _feePerBytePerTime) +// Solidity: function setBatchConfirmer(address _batchConfirmer) returns() +func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerTransactorSession) SetBatchConfirmer(_batchConfirmer common.Address) (*types.Transaction, error) { + return _ContractEigenDAServiceManager.Contract.SetBatchConfirmer(&_ContractEigenDAServiceManager.TransactOpts, _batchConfirmer) } -// SetFeeSetter is a paid mutator transaction binding the contract method 0xb19805af. +// SetMetadataURI is a paid mutator transaction binding the contract method 0x750521f5. // -// Solidity: function setFeeSetter(address _feeSetter) returns() -func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerTransactor) SetFeeSetter(opts *bind.TransactOpts, _feeSetter common.Address) (*types.Transaction, error) { - return _ContractEigenDAServiceManager.contract.Transact(opts, "setFeeSetter", _feeSetter) +// Solidity: function setMetadataURI(string _metadataURI) returns() +func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerTransactor) SetMetadataURI(opts *bind.TransactOpts, _metadataURI string) (*types.Transaction, error) { + return _ContractEigenDAServiceManager.contract.Transact(opts, "setMetadataURI", _metadataURI) } -// SetFeeSetter is a paid mutator transaction binding the contract method 0xb19805af. +// SetMetadataURI is a paid mutator transaction binding the contract method 0x750521f5. // -// Solidity: function setFeeSetter(address _feeSetter) returns() -func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerSession) SetFeeSetter(_feeSetter common.Address) (*types.Transaction, error) { - return _ContractEigenDAServiceManager.Contract.SetFeeSetter(&_ContractEigenDAServiceManager.TransactOpts, _feeSetter) +// Solidity: function setMetadataURI(string _metadataURI) returns() +func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerSession) SetMetadataURI(_metadataURI string) (*types.Transaction, error) { + return _ContractEigenDAServiceManager.Contract.SetMetadataURI(&_ContractEigenDAServiceManager.TransactOpts, _metadataURI) } -// SetFeeSetter is a paid mutator transaction binding the contract method 0xb19805af. +// SetMetadataURI is a paid mutator transaction binding the contract method 0x750521f5. // -// Solidity: function setFeeSetter(address _feeSetter) returns() -func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerTransactorSession) SetFeeSetter(_feeSetter common.Address) (*types.Transaction, error) { - return _ContractEigenDAServiceManager.Contract.SetFeeSetter(&_ContractEigenDAServiceManager.TransactOpts, _feeSetter) +// Solidity: function setMetadataURI(string _metadataURI) returns() +func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerTransactorSession) SetMetadataURI(_metadataURI string) (*types.Transaction, error) { + return _ContractEigenDAServiceManager.Contract.SetMetadataURI(&_ContractEigenDAServiceManager.TransactOpts, _metadataURI) } // SetPauserRegistry is a paid mutator transaction binding the contract method 0x10d67a2f. @@ -1189,6 +1175,27 @@ func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerTransactorSes return _ContractEigenDAServiceManager.Contract.SetPauserRegistry(&_ContractEigenDAServiceManager.TransactOpts, newPauserRegistry) } +// SetStaleStakesForbidden is a paid mutator transaction binding the contract method 0x416c7e5e. +// +// Solidity: function setStaleStakesForbidden(bool value) returns() +func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerTransactor) SetStaleStakesForbidden(opts *bind.TransactOpts, value bool) (*types.Transaction, error) { + return _ContractEigenDAServiceManager.contract.Transact(opts, "setStaleStakesForbidden", value) +} + +// SetStaleStakesForbidden is a paid mutator transaction binding the contract method 0x416c7e5e. +// +// Solidity: function setStaleStakesForbidden(bool value) returns() +func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerSession) SetStaleStakesForbidden(value bool) (*types.Transaction, error) { + return _ContractEigenDAServiceManager.Contract.SetStaleStakesForbidden(&_ContractEigenDAServiceManager.TransactOpts, value) +} + +// SetStaleStakesForbidden is a paid mutator transaction binding the contract method 0x416c7e5e. +// +// Solidity: function setStaleStakesForbidden(bool value) returns() +func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerTransactorSession) SetStaleStakesForbidden(value bool) (*types.Transaction, error) { + return _ContractEigenDAServiceManager.Contract.SetStaleStakesForbidden(&_ContractEigenDAServiceManager.TransactOpts, value) +} + // TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. // // Solidity: function transferOwnership(address newOwner) returns() @@ -1302,13 +1309,12 @@ func (it *ContractEigenDAServiceManagerBatchConfirmedIterator) Close() error { type ContractEigenDAServiceManagerBatchConfirmed struct { BatchHeaderHash [32]byte BatchId uint32 - Fee *big.Int Raw types.Log // Blockchain specific contextual infos } -// FilterBatchConfirmed is a free log retrieval operation binding the contract event 0x2eaa707a79ac1f835863f5a6fdb5f27c0e295dc23adf970a445cd87d126c4d63. +// FilterBatchConfirmed is a free log retrieval operation binding the contract event 0xc75557c4ad49697e231449688be13ef11cb6be8ed0d18819d8dde074a5a16f8a. // -// Solidity: event BatchConfirmed(bytes32 indexed batchHeaderHash, uint32 batchId, uint96 fee) +// Solidity: event BatchConfirmed(bytes32 indexed batchHeaderHash, uint32 batchId) func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerFilterer) FilterBatchConfirmed(opts *bind.FilterOpts, batchHeaderHash [][32]byte) (*ContractEigenDAServiceManagerBatchConfirmedIterator, error) { var batchHeaderHashRule []interface{} @@ -1323,9 +1329,9 @@ func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerFilterer) Fil return &ContractEigenDAServiceManagerBatchConfirmedIterator{contract: _ContractEigenDAServiceManager.contract, event: "BatchConfirmed", logs: logs, sub: sub}, nil } -// WatchBatchConfirmed is a free log subscription operation binding the contract event 0x2eaa707a79ac1f835863f5a6fdb5f27c0e295dc23adf970a445cd87d126c4d63. +// WatchBatchConfirmed is a free log subscription operation binding the contract event 0xc75557c4ad49697e231449688be13ef11cb6be8ed0d18819d8dde074a5a16f8a. // -// Solidity: event BatchConfirmed(bytes32 indexed batchHeaderHash, uint32 batchId, uint96 fee) +// Solidity: event BatchConfirmed(bytes32 indexed batchHeaderHash, uint32 batchId) func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerFilterer) WatchBatchConfirmed(opts *bind.WatchOpts, sink chan<- *ContractEigenDAServiceManagerBatchConfirmed, batchHeaderHash [][32]byte) (event.Subscription, error) { var batchHeaderHashRule []interface{} @@ -1365,9 +1371,9 @@ func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerFilterer) Wat }), nil } -// ParseBatchConfirmed is a log parse operation binding the contract event 0x2eaa707a79ac1f835863f5a6fdb5f27c0e295dc23adf970a445cd87d126c4d63. +// ParseBatchConfirmed is a log parse operation binding the contract event 0xc75557c4ad49697e231449688be13ef11cb6be8ed0d18819d8dde074a5a16f8a. // -// Solidity: event BatchConfirmed(bytes32 indexed batchHeaderHash, uint32 batchId, uint96 fee) +// Solidity: event BatchConfirmed(bytes32 indexed batchHeaderHash, uint32 batchId) func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerFilterer) ParseBatchConfirmed(log types.Log) (*ContractEigenDAServiceManagerBatchConfirmed, error) { event := new(ContractEigenDAServiceManagerBatchConfirmed) if err := _ContractEigenDAServiceManager.contract.UnpackLog(event, "BatchConfirmed", log); err != nil { @@ -1377,144 +1383,9 @@ func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerFilterer) Par return event, nil } -// ContractEigenDAServiceManagerFeePerBytePerTimeSetIterator is returned from FilterFeePerBytePerTimeSet and is used to iterate over the raw logs and unpacked data for FeePerBytePerTimeSet events raised by the ContractEigenDAServiceManager contract. -type ContractEigenDAServiceManagerFeePerBytePerTimeSetIterator struct { - Event *ContractEigenDAServiceManagerFeePerBytePerTimeSet // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *ContractEigenDAServiceManagerFeePerBytePerTimeSetIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(ContractEigenDAServiceManagerFeePerBytePerTimeSet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(ContractEigenDAServiceManagerFeePerBytePerTimeSet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *ContractEigenDAServiceManagerFeePerBytePerTimeSetIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ContractEigenDAServiceManagerFeePerBytePerTimeSetIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ContractEigenDAServiceManagerFeePerBytePerTimeSet represents a FeePerBytePerTimeSet event raised by the ContractEigenDAServiceManager contract. -type ContractEigenDAServiceManagerFeePerBytePerTimeSet struct { - PreviousValue *big.Int - NewValue *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterFeePerBytePerTimeSet is a free log retrieval operation binding the contract event 0xcd1b2c2a220284accd1f9effd811cdecb6beaa4638618b48bbea07ce7ae16996. -// -// Solidity: event FeePerBytePerTimeSet(uint256 previousValue, uint256 newValue) -func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerFilterer) FilterFeePerBytePerTimeSet(opts *bind.FilterOpts) (*ContractEigenDAServiceManagerFeePerBytePerTimeSetIterator, error) { - - logs, sub, err := _ContractEigenDAServiceManager.contract.FilterLogs(opts, "FeePerBytePerTimeSet") - if err != nil { - return nil, err - } - return &ContractEigenDAServiceManagerFeePerBytePerTimeSetIterator{contract: _ContractEigenDAServiceManager.contract, event: "FeePerBytePerTimeSet", logs: logs, sub: sub}, nil -} - -// WatchFeePerBytePerTimeSet is a free log subscription operation binding the contract event 0xcd1b2c2a220284accd1f9effd811cdecb6beaa4638618b48bbea07ce7ae16996. -// -// Solidity: event FeePerBytePerTimeSet(uint256 previousValue, uint256 newValue) -func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerFilterer) WatchFeePerBytePerTimeSet(opts *bind.WatchOpts, sink chan<- *ContractEigenDAServiceManagerFeePerBytePerTimeSet) (event.Subscription, error) { - - logs, sub, err := _ContractEigenDAServiceManager.contract.WatchLogs(opts, "FeePerBytePerTimeSet") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(ContractEigenDAServiceManagerFeePerBytePerTimeSet) - if err := _ContractEigenDAServiceManager.contract.UnpackLog(event, "FeePerBytePerTimeSet", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseFeePerBytePerTimeSet is a log parse operation binding the contract event 0xcd1b2c2a220284accd1f9effd811cdecb6beaa4638618b48bbea07ce7ae16996. -// -// Solidity: event FeePerBytePerTimeSet(uint256 previousValue, uint256 newValue) -func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerFilterer) ParseFeePerBytePerTimeSet(log types.Log) (*ContractEigenDAServiceManagerFeePerBytePerTimeSet, error) { - event := new(ContractEigenDAServiceManagerFeePerBytePerTimeSet) - if err := _ContractEigenDAServiceManager.contract.UnpackLog(event, "FeePerBytePerTimeSet", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// ContractEigenDAServiceManagerFeeSetterChangedIterator is returned from FilterFeeSetterChanged and is used to iterate over the raw logs and unpacked data for FeeSetterChanged events raised by the ContractEigenDAServiceManager contract. -type ContractEigenDAServiceManagerFeeSetterChangedIterator struct { - Event *ContractEigenDAServiceManagerFeeSetterChanged // Event containing the contract specifics and raw log +// ContractEigenDAServiceManagerBatchConfirmerChangedIterator is returned from FilterBatchConfirmerChanged and is used to iterate over the raw logs and unpacked data for BatchConfirmerChanged events raised by the ContractEigenDAServiceManager contract. +type ContractEigenDAServiceManagerBatchConfirmerChangedIterator struct { + Event *ContractEigenDAServiceManagerBatchConfirmerChanged // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -1528,7 +1399,7 @@ type ContractEigenDAServiceManagerFeeSetterChangedIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *ContractEigenDAServiceManagerFeeSetterChangedIterator) Next() bool { +func (it *ContractEigenDAServiceManagerBatchConfirmerChangedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1537,7 +1408,7 @@ func (it *ContractEigenDAServiceManagerFeeSetterChangedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(ContractEigenDAServiceManagerFeeSetterChanged) + it.Event = new(ContractEigenDAServiceManagerBatchConfirmerChanged) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1552,7 +1423,7 @@ func (it *ContractEigenDAServiceManagerFeeSetterChangedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(ContractEigenDAServiceManagerFeeSetterChanged) + it.Event = new(ContractEigenDAServiceManagerBatchConfirmerChanged) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1568,42 +1439,42 @@ func (it *ContractEigenDAServiceManagerFeeSetterChangedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *ContractEigenDAServiceManagerFeeSetterChangedIterator) Error() error { +func (it *ContractEigenDAServiceManagerBatchConfirmerChangedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *ContractEigenDAServiceManagerFeeSetterChangedIterator) Close() error { +func (it *ContractEigenDAServiceManagerBatchConfirmerChangedIterator) Close() error { it.sub.Unsubscribe() return nil } -// ContractEigenDAServiceManagerFeeSetterChanged represents a FeeSetterChanged event raised by the ContractEigenDAServiceManager contract. -type ContractEigenDAServiceManagerFeeSetterChanged struct { +// ContractEigenDAServiceManagerBatchConfirmerChanged represents a BatchConfirmerChanged event raised by the ContractEigenDAServiceManager contract. +type ContractEigenDAServiceManagerBatchConfirmerChanged struct { PreviousAddress common.Address NewAddress common.Address Raw types.Log // Blockchain specific contextual infos } -// FilterFeeSetterChanged is a free log retrieval operation binding the contract event 0x774b126b94b3cc801460a024dd575406c3ebf27affd7c36198a53ac6655f056d. +// FilterBatchConfirmerChanged is a free log retrieval operation binding the contract event 0xf024af0387e1367ceb1c6a3b6a00db4e9917e56bfb22a289808100f8e2b2c085. // -// Solidity: event FeeSetterChanged(address previousAddress, address newAddress) -func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerFilterer) FilterFeeSetterChanged(opts *bind.FilterOpts) (*ContractEigenDAServiceManagerFeeSetterChangedIterator, error) { +// Solidity: event BatchConfirmerChanged(address previousAddress, address newAddress) +func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerFilterer) FilterBatchConfirmerChanged(opts *bind.FilterOpts) (*ContractEigenDAServiceManagerBatchConfirmerChangedIterator, error) { - logs, sub, err := _ContractEigenDAServiceManager.contract.FilterLogs(opts, "FeeSetterChanged") + logs, sub, err := _ContractEigenDAServiceManager.contract.FilterLogs(opts, "BatchConfirmerChanged") if err != nil { return nil, err } - return &ContractEigenDAServiceManagerFeeSetterChangedIterator{contract: _ContractEigenDAServiceManager.contract, event: "FeeSetterChanged", logs: logs, sub: sub}, nil + return &ContractEigenDAServiceManagerBatchConfirmerChangedIterator{contract: _ContractEigenDAServiceManager.contract, event: "BatchConfirmerChanged", logs: logs, sub: sub}, nil } -// WatchFeeSetterChanged is a free log subscription operation binding the contract event 0x774b126b94b3cc801460a024dd575406c3ebf27affd7c36198a53ac6655f056d. +// WatchBatchConfirmerChanged is a free log subscription operation binding the contract event 0xf024af0387e1367ceb1c6a3b6a00db4e9917e56bfb22a289808100f8e2b2c085. // -// Solidity: event FeeSetterChanged(address previousAddress, address newAddress) -func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerFilterer) WatchFeeSetterChanged(opts *bind.WatchOpts, sink chan<- *ContractEigenDAServiceManagerFeeSetterChanged) (event.Subscription, error) { +// Solidity: event BatchConfirmerChanged(address previousAddress, address newAddress) +func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerFilterer) WatchBatchConfirmerChanged(opts *bind.WatchOpts, sink chan<- *ContractEigenDAServiceManagerBatchConfirmerChanged) (event.Subscription, error) { - logs, sub, err := _ContractEigenDAServiceManager.contract.WatchLogs(opts, "FeeSetterChanged") + logs, sub, err := _ContractEigenDAServiceManager.contract.WatchLogs(opts, "BatchConfirmerChanged") if err != nil { return nil, err } @@ -1613,8 +1484,8 @@ func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerFilterer) Wat select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(ContractEigenDAServiceManagerFeeSetterChanged) - if err := _ContractEigenDAServiceManager.contract.UnpackLog(event, "FeeSetterChanged", log); err != nil { + event := new(ContractEigenDAServiceManagerBatchConfirmerChanged) + if err := _ContractEigenDAServiceManager.contract.UnpackLog(event, "BatchConfirmerChanged", log); err != nil { return err } event.Raw = log @@ -1635,12 +1506,12 @@ func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerFilterer) Wat }), nil } -// ParseFeeSetterChanged is a log parse operation binding the contract event 0x774b126b94b3cc801460a024dd575406c3ebf27affd7c36198a53ac6655f056d. +// ParseBatchConfirmerChanged is a log parse operation binding the contract event 0xf024af0387e1367ceb1c6a3b6a00db4e9917e56bfb22a289808100f8e2b2c085. // -// Solidity: event FeeSetterChanged(address previousAddress, address newAddress) -func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerFilterer) ParseFeeSetterChanged(log types.Log) (*ContractEigenDAServiceManagerFeeSetterChanged, error) { - event := new(ContractEigenDAServiceManagerFeeSetterChanged) - if err := _ContractEigenDAServiceManager.contract.UnpackLog(event, "FeeSetterChanged", log); err != nil { +// Solidity: event BatchConfirmerChanged(address previousAddress, address newAddress) +func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerFilterer) ParseBatchConfirmerChanged(log types.Log) (*ContractEigenDAServiceManagerBatchConfirmerChanged, error) { + event := new(ContractEigenDAServiceManagerBatchConfirmerChanged) + if err := _ContractEigenDAServiceManager.contract.UnpackLog(event, "BatchConfirmerChanged", log); err != nil { return nil, err } event.Raw = log @@ -2214,9 +2085,9 @@ func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerFilterer) Par return event, nil } -// ContractEigenDAServiceManagerPaymentManagerSetIterator is returned from FilterPaymentManagerSet and is used to iterate over the raw logs and unpacked data for PaymentManagerSet events raised by the ContractEigenDAServiceManager contract. -type ContractEigenDAServiceManagerPaymentManagerSetIterator struct { - Event *ContractEigenDAServiceManagerPaymentManagerSet // Event containing the contract specifics and raw log +// ContractEigenDAServiceManagerStaleStakesForbiddenUpdateIterator is returned from FilterStaleStakesForbiddenUpdate and is used to iterate over the raw logs and unpacked data for StaleStakesForbiddenUpdate events raised by the ContractEigenDAServiceManager contract. +type ContractEigenDAServiceManagerStaleStakesForbiddenUpdateIterator struct { + Event *ContractEigenDAServiceManagerStaleStakesForbiddenUpdate // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -2230,7 +2101,7 @@ type ContractEigenDAServiceManagerPaymentManagerSetIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *ContractEigenDAServiceManagerPaymentManagerSetIterator) Next() bool { +func (it *ContractEigenDAServiceManagerStaleStakesForbiddenUpdateIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2239,7 +2110,7 @@ func (it *ContractEigenDAServiceManagerPaymentManagerSetIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(ContractEigenDAServiceManagerPaymentManagerSet) + it.Event = new(ContractEigenDAServiceManagerStaleStakesForbiddenUpdate) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2254,7 +2125,7 @@ func (it *ContractEigenDAServiceManagerPaymentManagerSetIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(ContractEigenDAServiceManagerPaymentManagerSet) + it.Event = new(ContractEigenDAServiceManagerStaleStakesForbiddenUpdate) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2270,42 +2141,41 @@ func (it *ContractEigenDAServiceManagerPaymentManagerSetIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *ContractEigenDAServiceManagerPaymentManagerSetIterator) Error() error { +func (it *ContractEigenDAServiceManagerStaleStakesForbiddenUpdateIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *ContractEigenDAServiceManagerPaymentManagerSetIterator) Close() error { +func (it *ContractEigenDAServiceManagerStaleStakesForbiddenUpdateIterator) Close() error { it.sub.Unsubscribe() return nil } -// ContractEigenDAServiceManagerPaymentManagerSet represents a PaymentManagerSet event raised by the ContractEigenDAServiceManager contract. -type ContractEigenDAServiceManagerPaymentManagerSet struct { - PreviousAddress common.Address - NewAddress common.Address - Raw types.Log // Blockchain specific contextual infos +// ContractEigenDAServiceManagerStaleStakesForbiddenUpdate represents a StaleStakesForbiddenUpdate event raised by the ContractEigenDAServiceManager contract. +type ContractEigenDAServiceManagerStaleStakesForbiddenUpdate struct { + Value bool + Raw types.Log // Blockchain specific contextual infos } -// FilterPaymentManagerSet is a free log retrieval operation binding the contract event 0xa3044efb81dffce20bbf49cae117f167852a973364ae504dfade51a8d022c95a. +// FilterStaleStakesForbiddenUpdate is a free log retrieval operation binding the contract event 0x40e4ed880a29e0f6ddce307457fb75cddf4feef7d3ecb0301bfdf4976a0e2dfc. // -// Solidity: event PaymentManagerSet(address previousAddress, address newAddress) -func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerFilterer) FilterPaymentManagerSet(opts *bind.FilterOpts) (*ContractEigenDAServiceManagerPaymentManagerSetIterator, error) { +// Solidity: event StaleStakesForbiddenUpdate(bool value) +func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerFilterer) FilterStaleStakesForbiddenUpdate(opts *bind.FilterOpts) (*ContractEigenDAServiceManagerStaleStakesForbiddenUpdateIterator, error) { - logs, sub, err := _ContractEigenDAServiceManager.contract.FilterLogs(opts, "PaymentManagerSet") + logs, sub, err := _ContractEigenDAServiceManager.contract.FilterLogs(opts, "StaleStakesForbiddenUpdate") if err != nil { return nil, err } - return &ContractEigenDAServiceManagerPaymentManagerSetIterator{contract: _ContractEigenDAServiceManager.contract, event: "PaymentManagerSet", logs: logs, sub: sub}, nil + return &ContractEigenDAServiceManagerStaleStakesForbiddenUpdateIterator{contract: _ContractEigenDAServiceManager.contract, event: "StaleStakesForbiddenUpdate", logs: logs, sub: sub}, nil } -// WatchPaymentManagerSet is a free log subscription operation binding the contract event 0xa3044efb81dffce20bbf49cae117f167852a973364ae504dfade51a8d022c95a. +// WatchStaleStakesForbiddenUpdate is a free log subscription operation binding the contract event 0x40e4ed880a29e0f6ddce307457fb75cddf4feef7d3ecb0301bfdf4976a0e2dfc. // -// Solidity: event PaymentManagerSet(address previousAddress, address newAddress) -func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerFilterer) WatchPaymentManagerSet(opts *bind.WatchOpts, sink chan<- *ContractEigenDAServiceManagerPaymentManagerSet) (event.Subscription, error) { +// Solidity: event StaleStakesForbiddenUpdate(bool value) +func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerFilterer) WatchStaleStakesForbiddenUpdate(opts *bind.WatchOpts, sink chan<- *ContractEigenDAServiceManagerStaleStakesForbiddenUpdate) (event.Subscription, error) { - logs, sub, err := _ContractEigenDAServiceManager.contract.WatchLogs(opts, "PaymentManagerSet") + logs, sub, err := _ContractEigenDAServiceManager.contract.WatchLogs(opts, "StaleStakesForbiddenUpdate") if err != nil { return nil, err } @@ -2315,8 +2185,8 @@ func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerFilterer) Wat select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(ContractEigenDAServiceManagerPaymentManagerSet) - if err := _ContractEigenDAServiceManager.contract.UnpackLog(event, "PaymentManagerSet", log); err != nil { + event := new(ContractEigenDAServiceManagerStaleStakesForbiddenUpdate) + if err := _ContractEigenDAServiceManager.contract.UnpackLog(event, "StaleStakesForbiddenUpdate", log); err != nil { return err } event.Raw = log @@ -2337,12 +2207,12 @@ func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerFilterer) Wat }), nil } -// ParsePaymentManagerSet is a log parse operation binding the contract event 0xa3044efb81dffce20bbf49cae117f167852a973364ae504dfade51a8d022c95a. +// ParseStaleStakesForbiddenUpdate is a log parse operation binding the contract event 0x40e4ed880a29e0f6ddce307457fb75cddf4feef7d3ecb0301bfdf4976a0e2dfc. // -// Solidity: event PaymentManagerSet(address previousAddress, address newAddress) -func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerFilterer) ParsePaymentManagerSet(log types.Log) (*ContractEigenDAServiceManagerPaymentManagerSet, error) { - event := new(ContractEigenDAServiceManagerPaymentManagerSet) - if err := _ContractEigenDAServiceManager.contract.UnpackLog(event, "PaymentManagerSet", log); err != nil { +// Solidity: event StaleStakesForbiddenUpdate(bool value) +func (_ContractEigenDAServiceManager *ContractEigenDAServiceManagerFilterer) ParseStaleStakesForbiddenUpdate(log types.Log) (*ContractEigenDAServiceManagerStaleStakesForbiddenUpdate, error) { + event := new(ContractEigenDAServiceManagerStaleStakesForbiddenUpdate) + if err := _ContractEigenDAServiceManager.contract.UnpackLog(event, "StaleStakesForbiddenUpdate", log); err != nil { return nil, err } event.Raw = log diff --git a/contracts/bindings/IBLSPubkeyRegistry/binding.go b/contracts/bindings/IBLSPubkeyRegistry/binding.go index 3a0f04d76f..a5aa1cb4e6 100644 --- a/contracts/bindings/IBLSPubkeyRegistry/binding.go +++ b/contracts/bindings/IBLSPubkeyRegistry/binding.go @@ -44,7 +44,7 @@ type IBLSPubkeyRegistryApkUpdate struct { // ContractIBLSPubkeyRegistryMetaData contains all meta data concerning the ContractIBLSPubkeyRegistry contract. var ContractIBLSPubkeyRegistryMetaData = &bind.MetaData{ - ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"quorumNumbers\",\"type\":\"bytes\"}],\"name\":\"OperatorAddedToQuorums\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"quorumNumbers\",\"type\":\"bytes\"}],\"name\":\"OperatorRemovedFromQuorums\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"quorumNumbers\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"structBN254.G1Point\",\"name\":\"pubkey\",\"type\":\"tuple\"}],\"name\":\"deregisterOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"}],\"name\":\"getApkForQuorum\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"structBN254.G1Point\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"blockNumber\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getApkHashForQuorumAtBlockNumberFromIndex\",\"outputs\":[{\"internalType\":\"bytes24\",\"name\":\"\",\"type\":\"bytes24\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"quorumNumbers\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"}],\"name\":\"getApkIndicesForQuorumsAtBlockNumber\",\"outputs\":[{\"internalType\":\"uint32[]\",\"name\":\"\",\"type\":\"uint32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getApkUpdateForQuorumByIndex\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes24\",\"name\":\"apkHash\",\"type\":\"bytes24\"},{\"internalType\":\"uint32\",\"name\":\"updateBlockNumber\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"nextUpdateBlockNumber\",\"type\":\"uint32\"}],\"internalType\":\"structIBLSPubkeyRegistry.ApkUpdate\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"pubkeyHash\",\"type\":\"bytes32\"}],\"name\":\"getOperatorFromPubkeyHash\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"quorumNumbers\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"structBN254.G1Point\",\"name\":\"pubkey\",\"type\":\"tuple\"}],\"name\":\"registerOperator\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"registryCoordinator\",\"outputs\":[{\"internalType\":\"contractIRegistryCoordinator\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + ABI: "[{\"type\":\"function\",\"name\":\"deregisterOperator\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"pubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getApkForQuorum\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getApkHashForQuorumAtBlockNumberFromIndex\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"blockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes24\",\"internalType\":\"bytes24\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getApkIndicesForQuorumsAtBlockNumber\",\"inputs\":[{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"blockNumber\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getApkUpdateForQuorumByIndex\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIBLSPubkeyRegistry.ApkUpdate\",\"components\":[{\"name\":\"apkHash\",\"type\":\"bytes24\",\"internalType\":\"bytes24\"},{\"name\":\"updateBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"nextUpdateBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorFromPubkeyHash\",\"inputs\":[{\"name\":\"pubkeyHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registerOperator\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"pubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registryCoordinator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIRegistryCoordinator\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"OperatorAddedToQuorums\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorRemovedFromQuorums\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false}]", } // ContractIBLSPubkeyRegistryABI is the input ABI used to generate the binding from. diff --git a/contracts/bindings/IEigenDAServiceManager/binding.go b/contracts/bindings/IEigenDAServiceManager/binding.go index 2f0ea4c058..b4dee19004 100644 --- a/contracts/bindings/IEigenDAServiceManager/binding.go +++ b/contracts/bindings/IEigenDAServiceManager/binding.go @@ -61,9 +61,16 @@ type IEigenDAServiceManagerBatchHeader struct { ReferenceBlockNumber uint32 } +// ISignatureUtilsSignatureWithSaltAndExpiry is an auto generated low-level Go binding around an user-defined struct. +type ISignatureUtilsSignatureWithSaltAndExpiry struct { + Signature []byte + Salt [32]byte + Expiry *big.Int +} + // ContractIEigenDAServiceManagerMetaData contains all meta data concerning the ContractIEigenDAServiceManager contract. var ContractIEigenDAServiceManagerMetaData = &bind.MetaData{ - ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHeaderHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"batchId\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"fee\",\"type\":\"uint96\"}],\"name\":\"BatchConfirmed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"previousValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newValue\",\"type\":\"uint256\"}],\"name\":\"FeePerBytePerTimeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"FeeSetterChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"PaymentManagerSet\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BLOCK_STALE_MEASURE\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"batchId\",\"type\":\"uint32\"}],\"name\":\"batchIdToBatchMetadataHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"blobHeadersRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"quorumNumbers\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"quorumThresholdPercentages\",\"type\":\"bytes\"},{\"internalType\":\"uint32\",\"name\":\"referenceBlockNumber\",\"type\":\"uint32\"}],\"internalType\":\"structIEigenDAServiceManager.BatchHeader\",\"name\":\"batchHeader\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32[]\",\"name\":\"nonSignerQuorumBitmapIndices\",\"type\":\"uint32[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"structBN254.G1Point[]\",\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"structBN254.G1Point[]\",\"name\":\"quorumApks\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"X\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"Y\",\"type\":\"uint256[2]\"}],\"internalType\":\"structBN254.G2Point\",\"name\":\"apkG2\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"structBN254.G1Point\",\"name\":\"sigma\",\"type\":\"tuple\"},{\"internalType\":\"uint32[]\",\"name\":\"quorumApkIndices\",\"type\":\"uint32[]\"},{\"internalType\":\"uint32[]\",\"name\":\"totalStakeIndices\",\"type\":\"uint32[]\"},{\"internalType\":\"uint32[][]\",\"name\":\"nonSignerStakeIndices\",\"type\":\"uint32[][]\"}],\"internalType\":\"structIBLSSignatureChecker.NonSignerStakesAndSignature\",\"name\":\"nonSignerStakesAndSignature\",\"type\":\"tuple\"}],\"name\":\"confirmBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"freezeOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"slasher\",\"outputs\":[{\"internalType\":\"contractISlasher\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + ABI: "[{\"type\":\"function\",\"name\":\"BLOCK_STALE_MEASURE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"avsDirectory\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"batchIdToBatchMetadataHash\",\"inputs\":[{\"name\":\"batchId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"confirmBatch\",\"inputs\":[{\"name\":\"batchHeader\",\"type\":\"tuple\",\"internalType\":\"structIEigenDAServiceManager.BatchHeader\",\"components\":[{\"name\":\"blobHeadersRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"quorumThresholdPercentages\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"referenceBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"nonSignerStakesAndSignature\",\"type\":\"tuple\",\"internalType\":\"structIBLSSignatureChecker.NonSignerStakesAndSignature\",\"components\":[{\"name\":\"nonSignerQuorumBitmapIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApks\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apkG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"sigma\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApkIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"totalStakeIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerStakeIndices\",\"type\":\"uint32[][]\",\"internalType\":\"uint32[][]\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deregisterOperatorFromAVS\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getOperatorRestakedStrategies\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRestakeableStrategies\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"latestServeUntilBlock\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registerOperatorToAVS\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.SignatureWithSaltAndExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setBatchConfirmer\",\"inputs\":[{\"name\":\"_batchConfirmer\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setMetadataURI\",\"inputs\":[{\"name\":\"_metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"taskNumber\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"BatchConfirmed\",\"inputs\":[{\"name\":\"batchHeaderHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"batchId\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BatchConfirmerChanged\",\"inputs\":[{\"name\":\"previousAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false}]", } // ContractIEigenDAServiceManagerABI is the input ABI used to generate the binding from. @@ -243,6 +250,37 @@ func (_ContractIEigenDAServiceManager *ContractIEigenDAServiceManagerCallerSessi return _ContractIEigenDAServiceManager.Contract.BLOCKSTALEMEASURE(&_ContractIEigenDAServiceManager.CallOpts) } +// AvsDirectory is a free data retrieval call binding the contract method 0x6b3aa72e. +// +// Solidity: function avsDirectory() view returns(address) +func (_ContractIEigenDAServiceManager *ContractIEigenDAServiceManagerCaller) AvsDirectory(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ContractIEigenDAServiceManager.contract.Call(opts, &out, "avsDirectory") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// AvsDirectory is a free data retrieval call binding the contract method 0x6b3aa72e. +// +// Solidity: function avsDirectory() view returns(address) +func (_ContractIEigenDAServiceManager *ContractIEigenDAServiceManagerSession) AvsDirectory() (common.Address, error) { + return _ContractIEigenDAServiceManager.Contract.AvsDirectory(&_ContractIEigenDAServiceManager.CallOpts) +} + +// AvsDirectory is a free data retrieval call binding the contract method 0x6b3aa72e. +// +// Solidity: function avsDirectory() view returns(address) +func (_ContractIEigenDAServiceManager *ContractIEigenDAServiceManagerCallerSession) AvsDirectory() (common.Address, error) { + return _ContractIEigenDAServiceManager.Contract.AvsDirectory(&_ContractIEigenDAServiceManager.CallOpts) +} + // BatchIdToBatchMetadataHash is a free data retrieval call binding the contract method 0xeccbbfc9. // // Solidity: function batchIdToBatchMetadataHash(uint32 batchId) view returns(bytes32) @@ -274,66 +312,128 @@ func (_ContractIEigenDAServiceManager *ContractIEigenDAServiceManagerCallerSessi return _ContractIEigenDAServiceManager.Contract.BatchIdToBatchMetadataHash(&_ContractIEigenDAServiceManager.CallOpts, batchId) } -// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// GetOperatorRestakedStrategies is a free data retrieval call binding the contract method 0x33cfb7b7. // -// Solidity: function owner() view returns(address) -func (_ContractIEigenDAServiceManager *ContractIEigenDAServiceManagerCaller) Owner(opts *bind.CallOpts) (common.Address, error) { +// Solidity: function getOperatorRestakedStrategies(address operator) view returns(address[]) +func (_ContractIEigenDAServiceManager *ContractIEigenDAServiceManagerCaller) GetOperatorRestakedStrategies(opts *bind.CallOpts, operator common.Address) ([]common.Address, error) { var out []interface{} - err := _ContractIEigenDAServiceManager.contract.Call(opts, &out, "owner") + err := _ContractIEigenDAServiceManager.contract.Call(opts, &out, "getOperatorRestakedStrategies", operator) if err != nil { - return *new(common.Address), err + return *new([]common.Address), err } - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) return out0, err } -// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// GetOperatorRestakedStrategies is a free data retrieval call binding the contract method 0x33cfb7b7. // -// Solidity: function owner() view returns(address) -func (_ContractIEigenDAServiceManager *ContractIEigenDAServiceManagerSession) Owner() (common.Address, error) { - return _ContractIEigenDAServiceManager.Contract.Owner(&_ContractIEigenDAServiceManager.CallOpts) +// Solidity: function getOperatorRestakedStrategies(address operator) view returns(address[]) +func (_ContractIEigenDAServiceManager *ContractIEigenDAServiceManagerSession) GetOperatorRestakedStrategies(operator common.Address) ([]common.Address, error) { + return _ContractIEigenDAServiceManager.Contract.GetOperatorRestakedStrategies(&_ContractIEigenDAServiceManager.CallOpts, operator) } -// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// GetOperatorRestakedStrategies is a free data retrieval call binding the contract method 0x33cfb7b7. // -// Solidity: function owner() view returns(address) -func (_ContractIEigenDAServiceManager *ContractIEigenDAServiceManagerCallerSession) Owner() (common.Address, error) { - return _ContractIEigenDAServiceManager.Contract.Owner(&_ContractIEigenDAServiceManager.CallOpts) +// Solidity: function getOperatorRestakedStrategies(address operator) view returns(address[]) +func (_ContractIEigenDAServiceManager *ContractIEigenDAServiceManagerCallerSession) GetOperatorRestakedStrategies(operator common.Address) ([]common.Address, error) { + return _ContractIEigenDAServiceManager.Contract.GetOperatorRestakedStrategies(&_ContractIEigenDAServiceManager.CallOpts, operator) } -// Slasher is a free data retrieval call binding the contract method 0xb1344271. +// GetRestakeableStrategies is a free data retrieval call binding the contract method 0xe481af9d. // -// Solidity: function slasher() view returns(address) -func (_ContractIEigenDAServiceManager *ContractIEigenDAServiceManagerCaller) Slasher(opts *bind.CallOpts) (common.Address, error) { +// Solidity: function getRestakeableStrategies() view returns(address[]) +func (_ContractIEigenDAServiceManager *ContractIEigenDAServiceManagerCaller) GetRestakeableStrategies(opts *bind.CallOpts) ([]common.Address, error) { var out []interface{} - err := _ContractIEigenDAServiceManager.contract.Call(opts, &out, "slasher") + err := _ContractIEigenDAServiceManager.contract.Call(opts, &out, "getRestakeableStrategies") if err != nil { - return *new(common.Address), err + return *new([]common.Address), err } - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) return out0, err } -// Slasher is a free data retrieval call binding the contract method 0xb1344271. +// GetRestakeableStrategies is a free data retrieval call binding the contract method 0xe481af9d. // -// Solidity: function slasher() view returns(address) -func (_ContractIEigenDAServiceManager *ContractIEigenDAServiceManagerSession) Slasher() (common.Address, error) { - return _ContractIEigenDAServiceManager.Contract.Slasher(&_ContractIEigenDAServiceManager.CallOpts) +// Solidity: function getRestakeableStrategies() view returns(address[]) +func (_ContractIEigenDAServiceManager *ContractIEigenDAServiceManagerSession) GetRestakeableStrategies() ([]common.Address, error) { + return _ContractIEigenDAServiceManager.Contract.GetRestakeableStrategies(&_ContractIEigenDAServiceManager.CallOpts) } -// Slasher is a free data retrieval call binding the contract method 0xb1344271. +// GetRestakeableStrategies is a free data retrieval call binding the contract method 0xe481af9d. // -// Solidity: function slasher() view returns(address) -func (_ContractIEigenDAServiceManager *ContractIEigenDAServiceManagerCallerSession) Slasher() (common.Address, error) { - return _ContractIEigenDAServiceManager.Contract.Slasher(&_ContractIEigenDAServiceManager.CallOpts) +// Solidity: function getRestakeableStrategies() view returns(address[]) +func (_ContractIEigenDAServiceManager *ContractIEigenDAServiceManagerCallerSession) GetRestakeableStrategies() ([]common.Address, error) { + return _ContractIEigenDAServiceManager.Contract.GetRestakeableStrategies(&_ContractIEigenDAServiceManager.CallOpts) +} + +// LatestServeUntilBlock is a free data retrieval call binding the contract method 0x758f8dba. +// +// Solidity: function latestServeUntilBlock() view returns(uint32) +func (_ContractIEigenDAServiceManager *ContractIEigenDAServiceManagerCaller) LatestServeUntilBlock(opts *bind.CallOpts) (uint32, error) { + var out []interface{} + err := _ContractIEigenDAServiceManager.contract.Call(opts, &out, "latestServeUntilBlock") + + if err != nil { + return *new(uint32), err + } + + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + + return out0, err + +} + +// LatestServeUntilBlock is a free data retrieval call binding the contract method 0x758f8dba. +// +// Solidity: function latestServeUntilBlock() view returns(uint32) +func (_ContractIEigenDAServiceManager *ContractIEigenDAServiceManagerSession) LatestServeUntilBlock() (uint32, error) { + return _ContractIEigenDAServiceManager.Contract.LatestServeUntilBlock(&_ContractIEigenDAServiceManager.CallOpts) +} + +// LatestServeUntilBlock is a free data retrieval call binding the contract method 0x758f8dba. +// +// Solidity: function latestServeUntilBlock() view returns(uint32) +func (_ContractIEigenDAServiceManager *ContractIEigenDAServiceManagerCallerSession) LatestServeUntilBlock() (uint32, error) { + return _ContractIEigenDAServiceManager.Contract.LatestServeUntilBlock(&_ContractIEigenDAServiceManager.CallOpts) +} + +// TaskNumber is a free data retrieval call binding the contract method 0x72d18e8d. +// +// Solidity: function taskNumber() view returns(uint32) +func (_ContractIEigenDAServiceManager *ContractIEigenDAServiceManagerCaller) TaskNumber(opts *bind.CallOpts) (uint32, error) { + var out []interface{} + err := _ContractIEigenDAServiceManager.contract.Call(opts, &out, "taskNumber") + + if err != nil { + return *new(uint32), err + } + + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + + return out0, err + +} + +// TaskNumber is a free data retrieval call binding the contract method 0x72d18e8d. +// +// Solidity: function taskNumber() view returns(uint32) +func (_ContractIEigenDAServiceManager *ContractIEigenDAServiceManagerSession) TaskNumber() (uint32, error) { + return _ContractIEigenDAServiceManager.Contract.TaskNumber(&_ContractIEigenDAServiceManager.CallOpts) +} + +// TaskNumber is a free data retrieval call binding the contract method 0x72d18e8d. +// +// Solidity: function taskNumber() view returns(uint32) +func (_ContractIEigenDAServiceManager *ContractIEigenDAServiceManagerCallerSession) TaskNumber() (uint32, error) { + return _ContractIEigenDAServiceManager.Contract.TaskNumber(&_ContractIEigenDAServiceManager.CallOpts) } // ConfirmBatch is a paid mutator transaction binding the contract method 0x7794965a. @@ -357,25 +457,88 @@ func (_ContractIEigenDAServiceManager *ContractIEigenDAServiceManagerTransactorS return _ContractIEigenDAServiceManager.Contract.ConfirmBatch(&_ContractIEigenDAServiceManager.TransactOpts, batchHeader, nonSignerStakesAndSignature) } -// FreezeOperator is a paid mutator transaction binding the contract method 0x38c8ee64. +// DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. // -// Solidity: function freezeOperator(address operator) returns() -func (_ContractIEigenDAServiceManager *ContractIEigenDAServiceManagerTransactor) FreezeOperator(opts *bind.TransactOpts, operator common.Address) (*types.Transaction, error) { - return _ContractIEigenDAServiceManager.contract.Transact(opts, "freezeOperator", operator) +// Solidity: function deregisterOperatorFromAVS(address operator) returns() +func (_ContractIEigenDAServiceManager *ContractIEigenDAServiceManagerTransactor) DeregisterOperatorFromAVS(opts *bind.TransactOpts, operator common.Address) (*types.Transaction, error) { + return _ContractIEigenDAServiceManager.contract.Transact(opts, "deregisterOperatorFromAVS", operator) } -// FreezeOperator is a paid mutator transaction binding the contract method 0x38c8ee64. +// DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. // -// Solidity: function freezeOperator(address operator) returns() -func (_ContractIEigenDAServiceManager *ContractIEigenDAServiceManagerSession) FreezeOperator(operator common.Address) (*types.Transaction, error) { - return _ContractIEigenDAServiceManager.Contract.FreezeOperator(&_ContractIEigenDAServiceManager.TransactOpts, operator) +// Solidity: function deregisterOperatorFromAVS(address operator) returns() +func (_ContractIEigenDAServiceManager *ContractIEigenDAServiceManagerSession) DeregisterOperatorFromAVS(operator common.Address) (*types.Transaction, error) { + return _ContractIEigenDAServiceManager.Contract.DeregisterOperatorFromAVS(&_ContractIEigenDAServiceManager.TransactOpts, operator) } -// FreezeOperator is a paid mutator transaction binding the contract method 0x38c8ee64. +// DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. // -// Solidity: function freezeOperator(address operator) returns() -func (_ContractIEigenDAServiceManager *ContractIEigenDAServiceManagerTransactorSession) FreezeOperator(operator common.Address) (*types.Transaction, error) { - return _ContractIEigenDAServiceManager.Contract.FreezeOperator(&_ContractIEigenDAServiceManager.TransactOpts, operator) +// Solidity: function deregisterOperatorFromAVS(address operator) returns() +func (_ContractIEigenDAServiceManager *ContractIEigenDAServiceManagerTransactorSession) DeregisterOperatorFromAVS(operator common.Address) (*types.Transaction, error) { + return _ContractIEigenDAServiceManager.Contract.DeregisterOperatorFromAVS(&_ContractIEigenDAServiceManager.TransactOpts, operator) +} + +// RegisterOperatorToAVS is a paid mutator transaction binding the contract method 0x9926ee7d. +// +// Solidity: function registerOperatorToAVS(address operator, (bytes,bytes32,uint256) operatorSignature) returns() +func (_ContractIEigenDAServiceManager *ContractIEigenDAServiceManagerTransactor) RegisterOperatorToAVS(opts *bind.TransactOpts, operator common.Address, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _ContractIEigenDAServiceManager.contract.Transact(opts, "registerOperatorToAVS", operator, operatorSignature) +} + +// RegisterOperatorToAVS is a paid mutator transaction binding the contract method 0x9926ee7d. +// +// Solidity: function registerOperatorToAVS(address operator, (bytes,bytes32,uint256) operatorSignature) returns() +func (_ContractIEigenDAServiceManager *ContractIEigenDAServiceManagerSession) RegisterOperatorToAVS(operator common.Address, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _ContractIEigenDAServiceManager.Contract.RegisterOperatorToAVS(&_ContractIEigenDAServiceManager.TransactOpts, operator, operatorSignature) +} + +// RegisterOperatorToAVS is a paid mutator transaction binding the contract method 0x9926ee7d. +// +// Solidity: function registerOperatorToAVS(address operator, (bytes,bytes32,uint256) operatorSignature) returns() +func (_ContractIEigenDAServiceManager *ContractIEigenDAServiceManagerTransactorSession) RegisterOperatorToAVS(operator common.Address, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _ContractIEigenDAServiceManager.Contract.RegisterOperatorToAVS(&_ContractIEigenDAServiceManager.TransactOpts, operator, operatorSignature) +} + +// SetBatchConfirmer is a paid mutator transaction binding the contract method 0xf1220983. +// +// Solidity: function setBatchConfirmer(address _batchConfirmer) returns() +func (_ContractIEigenDAServiceManager *ContractIEigenDAServiceManagerTransactor) SetBatchConfirmer(opts *bind.TransactOpts, _batchConfirmer common.Address) (*types.Transaction, error) { + return _ContractIEigenDAServiceManager.contract.Transact(opts, "setBatchConfirmer", _batchConfirmer) +} + +// SetBatchConfirmer is a paid mutator transaction binding the contract method 0xf1220983. +// +// Solidity: function setBatchConfirmer(address _batchConfirmer) returns() +func (_ContractIEigenDAServiceManager *ContractIEigenDAServiceManagerSession) SetBatchConfirmer(_batchConfirmer common.Address) (*types.Transaction, error) { + return _ContractIEigenDAServiceManager.Contract.SetBatchConfirmer(&_ContractIEigenDAServiceManager.TransactOpts, _batchConfirmer) +} + +// SetBatchConfirmer is a paid mutator transaction binding the contract method 0xf1220983. +// +// Solidity: function setBatchConfirmer(address _batchConfirmer) returns() +func (_ContractIEigenDAServiceManager *ContractIEigenDAServiceManagerTransactorSession) SetBatchConfirmer(_batchConfirmer common.Address) (*types.Transaction, error) { + return _ContractIEigenDAServiceManager.Contract.SetBatchConfirmer(&_ContractIEigenDAServiceManager.TransactOpts, _batchConfirmer) +} + +// SetMetadataURI is a paid mutator transaction binding the contract method 0x750521f5. +// +// Solidity: function setMetadataURI(string _metadataURI) returns() +func (_ContractIEigenDAServiceManager *ContractIEigenDAServiceManagerTransactor) SetMetadataURI(opts *bind.TransactOpts, _metadataURI string) (*types.Transaction, error) { + return _ContractIEigenDAServiceManager.contract.Transact(opts, "setMetadataURI", _metadataURI) +} + +// SetMetadataURI is a paid mutator transaction binding the contract method 0x750521f5. +// +// Solidity: function setMetadataURI(string _metadataURI) returns() +func (_ContractIEigenDAServiceManager *ContractIEigenDAServiceManagerSession) SetMetadataURI(_metadataURI string) (*types.Transaction, error) { + return _ContractIEigenDAServiceManager.Contract.SetMetadataURI(&_ContractIEigenDAServiceManager.TransactOpts, _metadataURI) +} + +// SetMetadataURI is a paid mutator transaction binding the contract method 0x750521f5. +// +// Solidity: function setMetadataURI(string _metadataURI) returns() +func (_ContractIEigenDAServiceManager *ContractIEigenDAServiceManagerTransactorSession) SetMetadataURI(_metadataURI string) (*types.Transaction, error) { + return _ContractIEigenDAServiceManager.Contract.SetMetadataURI(&_ContractIEigenDAServiceManager.TransactOpts, _metadataURI) } // ContractIEigenDAServiceManagerBatchConfirmedIterator is returned from FilterBatchConfirmed and is used to iterate over the raw logs and unpacked data for BatchConfirmed events raised by the ContractIEigenDAServiceManager contract. @@ -449,13 +612,12 @@ func (it *ContractIEigenDAServiceManagerBatchConfirmedIterator) Close() error { type ContractIEigenDAServiceManagerBatchConfirmed struct { BatchHeaderHash [32]byte BatchId uint32 - Fee *big.Int Raw types.Log // Blockchain specific contextual infos } -// FilterBatchConfirmed is a free log retrieval operation binding the contract event 0x2eaa707a79ac1f835863f5a6fdb5f27c0e295dc23adf970a445cd87d126c4d63. +// FilterBatchConfirmed is a free log retrieval operation binding the contract event 0xc75557c4ad49697e231449688be13ef11cb6be8ed0d18819d8dde074a5a16f8a. // -// Solidity: event BatchConfirmed(bytes32 indexed batchHeaderHash, uint32 batchId, uint96 fee) +// Solidity: event BatchConfirmed(bytes32 indexed batchHeaderHash, uint32 batchId) func (_ContractIEigenDAServiceManager *ContractIEigenDAServiceManagerFilterer) FilterBatchConfirmed(opts *bind.FilterOpts, batchHeaderHash [][32]byte) (*ContractIEigenDAServiceManagerBatchConfirmedIterator, error) { var batchHeaderHashRule []interface{} @@ -470,9 +632,9 @@ func (_ContractIEigenDAServiceManager *ContractIEigenDAServiceManagerFilterer) F return &ContractIEigenDAServiceManagerBatchConfirmedIterator{contract: _ContractIEigenDAServiceManager.contract, event: "BatchConfirmed", logs: logs, sub: sub}, nil } -// WatchBatchConfirmed is a free log subscription operation binding the contract event 0x2eaa707a79ac1f835863f5a6fdb5f27c0e295dc23adf970a445cd87d126c4d63. +// WatchBatchConfirmed is a free log subscription operation binding the contract event 0xc75557c4ad49697e231449688be13ef11cb6be8ed0d18819d8dde074a5a16f8a. // -// Solidity: event BatchConfirmed(bytes32 indexed batchHeaderHash, uint32 batchId, uint96 fee) +// Solidity: event BatchConfirmed(bytes32 indexed batchHeaderHash, uint32 batchId) func (_ContractIEigenDAServiceManager *ContractIEigenDAServiceManagerFilterer) WatchBatchConfirmed(opts *bind.WatchOpts, sink chan<- *ContractIEigenDAServiceManagerBatchConfirmed, batchHeaderHash [][32]byte) (event.Subscription, error) { var batchHeaderHashRule []interface{} @@ -512,9 +674,9 @@ func (_ContractIEigenDAServiceManager *ContractIEigenDAServiceManagerFilterer) W }), nil } -// ParseBatchConfirmed is a log parse operation binding the contract event 0x2eaa707a79ac1f835863f5a6fdb5f27c0e295dc23adf970a445cd87d126c4d63. +// ParseBatchConfirmed is a log parse operation binding the contract event 0xc75557c4ad49697e231449688be13ef11cb6be8ed0d18819d8dde074a5a16f8a. // -// Solidity: event BatchConfirmed(bytes32 indexed batchHeaderHash, uint32 batchId, uint96 fee) +// Solidity: event BatchConfirmed(bytes32 indexed batchHeaderHash, uint32 batchId) func (_ContractIEigenDAServiceManager *ContractIEigenDAServiceManagerFilterer) ParseBatchConfirmed(log types.Log) (*ContractIEigenDAServiceManagerBatchConfirmed, error) { event := new(ContractIEigenDAServiceManagerBatchConfirmed) if err := _ContractIEigenDAServiceManager.contract.UnpackLog(event, "BatchConfirmed", log); err != nil { @@ -524,279 +686,9 @@ func (_ContractIEigenDAServiceManager *ContractIEigenDAServiceManagerFilterer) P return event, nil } -// ContractIEigenDAServiceManagerFeePerBytePerTimeSetIterator is returned from FilterFeePerBytePerTimeSet and is used to iterate over the raw logs and unpacked data for FeePerBytePerTimeSet events raised by the ContractIEigenDAServiceManager contract. -type ContractIEigenDAServiceManagerFeePerBytePerTimeSetIterator struct { - Event *ContractIEigenDAServiceManagerFeePerBytePerTimeSet // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *ContractIEigenDAServiceManagerFeePerBytePerTimeSetIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(ContractIEigenDAServiceManagerFeePerBytePerTimeSet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(ContractIEigenDAServiceManagerFeePerBytePerTimeSet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *ContractIEigenDAServiceManagerFeePerBytePerTimeSetIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ContractIEigenDAServiceManagerFeePerBytePerTimeSetIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ContractIEigenDAServiceManagerFeePerBytePerTimeSet represents a FeePerBytePerTimeSet event raised by the ContractIEigenDAServiceManager contract. -type ContractIEigenDAServiceManagerFeePerBytePerTimeSet struct { - PreviousValue *big.Int - NewValue *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterFeePerBytePerTimeSet is a free log retrieval operation binding the contract event 0xcd1b2c2a220284accd1f9effd811cdecb6beaa4638618b48bbea07ce7ae16996. -// -// Solidity: event FeePerBytePerTimeSet(uint256 previousValue, uint256 newValue) -func (_ContractIEigenDAServiceManager *ContractIEigenDAServiceManagerFilterer) FilterFeePerBytePerTimeSet(opts *bind.FilterOpts) (*ContractIEigenDAServiceManagerFeePerBytePerTimeSetIterator, error) { - - logs, sub, err := _ContractIEigenDAServiceManager.contract.FilterLogs(opts, "FeePerBytePerTimeSet") - if err != nil { - return nil, err - } - return &ContractIEigenDAServiceManagerFeePerBytePerTimeSetIterator{contract: _ContractIEigenDAServiceManager.contract, event: "FeePerBytePerTimeSet", logs: logs, sub: sub}, nil -} - -// WatchFeePerBytePerTimeSet is a free log subscription operation binding the contract event 0xcd1b2c2a220284accd1f9effd811cdecb6beaa4638618b48bbea07ce7ae16996. -// -// Solidity: event FeePerBytePerTimeSet(uint256 previousValue, uint256 newValue) -func (_ContractIEigenDAServiceManager *ContractIEigenDAServiceManagerFilterer) WatchFeePerBytePerTimeSet(opts *bind.WatchOpts, sink chan<- *ContractIEigenDAServiceManagerFeePerBytePerTimeSet) (event.Subscription, error) { - - logs, sub, err := _ContractIEigenDAServiceManager.contract.WatchLogs(opts, "FeePerBytePerTimeSet") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(ContractIEigenDAServiceManagerFeePerBytePerTimeSet) - if err := _ContractIEigenDAServiceManager.contract.UnpackLog(event, "FeePerBytePerTimeSet", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseFeePerBytePerTimeSet is a log parse operation binding the contract event 0xcd1b2c2a220284accd1f9effd811cdecb6beaa4638618b48bbea07ce7ae16996. -// -// Solidity: event FeePerBytePerTimeSet(uint256 previousValue, uint256 newValue) -func (_ContractIEigenDAServiceManager *ContractIEigenDAServiceManagerFilterer) ParseFeePerBytePerTimeSet(log types.Log) (*ContractIEigenDAServiceManagerFeePerBytePerTimeSet, error) { - event := new(ContractIEigenDAServiceManagerFeePerBytePerTimeSet) - if err := _ContractIEigenDAServiceManager.contract.UnpackLog(event, "FeePerBytePerTimeSet", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// ContractIEigenDAServiceManagerFeeSetterChangedIterator is returned from FilterFeeSetterChanged and is used to iterate over the raw logs and unpacked data for FeeSetterChanged events raised by the ContractIEigenDAServiceManager contract. -type ContractIEigenDAServiceManagerFeeSetterChangedIterator struct { - Event *ContractIEigenDAServiceManagerFeeSetterChanged // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *ContractIEigenDAServiceManagerFeeSetterChangedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(ContractIEigenDAServiceManagerFeeSetterChanged) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(ContractIEigenDAServiceManagerFeeSetterChanged) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *ContractIEigenDAServiceManagerFeeSetterChangedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ContractIEigenDAServiceManagerFeeSetterChangedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ContractIEigenDAServiceManagerFeeSetterChanged represents a FeeSetterChanged event raised by the ContractIEigenDAServiceManager contract. -type ContractIEigenDAServiceManagerFeeSetterChanged struct { - PreviousAddress common.Address - NewAddress common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterFeeSetterChanged is a free log retrieval operation binding the contract event 0x774b126b94b3cc801460a024dd575406c3ebf27affd7c36198a53ac6655f056d. -// -// Solidity: event FeeSetterChanged(address previousAddress, address newAddress) -func (_ContractIEigenDAServiceManager *ContractIEigenDAServiceManagerFilterer) FilterFeeSetterChanged(opts *bind.FilterOpts) (*ContractIEigenDAServiceManagerFeeSetterChangedIterator, error) { - - logs, sub, err := _ContractIEigenDAServiceManager.contract.FilterLogs(opts, "FeeSetterChanged") - if err != nil { - return nil, err - } - return &ContractIEigenDAServiceManagerFeeSetterChangedIterator{contract: _ContractIEigenDAServiceManager.contract, event: "FeeSetterChanged", logs: logs, sub: sub}, nil -} - -// WatchFeeSetterChanged is a free log subscription operation binding the contract event 0x774b126b94b3cc801460a024dd575406c3ebf27affd7c36198a53ac6655f056d. -// -// Solidity: event FeeSetterChanged(address previousAddress, address newAddress) -func (_ContractIEigenDAServiceManager *ContractIEigenDAServiceManagerFilterer) WatchFeeSetterChanged(opts *bind.WatchOpts, sink chan<- *ContractIEigenDAServiceManagerFeeSetterChanged) (event.Subscription, error) { - - logs, sub, err := _ContractIEigenDAServiceManager.contract.WatchLogs(opts, "FeeSetterChanged") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(ContractIEigenDAServiceManagerFeeSetterChanged) - if err := _ContractIEigenDAServiceManager.contract.UnpackLog(event, "FeeSetterChanged", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseFeeSetterChanged is a log parse operation binding the contract event 0x774b126b94b3cc801460a024dd575406c3ebf27affd7c36198a53ac6655f056d. -// -// Solidity: event FeeSetterChanged(address previousAddress, address newAddress) -func (_ContractIEigenDAServiceManager *ContractIEigenDAServiceManagerFilterer) ParseFeeSetterChanged(log types.Log) (*ContractIEigenDAServiceManagerFeeSetterChanged, error) { - event := new(ContractIEigenDAServiceManagerFeeSetterChanged) - if err := _ContractIEigenDAServiceManager.contract.UnpackLog(event, "FeeSetterChanged", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// ContractIEigenDAServiceManagerPaymentManagerSetIterator is returned from FilterPaymentManagerSet and is used to iterate over the raw logs and unpacked data for PaymentManagerSet events raised by the ContractIEigenDAServiceManager contract. -type ContractIEigenDAServiceManagerPaymentManagerSetIterator struct { - Event *ContractIEigenDAServiceManagerPaymentManagerSet // Event containing the contract specifics and raw log +// ContractIEigenDAServiceManagerBatchConfirmerChangedIterator is returned from FilterBatchConfirmerChanged and is used to iterate over the raw logs and unpacked data for BatchConfirmerChanged events raised by the ContractIEigenDAServiceManager contract. +type ContractIEigenDAServiceManagerBatchConfirmerChangedIterator struct { + Event *ContractIEigenDAServiceManagerBatchConfirmerChanged // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -810,7 +702,7 @@ type ContractIEigenDAServiceManagerPaymentManagerSetIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *ContractIEigenDAServiceManagerPaymentManagerSetIterator) Next() bool { +func (it *ContractIEigenDAServiceManagerBatchConfirmerChangedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -819,7 +711,7 @@ func (it *ContractIEigenDAServiceManagerPaymentManagerSetIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(ContractIEigenDAServiceManagerPaymentManagerSet) + it.Event = new(ContractIEigenDAServiceManagerBatchConfirmerChanged) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -834,7 +726,7 @@ func (it *ContractIEigenDAServiceManagerPaymentManagerSetIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(ContractIEigenDAServiceManagerPaymentManagerSet) + it.Event = new(ContractIEigenDAServiceManagerBatchConfirmerChanged) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -850,42 +742,42 @@ func (it *ContractIEigenDAServiceManagerPaymentManagerSetIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *ContractIEigenDAServiceManagerPaymentManagerSetIterator) Error() error { +func (it *ContractIEigenDAServiceManagerBatchConfirmerChangedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *ContractIEigenDAServiceManagerPaymentManagerSetIterator) Close() error { +func (it *ContractIEigenDAServiceManagerBatchConfirmerChangedIterator) Close() error { it.sub.Unsubscribe() return nil } -// ContractIEigenDAServiceManagerPaymentManagerSet represents a PaymentManagerSet event raised by the ContractIEigenDAServiceManager contract. -type ContractIEigenDAServiceManagerPaymentManagerSet struct { +// ContractIEigenDAServiceManagerBatchConfirmerChanged represents a BatchConfirmerChanged event raised by the ContractIEigenDAServiceManager contract. +type ContractIEigenDAServiceManagerBatchConfirmerChanged struct { PreviousAddress common.Address NewAddress common.Address Raw types.Log // Blockchain specific contextual infos } -// FilterPaymentManagerSet is a free log retrieval operation binding the contract event 0xa3044efb81dffce20bbf49cae117f167852a973364ae504dfade51a8d022c95a. +// FilterBatchConfirmerChanged is a free log retrieval operation binding the contract event 0xf024af0387e1367ceb1c6a3b6a00db4e9917e56bfb22a289808100f8e2b2c085. // -// Solidity: event PaymentManagerSet(address previousAddress, address newAddress) -func (_ContractIEigenDAServiceManager *ContractIEigenDAServiceManagerFilterer) FilterPaymentManagerSet(opts *bind.FilterOpts) (*ContractIEigenDAServiceManagerPaymentManagerSetIterator, error) { +// Solidity: event BatchConfirmerChanged(address previousAddress, address newAddress) +func (_ContractIEigenDAServiceManager *ContractIEigenDAServiceManagerFilterer) FilterBatchConfirmerChanged(opts *bind.FilterOpts) (*ContractIEigenDAServiceManagerBatchConfirmerChangedIterator, error) { - logs, sub, err := _ContractIEigenDAServiceManager.contract.FilterLogs(opts, "PaymentManagerSet") + logs, sub, err := _ContractIEigenDAServiceManager.contract.FilterLogs(opts, "BatchConfirmerChanged") if err != nil { return nil, err } - return &ContractIEigenDAServiceManagerPaymentManagerSetIterator{contract: _ContractIEigenDAServiceManager.contract, event: "PaymentManagerSet", logs: logs, sub: sub}, nil + return &ContractIEigenDAServiceManagerBatchConfirmerChangedIterator{contract: _ContractIEigenDAServiceManager.contract, event: "BatchConfirmerChanged", logs: logs, sub: sub}, nil } -// WatchPaymentManagerSet is a free log subscription operation binding the contract event 0xa3044efb81dffce20bbf49cae117f167852a973364ae504dfade51a8d022c95a. +// WatchBatchConfirmerChanged is a free log subscription operation binding the contract event 0xf024af0387e1367ceb1c6a3b6a00db4e9917e56bfb22a289808100f8e2b2c085. // -// Solidity: event PaymentManagerSet(address previousAddress, address newAddress) -func (_ContractIEigenDAServiceManager *ContractIEigenDAServiceManagerFilterer) WatchPaymentManagerSet(opts *bind.WatchOpts, sink chan<- *ContractIEigenDAServiceManagerPaymentManagerSet) (event.Subscription, error) { +// Solidity: event BatchConfirmerChanged(address previousAddress, address newAddress) +func (_ContractIEigenDAServiceManager *ContractIEigenDAServiceManagerFilterer) WatchBatchConfirmerChanged(opts *bind.WatchOpts, sink chan<- *ContractIEigenDAServiceManagerBatchConfirmerChanged) (event.Subscription, error) { - logs, sub, err := _ContractIEigenDAServiceManager.contract.WatchLogs(opts, "PaymentManagerSet") + logs, sub, err := _ContractIEigenDAServiceManager.contract.WatchLogs(opts, "BatchConfirmerChanged") if err != nil { return nil, err } @@ -895,8 +787,8 @@ func (_ContractIEigenDAServiceManager *ContractIEigenDAServiceManagerFilterer) W select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(ContractIEigenDAServiceManagerPaymentManagerSet) - if err := _ContractIEigenDAServiceManager.contract.UnpackLog(event, "PaymentManagerSet", log); err != nil { + event := new(ContractIEigenDAServiceManagerBatchConfirmerChanged) + if err := _ContractIEigenDAServiceManager.contract.UnpackLog(event, "BatchConfirmerChanged", log); err != nil { return err } event.Raw = log @@ -917,12 +809,12 @@ func (_ContractIEigenDAServiceManager *ContractIEigenDAServiceManagerFilterer) W }), nil } -// ParsePaymentManagerSet is a log parse operation binding the contract event 0xa3044efb81dffce20bbf49cae117f167852a973364ae504dfade51a8d022c95a. +// ParseBatchConfirmerChanged is a log parse operation binding the contract event 0xf024af0387e1367ceb1c6a3b6a00db4e9917e56bfb22a289808100f8e2b2c085. // -// Solidity: event PaymentManagerSet(address previousAddress, address newAddress) -func (_ContractIEigenDAServiceManager *ContractIEigenDAServiceManagerFilterer) ParsePaymentManagerSet(log types.Log) (*ContractIEigenDAServiceManagerPaymentManagerSet, error) { - event := new(ContractIEigenDAServiceManagerPaymentManagerSet) - if err := _ContractIEigenDAServiceManager.contract.UnpackLog(event, "PaymentManagerSet", log); err != nil { +// Solidity: event BatchConfirmerChanged(address previousAddress, address newAddress) +func (_ContractIEigenDAServiceManager *ContractIEigenDAServiceManagerFilterer) ParseBatchConfirmerChanged(log types.Log) (*ContractIEigenDAServiceManagerBatchConfirmerChanged, error) { + event := new(ContractIEigenDAServiceManagerBatchConfirmerChanged) + if err := _ContractIEigenDAServiceManager.contract.UnpackLog(event, "BatchConfirmerChanged", log); err != nil { return nil, err } event.Raw = log diff --git a/contracts/bindings/IndexRegistry/binding.go b/contracts/bindings/IndexRegistry/binding.go index 43eb8876fc..f471df5c69 100644 --- a/contracts/bindings/IndexRegistry/binding.go +++ b/contracts/bindings/IndexRegistry/binding.go @@ -43,8 +43,8 @@ type IIndexRegistryQuorumUpdate struct { // ContractIndexRegistryMetaData contains all meta data concerning the ContractIndexRegistry contract. var ContractIndexRegistryMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"contractIRegistryCoordinator\",\"name\":\"_registryCoordinator\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"operatorId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"newIndex\",\"type\":\"uint32\"}],\"name\":\"QuorumIndexUpdate\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"OPERATOR_DOES_NOT_EXIST_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"operatorId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"quorumNumbers\",\"type\":\"bytes\"}],\"name\":\"deregisterOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"operatorIndex\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"index\",\"type\":\"uint32\"}],\"name\":\"getOperatorIndexUpdateOfIndexForQuorumAtIndex\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"fromBlockNumber\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"operatorId\",\"type\":\"bytes32\"}],\"internalType\":\"structIIndexRegistry.OperatorUpdate\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"blockNumber\",\"type\":\"uint32\"}],\"name\":\"getOperatorListForQuorumAtBlockNumber\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"index\",\"type\":\"uint32\"}],\"name\":\"getQuorumUpdateAtIndex\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"fromBlockNumber\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"numOperators\",\"type\":\"uint32\"}],\"internalType\":\"structIIndexRegistry.QuorumUpdate\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"blockNumber\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"index\",\"type\":\"uint32\"}],\"name\":\"getTotalOperatorsForQuorumAtBlockNumberByIndex\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"globalOperatorList\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"operatorIdToIndex\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"operatorId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"quorumNumbers\",\"type\":\"bytes\"}],\"name\":\"registerOperator\",\"outputs\":[{\"internalType\":\"uint32[]\",\"name\":\"\",\"type\":\"uint32[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"registryCoordinator\",\"outputs\":[{\"internalType\":\"contractIRegistryCoordinator\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"}],\"name\":\"totalOperatorsForQuorum\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60a060405234801561001057600080fd5b5060405161142538038061142583398101604081905261002f9161010c565b6001600160a01b0381166080528061004561004c565b505061013c565b600054610100900460ff16156100b85760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101561010a576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b60006020828403121561011e57600080fd5b81516001600160a01b038116811461013557600080fd5b9392505050565b6080516112c06101656000396000818161013001528181610257015261097801526112c06000f3fe608060405234801561001057600080fd5b50600436106100a85760003560e01c8063a454b3be11610071578063a454b3be1461018a578063a48bb0ac146101b2578063b81b2d3e146101e9578063bd29b8cd1461021a578063caa3cd761461022f578063f34109221461023757600080fd5b8062bff04d146100ad5780633a5c3c41146100d65780636653b53b1461010a5780636d14a9871461012b578063889ae3e51461016a575b600080fd5b6100c06100bb366004610f2e565b61024a565b6040516100cd9190610faa565b60405180910390f35b6100e96100e436600461101e565b610453565b60408051825163ffffffff16815260209283015192810192909252016100cd565b61011d610118366004611061565b6104d9565b6040519081526020016100cd565b6101527f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100cd565b61017d61017836600461107a565b6104fa565b6040516100cd91906110ad565b61019d6101983660046110e5565b61066a565b60405163ffffffff90911681526020016100cd565b6101c56101c036600461107a565b6108f6565b60408051825163ffffffff90811682526020938401511692810192909252016100cd565b61019d6101f7366004611111565b600260209081526000928352604080842090915290825290205463ffffffff1681565b61022d610228366004610f2e565b61096d565b005b61011d600081565b61019d61024536600461113b565b610a83565b6060336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461029d5760405162461bcd60e51b815260040161029490611156565b60405180910390fd5b60008267ffffffffffffffff8111156102b8576102b86111c9565b6040519080825280602002602001820160405280156102e1578160200160208202803683370190505b50905060005b83811015610448576000858583818110610303576103036111df565b919091013560f81c6000818152600460205260408120549193509091508161032c576000610373565b60ff8316600090815260046020526040902061034960018461120b565b81548110610359576103596111df565b600091825260209091200154600160201b900463ffffffff165b9050610380898483610a8e565b6103fb8361038f836001611222565b60408051808201825263ffffffff9283166020808301918252438516835260ff9590951660009081526004865292832080546001810182559084529490922090519301805491518316600160201b0267ffffffffffffffff199092169390921692909217919091179055565b610406816001611222565b858581518110610418576104186111df565b602002602001019063ffffffff16908163ffffffff168152505050505080806104409061124a565b9150506102e7565b5090505b9392505050565b604080518082019091526000808252602082015260ff8316600090815260036020908152604080832063ffffffff808916855292529091208054909184169081106104a0576104a06111df565b600091825260209182902060408051808201909152600290920201805463ffffffff168252600101549181019190915290509392505050565b600181815481106104e957600080fd5b600091825260209091200154905081565b606060006105088484610b56565b63ffffffff1667ffffffffffffffff811115610526576105266111c9565b60405190808252806020026020018201604052801561054f578160200160208202803683370190505b50905060005b815181101561066057610569818686610cf9565b82828151811061057b5761057b6111df565b6020026020010181815250506000801b82828151811061059d5761059d6111df565b6020026020010151141561064e5760405162461bcd60e51b815260206004820152606660248201527f496e64657852656769737472792e6765744f70657261746f724c697374466f7260448201527f51756f72756d4174426c6f636b4e756d6265723a206f70657261746f7220646f60648201527f6573206e6f742065786973742061742074686520676976656e20626c6f636b20608482015265373ab6b132b960d11b60a482015260c401610294565b806106588161124a565b915050610555565b5090505b92915050565b60ff83166000908152600460205260408120805482919063ffffffff8516908110610697576106976111df565b60009182526020918290206040805180820190915291015463ffffffff808216808452600160201b90920481169383019390935290925090851610156107915760405162461bcd60e51b815260206004820152607d60248201527f496e64657852656769737472792e676574546f74616c4f70657261746f72734660448201527f6f7251756f72756d4174426c6f636b4e756d6265724279496e6465783a20707260648201527f6f766964656420696e64657820697320746f6f2066617220696e20746865207060848201527f61737420666f722070726f766964656420626c6f636b206e756d62657200000060a482015260c401610294565b60ff85166000908152600460205260409020546107b09060019061120b565b8363ffffffff16146108ea5760ff851660009081526004602052604081206107d9856001611222565b63ffffffff16815481106107ef576107ef6111df565b60009182526020918290206040805180820190915291015463ffffffff808216808452600160201b909204811693830193909352909250908616106108e85760405162461bcd60e51b815260206004820152607f60248201527f496e64657852656769737472792e676574546f74616c4f70657261746f72734660448201527f6f7251756f72756d4174426c6f636b4e756d6265724279496e6465783a20707260648201527f6f766964656420696e64657820697320746f6f2066617220696e20746865206660848201527f757475726520666f722070726f766964656420626c6f636b206e756d6265720060a482015260c401610294565b505b60200151949350505050565b604080518082019091526000808252602082015260ff83166000908152600460205260409020805463ffffffff8416908110610934576109346111df565b60009182526020918290206040805180820190915291015463ffffffff8082168352600160201b90910416918101919091529392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109b55760405162461bcd60e51b815260040161029490611156565b60005b81811015610a7d5760008383838181106109d4576109d46111df565b919091013560f81c60008181526002602090815260408083208a845290915290205490925063ffffffff169050610a0c868383610de9565b60ff821660009081526004602052604090208054610a6891849160019190610a3590839061120b565b81548110610a4557610a456111df565b60009182526020909120015461038f9190600160201b900463ffffffff16611265565b50508080610a759061124a565b9150506109b8565b50505050565b600061066482610ec0565b604080518082018252602080820186815263ffffffff438116845260ff87166000818152600385528681208884168083529086528782208054600180820183559184528784208951600292830290910180549190971663ffffffff19918216178755965195909101949094558282529285528681208a8252855286902080549093168217909255845191825291810191909152909185917f6ee1e4f4075f3d067176140d34e87874244dd273294c05b2218133e49a2ba6f6910160405180910390a250505050565b60ff821660009081526004602052604081205480610b78576000915050610664565b60ff841660009081526004602052604081208054909190610b9b57610b9b6111df565b60009182526020909120015463ffffffff9081169084161015610bc2576000915050610664565b60005b610bd060018361120b565b8111610cb457600081610be460018561120b565b610bee919061120b565b60ff871660009081526004602052604081208054929350909183908110610c1757610c176111df565b60009182526020918290206040805180820190915291015463ffffffff808216808452600160201b90920481169383019390935290925090871610610c9f5760ff87166000908152600460205260409020805483908110610c7a57610c7a6111df565b600091825260209091200154600160201b900463ffffffff1694506106649350505050565b50508080610cac9061124a565b915050610bc5565b5060ff841660009081526004602052604081208054909190610cd857610cd86111df565b600091825260209091200154600160201b900463ffffffff16949350505050565b60ff8216600090815260036020908152604080832063ffffffff87168452909152812054815b81811015610ddd57600081610d3560018561120b565b610d3f919061120b565b60ff8716600090815260036020908152604080832063ffffffff8c16845290915281208054929350909183908110610d7957610d796111df565b600091825260209182902060408051808201909152600290920201805463ffffffff9081168084526001909201549383019390935290925090871610610dc85760200151935061044c92505050565b50508080610dd59061124a565b915050610d1f565b50600095945050505050565b6000610df483610ec0565b60ff841660009081526003602052604081209192509081610e16600185611265565b63ffffffff1681526020808201929092526040908101600090812060ff881682526003909352908120600191610e4c8387611265565b63ffffffff168152602081019190915260400160002054610e6d919061120b565b81548110610e7d57610e7d6111df565b9060005260206000209060020201600101549050808514610ea357610ea3818585610a8e565b610eb9600085610eb4600186611265565b610a8e565b5050505050565b60ff811660009081526004602052604081205480610ee15750600092915050565b60ff83166000908152600460205260409020610efe60018361120b565b81548110610f0e57610f0e6111df565b600091825260209091200154600160201b900463ffffffff169392505050565b600080600060408486031215610f4357600080fd5b83359250602084013567ffffffffffffffff80821115610f6257600080fd5b818601915086601f830112610f7657600080fd5b813581811115610f8557600080fd5b876020828501011115610f9757600080fd5b6020830194508093505050509250925092565b6020808252825182820181905260009190848201906040850190845b81811015610fe857835163ffffffff1683529284019291840191600101610fc6565b50909695505050505050565b803563ffffffff8116811461100857600080fd5b919050565b803560ff8116811461100857600080fd5b60008060006060848603121561103357600080fd5b61103c84610ff4565b925061104a6020850161100d565b915061105860408501610ff4565b90509250925092565b60006020828403121561107357600080fd5b5035919050565b6000806040838503121561108d57600080fd5b6110968361100d565b91506110a460208401610ff4565b90509250929050565b6020808252825182820181905260009190848201906040850190845b81811015610fe8578351835292840192918401916001016110c9565b6000806000606084860312156110fa57600080fd5b6111038461100d565b925061104a60208501610ff4565b6000806040838503121561112457600080fd5b61112d8361100d565b946020939093013593505050565b60006020828403121561114d57600080fd5b61044c8261100d565b6020808252604d908201527f496e64657852656769737472792e6f6e6c795265676973747279436f6f72646960408201527f6e61746f723a2063616c6c6572206973206e6f7420746865207265676973747260608201526c3c9031b7b7b93234b730ba37b960991b608082015260a00190565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008282101561121d5761121d6111f5565b500390565b600063ffffffff808316818516808303821115611241576112416111f5565b01949350505050565b600060001982141561125e5761125e6111f5565b5060010190565b600063ffffffff83811690831681811015611282576112826111f5565b03939250505056fea26469706673582212208e64648176e7458dadb7d80c2909b88a1dc12a7acbcf7c64843c9a82e73092fa64736f6c634300080c0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_registryCoordinator\",\"type\":\"address\",\"internalType\":\"contractIRegistryCoordinator\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"OPERATOR_DOES_NOT_EXIST_ID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"currentOperatorIndex\",\"inputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deregisterOperator\",\"inputs\":[{\"name\":\"operatorId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getLatestOperatorUpdate\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"operatorIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIIndexRegistry.OperatorUpdate\",\"components\":[{\"name\":\"fromBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"operatorId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getLatestQuorumUpdate\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIIndexRegistry.QuorumUpdate\",\"components\":[{\"name\":\"fromBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"numOperators\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorListAtBlockNumber\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"blockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorUpdateAtIndex\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"operatorIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"arrayIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIIndexRegistry.OperatorUpdate\",\"components\":[{\"name\":\"fromBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"operatorId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getQuorumUpdateAtIndex\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"quorumIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIIndexRegistry.QuorumUpdate\",\"components\":[{\"name\":\"fromBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"numOperators\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initializeQuorum\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registerOperator\",\"inputs\":[{\"name\":\"operatorId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registryCoordinator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"totalOperatorsForQuorum\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"QuorumIndexUpdate\",\"inputs\":[{\"name\":\"operatorId\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"},{\"name\":\"newOperatorIndex\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false}]", + Bin: "0x60a060405234801561001057600080fd5b5060405161147d38038061147d83398101604081905261002f9161010c565b6001600160a01b0381166080528061004561004c565b505061013c565b600054610100900460ff16156100b85760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101561010a576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b60006020828403121561011e57600080fd5b81516001600160a01b038116811461013557600080fd5b9392505050565b60805161131161016c60003960008181610142015281816102750152818161041b01526107ed01526113116000f3fe608060405234801561001057600080fd5b50600436106100b35760003560e01c8063890262451161007157806389026245146101b3578063a48bb0ac146101d3578063bd29b8cd146101e6578063caa3cd76146101f9578063e2e685801461020f578063f34109221461025557600080fd5b8062bff04d146100b857806312d1d74d146100e157806326d941f2146101155780632ed583e51461012a5780636d14a9871461013d5780638121906f1461017c575b600080fd5b6100cb6100c6366004610f6f565b610268565b6040516100d89190610feb565b60405180910390f35b6100f46100ef36600461105f565b6103ca565b60408051825163ffffffff16815260209283015192810192909252016100d8565b610128610123366004611092565b610410565b005b6100f46101383660046110ad565b610534565b6101647f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100d8565b61018f61018a366004611092565b6105ba565b60408051825163ffffffff90811682526020938401511692810192909252016100d8565b6101c66101c136600461105f565b610601565b6040516100d891906110f0565b61018f6101e136600461105f565b61076b565b6101286101f4366004610f6f565b6107e2565b610201600081565b6040519081526020016100d8565b61024061021d366004611128565b600160209081526000928352604080842090915290825290205463ffffffff1681565b60405163ffffffff90911681526020016100d8565b610240610263366004611092565b6108f0565b6060336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146102bb5760405162461bcd60e51b81526004016102b290611152565b60405180910390fd5b60008267ffffffffffffffff8111156102d6576102d66111c5565b6040519080825280602002602001820160405280156102ff578160200160208202803683370190505b50905060005b838110156103bf576000858583818110610321576103216111db565b919091013560f81c60008181526003602052604090205490925090508061035a5760405162461bcd60e51b81526004016102b2906111f1565b60006103658361090f565b905061037c898461037760018561125c565b610a08565b8085858151811061038f5761038f6111db565b602002602001019063ffffffff16908163ffffffff168152505050505080806103b790611281565b915050610305565b5090505b9392505050565b60408051808201909152600080825260208201526103e88383610a92565b60408051808201909152815463ffffffff168152600190910154602082015290505b92915050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104585760405162461bcd60e51b81526004016102b290611152565b60ff8116600090815260036020526040902054156104d25760405162461bcd60e51b815260206004820152603160248201527f496e64657852656769737472792e63726561746551756f72756d3a2071756f72604482015270756d20616c72656164792065786973747360781b60648201526084016102b2565b60ff166000908152600360209081526040808320815180830190925263ffffffff438116835282840185815282546001810184559286529390942091519101805492518416600160201b0267ffffffffffffffff199093169190931617179055565b604080518082019091526000808252602082015260ff8416600090815260026020908152604080832063ffffffff80881685529252909120805490918416908110610581576105816111db565b600091825260209182902060408051808201909152600290920201805463ffffffff168252600101549181019190915290509392505050565b60408051808201909152600080825260208201526105d782610aea565b60408051808201909152905463ffffffff8082168352600160201b90910416602082015292915050565b6060600061060f8484610b2c565b905060008163ffffffff1667ffffffffffffffff811115610632576106326111c5565b60405190808252806020026020018201604052801561065b578160200160208202803683370190505b50905060005b8263ffffffff168110156107625761067a868287610cf0565b82828151811061068c5761068c6111db565b6020026020010181815250506000801b8282815181106106ae576106ae6111db565b602002602001015114156107505760405162461bcd60e51b815260206004820152605d60248201527f496e64657852656769737472792e6765744f70657261746f724c69737441744260448201527f6c6f636b4e756d6265723a206f70657261746f7220646f6573206e6f7420657860648201527f6973742061742074686520676976656e20626c6f636b206e756d626572000000608482015260a4016102b2565b8061075a81611281565b915050610661565b50949350505050565b604080518082019091526000808252602082015260ff83166000908152600360205260409020805463ffffffff84169081106107a9576107a96111db565b60009182526020918290206040805180820190915291015463ffffffff8082168352600160201b90910416918101919091529392505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461082a5760405162461bcd60e51b81526004016102b290611152565b60005b818110156108ea576000838383818110610849576108496111db565b919091013560f81c6000818152600360205260409020549092509050806108825760405162461bcd60e51b81526004016102b2906111f1565b60ff8216600090815260016020908152604080832089845290915281205463ffffffff16906108b084610de0565b905060006108be8583610e1a565b90508089146108d2576108d2818685610a08565b505050505080806108e290611281565b91505061082d565b50505050565b60006108fb82610aea565b54600160201b900463ffffffff1692915050565b60008061091b83610aea565b805490915060009061093b90600160201b900463ffffffff16600161129c565b9050610948848383610e44565b60ff841660009081526002602052604081209061096660018461125c565b63ffffffff1681526020810191909152604001600020546103c35760ff841660009081526002602052604081209061099f60018461125c565b63ffffffff908116825260208083019390935260409182016000908120835180850190945243831684528385018281528154600180820184559284529590922093516002909502909301805463ffffffff19169490921693909317815591519101559392505050565b6000610a148383610a92565b9050610a2283838387610ee4565b60ff83166000818152600160209081526040808320888452825291829020805463ffffffff191663ffffffff871690811790915582519384529083015285917f6ee1e4f4075f3d067176140d34e87874244dd273294c05b2218133e49a2ba6f6910160405180910390a250505050565b60ff8216600090815260026020908152604080832063ffffffff851684529091528120805490610ac36001836112c4565b81548110610ad357610ad36111db565b906000526020600020906002020191505092915050565b60ff81166000908152600360205260408120805490610b0a6001836112c4565b81548110610b1a57610b1a6111db565b90600052602060002001915050919050565b60ff821660009081526003602052604081205480610bb4576040805162461bcd60e51b81526020600482015260248101919091527f496e64657852656769737472792e5f6f70657261746f72436f756e744174426c60448201527f6f636b4e756d6265723a2071756f72756d20646f6573206e6f7420657869737460648201526084016102b2565b60005b81811015610c6357600081610bcd6001856112c4565b610bd791906112c4565b60ff871660009081526003602052604081208054929350909183908110610c0057610c006111db565b60009182526020918290206040805180820190915291015463ffffffff808216808452600160201b90920481169383019390935290925090871610610c4e5760200151935061040a92505050565b50508080610c5b90611281565b915050610bb7565b5060405162461bcd60e51b815260206004820152605560248201527f496e64657852656769737472792e5f6f70657261746f72436f756e744174426c60448201527f6f636b4e756d6265723a2071756f72756d20646964206e6f742065786973742060648201527430ba1033b4bb32b710313637b1b590373ab6b132b960591b608482015260a4016102b2565b60ff8316600090815260026020908152604080832063ffffffff86168452909152812054815b81811015610dd457600081610d2c6001856112c4565b610d3691906112c4565b60ff8816600090815260026020908152604080832063ffffffff8b16845290915281208054929350909183908110610d7057610d706111db565b600091825260209182902060408051808201909152600290920201805463ffffffff9081168084526001909201549383019390935290925090871610610dbf576020015193506103c392505050565b50508080610dcc90611281565b915050610d16565b50600095945050505050565b600080610dec83610aea565b8054909150600090610e0d90600190600160201b900463ffffffff1661125c565b90506103c3848383610e44565b600080610e278484610a92565b6001810154909150610e3c8585846000610ee4565b949350505050565b81544363ffffffff90811691161415610e7b57815463ffffffff8216600160201b0267ffffffff0000000019909116178255505050565b60ff83166000908152600360209081526040808320815180830190925263ffffffff438116835285811683850190815282546001810184559286529390942091519101805492518416600160201b0267ffffffffffffffff199093169190931617179055505050565b81544363ffffffff90811691161415610f0357600182018190556108ea565b60ff93909316600090815260026020818152604080842063ffffffff968716855282528084208151808301909252438716825281830197885280546001808201835591865292909420905191909202909101805463ffffffff1916919094161783559251919092015550565b600080600060408486031215610f8457600080fd5b83359250602084013567ffffffffffffffff80821115610fa357600080fd5b818601915086601f830112610fb757600080fd5b813581811115610fc657600080fd5b876020828501011115610fd857600080fd5b6020830194508093505050509250925092565b6020808252825182820181905260009190848201906040850190845b8181101561102957835163ffffffff1683529284019291840191600101611007565b50909695505050505050565b803560ff8116811461104657600080fd5b919050565b803563ffffffff8116811461104657600080fd5b6000806040838503121561107257600080fd5b61107b83611035565b91506110896020840161104b565b90509250929050565b6000602082840312156110a457600080fd5b6103c382611035565b6000806000606084860312156110c257600080fd5b6110cb84611035565b92506110d96020850161104b565b91506110e76040850161104b565b90509250925092565b6020808252825182820181905260009190848201906040850190845b818110156110295783518352928401929184019160010161110c565b6000806040838503121561113b57600080fd5b61114483611035565b946020939093013593505050565b6020808252604d908201527f496e64657852656769737472792e6f6e6c795265676973747279436f6f72646960408201527f6e61746f723a2063616c6c6572206973206e6f7420746865207265676973747260608201526c3c9031b7b7b93234b730ba37b960991b608082015260a00190565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60208082526035908201527f496e64657852656769737472792e72656769737465724f70657261746f723a206040820152741c5d5bdc9d5b48191bd95cc81b9bdd08195e1a5cdd605a1b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600063ffffffff8381169083168181101561127957611279611246565b039392505050565b600060001982141561129557611295611246565b5060010190565b600063ffffffff8083168185168083038211156112bb576112bb611246565b01949350505050565b6000828210156112d6576112d6611246565b50039056fea2646970667358221220d0d4f68e27946cb6584991a64db5b9bd23b94946f37733d0c16c9edc491c45eb64736f6c634300080c0033", } // ContractIndexRegistryABI is the input ABI used to generate the binding from. @@ -245,74 +245,74 @@ func (_ContractIndexRegistry *ContractIndexRegistryCallerSession) OPERATORDOESNO return _ContractIndexRegistry.Contract.OPERATORDOESNOTEXISTID(&_ContractIndexRegistry.CallOpts) } -// GetOperatorIndexUpdateOfIndexForQuorumAtIndex is a free data retrieval call binding the contract method 0x3a5c3c41. +// CurrentOperatorIndex is a free data retrieval call binding the contract method 0xe2e68580. // -// Solidity: function getOperatorIndexUpdateOfIndexForQuorumAtIndex(uint32 operatorIndex, uint8 quorumNumber, uint32 index) view returns((uint32,bytes32)) -func (_ContractIndexRegistry *ContractIndexRegistryCaller) GetOperatorIndexUpdateOfIndexForQuorumAtIndex(opts *bind.CallOpts, operatorIndex uint32, quorumNumber uint8, index uint32) (IIndexRegistryOperatorUpdate, error) { +// Solidity: function currentOperatorIndex(uint8 , bytes32 ) view returns(uint32) +func (_ContractIndexRegistry *ContractIndexRegistryCaller) CurrentOperatorIndex(opts *bind.CallOpts, arg0 uint8, arg1 [32]byte) (uint32, error) { var out []interface{} - err := _ContractIndexRegistry.contract.Call(opts, &out, "getOperatorIndexUpdateOfIndexForQuorumAtIndex", operatorIndex, quorumNumber, index) + err := _ContractIndexRegistry.contract.Call(opts, &out, "currentOperatorIndex", arg0, arg1) if err != nil { - return *new(IIndexRegistryOperatorUpdate), err + return *new(uint32), err } - out0 := *abi.ConvertType(out[0], new(IIndexRegistryOperatorUpdate)).(*IIndexRegistryOperatorUpdate) + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) return out0, err } -// GetOperatorIndexUpdateOfIndexForQuorumAtIndex is a free data retrieval call binding the contract method 0x3a5c3c41. +// CurrentOperatorIndex is a free data retrieval call binding the contract method 0xe2e68580. // -// Solidity: function getOperatorIndexUpdateOfIndexForQuorumAtIndex(uint32 operatorIndex, uint8 quorumNumber, uint32 index) view returns((uint32,bytes32)) -func (_ContractIndexRegistry *ContractIndexRegistrySession) GetOperatorIndexUpdateOfIndexForQuorumAtIndex(operatorIndex uint32, quorumNumber uint8, index uint32) (IIndexRegistryOperatorUpdate, error) { - return _ContractIndexRegistry.Contract.GetOperatorIndexUpdateOfIndexForQuorumAtIndex(&_ContractIndexRegistry.CallOpts, operatorIndex, quorumNumber, index) +// Solidity: function currentOperatorIndex(uint8 , bytes32 ) view returns(uint32) +func (_ContractIndexRegistry *ContractIndexRegistrySession) CurrentOperatorIndex(arg0 uint8, arg1 [32]byte) (uint32, error) { + return _ContractIndexRegistry.Contract.CurrentOperatorIndex(&_ContractIndexRegistry.CallOpts, arg0, arg1) } -// GetOperatorIndexUpdateOfIndexForQuorumAtIndex is a free data retrieval call binding the contract method 0x3a5c3c41. +// CurrentOperatorIndex is a free data retrieval call binding the contract method 0xe2e68580. // -// Solidity: function getOperatorIndexUpdateOfIndexForQuorumAtIndex(uint32 operatorIndex, uint8 quorumNumber, uint32 index) view returns((uint32,bytes32)) -func (_ContractIndexRegistry *ContractIndexRegistryCallerSession) GetOperatorIndexUpdateOfIndexForQuorumAtIndex(operatorIndex uint32, quorumNumber uint8, index uint32) (IIndexRegistryOperatorUpdate, error) { - return _ContractIndexRegistry.Contract.GetOperatorIndexUpdateOfIndexForQuorumAtIndex(&_ContractIndexRegistry.CallOpts, operatorIndex, quorumNumber, index) +// Solidity: function currentOperatorIndex(uint8 , bytes32 ) view returns(uint32) +func (_ContractIndexRegistry *ContractIndexRegistryCallerSession) CurrentOperatorIndex(arg0 uint8, arg1 [32]byte) (uint32, error) { + return _ContractIndexRegistry.Contract.CurrentOperatorIndex(&_ContractIndexRegistry.CallOpts, arg0, arg1) } -// GetOperatorListForQuorumAtBlockNumber is a free data retrieval call binding the contract method 0x889ae3e5. +// GetLatestOperatorUpdate is a free data retrieval call binding the contract method 0x12d1d74d. // -// Solidity: function getOperatorListForQuorumAtBlockNumber(uint8 quorumNumber, uint32 blockNumber) view returns(bytes32[]) -func (_ContractIndexRegistry *ContractIndexRegistryCaller) GetOperatorListForQuorumAtBlockNumber(opts *bind.CallOpts, quorumNumber uint8, blockNumber uint32) ([][32]byte, error) { +// Solidity: function getLatestOperatorUpdate(uint8 quorumNumber, uint32 operatorIndex) view returns((uint32,bytes32)) +func (_ContractIndexRegistry *ContractIndexRegistryCaller) GetLatestOperatorUpdate(opts *bind.CallOpts, quorumNumber uint8, operatorIndex uint32) (IIndexRegistryOperatorUpdate, error) { var out []interface{} - err := _ContractIndexRegistry.contract.Call(opts, &out, "getOperatorListForQuorumAtBlockNumber", quorumNumber, blockNumber) + err := _ContractIndexRegistry.contract.Call(opts, &out, "getLatestOperatorUpdate", quorumNumber, operatorIndex) if err != nil { - return *new([][32]byte), err + return *new(IIndexRegistryOperatorUpdate), err } - out0 := *abi.ConvertType(out[0], new([][32]byte)).(*[][32]byte) + out0 := *abi.ConvertType(out[0], new(IIndexRegistryOperatorUpdate)).(*IIndexRegistryOperatorUpdate) return out0, err } -// GetOperatorListForQuorumAtBlockNumber is a free data retrieval call binding the contract method 0x889ae3e5. +// GetLatestOperatorUpdate is a free data retrieval call binding the contract method 0x12d1d74d. // -// Solidity: function getOperatorListForQuorumAtBlockNumber(uint8 quorumNumber, uint32 blockNumber) view returns(bytes32[]) -func (_ContractIndexRegistry *ContractIndexRegistrySession) GetOperatorListForQuorumAtBlockNumber(quorumNumber uint8, blockNumber uint32) ([][32]byte, error) { - return _ContractIndexRegistry.Contract.GetOperatorListForQuorumAtBlockNumber(&_ContractIndexRegistry.CallOpts, quorumNumber, blockNumber) +// Solidity: function getLatestOperatorUpdate(uint8 quorumNumber, uint32 operatorIndex) view returns((uint32,bytes32)) +func (_ContractIndexRegistry *ContractIndexRegistrySession) GetLatestOperatorUpdate(quorumNumber uint8, operatorIndex uint32) (IIndexRegistryOperatorUpdate, error) { + return _ContractIndexRegistry.Contract.GetLatestOperatorUpdate(&_ContractIndexRegistry.CallOpts, quorumNumber, operatorIndex) } -// GetOperatorListForQuorumAtBlockNumber is a free data retrieval call binding the contract method 0x889ae3e5. +// GetLatestOperatorUpdate is a free data retrieval call binding the contract method 0x12d1d74d. // -// Solidity: function getOperatorListForQuorumAtBlockNumber(uint8 quorumNumber, uint32 blockNumber) view returns(bytes32[]) -func (_ContractIndexRegistry *ContractIndexRegistryCallerSession) GetOperatorListForQuorumAtBlockNumber(quorumNumber uint8, blockNumber uint32) ([][32]byte, error) { - return _ContractIndexRegistry.Contract.GetOperatorListForQuorumAtBlockNumber(&_ContractIndexRegistry.CallOpts, quorumNumber, blockNumber) +// Solidity: function getLatestOperatorUpdate(uint8 quorumNumber, uint32 operatorIndex) view returns((uint32,bytes32)) +func (_ContractIndexRegistry *ContractIndexRegistryCallerSession) GetLatestOperatorUpdate(quorumNumber uint8, operatorIndex uint32) (IIndexRegistryOperatorUpdate, error) { + return _ContractIndexRegistry.Contract.GetLatestOperatorUpdate(&_ContractIndexRegistry.CallOpts, quorumNumber, operatorIndex) } -// GetQuorumUpdateAtIndex is a free data retrieval call binding the contract method 0xa48bb0ac. +// GetLatestQuorumUpdate is a free data retrieval call binding the contract method 0x8121906f. // -// Solidity: function getQuorumUpdateAtIndex(uint8 quorumNumber, uint32 index) view returns((uint32,uint32)) -func (_ContractIndexRegistry *ContractIndexRegistryCaller) GetQuorumUpdateAtIndex(opts *bind.CallOpts, quorumNumber uint8, index uint32) (IIndexRegistryQuorumUpdate, error) { +// Solidity: function getLatestQuorumUpdate(uint8 quorumNumber) view returns((uint32,uint32)) +func (_ContractIndexRegistry *ContractIndexRegistryCaller) GetLatestQuorumUpdate(opts *bind.CallOpts, quorumNumber uint8) (IIndexRegistryQuorumUpdate, error) { var out []interface{} - err := _ContractIndexRegistry.contract.Call(opts, &out, "getQuorumUpdateAtIndex", quorumNumber, index) + err := _ContractIndexRegistry.contract.Call(opts, &out, "getLatestQuorumUpdate", quorumNumber) if err != nil { return *new(IIndexRegistryQuorumUpdate), err @@ -324,111 +324,111 @@ func (_ContractIndexRegistry *ContractIndexRegistryCaller) GetQuorumUpdateAtInde } -// GetQuorumUpdateAtIndex is a free data retrieval call binding the contract method 0xa48bb0ac. +// GetLatestQuorumUpdate is a free data retrieval call binding the contract method 0x8121906f. // -// Solidity: function getQuorumUpdateAtIndex(uint8 quorumNumber, uint32 index) view returns((uint32,uint32)) -func (_ContractIndexRegistry *ContractIndexRegistrySession) GetQuorumUpdateAtIndex(quorumNumber uint8, index uint32) (IIndexRegistryQuorumUpdate, error) { - return _ContractIndexRegistry.Contract.GetQuorumUpdateAtIndex(&_ContractIndexRegistry.CallOpts, quorumNumber, index) +// Solidity: function getLatestQuorumUpdate(uint8 quorumNumber) view returns((uint32,uint32)) +func (_ContractIndexRegistry *ContractIndexRegistrySession) GetLatestQuorumUpdate(quorumNumber uint8) (IIndexRegistryQuorumUpdate, error) { + return _ContractIndexRegistry.Contract.GetLatestQuorumUpdate(&_ContractIndexRegistry.CallOpts, quorumNumber) } -// GetQuorumUpdateAtIndex is a free data retrieval call binding the contract method 0xa48bb0ac. +// GetLatestQuorumUpdate is a free data retrieval call binding the contract method 0x8121906f. // -// Solidity: function getQuorumUpdateAtIndex(uint8 quorumNumber, uint32 index) view returns((uint32,uint32)) -func (_ContractIndexRegistry *ContractIndexRegistryCallerSession) GetQuorumUpdateAtIndex(quorumNumber uint8, index uint32) (IIndexRegistryQuorumUpdate, error) { - return _ContractIndexRegistry.Contract.GetQuorumUpdateAtIndex(&_ContractIndexRegistry.CallOpts, quorumNumber, index) +// Solidity: function getLatestQuorumUpdate(uint8 quorumNumber) view returns((uint32,uint32)) +func (_ContractIndexRegistry *ContractIndexRegistryCallerSession) GetLatestQuorumUpdate(quorumNumber uint8) (IIndexRegistryQuorumUpdate, error) { + return _ContractIndexRegistry.Contract.GetLatestQuorumUpdate(&_ContractIndexRegistry.CallOpts, quorumNumber) } -// GetTotalOperatorsForQuorumAtBlockNumberByIndex is a free data retrieval call binding the contract method 0xa454b3be. +// GetOperatorListAtBlockNumber is a free data retrieval call binding the contract method 0x89026245. // -// Solidity: function getTotalOperatorsForQuorumAtBlockNumberByIndex(uint8 quorumNumber, uint32 blockNumber, uint32 index) view returns(uint32) -func (_ContractIndexRegistry *ContractIndexRegistryCaller) GetTotalOperatorsForQuorumAtBlockNumberByIndex(opts *bind.CallOpts, quorumNumber uint8, blockNumber uint32, index uint32) (uint32, error) { +// Solidity: function getOperatorListAtBlockNumber(uint8 quorumNumber, uint32 blockNumber) view returns(bytes32[]) +func (_ContractIndexRegistry *ContractIndexRegistryCaller) GetOperatorListAtBlockNumber(opts *bind.CallOpts, quorumNumber uint8, blockNumber uint32) ([][32]byte, error) { var out []interface{} - err := _ContractIndexRegistry.contract.Call(opts, &out, "getTotalOperatorsForQuorumAtBlockNumberByIndex", quorumNumber, blockNumber, index) + err := _ContractIndexRegistry.contract.Call(opts, &out, "getOperatorListAtBlockNumber", quorumNumber, blockNumber) if err != nil { - return *new(uint32), err + return *new([][32]byte), err } - out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + out0 := *abi.ConvertType(out[0], new([][32]byte)).(*[][32]byte) return out0, err } -// GetTotalOperatorsForQuorumAtBlockNumberByIndex is a free data retrieval call binding the contract method 0xa454b3be. +// GetOperatorListAtBlockNumber is a free data retrieval call binding the contract method 0x89026245. // -// Solidity: function getTotalOperatorsForQuorumAtBlockNumberByIndex(uint8 quorumNumber, uint32 blockNumber, uint32 index) view returns(uint32) -func (_ContractIndexRegistry *ContractIndexRegistrySession) GetTotalOperatorsForQuorumAtBlockNumberByIndex(quorumNumber uint8, blockNumber uint32, index uint32) (uint32, error) { - return _ContractIndexRegistry.Contract.GetTotalOperatorsForQuorumAtBlockNumberByIndex(&_ContractIndexRegistry.CallOpts, quorumNumber, blockNumber, index) +// Solidity: function getOperatorListAtBlockNumber(uint8 quorumNumber, uint32 blockNumber) view returns(bytes32[]) +func (_ContractIndexRegistry *ContractIndexRegistrySession) GetOperatorListAtBlockNumber(quorumNumber uint8, blockNumber uint32) ([][32]byte, error) { + return _ContractIndexRegistry.Contract.GetOperatorListAtBlockNumber(&_ContractIndexRegistry.CallOpts, quorumNumber, blockNumber) } -// GetTotalOperatorsForQuorumAtBlockNumberByIndex is a free data retrieval call binding the contract method 0xa454b3be. +// GetOperatorListAtBlockNumber is a free data retrieval call binding the contract method 0x89026245. // -// Solidity: function getTotalOperatorsForQuorumAtBlockNumberByIndex(uint8 quorumNumber, uint32 blockNumber, uint32 index) view returns(uint32) -func (_ContractIndexRegistry *ContractIndexRegistryCallerSession) GetTotalOperatorsForQuorumAtBlockNumberByIndex(quorumNumber uint8, blockNumber uint32, index uint32) (uint32, error) { - return _ContractIndexRegistry.Contract.GetTotalOperatorsForQuorumAtBlockNumberByIndex(&_ContractIndexRegistry.CallOpts, quorumNumber, blockNumber, index) +// Solidity: function getOperatorListAtBlockNumber(uint8 quorumNumber, uint32 blockNumber) view returns(bytes32[]) +func (_ContractIndexRegistry *ContractIndexRegistryCallerSession) GetOperatorListAtBlockNumber(quorumNumber uint8, blockNumber uint32) ([][32]byte, error) { + return _ContractIndexRegistry.Contract.GetOperatorListAtBlockNumber(&_ContractIndexRegistry.CallOpts, quorumNumber, blockNumber) } -// GlobalOperatorList is a free data retrieval call binding the contract method 0x6653b53b. +// GetOperatorUpdateAtIndex is a free data retrieval call binding the contract method 0x2ed583e5. // -// Solidity: function globalOperatorList(uint256 ) view returns(bytes32) -func (_ContractIndexRegistry *ContractIndexRegistryCaller) GlobalOperatorList(opts *bind.CallOpts, arg0 *big.Int) ([32]byte, error) { +// Solidity: function getOperatorUpdateAtIndex(uint8 quorumNumber, uint32 operatorIndex, uint32 arrayIndex) view returns((uint32,bytes32)) +func (_ContractIndexRegistry *ContractIndexRegistryCaller) GetOperatorUpdateAtIndex(opts *bind.CallOpts, quorumNumber uint8, operatorIndex uint32, arrayIndex uint32) (IIndexRegistryOperatorUpdate, error) { var out []interface{} - err := _ContractIndexRegistry.contract.Call(opts, &out, "globalOperatorList", arg0) + err := _ContractIndexRegistry.contract.Call(opts, &out, "getOperatorUpdateAtIndex", quorumNumber, operatorIndex, arrayIndex) if err != nil { - return *new([32]byte), err + return *new(IIndexRegistryOperatorUpdate), err } - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + out0 := *abi.ConvertType(out[0], new(IIndexRegistryOperatorUpdate)).(*IIndexRegistryOperatorUpdate) return out0, err } -// GlobalOperatorList is a free data retrieval call binding the contract method 0x6653b53b. +// GetOperatorUpdateAtIndex is a free data retrieval call binding the contract method 0x2ed583e5. // -// Solidity: function globalOperatorList(uint256 ) view returns(bytes32) -func (_ContractIndexRegistry *ContractIndexRegistrySession) GlobalOperatorList(arg0 *big.Int) ([32]byte, error) { - return _ContractIndexRegistry.Contract.GlobalOperatorList(&_ContractIndexRegistry.CallOpts, arg0) +// Solidity: function getOperatorUpdateAtIndex(uint8 quorumNumber, uint32 operatorIndex, uint32 arrayIndex) view returns((uint32,bytes32)) +func (_ContractIndexRegistry *ContractIndexRegistrySession) GetOperatorUpdateAtIndex(quorumNumber uint8, operatorIndex uint32, arrayIndex uint32) (IIndexRegistryOperatorUpdate, error) { + return _ContractIndexRegistry.Contract.GetOperatorUpdateAtIndex(&_ContractIndexRegistry.CallOpts, quorumNumber, operatorIndex, arrayIndex) } -// GlobalOperatorList is a free data retrieval call binding the contract method 0x6653b53b. +// GetOperatorUpdateAtIndex is a free data retrieval call binding the contract method 0x2ed583e5. // -// Solidity: function globalOperatorList(uint256 ) view returns(bytes32) -func (_ContractIndexRegistry *ContractIndexRegistryCallerSession) GlobalOperatorList(arg0 *big.Int) ([32]byte, error) { - return _ContractIndexRegistry.Contract.GlobalOperatorList(&_ContractIndexRegistry.CallOpts, arg0) +// Solidity: function getOperatorUpdateAtIndex(uint8 quorumNumber, uint32 operatorIndex, uint32 arrayIndex) view returns((uint32,bytes32)) +func (_ContractIndexRegistry *ContractIndexRegistryCallerSession) GetOperatorUpdateAtIndex(quorumNumber uint8, operatorIndex uint32, arrayIndex uint32) (IIndexRegistryOperatorUpdate, error) { + return _ContractIndexRegistry.Contract.GetOperatorUpdateAtIndex(&_ContractIndexRegistry.CallOpts, quorumNumber, operatorIndex, arrayIndex) } -// OperatorIdToIndex is a free data retrieval call binding the contract method 0xb81b2d3e. +// GetQuorumUpdateAtIndex is a free data retrieval call binding the contract method 0xa48bb0ac. // -// Solidity: function operatorIdToIndex(uint8 , bytes32 ) view returns(uint32) -func (_ContractIndexRegistry *ContractIndexRegistryCaller) OperatorIdToIndex(opts *bind.CallOpts, arg0 uint8, arg1 [32]byte) (uint32, error) { +// Solidity: function getQuorumUpdateAtIndex(uint8 quorumNumber, uint32 quorumIndex) view returns((uint32,uint32)) +func (_ContractIndexRegistry *ContractIndexRegistryCaller) GetQuorumUpdateAtIndex(opts *bind.CallOpts, quorumNumber uint8, quorumIndex uint32) (IIndexRegistryQuorumUpdate, error) { var out []interface{} - err := _ContractIndexRegistry.contract.Call(opts, &out, "operatorIdToIndex", arg0, arg1) + err := _ContractIndexRegistry.contract.Call(opts, &out, "getQuorumUpdateAtIndex", quorumNumber, quorumIndex) if err != nil { - return *new(uint32), err + return *new(IIndexRegistryQuorumUpdate), err } - out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + out0 := *abi.ConvertType(out[0], new(IIndexRegistryQuorumUpdate)).(*IIndexRegistryQuorumUpdate) return out0, err } -// OperatorIdToIndex is a free data retrieval call binding the contract method 0xb81b2d3e. +// GetQuorumUpdateAtIndex is a free data retrieval call binding the contract method 0xa48bb0ac. // -// Solidity: function operatorIdToIndex(uint8 , bytes32 ) view returns(uint32) -func (_ContractIndexRegistry *ContractIndexRegistrySession) OperatorIdToIndex(arg0 uint8, arg1 [32]byte) (uint32, error) { - return _ContractIndexRegistry.Contract.OperatorIdToIndex(&_ContractIndexRegistry.CallOpts, arg0, arg1) +// Solidity: function getQuorumUpdateAtIndex(uint8 quorumNumber, uint32 quorumIndex) view returns((uint32,uint32)) +func (_ContractIndexRegistry *ContractIndexRegistrySession) GetQuorumUpdateAtIndex(quorumNumber uint8, quorumIndex uint32) (IIndexRegistryQuorumUpdate, error) { + return _ContractIndexRegistry.Contract.GetQuorumUpdateAtIndex(&_ContractIndexRegistry.CallOpts, quorumNumber, quorumIndex) } -// OperatorIdToIndex is a free data retrieval call binding the contract method 0xb81b2d3e. +// GetQuorumUpdateAtIndex is a free data retrieval call binding the contract method 0xa48bb0ac. // -// Solidity: function operatorIdToIndex(uint8 , bytes32 ) view returns(uint32) -func (_ContractIndexRegistry *ContractIndexRegistryCallerSession) OperatorIdToIndex(arg0 uint8, arg1 [32]byte) (uint32, error) { - return _ContractIndexRegistry.Contract.OperatorIdToIndex(&_ContractIndexRegistry.CallOpts, arg0, arg1) +// Solidity: function getQuorumUpdateAtIndex(uint8 quorumNumber, uint32 quorumIndex) view returns((uint32,uint32)) +func (_ContractIndexRegistry *ContractIndexRegistryCallerSession) GetQuorumUpdateAtIndex(quorumNumber uint8, quorumIndex uint32) (IIndexRegistryQuorumUpdate, error) { + return _ContractIndexRegistry.Contract.GetQuorumUpdateAtIndex(&_ContractIndexRegistry.CallOpts, quorumNumber, quorumIndex) } // RegistryCoordinator is a free data retrieval call binding the contract method 0x6d14a987. @@ -514,6 +514,27 @@ func (_ContractIndexRegistry *ContractIndexRegistryTransactorSession) Deregister return _ContractIndexRegistry.Contract.DeregisterOperator(&_ContractIndexRegistry.TransactOpts, operatorId, quorumNumbers) } +// InitializeQuorum is a paid mutator transaction binding the contract method 0x26d941f2. +// +// Solidity: function initializeQuorum(uint8 quorumNumber) returns() +func (_ContractIndexRegistry *ContractIndexRegistryTransactor) InitializeQuorum(opts *bind.TransactOpts, quorumNumber uint8) (*types.Transaction, error) { + return _ContractIndexRegistry.contract.Transact(opts, "initializeQuorum", quorumNumber) +} + +// InitializeQuorum is a paid mutator transaction binding the contract method 0x26d941f2. +// +// Solidity: function initializeQuorum(uint8 quorumNumber) returns() +func (_ContractIndexRegistry *ContractIndexRegistrySession) InitializeQuorum(quorumNumber uint8) (*types.Transaction, error) { + return _ContractIndexRegistry.Contract.InitializeQuorum(&_ContractIndexRegistry.TransactOpts, quorumNumber) +} + +// InitializeQuorum is a paid mutator transaction binding the contract method 0x26d941f2. +// +// Solidity: function initializeQuorum(uint8 quorumNumber) returns() +func (_ContractIndexRegistry *ContractIndexRegistryTransactorSession) InitializeQuorum(quorumNumber uint8) (*types.Transaction, error) { + return _ContractIndexRegistry.Contract.InitializeQuorum(&_ContractIndexRegistry.TransactOpts, quorumNumber) +} + // RegisterOperator is a paid mutator transaction binding the contract method 0x00bff04d. // // Solidity: function registerOperator(bytes32 operatorId, bytes quorumNumbers) returns(uint32[]) @@ -738,15 +759,15 @@ func (it *ContractIndexRegistryQuorumIndexUpdateIterator) Close() error { // ContractIndexRegistryQuorumIndexUpdate represents a QuorumIndexUpdate event raised by the ContractIndexRegistry contract. type ContractIndexRegistryQuorumIndexUpdate struct { - OperatorId [32]byte - QuorumNumber uint8 - NewIndex uint32 - Raw types.Log // Blockchain specific contextual infos + OperatorId [32]byte + QuorumNumber uint8 + NewOperatorIndex uint32 + Raw types.Log // Blockchain specific contextual infos } // FilterQuorumIndexUpdate is a free log retrieval operation binding the contract event 0x6ee1e4f4075f3d067176140d34e87874244dd273294c05b2218133e49a2ba6f6. // -// Solidity: event QuorumIndexUpdate(bytes32 indexed operatorId, uint8 quorumNumber, uint32 newIndex) +// Solidity: event QuorumIndexUpdate(bytes32 indexed operatorId, uint8 quorumNumber, uint32 newOperatorIndex) func (_ContractIndexRegistry *ContractIndexRegistryFilterer) FilterQuorumIndexUpdate(opts *bind.FilterOpts, operatorId [][32]byte) (*ContractIndexRegistryQuorumIndexUpdateIterator, error) { var operatorIdRule []interface{} @@ -763,7 +784,7 @@ func (_ContractIndexRegistry *ContractIndexRegistryFilterer) FilterQuorumIndexUp // WatchQuorumIndexUpdate is a free log subscription operation binding the contract event 0x6ee1e4f4075f3d067176140d34e87874244dd273294c05b2218133e49a2ba6f6. // -// Solidity: event QuorumIndexUpdate(bytes32 indexed operatorId, uint8 quorumNumber, uint32 newIndex) +// Solidity: event QuorumIndexUpdate(bytes32 indexed operatorId, uint8 quorumNumber, uint32 newOperatorIndex) func (_ContractIndexRegistry *ContractIndexRegistryFilterer) WatchQuorumIndexUpdate(opts *bind.WatchOpts, sink chan<- *ContractIndexRegistryQuorumIndexUpdate, operatorId [][32]byte) (event.Subscription, error) { var operatorIdRule []interface{} @@ -805,7 +826,7 @@ func (_ContractIndexRegistry *ContractIndexRegistryFilterer) WatchQuorumIndexUpd // ParseQuorumIndexUpdate is a log parse operation binding the contract event 0x6ee1e4f4075f3d067176140d34e87874244dd273294c05b2218133e49a2ba6f6. // -// Solidity: event QuorumIndexUpdate(bytes32 indexed operatorId, uint8 quorumNumber, uint32 newIndex) +// Solidity: event QuorumIndexUpdate(bytes32 indexed operatorId, uint8 quorumNumber, uint32 newOperatorIndex) func (_ContractIndexRegistry *ContractIndexRegistryFilterer) ParseQuorumIndexUpdate(log types.Log) (*ContractIndexRegistryQuorumIndexUpdate, error) { event := new(ContractIndexRegistryQuorumIndexUpdate) if err := _ContractIndexRegistry.contract.UnpackLog(event, "QuorumIndexUpdate", log); err != nil { diff --git a/contracts/bindings/MockRollup/binding.go b/contracts/bindings/MockRollup/binding.go index aa0c702a21..cbb0b0ba4a 100644 --- a/contracts/bindings/MockRollup/binding.go +++ b/contracts/bindings/MockRollup/binding.go @@ -1,7 +1,7 @@ // Code generated - DO NOT EDIT. // This file is a generated binding and any manual changes will be lost. -package contractmockrollup +package contractMockRollup import ( "errors" @@ -41,8 +41,8 @@ type BN254G2Point struct { Y [2]*big.Int } -// EigenDABlobUtilsBlobVerificationProof is an auto generated low-level Go binding around an user-defined struct. -type EigenDABlobUtilsBlobVerificationProof struct { +// EigenDARollupUtilsBlobVerificationProof is an auto generated low-level Go binding around an user-defined struct. +type EigenDARollupUtilsBlobVerificationProof struct { BatchId uint32 BlobIndex uint8 BatchMetadata IEigenDAServiceManagerBatchMetadata @@ -78,116 +78,138 @@ type IEigenDAServiceManagerQuorumBlobParam struct { QuorumNumber uint8 AdversaryThresholdPercentage uint8 QuorumThresholdPercentage uint8 - QuantizationParameter uint8 + ChunkLength uint32 } -// ContractmockrollupMetaData contains all meta data concerning the Contractmockrollup contract. -var ContractmockrollupMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"contractIEigenDAServiceManager\",\"name\":\"_eigenDAServiceManager\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"structBN254.G1Point\",\"name\":\"_tau\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_illegalValue\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_stakeRequired\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"blacklist\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"point\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"X\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"Y\",\"type\":\"uint256[2]\"}],\"internalType\":\"structBN254.G2Point\",\"name\":\"proof\",\"type\":\"tuple\"}],\"name\":\"challengeCommitment\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"commitments\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"dataLength\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"structBN254.G1Point\",\"name\":\"polynomialCommitment\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eigenDAServiceManager\",\"outputs\":[{\"internalType\":\"contractIEigenDAServiceManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"illegalValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"structBN254.G1Point\",\"name\":\"commitment\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"dataLength\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"adversaryThresholdPercentage\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"quorumThresholdPercentage\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"quantizationParameter\",\"type\":\"uint8\"}],\"internalType\":\"structIEigenDAServiceManager.QuorumBlobParam[]\",\"name\":\"quorumBlobParams\",\"type\":\"tuple[]\"}],\"internalType\":\"structIEigenDAServiceManager.BlobHeader\",\"name\":\"blobHeader\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"batchId\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"blobIndex\",\"type\":\"uint8\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"blobHeadersRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"quorumNumbers\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"quorumThresholdPercentages\",\"type\":\"bytes\"},{\"internalType\":\"uint32\",\"name\":\"referenceBlockNumber\",\"type\":\"uint32\"}],\"internalType\":\"structIEigenDAServiceManager.BatchHeader\",\"name\":\"batchHeader\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"signatoryRecordHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint96\",\"name\":\"fee\",\"type\":\"uint96\"},{\"internalType\":\"uint32\",\"name\":\"confirmationBlockNumber\",\"type\":\"uint32\"}],\"internalType\":\"structIEigenDAServiceManager.BatchMetadata\",\"name\":\"batchMetadata\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"inclusionProof\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"quorumThresholdIndexes\",\"type\":\"bytes\"}],\"internalType\":\"structEigenDABlobUtils.BlobVerificationProof\",\"name\":\"blobVerificationProof\",\"type\":\"tuple\"}],\"name\":\"postCommitment\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"registerValidator\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakeRequired\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tau\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"validators\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", +// ContractMockRollupMetaData contains all meta data concerning the ContractMockRollup contract. +var ContractMockRollupMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_eigenDAServiceManager\",\"type\":\"address\",\"internalType\":\"contractIEigenDAServiceManager\"},{\"name\":\"_tau\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"_illegalValue\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_stakeRequired\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"blacklist\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"challengeCommitment\",\"inputs\":[{\"name\":\"timestamp\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"point\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"proof\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"commitments\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"validator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"dataLength\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"polynomialCommitment\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"eigenDAServiceManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIEigenDAServiceManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"illegalValue\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"postCommitment\",\"inputs\":[{\"name\":\"blobHeader\",\"type\":\"tuple\",\"internalType\":\"structIEigenDAServiceManager.BlobHeader\",\"components\":[{\"name\":\"commitment\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"dataLength\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"quorumBlobParams\",\"type\":\"tuple[]\",\"internalType\":\"structIEigenDAServiceManager.QuorumBlobParam[]\",\"components\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"adversaryThresholdPercentage\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"quorumThresholdPercentage\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"chunkLength\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}]},{\"name\":\"blobVerificationProof\",\"type\":\"tuple\",\"internalType\":\"structEigenDARollupUtils.BlobVerificationProof\",\"components\":[{\"name\":\"batchId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"blobIndex\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"batchMetadata\",\"type\":\"tuple\",\"internalType\":\"structIEigenDAServiceManager.BatchMetadata\",\"components\":[{\"name\":\"batchHeader\",\"type\":\"tuple\",\"internalType\":\"structIEigenDAServiceManager.BatchHeader\",\"components\":[{\"name\":\"blobHeadersRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"quorumThresholdPercentages\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"referenceBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"signatoryRecordHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"fee\",\"type\":\"uint96\",\"internalType\":\"uint96\"},{\"name\":\"confirmationBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"inclusionProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"quorumThresholdIndexes\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registerValidator\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"stakeRequired\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"tau\",\"inputs\":[],\"outputs\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validators\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"}]", + Bin: "0x608060405234801561001057600080fd5b506040516118f23803806118f283398101604081905261002f91610069565b600080546001600160a01b0319166001600160a01b0395909516949094179093558151600155602090910151600255600355600455610107565b60008060008084860360a081121561008057600080fd5b85516001600160a01b038116811461009757600080fd5b94506040601f19820112156100ab57600080fd5b50604080519081016001600160401b03811182821017156100dc57634e487b7160e01b600052604160045260246000fd5b6040908152602087810151835290870151908201526060860151608090960151949790965092505050565b6117dc806101166000396000f3fe6080604052600436106100915760003560e01c8063bcc6587f11610059578063bcc6587f1461018e578063cfc4af5514610196578063f9f92be4146101c6578063fa52c7d814610206578063fc30cad01461023657600080fd5b8063050101051461009657806321553525146100bf5780634440bc5c146100e157806349ce8997146100f75780636281e63b1461016e575b600080fd5b3480156100a257600080fd5b506100ac60045481565b6040519081526020015b60405180910390f35b3480156100cb57600080fd5b506100df6100da366004611219565b61026e565b005b3480156100ed57600080fd5b506100ac60035481565b34801561010357600080fd5b5061015f6101123660046113a6565b6007602090815260009182526040918290208054835180850190945260018201548452600290910154918301919091526001600160a01b03811691600160a01b90910463ffffffff169083565b6040516100b6939291906113bf565b34801561017a57600080fd5b506100df610189366004611442565b610467565b6100df610704565b3480156101a257600080fd5b506001546002546101b1919082565b604080519283526020830191909152016100b6565b3480156101d257600080fd5b506101f66101e13660046114aa565b60066020526000908152604090205460ff1681565b60405190151581526020016100b6565b34801561021257600080fd5b506101f66102213660046114aa565b60056020526000908152604090205460ff1681565b34801561024257600080fd5b50600054610256906001600160a01b031681565b6040516001600160a01b0390911681526020016100b6565b3360009081526005602052604090205460ff166102ee5760405162461bcd60e51b815260206004820152603360248201527f4d6f636b526f6c6c75702e706f7374436f6d6d69746d656e743a2056616c6964604482015272185d1bdc881b9bdd081c9959da5cdd195c9959606a1b60648201526084015b60405180910390fd5b426000908152600760205260409020546001600160a01b0316156103715760405162461bcd60e51b815260206004820152603460248201527f4d6f636b526f6c6c75702e706f7374436f6d6d69746d656e743a20436f6d6d696044820152731d1b595b9d08185b1c9958591e481c1bdcdd195960621b60648201526084016102e5565b60005460405163219460e160e21b815273__$32f04d18c688c2c57b0347c20a77f3d6c9$__916386518384916103b99186916001600160a01b03909116908690600401611624565b60006040518083038186803b1580156103d157600080fd5b505af41580156103e5573d6000803e3d6000fd5b50506040805160608101825233815260208681015163ffffffff90811682840190815297518385019081524260009081526007845294909420925183549851909116600160a01b026001600160c01b03199098166001600160a01b03919091161796909617815590518051600183015590940151600290940193909355505050565b600083815260076020908152604091829020825160608101845281546001600160a01b038082168352600160a01b90910463ffffffff16828501528451808601865260018401548152600290930154938301939093529283015281511661052e5760405162461bcd60e51b815260206004820152603560248201527f4d6f636b526f6c6c75702e6368616c6c656e6765436f6d6d69746d656e743a2060448201527410dbdb5b5a5d1b595b9d081b9bdd081c1bdcdd1959605a1b60648201526084016102e5565b806020015163ffffffff1683106105b95760405162461bcd60e51b815260206004820152604360248201527f4d6f636b526f6c6c75702e6368616c6c656e6765436f6d6d69746d656e743a2060448201527f506f696e74206d757374206265206c657373207468616e2064617461206c656e6064820152620cee8d60eb1b608482015260a4016102e5565b60035460408051808201825260015481526002546020820152908301516105e49286929091866108a4565b6106615760405162461bcd60e51b815260206004820152604260248201527f4d6f636b526f6c6c75702e6368616c6c656e6765436f6d6d69746d656e743a2060448201527f446f6573206e6f74206576616c7561746520746f20696c6c6567616c2076616c606482015261756560f01b608482015260a4016102e5565b80516001600160a01b039081166000908152600560209081526040808320805460ff19908116909155855190941683526006909152808220805490931660011790925590513390670de0b6b3a7640000908381818185875af1925050503d80600081146106ea576040519150601f19603f3d011682016040523d82523d6000602084013e6106ef565b606091505b50509050806106fd57600080fd5b5050505050565b60045434146107865760405162461bcd60e51b815260206004820152604260248201527f4d6f636b526f6c6c75702e726567697374657256616c696461746f723a204d7560448201527f73742073656e64207374616b6520726571756972656420746f2072656769737460648201526132b960f11b608482015260a4016102e5565b3360009081526005602052604090205460ff161561080c5760405162461bcd60e51b815260206004820152603a60248201527f4d6f636b526f6c6c75702e726567697374657256616c696461746f723a20566160448201527f6c696461746f7220616c7265616479207265676973746572656400000000000060648201526084016102e5565b3360009081526006602052604090205460ff16156108885760405162461bcd60e51b815260206004820152603360248201527f4d6f636b526f6c6c75702e726567697374657256616c696461746f723a2056616044820152721b1a59185d1bdc88189b1858dadb1a5cdd1959606a1b60648201526084016102e5565b336000908152600560205260409020805460ff19166001179055565b6000806108db6108d6604080518082018252600080825260209182015281518083019092526001825260029082015290565b610921565b90506109166108f46108ed838a6109e0565b8790610a77565b84610909610902858b6109e0565b8890610a77565b610911610b0b565b610bcb565b979650505050505050565b6040805180820190915260008082526020820152815115801561094657506020820151155b15610964575050604080518082019091526000808252602082015290565b6040518060400160405280836000015181526020017f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4784602001516109a991906116ef565b6109d3907f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47611727565b905292915050565b919050565b60408051808201909152600080825260208201526109fc610e3a565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa9050808015610a2f57610a31565bfe5b5080610a6f5760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b60448201526064016102e5565b505092915050565b6040805180820190915260008082526020820152610a93610e58565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa9050808015610a2f575080610a6f5760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b60448201526064016102e5565b610b13610e76565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b604080518082018252858152602080820185905282518084019093528583528201839052600091610bfa610e9b565b60005b6002811015610dbf576000610c13826006611754565b9050848260028110610c2757610c2761173e565b60200201515183610c39836000611773565b600c8110610c4957610c4961173e565b6020020152848260028110610c6057610c6061173e565b60200201516020015183826001610c779190611773565b600c8110610c8757610c8761173e565b6020020152838260028110610c9e57610c9e61173e565b6020020151515183610cb1836002611773565b600c8110610cc157610cc161173e565b6020020152838260028110610cd857610cd861173e565b6020020151516001602002015183610cf1836003611773565b600c8110610d0157610d0161173e565b6020020152838260028110610d1857610d1861173e565b602002015160200151600060028110610d3357610d3361173e565b602002015183610d44836004611773565b600c8110610d5457610d5461173e565b6020020152838260028110610d6b57610d6b61173e565b602002015160200151600160028110610d8657610d8661173e565b602002015183610d97836005611773565b600c8110610da757610da761173e565b60200201525080610db78161178b565b915050610bfd565b50610dc8610eba565b60006020826101808560086107d05a03fa9050808015610a2f575080610e285760405162461bcd60e51b81526020600482015260156024820152741c185a5c9a5b99cb5bdc18dbd9194b59985a5b1959605a1b60448201526064016102e5565b5051151593505050505b949350505050565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6040518060400160405280610e89610ed8565b8152602001610e96610ed8565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b634e487b7160e01b600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715610f2f57610f2f610ef6565b60405290565b60405160a0810167ffffffffffffffff81118282101715610f2f57610f2f610ef6565b6040516060810167ffffffffffffffff81118282101715610f2f57610f2f610ef6565b6040805190810167ffffffffffffffff81118282101715610f2f57610f2f610ef6565b604051601f8201601f1916810167ffffffffffffffff81118282101715610fc757610fc7610ef6565b604052919050565b803563ffffffff811681146109db57600080fd5b803560ff811681146109db57600080fd5b600082601f83011261100557600080fd5b813567ffffffffffffffff81111561101f5761101f610ef6565b611032601f8201601f1916602001610f9e565b81815284602083860101111561104757600080fd5b816020850160208301376000918101602001919091529392505050565b80356bffffffffffffffffffffffff811681146109db57600080fd5b60006080828403121561109257600080fd5b61109a610f0c565b9050813567ffffffffffffffff808211156110b457600080fd5b90830190608082860312156110c857600080fd5b6110d0610f0c565b823581526020830135828111156110e657600080fd5b6110f287828601610ff4565b60208301525060408301358281111561110a57600080fd5b61111687828601610ff4565b60408301525061112860608401610fcf565b6060820152835250506020828101359082015261114760408301611064565b604082015261115860608301610fcf565b606082015292915050565b600060a0828403121561117557600080fd5b61117d610f35565b905061118882610fcf565b815261119660208301610fe3565b6020820152604082013567ffffffffffffffff808211156111b657600080fd5b6111c285838601611080565b604084015260608401359150808211156111db57600080fd5b6111e785838601610ff4565b6060840152608084013591508082111561120057600080fd5b5061120d84828501610ff4565b60808301525092915050565b600080604080848603121561122d57600080fd5b833567ffffffffffffffff8082111561124557600080fd5b9085019081870360808082121561125b57600080fd5b611263610f58565b8583121561127057600080fd5b611278610f7b565b92508435835260208086013581850152838252611296878701610fcf565b818301526060935083860135858111156112af57600080fd5b8087019650508a601f8701126112c457600080fd5b8535858111156112d6576112d6610ef6565b6112e4828260051b01610f9e565b81815260079190911b8701820190828101908d83111561130357600080fd5b978301975b8289101561136f5785898f0312156113205760008081fd5b611328610f0c565b6113318a610fe3565b815261133e858b01610fe3565b8582015261134d8b8b01610fe3565b8b82015261135c888b01610fcf565b8189015282529785019790830190611308565b9884019890985250909750880135945050508083111561138e57600080fd5b505061139c85828601611163565b9150509250929050565b6000602082840312156113b857600080fd5b5035919050565b6001600160a01b038416815263ffffffff8316602082015260808101610e32604083018480518252602090810151910152565b600082601f83011261140357600080fd5b61140b610f7b565b80604084018581111561141d57600080fd5b845b8181101561143757803584526020938401930161141f565b509095945050505050565b600080600083850360c081121561145857600080fd5b84359350602085013592506080603f198201121561147557600080fd5b5061147e610f7b565b61148b86604087016113f2565b815261149a86608087016113f2565b6020820152809150509250925092565b6000602082840312156114bc57600080fd5b81356001600160a01b03811681146114d357600080fd5b9392505050565b6000815180845260005b81811015611500576020818501810151868301820152016114e4565b81811115611512576000602083870101525b50601f01601f19169290920160200192915050565b600063ffffffff80835116845260ff6020840151166020850152604083015160a060408601528051608060a08701528051610120870152602081015160806101408801526115796101a08801826114da565b9050604082015161011f198883030161016089015261159882826114da565b60608401519095166101808901525050602082015160c08701526040820151926115d260e08801856bffffffffffffffffffffffff169052565b606083015163ffffffff811661010089015293506060860151935086810360608801526115ff81856114da565b93505050506080830151848203608086015261161b82826114da565b95945050505050565b6060808252845180518383015260200151608083015260009060e0830160208088015163ffffffff80821660a088015260409150818a015160808060c08a01528582518088526101008b0191508684019750600093505b808410156116be578751805160ff90811684528882015181168985015287820151168784015289015185168983015296860196600193909301929082019061167b565b506001600160a01b038c168a870152898103858b01526116de818c611527565b9d9c50505050505050505050505050565b60008261170c57634e487b7160e01b600052601260045260246000fd5b500690565b634e487b7160e01b600052601160045260246000fd5b60008282101561173957611739611711565b500390565b634e487b7160e01b600052603260045260246000fd5b600081600019048311821515161561176e5761176e611711565b500290565b6000821982111561178657611786611711565b500190565b600060001982141561179f5761179f611711565b506001019056fea2646970667358221220f0665e154e496dcdd8f4ad74f1b8f09714c22d840b1c0dd1453ef617cb0c35eb64736f6c634300080c0033", } -// ContractmockrollupABI is the input ABI used to generate the binding from. -// Deprecated: Use ContractmockrollupMetaData.ABI instead. -var ContractmockrollupABI = ContractmockrollupMetaData.ABI +// ContractMockRollupABI is the input ABI used to generate the binding from. +// Deprecated: Use ContractMockRollupMetaData.ABI instead. +var ContractMockRollupABI = ContractMockRollupMetaData.ABI -// Contractmockrollup is an auto generated Go binding around an Ethereum contract. -type Contractmockrollup struct { - ContractmockrollupCaller // Read-only binding to the contract - ContractmockrollupTransactor // Write-only binding to the contract - ContractmockrollupFilterer // Log filterer for contract events +// ContractMockRollupBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use ContractMockRollupMetaData.Bin instead. +var ContractMockRollupBin = ContractMockRollupMetaData.Bin + +// DeployContractMockRollup deploys a new Ethereum contract, binding an instance of ContractMockRollup to it. +func DeployContractMockRollup(auth *bind.TransactOpts, backend bind.ContractBackend, _eigenDAServiceManager common.Address, _tau BN254G1Point, _illegalValue *big.Int, _stakeRequired *big.Int) (common.Address, *types.Transaction, *ContractMockRollup, error) { + parsed, err := ContractMockRollupMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ContractMockRollupBin), backend, _eigenDAServiceManager, _tau, _illegalValue, _stakeRequired) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &ContractMockRollup{ContractMockRollupCaller: ContractMockRollupCaller{contract: contract}, ContractMockRollupTransactor: ContractMockRollupTransactor{contract: contract}, ContractMockRollupFilterer: ContractMockRollupFilterer{contract: contract}}, nil +} + +// ContractMockRollup is an auto generated Go binding around an Ethereum contract. +type ContractMockRollup struct { + ContractMockRollupCaller // Read-only binding to the contract + ContractMockRollupTransactor // Write-only binding to the contract + ContractMockRollupFilterer // Log filterer for contract events } -// ContractmockrollupCaller is an auto generated read-only Go binding around an Ethereum contract. -type ContractmockrollupCaller struct { +// ContractMockRollupCaller is an auto generated read-only Go binding around an Ethereum contract. +type ContractMockRollupCaller struct { contract *bind.BoundContract // Generic contract wrapper for the low level calls } -// ContractmockrollupTransactor is an auto generated write-only Go binding around an Ethereum contract. -type ContractmockrollupTransactor struct { +// ContractMockRollupTransactor is an auto generated write-only Go binding around an Ethereum contract. +type ContractMockRollupTransactor struct { contract *bind.BoundContract // Generic contract wrapper for the low level calls } -// ContractmockrollupFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type ContractmockrollupFilterer struct { +// ContractMockRollupFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type ContractMockRollupFilterer struct { contract *bind.BoundContract // Generic contract wrapper for the low level calls } -// ContractmockrollupSession is an auto generated Go binding around an Ethereum contract, +// ContractMockRollupSession is an auto generated Go binding around an Ethereum contract, // with pre-set call and transact options. -type ContractmockrollupSession struct { - Contract *Contractmockrollup // Generic contract binding to set the session for +type ContractMockRollupSession struct { + Contract *ContractMockRollup // Generic contract binding to set the session for CallOpts bind.CallOpts // Call options to use throughout this session TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session } -// ContractmockrollupCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// ContractMockRollupCallerSession is an auto generated read-only Go binding around an Ethereum contract, // with pre-set call options. -type ContractmockrollupCallerSession struct { - Contract *ContractmockrollupCaller // Generic contract caller binding to set the session for +type ContractMockRollupCallerSession struct { + Contract *ContractMockRollupCaller // Generic contract caller binding to set the session for CallOpts bind.CallOpts // Call options to use throughout this session } -// ContractmockrollupTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// ContractMockRollupTransactorSession is an auto generated write-only Go binding around an Ethereum contract, // with pre-set transact options. -type ContractmockrollupTransactorSession struct { - Contract *ContractmockrollupTransactor // Generic contract transactor binding to set the session for +type ContractMockRollupTransactorSession struct { + Contract *ContractMockRollupTransactor // Generic contract transactor binding to set the session for TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session } -// ContractmockrollupRaw is an auto generated low-level Go binding around an Ethereum contract. -type ContractmockrollupRaw struct { - Contract *Contractmockrollup // Generic contract binding to access the raw methods on +// ContractMockRollupRaw is an auto generated low-level Go binding around an Ethereum contract. +type ContractMockRollupRaw struct { + Contract *ContractMockRollup // Generic contract binding to access the raw methods on } -// ContractmockrollupCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type ContractmockrollupCallerRaw struct { - Contract *ContractmockrollupCaller // Generic read-only contract binding to access the raw methods on +// ContractMockRollupCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type ContractMockRollupCallerRaw struct { + Contract *ContractMockRollupCaller // Generic read-only contract binding to access the raw methods on } -// ContractmockrollupTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type ContractmockrollupTransactorRaw struct { - Contract *ContractmockrollupTransactor // Generic write-only contract binding to access the raw methods on +// ContractMockRollupTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type ContractMockRollupTransactorRaw struct { + Contract *ContractMockRollupTransactor // Generic write-only contract binding to access the raw methods on } -// NewContractmockrollup creates a new instance of Contractmockrollup, bound to a specific deployed contract. -func NewContractmockrollup(address common.Address, backend bind.ContractBackend) (*Contractmockrollup, error) { - contract, err := bindContractmockrollup(address, backend, backend, backend) +// NewContractMockRollup creates a new instance of ContractMockRollup, bound to a specific deployed contract. +func NewContractMockRollup(address common.Address, backend bind.ContractBackend) (*ContractMockRollup, error) { + contract, err := bindContractMockRollup(address, backend, backend, backend) if err != nil { return nil, err } - return &Contractmockrollup{ContractmockrollupCaller: ContractmockrollupCaller{contract: contract}, ContractmockrollupTransactor: ContractmockrollupTransactor{contract: contract}, ContractmockrollupFilterer: ContractmockrollupFilterer{contract: contract}}, nil + return &ContractMockRollup{ContractMockRollupCaller: ContractMockRollupCaller{contract: contract}, ContractMockRollupTransactor: ContractMockRollupTransactor{contract: contract}, ContractMockRollupFilterer: ContractMockRollupFilterer{contract: contract}}, nil } -// NewContractmockrollupCaller creates a new read-only instance of Contractmockrollup, bound to a specific deployed contract. -func NewContractmockrollupCaller(address common.Address, caller bind.ContractCaller) (*ContractmockrollupCaller, error) { - contract, err := bindContractmockrollup(address, caller, nil, nil) +// NewContractMockRollupCaller creates a new read-only instance of ContractMockRollup, bound to a specific deployed contract. +func NewContractMockRollupCaller(address common.Address, caller bind.ContractCaller) (*ContractMockRollupCaller, error) { + contract, err := bindContractMockRollup(address, caller, nil, nil) if err != nil { return nil, err } - return &ContractmockrollupCaller{contract: contract}, nil + return &ContractMockRollupCaller{contract: contract}, nil } -// NewContractmockrollupTransactor creates a new write-only instance of Contractmockrollup, bound to a specific deployed contract. -func NewContractmockrollupTransactor(address common.Address, transactor bind.ContractTransactor) (*ContractmockrollupTransactor, error) { - contract, err := bindContractmockrollup(address, nil, transactor, nil) +// NewContractMockRollupTransactor creates a new write-only instance of ContractMockRollup, bound to a specific deployed contract. +func NewContractMockRollupTransactor(address common.Address, transactor bind.ContractTransactor) (*ContractMockRollupTransactor, error) { + contract, err := bindContractMockRollup(address, nil, transactor, nil) if err != nil { return nil, err } - return &ContractmockrollupTransactor{contract: contract}, nil + return &ContractMockRollupTransactor{contract: contract}, nil } -// NewContractmockrollupFilterer creates a new log filterer instance of Contractmockrollup, bound to a specific deployed contract. -func NewContractmockrollupFilterer(address common.Address, filterer bind.ContractFilterer) (*ContractmockrollupFilterer, error) { - contract, err := bindContractmockrollup(address, nil, nil, filterer) +// NewContractMockRollupFilterer creates a new log filterer instance of ContractMockRollup, bound to a specific deployed contract. +func NewContractMockRollupFilterer(address common.Address, filterer bind.ContractFilterer) (*ContractMockRollupFilterer, error) { + contract, err := bindContractMockRollup(address, nil, nil, filterer) if err != nil { return nil, err } - return &ContractmockrollupFilterer{contract: contract}, nil + return &ContractMockRollupFilterer{contract: contract}, nil } -// bindContractmockrollup binds a generic wrapper to an already deployed contract. -func bindContractmockrollup(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := ContractmockrollupMetaData.GetAbi() +// bindContractMockRollup binds a generic wrapper to an already deployed contract. +func bindContractMockRollup(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ContractMockRollupMetaData.GetAbi() if err != nil { return nil, err } @@ -198,46 +220,46 @@ func bindContractmockrollup(address common.Address, caller bind.ContractCaller, // sets the output to result. The result type might be a single field for simple // returns, a slice of interfaces for anonymous returns and a struct for named // returns. -func (_Contractmockrollup *ContractmockrollupRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _Contractmockrollup.Contract.ContractmockrollupCaller.contract.Call(opts, result, method, params...) +func (_ContractMockRollup *ContractMockRollupRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ContractMockRollup.Contract.ContractMockRollupCaller.contract.Call(opts, result, method, params...) } // Transfer initiates a plain transaction to move funds to the contract, calling // its default method if one is available. -func (_Contractmockrollup *ContractmockrollupRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _Contractmockrollup.Contract.ContractmockrollupTransactor.contract.Transfer(opts) +func (_ContractMockRollup *ContractMockRollupRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ContractMockRollup.Contract.ContractMockRollupTransactor.contract.Transfer(opts) } // Transact invokes the (paid) contract method with params as input values. -func (_Contractmockrollup *ContractmockrollupRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _Contractmockrollup.Contract.ContractmockrollupTransactor.contract.Transact(opts, method, params...) +func (_ContractMockRollup *ContractMockRollupRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ContractMockRollup.Contract.ContractMockRollupTransactor.contract.Transact(opts, method, params...) } // Call invokes the (constant) contract method with params as input values and // sets the output to result. The result type might be a single field for simple // returns, a slice of interfaces for anonymous returns and a struct for named // returns. -func (_Contractmockrollup *ContractmockrollupCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _Contractmockrollup.Contract.contract.Call(opts, result, method, params...) +func (_ContractMockRollup *ContractMockRollupCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ContractMockRollup.Contract.contract.Call(opts, result, method, params...) } // Transfer initiates a plain transaction to move funds to the contract, calling // its default method if one is available. -func (_Contractmockrollup *ContractmockrollupTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _Contractmockrollup.Contract.contract.Transfer(opts) +func (_ContractMockRollup *ContractMockRollupTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ContractMockRollup.Contract.contract.Transfer(opts) } // Transact invokes the (paid) contract method with params as input values. -func (_Contractmockrollup *ContractmockrollupTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _Contractmockrollup.Contract.contract.Transact(opts, method, params...) +func (_ContractMockRollup *ContractMockRollupTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ContractMockRollup.Contract.contract.Transact(opts, method, params...) } // Blacklist is a free data retrieval call binding the contract method 0xf9f92be4. // // Solidity: function blacklist(address ) view returns(bool) -func (_Contractmockrollup *ContractmockrollupCaller) Blacklist(opts *bind.CallOpts, arg0 common.Address) (bool, error) { +func (_ContractMockRollup *ContractMockRollupCaller) Blacklist(opts *bind.CallOpts, arg0 common.Address) (bool, error) { var out []interface{} - err := _Contractmockrollup.contract.Call(opts, &out, "blacklist", arg0) + err := _ContractMockRollup.contract.Call(opts, &out, "blacklist", arg0) if err != nil { return *new(bool), err @@ -252,27 +274,27 @@ func (_Contractmockrollup *ContractmockrollupCaller) Blacklist(opts *bind.CallOp // Blacklist is a free data retrieval call binding the contract method 0xf9f92be4. // // Solidity: function blacklist(address ) view returns(bool) -func (_Contractmockrollup *ContractmockrollupSession) Blacklist(arg0 common.Address) (bool, error) { - return _Contractmockrollup.Contract.Blacklist(&_Contractmockrollup.CallOpts, arg0) +func (_ContractMockRollup *ContractMockRollupSession) Blacklist(arg0 common.Address) (bool, error) { + return _ContractMockRollup.Contract.Blacklist(&_ContractMockRollup.CallOpts, arg0) } // Blacklist is a free data retrieval call binding the contract method 0xf9f92be4. // // Solidity: function blacklist(address ) view returns(bool) -func (_Contractmockrollup *ContractmockrollupCallerSession) Blacklist(arg0 common.Address) (bool, error) { - return _Contractmockrollup.Contract.Blacklist(&_Contractmockrollup.CallOpts, arg0) +func (_ContractMockRollup *ContractMockRollupCallerSession) Blacklist(arg0 common.Address) (bool, error) { + return _ContractMockRollup.Contract.Blacklist(&_ContractMockRollup.CallOpts, arg0) } // Commitments is a free data retrieval call binding the contract method 0x49ce8997. // // Solidity: function commitments(uint256 ) view returns(address validator, uint32 dataLength, (uint256,uint256) polynomialCommitment) -func (_Contractmockrollup *ContractmockrollupCaller) Commitments(opts *bind.CallOpts, arg0 *big.Int) (struct { +func (_ContractMockRollup *ContractMockRollupCaller) Commitments(opts *bind.CallOpts, arg0 *big.Int) (struct { Validator common.Address DataLength uint32 PolynomialCommitment BN254G1Point }, error) { var out []interface{} - err := _Contractmockrollup.contract.Call(opts, &out, "commitments", arg0) + err := _ContractMockRollup.contract.Call(opts, &out, "commitments", arg0) outstruct := new(struct { Validator common.Address @@ -294,31 +316,31 @@ func (_Contractmockrollup *ContractmockrollupCaller) Commitments(opts *bind.Call // Commitments is a free data retrieval call binding the contract method 0x49ce8997. // // Solidity: function commitments(uint256 ) view returns(address validator, uint32 dataLength, (uint256,uint256) polynomialCommitment) -func (_Contractmockrollup *ContractmockrollupSession) Commitments(arg0 *big.Int) (struct { +func (_ContractMockRollup *ContractMockRollupSession) Commitments(arg0 *big.Int) (struct { Validator common.Address DataLength uint32 PolynomialCommitment BN254G1Point }, error) { - return _Contractmockrollup.Contract.Commitments(&_Contractmockrollup.CallOpts, arg0) + return _ContractMockRollup.Contract.Commitments(&_ContractMockRollup.CallOpts, arg0) } // Commitments is a free data retrieval call binding the contract method 0x49ce8997. // // Solidity: function commitments(uint256 ) view returns(address validator, uint32 dataLength, (uint256,uint256) polynomialCommitment) -func (_Contractmockrollup *ContractmockrollupCallerSession) Commitments(arg0 *big.Int) (struct { +func (_ContractMockRollup *ContractMockRollupCallerSession) Commitments(arg0 *big.Int) (struct { Validator common.Address DataLength uint32 PolynomialCommitment BN254G1Point }, error) { - return _Contractmockrollup.Contract.Commitments(&_Contractmockrollup.CallOpts, arg0) + return _ContractMockRollup.Contract.Commitments(&_ContractMockRollup.CallOpts, arg0) } // EigenDAServiceManager is a free data retrieval call binding the contract method 0xfc30cad0. // // Solidity: function eigenDAServiceManager() view returns(address) -func (_Contractmockrollup *ContractmockrollupCaller) EigenDAServiceManager(opts *bind.CallOpts) (common.Address, error) { +func (_ContractMockRollup *ContractMockRollupCaller) EigenDAServiceManager(opts *bind.CallOpts) (common.Address, error) { var out []interface{} - err := _Contractmockrollup.contract.Call(opts, &out, "eigenDAServiceManager") + err := _ContractMockRollup.contract.Call(opts, &out, "eigenDAServiceManager") if err != nil { return *new(common.Address), err @@ -333,23 +355,23 @@ func (_Contractmockrollup *ContractmockrollupCaller) EigenDAServiceManager(opts // EigenDAServiceManager is a free data retrieval call binding the contract method 0xfc30cad0. // // Solidity: function eigenDAServiceManager() view returns(address) -func (_Contractmockrollup *ContractmockrollupSession) EigenDAServiceManager() (common.Address, error) { - return _Contractmockrollup.Contract.EigenDAServiceManager(&_Contractmockrollup.CallOpts) +func (_ContractMockRollup *ContractMockRollupSession) EigenDAServiceManager() (common.Address, error) { + return _ContractMockRollup.Contract.EigenDAServiceManager(&_ContractMockRollup.CallOpts) } // EigenDAServiceManager is a free data retrieval call binding the contract method 0xfc30cad0. // // Solidity: function eigenDAServiceManager() view returns(address) -func (_Contractmockrollup *ContractmockrollupCallerSession) EigenDAServiceManager() (common.Address, error) { - return _Contractmockrollup.Contract.EigenDAServiceManager(&_Contractmockrollup.CallOpts) +func (_ContractMockRollup *ContractMockRollupCallerSession) EigenDAServiceManager() (common.Address, error) { + return _ContractMockRollup.Contract.EigenDAServiceManager(&_ContractMockRollup.CallOpts) } // IllegalValue is a free data retrieval call binding the contract method 0x4440bc5c. // // Solidity: function illegalValue() view returns(uint256) -func (_Contractmockrollup *ContractmockrollupCaller) IllegalValue(opts *bind.CallOpts) (*big.Int, error) { +func (_ContractMockRollup *ContractMockRollupCaller) IllegalValue(opts *bind.CallOpts) (*big.Int, error) { var out []interface{} - err := _Contractmockrollup.contract.Call(opts, &out, "illegalValue") + err := _ContractMockRollup.contract.Call(opts, &out, "illegalValue") if err != nil { return *new(*big.Int), err @@ -364,23 +386,23 @@ func (_Contractmockrollup *ContractmockrollupCaller) IllegalValue(opts *bind.Cal // IllegalValue is a free data retrieval call binding the contract method 0x4440bc5c. // // Solidity: function illegalValue() view returns(uint256) -func (_Contractmockrollup *ContractmockrollupSession) IllegalValue() (*big.Int, error) { - return _Contractmockrollup.Contract.IllegalValue(&_Contractmockrollup.CallOpts) +func (_ContractMockRollup *ContractMockRollupSession) IllegalValue() (*big.Int, error) { + return _ContractMockRollup.Contract.IllegalValue(&_ContractMockRollup.CallOpts) } // IllegalValue is a free data retrieval call binding the contract method 0x4440bc5c. // // Solidity: function illegalValue() view returns(uint256) -func (_Contractmockrollup *ContractmockrollupCallerSession) IllegalValue() (*big.Int, error) { - return _Contractmockrollup.Contract.IllegalValue(&_Contractmockrollup.CallOpts) +func (_ContractMockRollup *ContractMockRollupCallerSession) IllegalValue() (*big.Int, error) { + return _ContractMockRollup.Contract.IllegalValue(&_ContractMockRollup.CallOpts) } // StakeRequired is a free data retrieval call binding the contract method 0x05010105. // // Solidity: function stakeRequired() view returns(uint256) -func (_Contractmockrollup *ContractmockrollupCaller) StakeRequired(opts *bind.CallOpts) (*big.Int, error) { +func (_ContractMockRollup *ContractMockRollupCaller) StakeRequired(opts *bind.CallOpts) (*big.Int, error) { var out []interface{} - err := _Contractmockrollup.contract.Call(opts, &out, "stakeRequired") + err := _ContractMockRollup.contract.Call(opts, &out, "stakeRequired") if err != nil { return *new(*big.Int), err @@ -395,26 +417,26 @@ func (_Contractmockrollup *ContractmockrollupCaller) StakeRequired(opts *bind.Ca // StakeRequired is a free data retrieval call binding the contract method 0x05010105. // // Solidity: function stakeRequired() view returns(uint256) -func (_Contractmockrollup *ContractmockrollupSession) StakeRequired() (*big.Int, error) { - return _Contractmockrollup.Contract.StakeRequired(&_Contractmockrollup.CallOpts) +func (_ContractMockRollup *ContractMockRollupSession) StakeRequired() (*big.Int, error) { + return _ContractMockRollup.Contract.StakeRequired(&_ContractMockRollup.CallOpts) } // StakeRequired is a free data retrieval call binding the contract method 0x05010105. // // Solidity: function stakeRequired() view returns(uint256) -func (_Contractmockrollup *ContractmockrollupCallerSession) StakeRequired() (*big.Int, error) { - return _Contractmockrollup.Contract.StakeRequired(&_Contractmockrollup.CallOpts) +func (_ContractMockRollup *ContractMockRollupCallerSession) StakeRequired() (*big.Int, error) { + return _ContractMockRollup.Contract.StakeRequired(&_ContractMockRollup.CallOpts) } // Tau is a free data retrieval call binding the contract method 0xcfc4af55. // // Solidity: function tau() view returns(uint256 X, uint256 Y) -func (_Contractmockrollup *ContractmockrollupCaller) Tau(opts *bind.CallOpts) (struct { +func (_ContractMockRollup *ContractMockRollupCaller) Tau(opts *bind.CallOpts) (struct { X *big.Int Y *big.Int }, error) { var out []interface{} - err := _Contractmockrollup.contract.Call(opts, &out, "tau") + err := _ContractMockRollup.contract.Call(opts, &out, "tau") outstruct := new(struct { X *big.Int @@ -434,29 +456,29 @@ func (_Contractmockrollup *ContractmockrollupCaller) Tau(opts *bind.CallOpts) (s // Tau is a free data retrieval call binding the contract method 0xcfc4af55. // // Solidity: function tau() view returns(uint256 X, uint256 Y) -func (_Contractmockrollup *ContractmockrollupSession) Tau() (struct { +func (_ContractMockRollup *ContractMockRollupSession) Tau() (struct { X *big.Int Y *big.Int }, error) { - return _Contractmockrollup.Contract.Tau(&_Contractmockrollup.CallOpts) + return _ContractMockRollup.Contract.Tau(&_ContractMockRollup.CallOpts) } // Tau is a free data retrieval call binding the contract method 0xcfc4af55. // // Solidity: function tau() view returns(uint256 X, uint256 Y) -func (_Contractmockrollup *ContractmockrollupCallerSession) Tau() (struct { +func (_ContractMockRollup *ContractMockRollupCallerSession) Tau() (struct { X *big.Int Y *big.Int }, error) { - return _Contractmockrollup.Contract.Tau(&_Contractmockrollup.CallOpts) + return _ContractMockRollup.Contract.Tau(&_ContractMockRollup.CallOpts) } // Validators is a free data retrieval call binding the contract method 0xfa52c7d8. // // Solidity: function validators(address ) view returns(bool) -func (_Contractmockrollup *ContractmockrollupCaller) Validators(opts *bind.CallOpts, arg0 common.Address) (bool, error) { +func (_ContractMockRollup *ContractMockRollupCaller) Validators(opts *bind.CallOpts, arg0 common.Address) (bool, error) { var out []interface{} - err := _Contractmockrollup.contract.Call(opts, &out, "validators", arg0) + err := _ContractMockRollup.contract.Call(opts, &out, "validators", arg0) if err != nil { return *new(bool), err @@ -471,76 +493,76 @@ func (_Contractmockrollup *ContractmockrollupCaller) Validators(opts *bind.CallO // Validators is a free data retrieval call binding the contract method 0xfa52c7d8. // // Solidity: function validators(address ) view returns(bool) -func (_Contractmockrollup *ContractmockrollupSession) Validators(arg0 common.Address) (bool, error) { - return _Contractmockrollup.Contract.Validators(&_Contractmockrollup.CallOpts, arg0) +func (_ContractMockRollup *ContractMockRollupSession) Validators(arg0 common.Address) (bool, error) { + return _ContractMockRollup.Contract.Validators(&_ContractMockRollup.CallOpts, arg0) } // Validators is a free data retrieval call binding the contract method 0xfa52c7d8. // // Solidity: function validators(address ) view returns(bool) -func (_Contractmockrollup *ContractmockrollupCallerSession) Validators(arg0 common.Address) (bool, error) { - return _Contractmockrollup.Contract.Validators(&_Contractmockrollup.CallOpts, arg0) +func (_ContractMockRollup *ContractMockRollupCallerSession) Validators(arg0 common.Address) (bool, error) { + return _ContractMockRollup.Contract.Validators(&_ContractMockRollup.CallOpts, arg0) } // ChallengeCommitment is a paid mutator transaction binding the contract method 0x6281e63b. // // Solidity: function challengeCommitment(uint256 timestamp, uint256 point, (uint256[2],uint256[2]) proof) returns() -func (_Contractmockrollup *ContractmockrollupTransactor) ChallengeCommitment(opts *bind.TransactOpts, timestamp *big.Int, point *big.Int, proof BN254G2Point) (*types.Transaction, error) { - return _Contractmockrollup.contract.Transact(opts, "challengeCommitment", timestamp, point, proof) +func (_ContractMockRollup *ContractMockRollupTransactor) ChallengeCommitment(opts *bind.TransactOpts, timestamp *big.Int, point *big.Int, proof BN254G2Point) (*types.Transaction, error) { + return _ContractMockRollup.contract.Transact(opts, "challengeCommitment", timestamp, point, proof) } // ChallengeCommitment is a paid mutator transaction binding the contract method 0x6281e63b. // // Solidity: function challengeCommitment(uint256 timestamp, uint256 point, (uint256[2],uint256[2]) proof) returns() -func (_Contractmockrollup *ContractmockrollupSession) ChallengeCommitment(timestamp *big.Int, point *big.Int, proof BN254G2Point) (*types.Transaction, error) { - return _Contractmockrollup.Contract.ChallengeCommitment(&_Contractmockrollup.TransactOpts, timestamp, point, proof) +func (_ContractMockRollup *ContractMockRollupSession) ChallengeCommitment(timestamp *big.Int, point *big.Int, proof BN254G2Point) (*types.Transaction, error) { + return _ContractMockRollup.Contract.ChallengeCommitment(&_ContractMockRollup.TransactOpts, timestamp, point, proof) } // ChallengeCommitment is a paid mutator transaction binding the contract method 0x6281e63b. // // Solidity: function challengeCommitment(uint256 timestamp, uint256 point, (uint256[2],uint256[2]) proof) returns() -func (_Contractmockrollup *ContractmockrollupTransactorSession) ChallengeCommitment(timestamp *big.Int, point *big.Int, proof BN254G2Point) (*types.Transaction, error) { - return _Contractmockrollup.Contract.ChallengeCommitment(&_Contractmockrollup.TransactOpts, timestamp, point, proof) +func (_ContractMockRollup *ContractMockRollupTransactorSession) ChallengeCommitment(timestamp *big.Int, point *big.Int, proof BN254G2Point) (*types.Transaction, error) { + return _ContractMockRollup.Contract.ChallengeCommitment(&_ContractMockRollup.TransactOpts, timestamp, point, proof) } -// PostCommitment is a paid mutator transaction binding the contract method 0x4114c4ca. +// PostCommitment is a paid mutator transaction binding the contract method 0x21553525. // -// Solidity: function postCommitment(((uint256,uint256),uint32,(uint8,uint8,uint8,uint8)[]) blobHeader, (uint32,uint8,((bytes32,bytes,bytes,uint32),bytes32,uint96,uint32),bytes,bytes) blobVerificationProof) returns() -func (_Contractmockrollup *ContractmockrollupTransactor) PostCommitment(opts *bind.TransactOpts, blobHeader IEigenDAServiceManagerBlobHeader, blobVerificationProof EigenDABlobUtilsBlobVerificationProof) (*types.Transaction, error) { - return _Contractmockrollup.contract.Transact(opts, "postCommitment", blobHeader, blobVerificationProof) +// Solidity: function postCommitment(((uint256,uint256),uint32,(uint8,uint8,uint8,uint32)[]) blobHeader, (uint32,uint8,((bytes32,bytes,bytes,uint32),bytes32,uint96,uint32),bytes,bytes) blobVerificationProof) returns() +func (_ContractMockRollup *ContractMockRollupTransactor) PostCommitment(opts *bind.TransactOpts, blobHeader IEigenDAServiceManagerBlobHeader, blobVerificationProof EigenDARollupUtilsBlobVerificationProof) (*types.Transaction, error) { + return _ContractMockRollup.contract.Transact(opts, "postCommitment", blobHeader, blobVerificationProof) } -// PostCommitment is a paid mutator transaction binding the contract method 0x4114c4ca. +// PostCommitment is a paid mutator transaction binding the contract method 0x21553525. // -// Solidity: function postCommitment(((uint256,uint256),uint32,(uint8,uint8,uint8,uint8)[]) blobHeader, (uint32,uint8,((bytes32,bytes,bytes,uint32),bytes32,uint96,uint32),bytes,bytes) blobVerificationProof) returns() -func (_Contractmockrollup *ContractmockrollupSession) PostCommitment(blobHeader IEigenDAServiceManagerBlobHeader, blobVerificationProof EigenDABlobUtilsBlobVerificationProof) (*types.Transaction, error) { - return _Contractmockrollup.Contract.PostCommitment(&_Contractmockrollup.TransactOpts, blobHeader, blobVerificationProof) +// Solidity: function postCommitment(((uint256,uint256),uint32,(uint8,uint8,uint8,uint32)[]) blobHeader, (uint32,uint8,((bytes32,bytes,bytes,uint32),bytes32,uint96,uint32),bytes,bytes) blobVerificationProof) returns() +func (_ContractMockRollup *ContractMockRollupSession) PostCommitment(blobHeader IEigenDAServiceManagerBlobHeader, blobVerificationProof EigenDARollupUtilsBlobVerificationProof) (*types.Transaction, error) { + return _ContractMockRollup.Contract.PostCommitment(&_ContractMockRollup.TransactOpts, blobHeader, blobVerificationProof) } -// PostCommitment is a paid mutator transaction binding the contract method 0x4114c4ca. +// PostCommitment is a paid mutator transaction binding the contract method 0x21553525. // -// Solidity: function postCommitment(((uint256,uint256),uint32,(uint8,uint8,uint8,uint8)[]) blobHeader, (uint32,uint8,((bytes32,bytes,bytes,uint32),bytes32,uint96,uint32),bytes,bytes) blobVerificationProof) returns() -func (_Contractmockrollup *ContractmockrollupTransactorSession) PostCommitment(blobHeader IEigenDAServiceManagerBlobHeader, blobVerificationProof EigenDABlobUtilsBlobVerificationProof) (*types.Transaction, error) { - return _Contractmockrollup.Contract.PostCommitment(&_Contractmockrollup.TransactOpts, blobHeader, blobVerificationProof) +// Solidity: function postCommitment(((uint256,uint256),uint32,(uint8,uint8,uint8,uint32)[]) blobHeader, (uint32,uint8,((bytes32,bytes,bytes,uint32),bytes32,uint96,uint32),bytes,bytes) blobVerificationProof) returns() +func (_ContractMockRollup *ContractMockRollupTransactorSession) PostCommitment(blobHeader IEigenDAServiceManagerBlobHeader, blobVerificationProof EigenDARollupUtilsBlobVerificationProof) (*types.Transaction, error) { + return _ContractMockRollup.Contract.PostCommitment(&_ContractMockRollup.TransactOpts, blobHeader, blobVerificationProof) } // RegisterValidator is a paid mutator transaction binding the contract method 0xbcc6587f. // // Solidity: function registerValidator() payable returns() -func (_Contractmockrollup *ContractmockrollupTransactor) RegisterValidator(opts *bind.TransactOpts) (*types.Transaction, error) { - return _Contractmockrollup.contract.Transact(opts, "registerValidator") +func (_ContractMockRollup *ContractMockRollupTransactor) RegisterValidator(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ContractMockRollup.contract.Transact(opts, "registerValidator") } // RegisterValidator is a paid mutator transaction binding the contract method 0xbcc6587f. // // Solidity: function registerValidator() payable returns() -func (_Contractmockrollup *ContractmockrollupSession) RegisterValidator() (*types.Transaction, error) { - return _Contractmockrollup.Contract.RegisterValidator(&_Contractmockrollup.TransactOpts) +func (_ContractMockRollup *ContractMockRollupSession) RegisterValidator() (*types.Transaction, error) { + return _ContractMockRollup.Contract.RegisterValidator(&_ContractMockRollup.TransactOpts) } // RegisterValidator is a paid mutator transaction binding the contract method 0xbcc6587f. // // Solidity: function registerValidator() payable returns() -func (_Contractmockrollup *ContractmockrollupTransactorSession) RegisterValidator() (*types.Transaction, error) { - return _Contractmockrollup.Contract.RegisterValidator(&_Contractmockrollup.TransactOpts) +func (_ContractMockRollup *ContractMockRollupTransactorSession) RegisterValidator() (*types.Transaction, error) { + return _ContractMockRollup.Contract.RegisterValidator(&_ContractMockRollup.TransactOpts) } diff --git a/contracts/bindings/OperatorStateRetriever/binding.go b/contracts/bindings/OperatorStateRetriever/binding.go new file mode 100644 index 0000000000..989ea6ac66 --- /dev/null +++ b/contracts/bindings/OperatorStateRetriever/binding.go @@ -0,0 +1,312 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package contractOperatorStateRetriever + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// OperatorStateRetrieverCheckSignaturesIndices is an auto generated low-level Go binding around an user-defined struct. +type OperatorStateRetrieverCheckSignaturesIndices struct { + NonSignerQuorumBitmapIndices []uint32 + QuorumApkIndices []uint32 + TotalStakeIndices []uint32 + NonSignerStakeIndices [][]uint32 +} + +// OperatorStateRetrieverOperator is an auto generated low-level Go binding around an user-defined struct. +type OperatorStateRetrieverOperator struct { + Operator common.Address + OperatorId [32]byte + Stake *big.Int +} + +// ContractOperatorStateRetrieverMetaData contains all meta data concerning the ContractOperatorStateRetriever contract. +var ContractOperatorStateRetrieverMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"function\",\"name\":\"getCheckSignaturesIndices\",\"inputs\":[{\"name\":\"registryCoordinator\",\"type\":\"address\",\"internalType\":\"contractIRegistryCoordinator\"},{\"name\":\"referenceBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"nonSignerOperatorIds\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structOperatorStateRetriever.CheckSignaturesIndices\",\"components\":[{\"name\":\"nonSignerQuorumBitmapIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"quorumApkIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"totalStakeIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerStakeIndices\",\"type\":\"uint32[][]\",\"internalType\":\"uint32[][]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorState\",\"inputs\":[{\"name\":\"registryCoordinator\",\"type\":\"address\",\"internalType\":\"contractIRegistryCoordinator\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"blockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple[][]\",\"internalType\":\"structOperatorStateRetriever.Operator[][]\",\"components\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stake\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorState\",\"inputs\":[{\"name\":\"registryCoordinator\",\"type\":\"address\",\"internalType\":\"contractIRegistryCoordinator\"},{\"name\":\"operatorId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"blockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"tuple[][]\",\"internalType\":\"structOperatorStateRetriever.Operator[][]\",\"components\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stake\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]}],\"stateMutability\":\"view\"}]", + Bin: "0x608060405234801561001057600080fd5b50611722806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80633563b0d1146100465780634f739f741461006f578063cefdc1d41461008f575b600080fd5b610059610054366004610f7f565b6100b0565b60405161006691906110da565b60405180910390f35b61008261007d36600461113f565b610546565b6040516100669190611242565b6100a261009d3660046112fd565b610c70565b60405161006692919061133f565b60606000846001600160a01b031663683048356040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101169190611360565b90506000856001600160a01b0316639e9923c26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610158573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061017c9190611360565b90506000866001600160a01b0316635df459466040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101e29190611360565b9050600086516001600160401b038111156101ff576101ff610f17565b60405190808252806020026020018201604052801561023257816020015b606081526020019060019003908161021d5790505b50905060005b875181101561053a5760008882815181106102555761025561137d565b0160200151604051638902624560e01b815260f89190911c6004820181905263ffffffff8a16602483015291506000906001600160a01b03871690638902624590604401600060405180830381865afa1580156102b6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102de91908101906113b6565b905080516001600160401b038111156102f9576102f9610f17565b60405190808252806020026020018201604052801561034457816020015b60408051606081018252600080825260208083018290529282015282526000199092019101816103175790505b508484815181106103575761035761137d565b602002602001018190525060005b8151811015610524576040518060600160405280876001600160a01b03166347b314e885858151811061039a5761039a61137d565b60200260200101516040518263ffffffff1660e01b81526004016103c091815260200190565b602060405180830381865afa1580156103dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104019190611360565b6001600160a01b031681526020018383815181106104215761042161137d565b60200260200101518152602001896001600160a01b031663fa28c62785858151811061044f5761044f61137d565b60209081029190910101516040516001600160e01b031960e084901b168152600481019190915260ff8816602482015263ffffffff8f166044820152606401602060405180830381865afa1580156104ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104cf919061144b565b6001600160601b03168152508585815181106104ed576104ed61137d565b602002602001015182815181106105065761050661137d565b6020026020010181905250808061051c9061148a565b915050610365565b50505080806105329061148a565b915050610238565b50979650505050505050565b6105716040518060800160405280606081526020016060815260200160608152602001606081525090565b6000876001600160a01b031663683048356040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105d59190611360565b90506106026040518060800160405280606081526020016060815260200160608152602001606081525090565b6040516361c8a12f60e11b81526001600160a01b038a169063c391425e90610632908b90899089906004016114a5565b600060405180830381865afa15801561064f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261067791908101906114ef565b81526040516340e03a8160e11b81526001600160a01b038316906381c07502906106a9908b908b908b906004016115a6565b600060405180830381865afa1580156106c6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106ee91908101906114ef565b6040820152856001600160401b0381111561070b5761070b610f17565b60405190808252806020026020018201604052801561073e57816020015b60608152602001906001900390816107295790505b50606082015260005b60ff8116871115610b81576000856001600160401b0381111561076c5761076c610f17565b604051908082528060200260200182016040528015610795578160200160208202803683370190505b5083606001518360ff16815181106107af576107af61137d565b602002602001018190525060005b86811015610a815760008c6001600160a01b03166304ec63518a8a858181106107e8576107e861137d565b905060200201358e886000015186815181106108065761080661137d565b60200260200101516040518463ffffffff1660e01b81526004016108439392919092835263ffffffff918216602084015216604082015260600190565b602060405180830381865afa158015610860573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061088491906115cf565b90506001600160c01b03811661092c5760405162461bcd60e51b815260206004820152605c60248201527f4f70657261746f7253746174655265747269657665722e676574436865636b5360448201527f69676e617475726573496e64696365733a206f70657261746f72206d7573742060648201527f6265207265676973746572656420617420626c6f636b6e756d62657200000000608482015260a40160405180910390fd5b8a8a8560ff168181106109415761094161137d565b6001600160c01b03841692013560f81c9190911c600190811614159050610a6e57856001600160a01b031663dd9846b98a8a858181106109835761098361137d565b905060200201358d8d8860ff1681811061099f5761099f61137d565b6040516001600160e01b031960e087901b1681526004810194909452919091013560f81c60248301525063ffffffff8f166044820152606401602060405180830381865afa1580156109f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1991906115f8565b85606001518560ff1681518110610a3257610a3261137d565b60200260200101518481518110610a4b57610a4b61137d565b63ffffffff9092166020928302919091019091015282610a6a8161148a565b9350505b5080610a798161148a565b9150506107bd565b506000816001600160401b03811115610a9c57610a9c610f17565b604051908082528060200260200182016040528015610ac5578160200160208202803683370190505b50905060005b82811015610b465784606001518460ff1681518110610aec57610aec61137d565b60200260200101518181518110610b0557610b0561137d565b6020026020010151828281518110610b1f57610b1f61137d565b63ffffffff9092166020928302919091019091015280610b3e8161148a565b915050610acb565b508084606001518460ff1681518110610b6157610b6161137d565b602002602001018190525050508080610b7990611615565b915050610747565b506000896001600160a01b0316635df459466040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be69190611360565b60405163354952a360e21b81529091506001600160a01b0382169063d5254a8c90610c19908b908b908e90600401611635565b600060405180830381865afa158015610c36573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c5e91908101906114ef565b60208301525098975050505050505050565b6040805160018082528183019092526000916060918391602080830190803683370190505090508481600081518110610cab57610cab61137d565b60209081029190910101526040516361c8a12f60e11b81526000906001600160a01b0388169063c391425e90610ce7908890869060040161165f565b600060405180830381865afa158015610d04573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d2c91908101906114ef565b600081518110610d3e57610d3e61137d565b60209081029190910101516040516304ec635160e01b81526004810188905263ffffffff87811660248301529091166044820181905291506000906001600160a01b038916906304ec635190606401602060405180830381865afa158015610daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dce91906115cf565b6001600160c01b031690506000610de482610e02565b905081610df28a838a6100b0565b9550955050505050935093915050565b6060600080610e1084610ece565b61ffff166001600160401b03811115610e2b57610e2b610f17565b6040519080825280601f01601f191660200182016040528015610e55576020820181803683370190505b5090506000805b825182108015610e6d575061010081105b15610ec4576001811b935085841615610eb4578060f81b838381518110610e9657610e9661137d565b60200101906001600160f81b031916908160001a9053508160010191505b610ebd8161148a565b9050610e5c565b5090949350505050565b6000805b8215610ef957610ee36001846116b3565b9092169180610ef1816116ca565b915050610ed2565b92915050565b6001600160a01b0381168114610f1457600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715610f5557610f55610f17565b604052919050565b63ffffffff81168114610f1457600080fd5b8035610f7a81610f5d565b919050565b600080600060608486031215610f9457600080fd5b8335610f9f81610eff565b92506020848101356001600160401b0380821115610fbc57600080fd5b818701915087601f830112610fd057600080fd5b813581811115610fe257610fe2610f17565b610ff4601f8201601f19168501610f2d565b9150808252888482850101111561100a57600080fd5b808484018584013760008482840101525080945050505061102d60408501610f6f565b90509250925092565b600081518084526020808501808196508360051b810191508286016000805b868110156110cc578385038a52825180518087529087019087870190845b818110156110b757835180516001600160a01b031684528a8101518b8501526040908101516001600160601b03169084015292890192606090920191600101611073565b50509a87019a95505091850191600101611055565b509298975050505050505050565b6020815260006110ed6020830184611036565b9392505050565b60008083601f84011261110657600080fd5b5081356001600160401b0381111561111d57600080fd5b6020830191508360208260051b850101111561113857600080fd5b9250929050565b6000806000806000806080878903121561115857600080fd5b863561116381610eff565b9550602087013561117381610f5d565b945060408701356001600160401b038082111561118f57600080fd5b818901915089601f8301126111a357600080fd5b8135818111156111b257600080fd5b8a60208285010111156111c457600080fd5b6020830196508095505060608901359150808211156111e257600080fd5b506111ef89828a016110f4565b979a9699509497509295939492505050565b600081518084526020808501945080840160005b8381101561123757815163ffffffff1687529582019590820190600101611215565b509495945050505050565b60006020808352835160808285015261125e60a0850182611201565b905081850151601f198086840301604087015261127b8383611201565b925060408701519150808684030160608701526112988383611201565b60608801518782038301608089015280518083529194508501925084840190600581901b8501860160005b828110156112ef57848783030184526112dd828751611201565b958801959388019391506001016112c3565b509998505050505050505050565b60008060006060848603121561131257600080fd5b833561131d81610eff565b925060208401359150604084013561133481610f5d565b809150509250925092565b8281526040602082015260006113586040830184611036565b949350505050565b60006020828403121561137257600080fd5b81516110ed81610eff565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b038211156113ac576113ac610f17565b5060051b60200190565b600060208083850312156113c957600080fd5b82516001600160401b038111156113df57600080fd5b8301601f810185136113f057600080fd5b80516114036113fe82611393565b610f2d565b81815260059190911b8201830190838101908783111561142257600080fd5b928401925b8284101561144057835182529284019290840190611427565b979650505050505050565b60006020828403121561145d57600080fd5b81516001600160601b03811681146110ed57600080fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561149e5761149e611474565b5060010190565b63ffffffff84168152604060208201819052810182905260006001600160fb1b038311156114d257600080fd5b8260051b8085606085013760009201606001918252509392505050565b6000602080838503121561150257600080fd5b82516001600160401b0381111561151857600080fd5b8301601f8101851361152957600080fd5b80516115376113fe82611393565b81815260059190911b8201830190838101908783111561155657600080fd5b928401925b8284101561144057835161156e81610f5d565b8252928401929084019061155b565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b63ffffffff841681526040602082015260006115c660408301848661157d565b95945050505050565b6000602082840312156115e157600080fd5b81516001600160c01b03811681146110ed57600080fd5b60006020828403121561160a57600080fd5b81516110ed81610f5d565b600060ff821660ff81141561162c5761162c611474565b60010192915050565b60408152600061164960408301858761157d565b905063ffffffff83166020830152949350505050565b60006040820163ffffffff851683526020604081850152818551808452606086019150828701935060005b818110156116a65784518352938301939183019160010161168a565b5090979650505050505050565b6000828210156116c5576116c5611474565b500390565b600061ffff808316818114156116e2576116e2611474565b600101939250505056fea26469706673582212205bfd930a1b7c8f8471802a2cf81cf4219840fbe6918482e6ae4f8270b52d86e864736f6c634300080c0033", +} + +// ContractOperatorStateRetrieverABI is the input ABI used to generate the binding from. +// Deprecated: Use ContractOperatorStateRetrieverMetaData.ABI instead. +var ContractOperatorStateRetrieverABI = ContractOperatorStateRetrieverMetaData.ABI + +// ContractOperatorStateRetrieverBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use ContractOperatorStateRetrieverMetaData.Bin instead. +var ContractOperatorStateRetrieverBin = ContractOperatorStateRetrieverMetaData.Bin + +// DeployContractOperatorStateRetriever deploys a new Ethereum contract, binding an instance of ContractOperatorStateRetriever to it. +func DeployContractOperatorStateRetriever(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *ContractOperatorStateRetriever, error) { + parsed, err := ContractOperatorStateRetrieverMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ContractOperatorStateRetrieverBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &ContractOperatorStateRetriever{ContractOperatorStateRetrieverCaller: ContractOperatorStateRetrieverCaller{contract: contract}, ContractOperatorStateRetrieverTransactor: ContractOperatorStateRetrieverTransactor{contract: contract}, ContractOperatorStateRetrieverFilterer: ContractOperatorStateRetrieverFilterer{contract: contract}}, nil +} + +// ContractOperatorStateRetriever is an auto generated Go binding around an Ethereum contract. +type ContractOperatorStateRetriever struct { + ContractOperatorStateRetrieverCaller // Read-only binding to the contract + ContractOperatorStateRetrieverTransactor // Write-only binding to the contract + ContractOperatorStateRetrieverFilterer // Log filterer for contract events +} + +// ContractOperatorStateRetrieverCaller is an auto generated read-only Go binding around an Ethereum contract. +type ContractOperatorStateRetrieverCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ContractOperatorStateRetrieverTransactor is an auto generated write-only Go binding around an Ethereum contract. +type ContractOperatorStateRetrieverTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ContractOperatorStateRetrieverFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type ContractOperatorStateRetrieverFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ContractOperatorStateRetrieverSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type ContractOperatorStateRetrieverSession struct { + Contract *ContractOperatorStateRetriever // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ContractOperatorStateRetrieverCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type ContractOperatorStateRetrieverCallerSession struct { + Contract *ContractOperatorStateRetrieverCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// ContractOperatorStateRetrieverTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type ContractOperatorStateRetrieverTransactorSession struct { + Contract *ContractOperatorStateRetrieverTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ContractOperatorStateRetrieverRaw is an auto generated low-level Go binding around an Ethereum contract. +type ContractOperatorStateRetrieverRaw struct { + Contract *ContractOperatorStateRetriever // Generic contract binding to access the raw methods on +} + +// ContractOperatorStateRetrieverCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type ContractOperatorStateRetrieverCallerRaw struct { + Contract *ContractOperatorStateRetrieverCaller // Generic read-only contract binding to access the raw methods on +} + +// ContractOperatorStateRetrieverTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type ContractOperatorStateRetrieverTransactorRaw struct { + Contract *ContractOperatorStateRetrieverTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewContractOperatorStateRetriever creates a new instance of ContractOperatorStateRetriever, bound to a specific deployed contract. +func NewContractOperatorStateRetriever(address common.Address, backend bind.ContractBackend) (*ContractOperatorStateRetriever, error) { + contract, err := bindContractOperatorStateRetriever(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ContractOperatorStateRetriever{ContractOperatorStateRetrieverCaller: ContractOperatorStateRetrieverCaller{contract: contract}, ContractOperatorStateRetrieverTransactor: ContractOperatorStateRetrieverTransactor{contract: contract}, ContractOperatorStateRetrieverFilterer: ContractOperatorStateRetrieverFilterer{contract: contract}}, nil +} + +// NewContractOperatorStateRetrieverCaller creates a new read-only instance of ContractOperatorStateRetriever, bound to a specific deployed contract. +func NewContractOperatorStateRetrieverCaller(address common.Address, caller bind.ContractCaller) (*ContractOperatorStateRetrieverCaller, error) { + contract, err := bindContractOperatorStateRetriever(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ContractOperatorStateRetrieverCaller{contract: contract}, nil +} + +// NewContractOperatorStateRetrieverTransactor creates a new write-only instance of ContractOperatorStateRetriever, bound to a specific deployed contract. +func NewContractOperatorStateRetrieverTransactor(address common.Address, transactor bind.ContractTransactor) (*ContractOperatorStateRetrieverTransactor, error) { + contract, err := bindContractOperatorStateRetriever(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ContractOperatorStateRetrieverTransactor{contract: contract}, nil +} + +// NewContractOperatorStateRetrieverFilterer creates a new log filterer instance of ContractOperatorStateRetriever, bound to a specific deployed contract. +func NewContractOperatorStateRetrieverFilterer(address common.Address, filterer bind.ContractFilterer) (*ContractOperatorStateRetrieverFilterer, error) { + contract, err := bindContractOperatorStateRetriever(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ContractOperatorStateRetrieverFilterer{contract: contract}, nil +} + +// bindContractOperatorStateRetriever binds a generic wrapper to an already deployed contract. +func bindContractOperatorStateRetriever(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ContractOperatorStateRetrieverMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ContractOperatorStateRetriever *ContractOperatorStateRetrieverRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ContractOperatorStateRetriever.Contract.ContractOperatorStateRetrieverCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ContractOperatorStateRetriever *ContractOperatorStateRetrieverRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ContractOperatorStateRetriever.Contract.ContractOperatorStateRetrieverTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ContractOperatorStateRetriever *ContractOperatorStateRetrieverRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ContractOperatorStateRetriever.Contract.ContractOperatorStateRetrieverTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ContractOperatorStateRetriever *ContractOperatorStateRetrieverCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ContractOperatorStateRetriever.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ContractOperatorStateRetriever *ContractOperatorStateRetrieverTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ContractOperatorStateRetriever.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ContractOperatorStateRetriever *ContractOperatorStateRetrieverTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ContractOperatorStateRetriever.Contract.contract.Transact(opts, method, params...) +} + +// GetCheckSignaturesIndices is a free data retrieval call binding the contract method 0x4f739f74. +// +// Solidity: function getCheckSignaturesIndices(address registryCoordinator, uint32 referenceBlockNumber, bytes quorumNumbers, bytes32[] nonSignerOperatorIds) view returns((uint32[],uint32[],uint32[],uint32[][])) +func (_ContractOperatorStateRetriever *ContractOperatorStateRetrieverCaller) GetCheckSignaturesIndices(opts *bind.CallOpts, registryCoordinator common.Address, referenceBlockNumber uint32, quorumNumbers []byte, nonSignerOperatorIds [][32]byte) (OperatorStateRetrieverCheckSignaturesIndices, error) { + var out []interface{} + err := _ContractOperatorStateRetriever.contract.Call(opts, &out, "getCheckSignaturesIndices", registryCoordinator, referenceBlockNumber, quorumNumbers, nonSignerOperatorIds) + + if err != nil { + return *new(OperatorStateRetrieverCheckSignaturesIndices), err + } + + out0 := *abi.ConvertType(out[0], new(OperatorStateRetrieverCheckSignaturesIndices)).(*OperatorStateRetrieverCheckSignaturesIndices) + + return out0, err + +} + +// GetCheckSignaturesIndices is a free data retrieval call binding the contract method 0x4f739f74. +// +// Solidity: function getCheckSignaturesIndices(address registryCoordinator, uint32 referenceBlockNumber, bytes quorumNumbers, bytes32[] nonSignerOperatorIds) view returns((uint32[],uint32[],uint32[],uint32[][])) +func (_ContractOperatorStateRetriever *ContractOperatorStateRetrieverSession) GetCheckSignaturesIndices(registryCoordinator common.Address, referenceBlockNumber uint32, quorumNumbers []byte, nonSignerOperatorIds [][32]byte) (OperatorStateRetrieverCheckSignaturesIndices, error) { + return _ContractOperatorStateRetriever.Contract.GetCheckSignaturesIndices(&_ContractOperatorStateRetriever.CallOpts, registryCoordinator, referenceBlockNumber, quorumNumbers, nonSignerOperatorIds) +} + +// GetCheckSignaturesIndices is a free data retrieval call binding the contract method 0x4f739f74. +// +// Solidity: function getCheckSignaturesIndices(address registryCoordinator, uint32 referenceBlockNumber, bytes quorumNumbers, bytes32[] nonSignerOperatorIds) view returns((uint32[],uint32[],uint32[],uint32[][])) +func (_ContractOperatorStateRetriever *ContractOperatorStateRetrieverCallerSession) GetCheckSignaturesIndices(registryCoordinator common.Address, referenceBlockNumber uint32, quorumNumbers []byte, nonSignerOperatorIds [][32]byte) (OperatorStateRetrieverCheckSignaturesIndices, error) { + return _ContractOperatorStateRetriever.Contract.GetCheckSignaturesIndices(&_ContractOperatorStateRetriever.CallOpts, registryCoordinator, referenceBlockNumber, quorumNumbers, nonSignerOperatorIds) +} + +// GetOperatorState is a free data retrieval call binding the contract method 0x3563b0d1. +// +// Solidity: function getOperatorState(address registryCoordinator, bytes quorumNumbers, uint32 blockNumber) view returns((address,bytes32,uint96)[][]) +func (_ContractOperatorStateRetriever *ContractOperatorStateRetrieverCaller) GetOperatorState(opts *bind.CallOpts, registryCoordinator common.Address, quorumNumbers []byte, blockNumber uint32) ([][]OperatorStateRetrieverOperator, error) { + var out []interface{} + err := _ContractOperatorStateRetriever.contract.Call(opts, &out, "getOperatorState", registryCoordinator, quorumNumbers, blockNumber) + + if err != nil { + return *new([][]OperatorStateRetrieverOperator), err + } + + out0 := *abi.ConvertType(out[0], new([][]OperatorStateRetrieverOperator)).(*[][]OperatorStateRetrieverOperator) + + return out0, err + +} + +// GetOperatorState is a free data retrieval call binding the contract method 0x3563b0d1. +// +// Solidity: function getOperatorState(address registryCoordinator, bytes quorumNumbers, uint32 blockNumber) view returns((address,bytes32,uint96)[][]) +func (_ContractOperatorStateRetriever *ContractOperatorStateRetrieverSession) GetOperatorState(registryCoordinator common.Address, quorumNumbers []byte, blockNumber uint32) ([][]OperatorStateRetrieverOperator, error) { + return _ContractOperatorStateRetriever.Contract.GetOperatorState(&_ContractOperatorStateRetriever.CallOpts, registryCoordinator, quorumNumbers, blockNumber) +} + +// GetOperatorState is a free data retrieval call binding the contract method 0x3563b0d1. +// +// Solidity: function getOperatorState(address registryCoordinator, bytes quorumNumbers, uint32 blockNumber) view returns((address,bytes32,uint96)[][]) +func (_ContractOperatorStateRetriever *ContractOperatorStateRetrieverCallerSession) GetOperatorState(registryCoordinator common.Address, quorumNumbers []byte, blockNumber uint32) ([][]OperatorStateRetrieverOperator, error) { + return _ContractOperatorStateRetriever.Contract.GetOperatorState(&_ContractOperatorStateRetriever.CallOpts, registryCoordinator, quorumNumbers, blockNumber) +} + +// GetOperatorState0 is a free data retrieval call binding the contract method 0xcefdc1d4. +// +// Solidity: function getOperatorState(address registryCoordinator, bytes32 operatorId, uint32 blockNumber) view returns(uint256, (address,bytes32,uint96)[][]) +func (_ContractOperatorStateRetriever *ContractOperatorStateRetrieverCaller) GetOperatorState0(opts *bind.CallOpts, registryCoordinator common.Address, operatorId [32]byte, blockNumber uint32) (*big.Int, [][]OperatorStateRetrieverOperator, error) { + var out []interface{} + err := _ContractOperatorStateRetriever.contract.Call(opts, &out, "getOperatorState0", registryCoordinator, operatorId, blockNumber) + + if err != nil { + return *new(*big.Int), *new([][]OperatorStateRetrieverOperator), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + out1 := *abi.ConvertType(out[1], new([][]OperatorStateRetrieverOperator)).(*[][]OperatorStateRetrieverOperator) + + return out0, out1, err + +} + +// GetOperatorState0 is a free data retrieval call binding the contract method 0xcefdc1d4. +// +// Solidity: function getOperatorState(address registryCoordinator, bytes32 operatorId, uint32 blockNumber) view returns(uint256, (address,bytes32,uint96)[][]) +func (_ContractOperatorStateRetriever *ContractOperatorStateRetrieverSession) GetOperatorState0(registryCoordinator common.Address, operatorId [32]byte, blockNumber uint32) (*big.Int, [][]OperatorStateRetrieverOperator, error) { + return _ContractOperatorStateRetriever.Contract.GetOperatorState0(&_ContractOperatorStateRetriever.CallOpts, registryCoordinator, operatorId, blockNumber) +} + +// GetOperatorState0 is a free data retrieval call binding the contract method 0xcefdc1d4. +// +// Solidity: function getOperatorState(address registryCoordinator, bytes32 operatorId, uint32 blockNumber) view returns(uint256, (address,bytes32,uint96)[][]) +func (_ContractOperatorStateRetriever *ContractOperatorStateRetrieverCallerSession) GetOperatorState0(registryCoordinator common.Address, operatorId [32]byte, blockNumber uint32) (*big.Int, [][]OperatorStateRetrieverOperator, error) { + return _ContractOperatorStateRetriever.Contract.GetOperatorState0(&_ContractOperatorStateRetriever.CallOpts, registryCoordinator, operatorId, blockNumber) +} diff --git a/contracts/bindings/RegistryCoordinator/binding.go b/contracts/bindings/RegistryCoordinator/binding.go new file mode 100644 index 0000000000..a590f14204 --- /dev/null +++ b/contracts/bindings/RegistryCoordinator/binding.go @@ -0,0 +1,3261 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package contractRegistryCoordinator + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// BN254G1Point is an auto generated low-level Go binding around an user-defined struct. +type BN254G1Point struct { + X *big.Int + Y *big.Int +} + +// BN254G2Point is an auto generated low-level Go binding around an user-defined struct. +type BN254G2Point struct { + X [2]*big.Int + Y [2]*big.Int +} + +// IBLSApkRegistryPubkeyRegistrationParams is an auto generated low-level Go binding around an user-defined struct. +type IBLSApkRegistryPubkeyRegistrationParams struct { + PubkeyRegistrationSignature BN254G1Point + PubkeyG1 BN254G1Point + PubkeyG2 BN254G2Point +} + +// IRegistryCoordinatorOperatorInfo is an auto generated low-level Go binding around an user-defined struct. +type IRegistryCoordinatorOperatorInfo struct { + OperatorId [32]byte + Status uint8 +} + +// IRegistryCoordinatorOperatorKickParam is an auto generated low-level Go binding around an user-defined struct. +type IRegistryCoordinatorOperatorKickParam struct { + QuorumNumber uint8 + Operator common.Address +} + +// IRegistryCoordinatorOperatorSetParam is an auto generated low-level Go binding around an user-defined struct. +type IRegistryCoordinatorOperatorSetParam struct { + MaxOperatorCount uint32 + KickBIPsOfOperatorStake uint16 + KickBIPsOfTotalStake uint16 +} + +// IRegistryCoordinatorQuorumBitmapUpdate is an auto generated low-level Go binding around an user-defined struct. +type IRegistryCoordinatorQuorumBitmapUpdate struct { + UpdateBlockNumber uint32 + NextUpdateBlockNumber uint32 + QuorumBitmap *big.Int +} + +// ISignatureUtilsSignatureWithSaltAndExpiry is an auto generated low-level Go binding around an user-defined struct. +type ISignatureUtilsSignatureWithSaltAndExpiry struct { + Signature []byte + Salt [32]byte + Expiry *big.Int +} + +// IStakeRegistryStrategyParams is an auto generated low-level Go binding around an user-defined struct. +type IStakeRegistryStrategyParams struct { + Strategy common.Address + Multiplier *big.Int +} + +// ContractRegistryCoordinatorMetaData contains all meta data concerning the ContractRegistryCoordinator contract. +var ContractRegistryCoordinatorMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_serviceManager\",\"type\":\"address\",\"internalType\":\"contractIServiceManager\"},{\"name\":\"_stakeRegistry\",\"type\":\"address\",\"internalType\":\"contractIStakeRegistry\"},{\"name\":\"_blsApkRegistry\",\"type\":\"address\",\"internalType\":\"contractIBLSApkRegistry\"},{\"name\":\"_indexRegistry\",\"type\":\"address\",\"internalType\":\"contractIIndexRegistry\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"OPERATOR_CHURN_APPROVAL_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PUBKEY_REGISTRATION_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"blsApkRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIBLSApkRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateOperatorChurnApprovalDigestHash\",\"inputs\":[{\"name\":\"registeringOperator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"registeringOperatorId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"operatorKickParams\",\"type\":\"tuple[]\",\"internalType\":\"structIRegistryCoordinator.OperatorKickParam[]\",\"components\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"churnApprover\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"createQuorum\",\"inputs\":[{\"name\":\"operatorSetParams\",\"type\":\"tuple\",\"internalType\":\"structIRegistryCoordinator.OperatorSetParam\",\"components\":[{\"name\":\"maxOperatorCount\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"kickBIPsOfOperatorStake\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"kickBIPsOfTotalStake\",\"type\":\"uint16\",\"internalType\":\"uint16\"}]},{\"name\":\"minimumStake\",\"type\":\"uint96\",\"internalType\":\"uint96\"},{\"name\":\"strategyParams\",\"type\":\"tuple[]\",\"internalType\":\"structIStakeRegistry.StrategyParams[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deregisterOperator\",\"inputs\":[{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ejectOperator\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ejector\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getCurrentQuorumBitmap\",\"inputs\":[{\"name\":\"operatorId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint192\",\"internalType\":\"uint192\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperator\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIRegistryCoordinator.OperatorInfo\",\"components\":[{\"name\":\"operatorId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"status\",\"type\":\"uint8\",\"internalType\":\"enumIRegistryCoordinator.OperatorStatus\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorFromId\",\"inputs\":[{\"name\":\"operatorId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorId\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorSetParams\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIRegistryCoordinator.OperatorSetParam\",\"components\":[{\"name\":\"maxOperatorCount\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"kickBIPsOfOperatorStake\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"kickBIPsOfTotalStake\",\"type\":\"uint16\",\"internalType\":\"uint16\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorStatus\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIRegistryCoordinator.OperatorStatus\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getQuorumBitmapAtBlockNumberByIndex\",\"inputs\":[{\"name\":\"operatorId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"blockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint192\",\"internalType\":\"uint192\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getQuorumBitmapHistoryLength\",\"inputs\":[{\"name\":\"operatorId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getQuorumBitmapIndicesAtBlockNumber\",\"inputs\":[{\"name\":\"blockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"operatorIds\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getQuorumBitmapUpdateByIndex\",\"inputs\":[{\"name\":\"operatorId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIRegistryCoordinator.QuorumBitmapUpdate\",\"components\":[{\"name\":\"updateBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"nextUpdateBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"quorumBitmap\",\"type\":\"uint192\",\"internalType\":\"uint192\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"indexRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIIndexRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_churnApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_ejector\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"_initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_operatorSetParams\",\"type\":\"tuple[]\",\"internalType\":\"structIRegistryCoordinator.OperatorSetParam[]\",\"components\":[{\"name\":\"maxOperatorCount\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"kickBIPsOfOperatorStake\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"kickBIPsOfTotalStake\",\"type\":\"uint16\",\"internalType\":\"uint16\"}]},{\"name\":\"_minimumStakes\",\"type\":\"uint96[]\",\"internalType\":\"uint96[]\"},{\"name\":\"_strategyParams\",\"type\":\"tuple[][]\",\"internalType\":\"structIStakeRegistry.StrategyParams[][]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isChurnApproverSaltUsed\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"numRegistries\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseAll\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pauserRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pubkeyRegistrationMessageHash\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"quorumCount\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"quorumUpdateBlockNumber\",\"inputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registerOperator\",\"inputs\":[{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"socket\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"params\",\"type\":\"tuple\",\"internalType\":\"structIBLSApkRegistry.PubkeyRegistrationParams\",\"components\":[{\"name\":\"pubkeyRegistrationSignature\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"pubkeyG1\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"pubkeyG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]}]},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.SignatureWithSaltAndExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registerOperatorWithChurn\",\"inputs\":[{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"socket\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"params\",\"type\":\"tuple\",\"internalType\":\"structIBLSApkRegistry.PubkeyRegistrationParams\",\"components\":[{\"name\":\"pubkeyRegistrationSignature\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"pubkeyG1\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"pubkeyG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]}]},{\"name\":\"operatorKickParams\",\"type\":\"tuple[]\",\"internalType\":\"structIRegistryCoordinator.OperatorKickParam[]\",\"components\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"churnApproverSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.SignatureWithSaltAndExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.SignatureWithSaltAndExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registries\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"serviceManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIServiceManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setChurnApprover\",\"inputs\":[{\"name\":\"_churnApprover\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setEjector\",\"inputs\":[{\"name\":\"_ejector\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorSetParams\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"operatorSetParams\",\"type\":\"tuple\",\"internalType\":\"structIRegistryCoordinator.OperatorSetParam\",\"components\":[{\"name\":\"maxOperatorCount\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"kickBIPsOfOperatorStake\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"kickBIPsOfTotalStake\",\"type\":\"uint16\",\"internalType\":\"uint16\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"stakeRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStakeRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateOperators\",\"inputs\":[{\"name\":\"operators\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateOperatorsForQuorum\",\"inputs\":[{\"name\":\"operatorsPerQuorum\",\"type\":\"address[][]\",\"internalType\":\"address[][]\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateSocket\",\"inputs\":[{\"name\":\"socket\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"ChurnApproverUpdated\",\"inputs\":[{\"name\":\"prevChurnApprover\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newChurnApprover\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"EjectorUpdated\",\"inputs\":[{\"name\":\"prevEjector\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newEjector\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorDeregistered\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorId\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorRegistered\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorId\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetParamsUpdated\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"uint8\"},{\"name\":\"operatorSetParams\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIRegistryCoordinator.OperatorSetParam\",\"components\":[{\"name\":\"maxOperatorCount\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"kickBIPsOfOperatorStake\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"kickBIPsOfTotalStake\",\"type\":\"uint16\",\"internalType\":\"uint16\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSocketUpdate\",\"inputs\":[{\"name\":\"operatorId\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"socket\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"QuorumBlockNumberUpdated\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"uint8\"},{\"name\":\"blocknumber\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false}]", + Bin: "0x6101c06040523480156200001257600080fd5b506040516200633638038062006336833981016040819052620000359162000254565b604080518082018252601681527f4156535265676973747279436f6f7264696e61746f720000000000000000000060208083019182528351808501909452600684526576302e302e3160d01b908401528151902060e08190527f6bda7e3f385e48841048390444cced5cc795af87758af67622e5f4f0882c4a996101008190524660a05287938793879387939192917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620001358184846040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6080523060c05261012052505050506001600160a01b039384166101405291831661018052821661016052166101a0526200016f62000179565b50505050620002bc565b600054610100900460ff1615620001e65760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000239576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200025157600080fd5b50565b600080600080608085870312156200026b57600080fd5b845162000278816200023b565b60208601519094506200028b816200023b565b60408601519093506200029e816200023b565b6060860151909250620002b1816200023b565b939692955090935050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a051615f72620003c4600039600081816106370152818161118c0152818161209401528181612e5f015281816136e90152613cc101526000818161057c0152818161201f015281816124c701528181612ddf01528181613640015281816138960152613c4001526000818161054201528181610eae0152818161205d01528181612d6101528181612f4701528181612fbd015281816135c00152613d3d01526000818161048601528181612cb7015261350801526000613f4401526000613f9301526000613f6e01526000613ec701526000613ef101526000613f1b0152615f726000f3fe608060405234801561001057600080fd5b50600436106102945760003560e01c80635df45946116101675780639feab859116100ce578063d75b4c8811610087578063d75b4c88146106f5578063dd8283f314610708578063e65797ad1461071b578063f2fde38b146107be578063fabc1cbc146107d1578063fd39105a146107e457600080fd5b80639feab85914610659578063a50857bf14610680578063c391425e14610693578063ca0de882146106b3578063ca4f2d97146106da578063d72d8dd6146106ed57600080fd5b8063871ef04911610120578063871ef049146105cc578063886f1195146105df5780638da5cb5b146105f85780639aa1653d146106005780639b5d177b1461061f5780639e9923c21461063257600080fd5b80635df459461461053d5780636347c9001461056457806368304835146105775780636e3b17db1461059e578063715018a6146105b157806384ca5213146105b957600080fd5b806328f61b311161020b5780635140a548116101c45780635140a548146104c85780635865c60c146104db578063595c6a67146104fb5780635ac86ab7146105035780635b0b829f146105225780635c975abb1461053557600080fd5b806328f61b3114610435578063296bb0641461044857806329d1e0c31461045b5780632cdd1e861461046e5780633998fdd3146104815780633c2a7f4c146104a857600080fd5b806310d67a2f1161025d57806310d67a2f1461034a57806313542a4e1461035d578063136439dd146103865780631478851f146103995780631eb812da146103cc578063249a0c421461041557600080fd5b8062cf2ab51461029957806303fd3492146102ae57806304ec6351146102e1578063054310e61461030c5780630cf4b76714610337575b600080fd5b6102ac6102a7366004614a44565b610820565b005b6102ce6102bc366004614a85565b60009081526098602052604090205490565b6040519081526020015b60405180910390f35b6102f46102ef366004614ab0565b610936565b6040516001600160c01b0390911681526020016102d8565b609d5461031f906001600160a01b031681565b6040516001600160a01b0390911681526020016102d8565b6102ac610345366004614bcf565b610b2c565b6102ac610358366004614c44565b610c14565b6102ce61036b366004614c44565b6001600160a01b031660009081526099602052604090205490565b6102ac610394366004614a85565b610cc7565b6103bc6103a7366004614a85565b609a6020526000908152604090205460ff1681565b60405190151581526020016102d8565b6103df6103da366004614c61565b610e04565b60408051825163ffffffff908116825260208085015190911690820152918101516001600160c01b0316908201526060016102d8565b6102ce610423366004614c94565b609b6020526000908152604090205481565b609e5461031f906001600160a01b031681565b61031f610456366004614a85565b610e95565b6102ac610469366004614c44565b610f21565b6102ac61047c366004614c44565b610f32565b61031f7f000000000000000000000000000000000000000000000000000000000000000081565b6104bb6104b6366004614c44565b610f43565b6040516102d89190614caf565b6102ac6104d6366004614d07565b610fc2565b6104ee6104e9366004614c44565b61154c565b6040516102d89190614daa565b6102ac6115c0565b6103bc610511366004614c94565b6001805460ff9092161b9081161490565b6102ac610530366004614e2f565b61168c565b6001546102ce565b61031f7f000000000000000000000000000000000000000000000000000000000000000081565b61031f610572366004614a85565b611723565b61031f7f000000000000000000000000000000000000000000000000000000000000000081565b6102ac6105ac366004614e63565b61174d565b6102ac61180d565b6102ce6105c7366004614f1a565b611821565b6102f46105da366004614a85565b61186b565b60005461031f906201000090046001600160a01b031681565b61031f611876565b60965461060d9060ff1681565b60405160ff90911681526020016102d8565b6102ac61062d3660046150b3565b61188f565b61031f7f000000000000000000000000000000000000000000000000000000000000000081565b6102ce7f2bd82124057f0913bc3b772ce7b83e8057c1ad1f3510fc83778be20f10ec5de681565b6102ac61068e3660046151ac565b611bc7565b6106a66106a1366004615254565b611d4b565b6040516102d891906152f9565b6102ce7f3bfe5390d1688d2e056e0ee4b68c5419f42d9bd0c792f01acb83886714adeb5681565b6102ac6106e8366004615343565b611e04565b609c546102ce565b6102ac610703366004615429565b611e6b565b6102ac6107163660046155dc565b611e7e565b61078a610729366004614c94565b60408051606080820183526000808352602080840182905292840181905260ff9490941684526097825292829020825193840183525463ffffffff8116845261ffff600160201b8204811692850192909252600160301b9004169082015290565b60408051825163ffffffff16815260208084015161ffff9081169183019190915292820151909216908201526060016102d8565b6102ac6107cc366004614c44565b612182565b6102ac6107df366004614a85565b6121f8565b6108136107f2366004614c44565b6001600160a01b031660009081526099602052604090206001015460ff1690565b6040516102d891906156b0565b600154600290600490811614156108525760405162461bcd60e51b8152600401610849906156be565b60405180910390fd5b60005b82811015610930576000848483818110610871576108716156f5565b90506020020160208101906108869190614c44565b6001600160a01b03811660009081526099602090815260408083208151808301909252805482526001810154949550929390929183019060ff1660028111156108d1576108d1614d72565b60028111156108e2576108e2614d72565b905250805190915060006108f582612354565b9050600061090b826001600160c01b03166123bd565b9050610918858583612489565b5050505050808061092890615721565b915050610855565b50505050565b6000838152609860205260408120805482919084908110610959576109596156f5565b600091825260209182902060408051606081018252929091015463ffffffff808216808552600160201b8304821695850195909552600160401b9091046001600160c01b03169183019190915290925085161015610a535760405162461bcd60e51b815260206004820152606560248201527f5265676973747279436f6f7264696e61746f722e67657451756f72756d42697460448201527f6d61704174426c6f636b4e756d6265724279496e6465783a2071756f72756d4260648201527f69746d61705570646174652069732066726f6d20616674657220626c6f636b4e6084820152643ab6b132b960d91b60a482015260c401610849565b602081015163ffffffff161580610a795750806020015163ffffffff168463ffffffff16105b610b205760405162461bcd60e51b815260206004820152606660248201527f5265676973747279436f6f7264696e61746f722e67657451756f72756d42697460448201527f6d61704174426c6f636b4e756d6265724279496e6465783a2071756f72756d4260648201527f69746d61705570646174652069732066726f6d206265666f726520626c6f636b608482015265273ab6b132b960d11b60a482015260c401610849565b60400151949350505050565b60013360009081526099602052604090206001015460ff166002811115610b5557610b55614d72565b14610bc85760405162461bcd60e51b815260206004820152603c60248201527f5265676973747279436f6f7264696e61746f722e757064617465536f636b657460448201527f3a206f70657261746f72206973206e6f742072656769737465726564000000006064820152608401610849565b33600090815260996020526040908190205490517fec2963ab21c1e50e1e582aa542af2e4bf7bf38e6e1403c27b42e1c5d6e621eaa90610c09908490615789565b60405180910390a250565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8b919061579c565b6001600160a01b0316336001600160a01b031614610cbb5760405162461bcd60e51b8152600401610849906157b9565b610cc481612576565b50565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610d14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d389190615803565b610d545760405162461bcd60e51b815260040161084990615825565b60015481811614610dcd5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610849565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d90602001610c09565b60408051606081018252600080825260208201819052918101919091526000838152609860205260409020805483908110610e4157610e416156f5565b600091825260209182902060408051606081018252919092015463ffffffff8082168352600160201b820416938201939093526001600160c01b03600160401b909304929092169082015290505b92915050565b6040516308f6629d60e31b8152600481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906347b314e890602401602060405180830381865afa158015610efd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8f919061579c565b610f2961267b565b610cc4816126da565b610f3a61267b565b610cc481612743565b6040805180820190915260008082526020820152610e8f610fbd7f2bd82124057f0913bc3b772ce7b83e8057c1ad1f3510fc83778be20f10ec5de684604051602001610fa29291909182526001600160a01b0316602082015260400190565b604051602081830303815290604052805190602001206127ac565b6127fa565b60015460029060049081161415610feb5760405162461bcd60e51b8152600401610849906156be565b600061103384848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060965460ff16915061288a9050565b905061103e81612943565b6110ae5760405162461bcd60e51b81526020600482015260476024820152600080516020615ebd83398151915260448201527f6f7273466f7251756f72756d3a20736f6d652071756f72756d7320646f206e6f6064820152661d08195e1a5cdd60ca1b608482015260a401610849565b84831461111d5760405162461bcd60e51b81526020600482015260436024820152600080516020615ebd83398151915260448201527f6f7273466f7251756f72756d3a20696e707574206c656e677468206d69736d616064820152620e8c6d60eb1b608482015260a401610849565b60005b8381101561154357600085858381811061113c5761113c6156f5565b919091013560f81c9150369050600089898581811061115d5761115d6156f5565b905060200281019061116f919061586d565b6040516379a0849160e11b815260ff8616600482015291935091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f341092290602401602060405180830381865afa1580156111db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ff91906158b6565b63ffffffff16811461129b5760405162461bcd60e51b81526020600482015260656024820152600080516020615ebd83398151915260448201527f6f7273466f7251756f72756d3a206e756d626572206f6620757064617465642060648201527f6f70657261746f727320646f6573206e6f74206d617463682071756f72756d206084820152641d1bdd185b60da1b60a482015260c401610849565b6000805b828110156114e25760008484838181106112bb576112bb6156f5565b90506020020160208101906112d09190614c44565b6001600160a01b03811660009081526099602090815260408083208151808301909252805482526001810154949550929390929183019060ff16600281111561131b5761131b614d72565b600281111561132c5761132c614d72565b9052508051909150600061133f82612354565b905060016001600160c01b03821660ff8b161c8116146113c35760405162461bcd60e51b815260206004820152604460248201819052600080516020615ebd833981519152908201527f6f7273466f7251756f72756d3a206f70657261746f72206e6f7420696e2071756064820152636f72756d60e01b608482015260a401610849565b856001600160a01b0316846001600160a01b03161161146e5760405162461bcd60e51b81526020600482015260676024820152600080516020615ebd83398151915260448201527f6f7273466f7251756f72756d3a206f70657261746f7273206172726179206d7560648201527f737420626520736f7274656420696e20617363656e64696e6720616464726573608482015266399037b93232b960c91b60a482015260c401610849565b506114cc83838f8f8d908e600161148591906158d3565b92611492939291906158eb565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061248992505050565b509092506114db905081615721565b905061129f565b5060ff84166000818152609b6020908152604091829020439081905591519182527f46077d55330763f16269fd75e5761663f4192d2791747c0189b16ad31db07db4910160405180910390a2505050508061153c90615721565b9050611120565b50505050505050565b60408051808201909152600080825260208201526001600160a01b0382166000908152609960209081526040918290208251808401909352805483526001810154909183019060ff1660028111156115a6576115a6614d72565b60028111156115b7576115b7614d72565b90525092915050565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa15801561160d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116319190615803565b61164d5760405162461bcd60e51b815260040161084990615825565b600019600181905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b61169461267b565b609654829060ff908116908216106117145760405162461bcd60e51b815260206004820152603760248201527f5265676973747279436f6f7264696e61746f722e71756f72756d45786973747360448201527f3a2071756f72756d20646f6573206e6f742065786973740000000000000000006064820152608401610849565b61171e8383612976565b505050565b609c818154811061173357600080fd5b6000918252602090912001546001600160a01b0316905081565b609e546001600160a01b031633146117cd5760405162461bcd60e51b815260206004820152603a60248201527f5265676973747279436f6f7264696e61746f722e6f6e6c79456a6563746f723a60448201527f2063616c6c6572206973206e6f742074686520656a6563746f720000000000006064820152608401610849565b61171e8383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612a2392505050565b61181561267b565b61181f6000612ed3565b565b60006118617f3bfe5390d1688d2e056e0ee4b68c5419f42d9bd0c792f01acb83886714adeb568787878787604051602001610fa296959493929190615915565b9695505050505050565b6000610e8f82612354565b600061188a6064546001600160a01b031690565b905090565b6001805460009190811614156118b75760405162461bcd60e51b8152600401610849906156be565b83891461193a5760405162461bcd60e51b8152602060048201526044602482018190527f5265676973747279436f6f7264696e61746f722e72656769737465724f706572908201527f61746f7257697468436875726e3a20696e707574206c656e677468206d69736d6064820152630c2e8c6d60e31b608482015260a401610849565b60006119463388612f25565b90506119a633828888808060200260200160405190810160405280939291908181526020016000905b8282101561199b5761198c6040830286013681900381019061599a565b8152602001906001019061196f565b505050505087613056565b60006119ed33838e8e8e8e8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c92506131e3915050565b905060005b8b811015611bb8576000609760008f8f85818110611a1257611a126156f5565b919091013560f81c82525060208082019290925260409081016000208151606081018352905463ffffffff811680835261ffff600160201b8304811695840195909552600160301b90910490931691810191909152845180519193509084908110611a7f57611a7f6156f5565b602002602001015163ffffffff161115611ba557611b208e8e84818110611aa857611aa86156f5565b9050013560f81c60f81b60f81c84604001518481518110611acb57611acb6156f5565b60200260200101513386602001518681518110611aea57611aea6156f5565b60200260200101518d8d88818110611b0457611b046156f5565b905060400201803603810190611b1a919061599a565b86613777565b611ba5898984818110611b3557611b356156f5565b9050604002016020016020810190611b4d9190614c44565b8f8f8590866001611b5e91906158d3565b92611b6b939291906158eb565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612a2392505050565b5080611bb081615721565b9150506119f2565b50505050505050505050505050565b600180546000919081161415611bef5760405162461bcd60e51b8152600401610849906156be565b6000611bfb3385612f25565b90506000611c4433838b8b8b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c92506131e3915050565b51905060005b88811015611d3f5760008a8a83818110611c6657611c666156f5565b919091013560f81c600081815260976020526040902054855191935063ffffffff169150849084908110611c9c57611c9c6156f5565b602002602001015163ffffffff161115611d2c5760405162461bcd60e51b8152602060048201526044602482018190527f5265676973747279436f6f7264696e61746f722e72656769737465724f706572908201527f61746f723a206f70657261746f7220636f756e742065786365656473206d6178606482015263696d756d60e01b608482015260a401610849565b5080611d3781615721565b915050611c4a565b50505050505050505050565b6060600082516001600160401b03811115611d6857611d68614ae8565b604051908082528060200260200182016040528015611d91578160200160208202803683370190505b50905060005b8351811015611dfc57611dc385858381518110611db657611db66156f5565b6020026020010151613a4c565b828281518110611dd557611dd56156f5565b63ffffffff9092166020928302919091019091015280611df481615721565b915050611d97565b509392505050565b6001805460029081161415611e2b5760405162461bcd60e51b8152600401610849906156be565b61171e3384848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612a2392505050565b611e7361267b565b61171e838383613b88565b600054610100900460ff1615808015611e9e5750600054600160ff909116105b80611eb85750303b158015611eb8575060005460ff166001145b611f1b5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610849565b6000805460ff191660011790558015611f3e576000805461ff0019166101001790555b82518451148015611f50575081518351145b611fba5760405162461bcd60e51b815260206004820152603560248201527f5265676973747279436f6f7264696e61746f722e696e697469616c697a653a206044820152740d2dce0eae840d8cadccee8d040dad2e6dac2e8c6d605b1b6064820152608401610849565b611fc389612ed3565b611fcd8686613d9f565b611fd6886126da565b611fdf87612743565b609c80546001818101835560008381527faf85b9071dfafeac1409d3f1d19bafc9bc7c37974cde8df0ee6168f0086e539c92830180546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166001600160a01b03199283161790925585548085018755850180547f0000000000000000000000000000000000000000000000000000000000000000841690831617905585549384019095559190920180547f000000000000000000000000000000000000000000000000000000000000000090921691909316179091555b84518110156121305761211e8582815181106120dd576120dd6156f5565b60200260200101518583815181106120f7576120f76156f5565b6020026020010151858481518110612111576121116156f5565b6020026020010151613b88565b8061212881615721565b9150506120bf565b508015612177576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b61218a61267b565b6001600160a01b0381166121ef5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610849565b610cc481612ed3565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561224b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061226f919061579c565b6001600160a01b0316336001600160a01b03161461229f5760405162461bcd60e51b8152600401610849906157b9565b60015419811960015419161461231d5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610849565b600181905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610c09565b600081815260986020526040812054806123715750600092915050565b600083815260986020526040902061238a6001836159b6565b8154811061239a5761239a6156f5565b600091825260209091200154600160401b90046001600160c01b03169392505050565b60606000806123cb84613e8f565b61ffff166001600160401b038111156123e6576123e6614ae8565b6040519080825280601f01601f191660200182016040528015612410576020820181803683370190505b5090506000805b825182108015612428575061010081105b1561247f576001811b93508584161561246f578060f81b838381518110612451576124516156f5565b60200101906001600160f81b031916908160001a9053508160010191505b61247881615721565b9050612417565b5090949350505050565b6001826020015160028111156124a1576124a1614d72565b146124ab57505050565b81516040516333567f7f60e11b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906366acfefe90612500908890869088906004016159cd565b6020604051808303816000875af115801561251f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061254391906159fd565b90506001600160c01b0381161561256f5761256f8561256a836001600160c01b03166123bd565b612a23565b5050505050565b6001600160a01b0381166126045760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610849565b600054604080516001600160a01b03620100009093048316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b33612684611876565b6001600160a01b03161461181f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610849565b609d54604080516001600160a01b03928316815291831660208301527f315457d8a8fe60f04af17c16e2f5a5e1db612b31648e58030360759ef8f3528c910160405180910390a1609d80546001600160a01b0319166001600160a01b0392909216919091179055565b609e54604080516001600160a01b03928316815291831660208301527f8f30ab09f43a6c157d7fce7e0a13c003042c1c95e8a72e7a146a21c0caa24dc9910160405180910390a1609e80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610e8f6127b9613eba565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b60408051808201909152600080825260208201526000808061282a600080516020615efd83398151915286615a3c565b90505b61283681613fe1565b9093509150600080516020615efd833981519152828309831415612870576040805180820190915290815260208101919091529392505050565b600080516020615efd83398151915260018208905061282d565b60008061289684614063565b9050801561293c578260ff1684600186516128b191906159b6565b815181106128c1576128c16156f5565b016020015160f81c1061293c5760405162461bcd60e51b815260206004820152603f60248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206269746d61702065786365656473206d61782076616c7565006064820152608401610849565b9392505050565b609654600090819061295d9060019060ff1681901b6159b6565b905061293c6001600160c01b0384811690831681161490565b60ff8216600081815260976020908152604091829020845181548684018051888701805163ffffffff90951665ffffffffffff199094168417600160201b61ffff938416021767ffff0000000000001916600160301b95831695909502949094179094558551918252518316938101939093525116918101919091527f3ee6fe8d54610244c3e9d3c066ae4aee997884aa28f10616ae821925401318ac9060600160405180910390a25050565b6001600160a01b0382166000908152609960205260409020805460018083015460ff166002811115612a5757612a57614d72565b14612ac45760405162461bcd60e51b81526020600482015260436024820152600080516020615f1d83398151915260448201527f70657261746f723a206f70657261746f72206973206e6f7420726567697374656064820152621c995960ea1b608482015260a401610849565b609654600090612ad890859060ff1661288a565b90506000612ae583612354565b90506001600160c01b038216612b515760405162461bcd60e51b815260206004820152603b6024820152600080516020615f1d83398151915260448201527f70657261746f723a206269746d61702063616e6e6f74206265203000000000006064820152608401610849565b612b5a82612943565b612bc55760405162461bcd60e51b81526020600482015260426024820152600080516020615f1d83398151915260448201527f70657261746f723a20736f6d652071756f72756d7320646f206e6f74206578696064820152611cdd60f21b608482015260a401610849565b612bdc6001600160c01b0383811690831681161490565b612c625760405162461bcd60e51b81526020600482015260596024820152600080516020615f1d83398151915260448201527f70657261746f723a206f70657261746f72206973206e6f74207265676973746560648201527f72656420666f72207370656369666965642071756f72756d7300000000000000608482015260a401610849565b6001600160c01b0382811619821616612c7b84826141f0565b6001600160c01b038116612d4a5760018501805460ff191660021790556040516351b27a6d60e11b81526001600160a01b0388811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063a364f4da90602401600060405180830381600087803b158015612cfb57600080fd5b505af1158015612d0f573d6000803e3d6000fd5b50506040518692506001600160a01b038a1691507f396fdcb180cb0fea26928113fb0fd1c3549863f9cd563e6a184f1d578116c8e490600090a35b60405163f4e24fe560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063f4e24fe590612d98908a908a90600401615a50565b600060405180830381600087803b158015612db257600080fd5b505af1158015612dc6573d6000803e3d6000fd5b505060405163bd29b8cd60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016925063bd29b8cd9150612e189087908a90600401615a74565b600060405180830381600087803b158015612e3257600080fd5b505af1158015612e46573d6000803e3d6000fd5b505060405163bd29b8cd60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016925063bd29b8cd9150612e989087908a90600401615a74565b600060405180830381600087803b158015612eb257600080fd5b505af1158015612ec6573d6000803e3d6000fd5b5050505050505050505050565b606480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516309aa152760e11b81526001600160a01b0383811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906313542a4e90602401602060405180830381865afa158015612f90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fb49190615a8d565b905080610e8f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663bf79ce588484612ff587610f43565b6040518463ffffffff1660e01b815260040161301393929190615aa6565b6020604051808303816000875af1158015613032573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061293c9190615a8d565b6020808201516000908152609a909152604090205460ff16156130fc5760405162461bcd60e51b815260206004820152605260248201527f5265676973747279436f6f7264696e61746f722e5f766572696679436875726e60448201527f417070726f7665725369676e61747572653a20636875726e417070726f766572606482015271081cd85b1d08185b1c9958591e481d5cd95960721b608482015260a401610849565b42816040015110156131915760405162461bcd60e51b815260206004820152605260248201527f5265676973747279436f6f7264696e61746f722e5f766572696679436875726e60448201527f417070726f7665725369676e61747572653a20636875726e417070726f766572606482015271081cda59db985d1d5c9948195e1c1a5c995960721b608482015260a401610849565b602080820180516000908152609a909252604091829020805460ff19166001179055609d54905191830151610930926001600160a01b03909216916131dc9188918891889190611821565b83516143b0565b61320760405180606001604052806060815260200160608152602001606081525090565b600061324f86868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060965460ff16915061288a9050565b9050600061325c88612354565b90506001600160c01b0382166132da5760405162461bcd60e51b815260206004820152603960248201527f5265676973747279436f6f7264696e61746f722e5f72656769737465724f706560448201527f7261746f723a206269746d61702063616e6e6f742062652030000000000000006064820152608401610849565b6132e382612943565b613357576040805162461bcd60e51b81526020600482015260248101919091527f5265676973747279436f6f7264696e61746f722e5f72656769737465724f706560448201527f7261746f723a20736f6d652071756f72756d7320646f206e6f742065786973746064820152608401610849565b8082166001600160c01b03161561340d5760405162461bcd60e51b815260206004820152606860248201527f5265676973747279436f6f7264696e61746f722e5f72656769737465724f706560448201527f7261746f723a206f70657261746f7220616c726561647920726567697374657260648201527f656420666f7220736f6d652071756f72756d73206265696e672072656769737460848201526732b932b2103337b960c11b60a482015260c401610849565b6001600160c01b038181169083161761342689826141f0565b887fec2963ab21c1e50e1e582aa542af2e4bf7bf38e6e1403c27b42e1c5d6e621eaa876040516134569190615789565b60405180910390a260016001600160a01b038b1660009081526099602052604090206001015460ff16600281111561349057613490614d72565b146135a9576040805180820182528a8152600160208083018281526001600160a01b038f166000908152609990925293902082518155925183820180549394939192909160ff1916908360028111156134eb576134eb614d72565b021790555050604051639926ee7d60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169150639926ee7d90613540908d908990600401615b25565b600060405180830381600087803b15801561355a57600080fd5b505af115801561356e573d6000803e3d6000fd5b50506040518b92506001600160a01b038d1691507fe8e68cef1c3a761ed7be7e8463a375f27f7bc335e51824223cacce636ec5c3fe90600090a35b604051631fd93ca960e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633fb27952906135f9908d908c908c90600401615b99565b600060405180830381600087803b15801561361357600080fd5b505af1158015613627573d6000803e3d6000fd5b5050604051632550477760e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692506325504777915061367d908d908d908d908d90600401615bbe565b6000604051808303816000875af115801561369c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526136c49190810190615c4a565b60408087019190915260208601919091525162bff04d60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169062bff04d90613721908c908c908c90600401615cad565b6000604051808303816000875af1158015613740573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526137689190810190615cc7565b84525050509695505050505050565b6020808301516001600160a01b0380821660008181526099909452604090932054919290871614156137f75760405162461bcd60e51b81526020600482015260356024820152600080516020615edd83398151915260448201527439371d1031b0b73737ba1031b43ab9371039b2b63360591b6064820152608401610849565b8760ff16846000015160ff16146138745760405162461bcd60e51b81526020600482015260476024820152600080516020615edd83398151915260448201527f726e3a2071756f72756d4e756d626572206e6f74207468652073616d65206173606482015266081cda59db995960ca1b608482015260a401610849565b604051635401ed2760e01b81526004810182905260ff891660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635401ed2790604401602060405180830381865afa1580156138e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139099190615d60565b9050613915818561456a565b6001600160601b0316866001600160601b0316116139a85760405162461bcd60e51b81526020600482015260566024820152600080516020615edd83398151915260448201527f726e3a20696e636f6d696e67206f70657261746f722068617320696e7375666660648201527534b1b4b2b73a1039ba30b5b2903337b91031b43ab93760511b608482015260a401610849565b6139b2888561458e565b6001600160601b0316816001600160601b0316106121775760405162461bcd60e51b815260206004820152605c6024820152600080516020615edd83398151915260448201527f726e3a2063616e6e6f74206b69636b206f70657261746f722077697468206d6f60648201527f7265207468616e206b69636b424950734f66546f74616c5374616b6500000000608482015260a401610849565b600081815260986020526040812054815b81811015613ade576001613a7182846159b6565b613a7b91906159b6565b92508463ffffffff16609860008681526020019081526020016000208463ffffffff1681548110613aae57613aae6156f5565b60009182526020909120015463ffffffff1611613acc575050610e8f565b80613ad681615721565b915050613a5d565b5060405162461bcd60e51b815260206004820152606c60248201527f5265676973747279436f6f7264696e61746f722e67657451756f72756d42697460448201527f6d6170496e6465784174426c6f636b4e756d6265723a206e6f206269746d617060648201527f2075706461746520666f756e6420666f72206f70657261746f7249642061742060848201526b313637b1b590373ab6b132b960a11b60a482015260c401610849565b60965460ff1660c08110613bfc5760405162461bcd60e51b815260206004820152603560248201527f5265676973747279436f6f7264696e61746f722e63726561746551756f72756d6044820152740e881b585e081c5d5bdc9d5b5cc81c995858da1959605a1b6064820152608401610849565b613c07816001615d7d565b6096805460ff191660ff9290921691909117905580613c268186612976565b60405160016296b58960e01b031981526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063ff694a7790613c7990849088908890600401615da2565b600060405180830381600087803b158015613c9357600080fd5b505af1158015613ca7573d6000803e3d6000fd5b505060405163136ca0f960e11b815260ff841660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031692506326d941f29150602401600060405180830381600087803b158015613d0f57600080fd5b505af1158015613d23573d6000803e3d6000fd5b505060405163136ca0f960e11b815260ff841660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031692506326d941f29150602401600060405180830381600087803b158015613d8b57600080fd5b505af1158015612177573d6000803e3d6000fd5b6000546201000090046001600160a01b0316158015613dc657506001600160a01b03821615155b613e485760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610849565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2613e8b82612576565b5050565b6000805b8215610e8f57613ea46001846159b6565b9092169180613eb281615e1b565b915050613e93565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015613f1357507f000000000000000000000000000000000000000000000000000000000000000046145b15613f3d57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b60008080600080516020615efd8339815191526003600080516020615efd83398151915286600080516020615efd833981519152888909090890506000614057827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f52600080516020615efd8339815191526145a8565b91959194509092505050565b6000610100825111156140ec5760405162461bcd60e51b8152602060048201526044602482018190527f4269746d61705574696c732e6f72646572656442797465734172726179546f42908201527f69746d61703a206f7264657265644279746573417272617920697320746f6f206064820152636c6f6e6760e01b608482015260a401610849565b81516140fa57506000919050565b60008083600081518110614110576141106156f5565b0160200151600160f89190911c81901b92505b84518110156141e75784818151811061413e5761413e6156f5565b0160200151600160f89190911c1b91508282116141d35760405162461bcd60e51b815260206004820152604760248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206f72646572656442797465734172726179206973206e6f74206064820152661bdc99195c995960ca1b608482015260a401610849565b918117916141e081615721565b9050614123565b50909392505050565b60008281526098602052604090205480614295576000838152609860209081526040808320815160608101835263ffffffff43811682528185018681526001600160c01b03808a16958401958652845460018101865594885295909620915191909201805495519351909416600160401b026001600160401b03938316600160201b0267ffffffffffffffff1990961691909216179390931716919091179055505050565b60008381526098602052604081206142ae6001846159b6565b815481106142be576142be6156f5565b600091825260209091200180549091504363ffffffff908116911614156143025780546001600160401b0316600160401b6001600160c01b03851602178155610930565b805463ffffffff438116600160201b81810267ffffffff0000000019909416939093178455600087815260986020908152604080832081516060810183529485528483018481526001600160c01b03808c1693870193845282546001810184559286529390942094519401805493519151909216600160401b026001600160401b0391861690960267ffffffffffffffff199093169390941692909217179190911691909117905550505050565b6001600160a01b0383163b156144ca57604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e906143f09086908690600401615a74565b602060405180830381865afa15801561440d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144319190615e3d565b6001600160e01b0319161461171e5760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a401610849565b826001600160a01b03166144de8383614657565b6001600160a01b03161461171e5760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a401610849565b6020810151600090612710906145849061ffff1685615e67565b61293c9190615e96565b6040810151600090612710906145849061ffff1685615e67565b6000806145b36149c4565b6145bb6149e2565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa92508280156145fc576145fe565bfe5b508261464c5760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c7572650000000000006044820152606401610849565b505195945050505050565b60008060006146668585614673565b91509150611dfc816146e3565b6000808251604114156146aa5760208301516040840151606085015160001a61469e8782858561489e565b945094505050506146dc565b8251604014156146d457602083015160408401516146c986838361498b565b9350935050506146dc565b506000905060025b9250929050565b60008160048111156146f7576146f7614d72565b14156147005750565b600181600481111561471457614714614d72565b14156147625760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610849565b600281600481111561477657614776614d72565b14156147c45760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610849565b60038160048111156147d8576147d8614d72565b14156148315760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610849565b600481600481111561484557614845614d72565b1415610cc45760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610849565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156148d55750600090506003614982565b8460ff16601b141580156148ed57508460ff16601c14155b156148fe5750600090506004614982565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015614952573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661497b57600060019250925050614982565b9150600090505b94509492505050565b6000806001600160ff1b038316816149a860ff86901c601b6158d3565b90506149b68782888561489e565b935093505050935093915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60008083601f840112614a1257600080fd5b5081356001600160401b03811115614a2957600080fd5b6020830191508360208260051b85010111156146dc57600080fd5b60008060208385031215614a5757600080fd5b82356001600160401b03811115614a6d57600080fd5b614a7985828601614a00565b90969095509350505050565b600060208284031215614a9757600080fd5b5035919050565b63ffffffff81168114610cc457600080fd5b600080600060608486031215614ac557600080fd5b833592506020840135614ad781614a9e565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715614b2057614b20614ae8565b60405290565b604080519081016001600160401b0381118282101715614b2057614b20614ae8565b604051601f8201601f191681016001600160401b0381118282101715614b7057614b70614ae8565b604052919050565b60006001600160401b03831115614b9157614b91614ae8565b614ba4601f8401601f1916602001614b48565b9050828152838383011115614bb857600080fd5b828260208301376000602084830101529392505050565b600060208284031215614be157600080fd5b81356001600160401b03811115614bf757600080fd5b8201601f81018413614c0857600080fd5b614c1784823560208401614b78565b949350505050565b6001600160a01b0381168114610cc457600080fd5b8035614c3f81614c1f565b919050565b600060208284031215614c5657600080fd5b813561293c81614c1f565b60008060408385031215614c7457600080fd5b50508035926020909101359150565b803560ff81168114614c3f57600080fd5b600060208284031215614ca657600080fd5b61293c82614c83565b815181526020808301519082015260408101610e8f565b60008083601f840112614cd857600080fd5b5081356001600160401b03811115614cef57600080fd5b6020830191508360208285010111156146dc57600080fd5b60008060008060408587031215614d1d57600080fd5b84356001600160401b0380821115614d3457600080fd5b614d4088838901614a00565b90965094506020870135915080821115614d5957600080fd5b50614d6687828801614cc6565b95989497509550505050565b634e487b7160e01b600052602160045260246000fd5b60038110614da657634e487b7160e01b600052602160045260246000fd5b9052565b815181526020808301516040830191614dc590840182614d88565b5092915050565b803561ffff81168114614c3f57600080fd5b600060608284031215614df057600080fd5b614df8614afe565b90508135614e0581614a9e565b8152614e1360208301614dcc565b6020820152614e2460408301614dcc565b604082015292915050565b60008060808385031215614e4257600080fd5b614e4b83614c83565b9150614e5a8460208501614dde565b90509250929050565b600080600060408486031215614e7857600080fd5b8335614e8381614c1f565b925060208401356001600160401b03811115614e9e57600080fd5b614eaa86828701614cc6565b9497909650939450505050565b60006001600160401b03821115614ed057614ed0614ae8565b5060051b60200190565b600060408284031215614eec57600080fd5b614ef4614b26565b9050614eff82614c83565b81526020820135614f0f81614c1f565b602082015292915050565b600080600080600060a08688031215614f3257600080fd5b8535614f3d81614c1f565b945060208681013594506040808801356001600160401b03811115614f6157600080fd5b8801601f81018a13614f7257600080fd5b8035614f85614f8082614eb7565b614b48565b81815260069190911b8201840190848101908c831115614fa457600080fd5b928501925b82841015614fca57614fbb8d85614eda565b82529284019290850190614fa9565b999c989b5098996060810135995060800135979650505050505050565b60006101008284031215614ffa57600080fd5b50919050565b60008083601f84011261501257600080fd5b5081356001600160401b0381111561502957600080fd5b6020830191508360208260061b85010111156146dc57600080fd5b60006060828403121561505657600080fd5b61505e614afe565b905081356001600160401b0381111561507657600080fd5b8201601f8101841361508757600080fd5b61509684823560208401614b78565b825250602082013560208201526040820135604082015292915050565b60008060008060008060008060006101a08a8c0312156150d257600080fd5b89356001600160401b03808211156150e957600080fd5b6150f58d838e01614cc6565b909b50995060208c013591508082111561510e57600080fd5b61511a8d838e01614cc6565b909950975087915061512f8d60408e01614fe7565b96506101408c013591508082111561514657600080fd5b6151528d838e01615000565b90965094506101608c013591508082111561516c57600080fd5b6151788d838e01615044565b93506101808c013591508082111561518f57600080fd5b5061519c8c828d01615044565b9150509295985092959850929598565b60008060008060008061016087890312156151c657600080fd5b86356001600160401b03808211156151dd57600080fd5b6151e98a838b01614cc6565b9098509650602089013591508082111561520257600080fd5b61520e8a838b01614cc6565b90965094508491506152238a60408b01614fe7565b935061014089013591508082111561523a57600080fd5b5061524789828a01615044565b9150509295509295509295565b6000806040838503121561526757600080fd5b823561527281614a9e565b91506020838101356001600160401b0381111561528e57600080fd5b8401601f8101861361529f57600080fd5b80356152ad614f8082614eb7565b81815260059190911b820183019083810190888311156152cc57600080fd5b928401925b828410156152ea578335825292840192908401906152d1565b80955050505050509250929050565b6020808252825182820181905260009190848201906040850190845b8181101561533757835163ffffffff1683529284019291840191600101615315565b50909695505050505050565b6000806020838503121561535657600080fd5b82356001600160401b0381111561536c57600080fd5b614a7985828601614cc6565b6001600160601b0381168114610cc457600080fd5b600082601f83011261539e57600080fd5b813560206153ae614f8083614eb7565b82815260069290921b840181019181810190868411156153cd57600080fd5b8286015b8481101561541e57604081890312156153ea5760008081fd5b6153f2614b26565b81356153fd81614c1f565b81528185013561540c81615378565b818601528352918301916040016153d1565b509695505050505050565b600080600060a0848603121561543e57600080fd5b6154488585614dde565b9250606084013561545881615378565b915060808401356001600160401b0381111561547357600080fd5b61547f8682870161538d565b9150509250925092565b600082601f83011261549a57600080fd5b813560206154aa614f8083614eb7565b828152606092830285018201928282019190878511156154c957600080fd5b8387015b858110156154ec576154df8982614dde565b84529284019281016154cd565b5090979650505050505050565b600082601f83011261550a57600080fd5b8135602061551a614f8083614eb7565b82815260059290921b8401810191818101908684111561553957600080fd5b8286015b8481101561541e57803561555081615378565b835291830191830161553d565b600082601f83011261556e57600080fd5b8135602061557e614f8083614eb7565b82815260059290921b8401810191818101908684111561559d57600080fd5b8286015b8481101561541e5780356001600160401b038111156155c05760008081fd5b6155ce8986838b010161538d565b8452509183019183016155a1565b600080600080600080600080610100898b0312156155f957600080fd5b61560289614c34565b975061561060208a01614c34565b965061561e60408a01614c34565b955061562c60608a01614c34565b94506080890135935060a08901356001600160401b038082111561564f57600080fd5b61565b8c838d01615489565b945060c08b013591508082111561567157600080fd5b61567d8c838d016154f9565b935060e08b013591508082111561569357600080fd5b506156a08b828c0161555d565b9150509295985092959890939650565b60208101610e8f8284614d88565b60208082526019908201527f5061757361626c653a20696e6465782069732070617573656400000000000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156157355761573561570b565b5060010190565b6000815180845260005b8181101561576257602081850181015186830182015201615746565b81811115615774576000602083870101525b50601f01601f19169290920160200192915050565b60208152600061293c602083018461573c565b6000602082840312156157ae57600080fd5b815161293c81614c1f565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60006020828403121561581557600080fd5b8151801515811461293c57600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b6000808335601e1984360301811261588457600080fd5b8301803591506001600160401b0382111561589e57600080fd5b6020019150600581901b36038213156146dc57600080fd5b6000602082840312156158c857600080fd5b815161293c81614a9e565b600082198211156158e6576158e661570b565b500190565b600080858511156158fb57600080fd5b8386111561590857600080fd5b5050820193919092039150565b600060c08201888352602060018060a01b03808a16828601526040898187015260c0606087015283895180865260e088019150848b01955060005b8181101561597a578651805160ff1684528601518516868401529585019591830191600101615950565b505060808701989098525050505060a09091019190915250949350505050565b6000604082840312156159ac57600080fd5b61293c8383614eda565b6000828210156159c8576159c861570b565b500390565b60018060a01b03841681528260208201526060604082015260006159f4606083018461573c565b95945050505050565b600060208284031215615a0f57600080fd5b81516001600160c01b038116811461293c57600080fd5b634e487b7160e01b600052601260045260246000fd5b600082615a4b57615a4b615a26565b500690565b6001600160a01b0383168152604060208201819052600090614c179083018461573c565b828152604060208201526000614c17604083018461573c565b600060208284031215615a9f57600080fd5b5051919050565b6001600160a01b03841681526101608101615ace602083018580358252602090810135910152565b615ae8606083016040860180358252602090810135910152565b60406080850160a084013760e0820160008152604060c0860182375060006101208301908152835190526020909201516101409091015292915050565b60018060a01b0383168152604060208201526000825160606040840152615b4f60a084018261573c565b90506020840151606084015260408401516080840152809150509392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b03841681526040602082018190526000906159f49083018486615b70565b60018060a01b0385168152836020820152606060408201526000611861606083018486615b70565b600082601f830112615bf757600080fd5b81516020615c07614f8083614eb7565b82815260059290921b84018101918181019086841115615c2657600080fd5b8286015b8481101561541e578051615c3d81615378565b8352918301918301615c2a565b60008060408385031215615c5d57600080fd5b82516001600160401b0380821115615c7457600080fd5b615c8086838701615be6565b93506020850151915080821115615c9657600080fd5b50615ca385828601615be6565b9150509250929050565b8381526040602082015260006159f4604083018486615b70565b60006020808385031215615cda57600080fd5b82516001600160401b03811115615cf057600080fd5b8301601f81018513615d0157600080fd5b8051615d0f614f8082614eb7565b81815260059190911b82018301908381019087831115615d2e57600080fd5b928401925b82841015615d55578351615d4681614a9e565b82529284019290840190615d33565b979650505050505050565b600060208284031215615d7257600080fd5b815161293c81615378565b600060ff821660ff84168060ff03821115615d9a57615d9a61570b565b019392505050565b60006060820160ff8616835260206001600160601b03808716828601526040606081870152838751808652608088019150848901955060005b81811015615e0b57865180516001600160a01b031684528601518516868401529585019591830191600101615ddb565b50909a9950505050505050505050565b600061ffff80831681811415615e3357615e3361570b565b6001019392505050565b600060208284031215615e4f57600080fd5b81516001600160e01b03198116811461293c57600080fd5b60006001600160601b0380831681851681830481118215151615615e8d57615e8d61570b565b02949350505050565b60006001600160601b0380841680615eb057615eb0615a26565b9216919091049291505056fe5265676973747279436f6f7264696e61746f722e7570646174654f70657261745265676973747279436f6f7264696e61746f722e5f76616c696461746543687530644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd475265676973747279436f6f7264696e61746f722e5f646572656769737465724fa26469706673582212201a9970991caa24ec86a596d6e2376e377d574b49ef3724de2463a6705342dc9c64736f6c634300080c0033", +} + +// ContractRegistryCoordinatorABI is the input ABI used to generate the binding from. +// Deprecated: Use ContractRegistryCoordinatorMetaData.ABI instead. +var ContractRegistryCoordinatorABI = ContractRegistryCoordinatorMetaData.ABI + +// ContractRegistryCoordinatorBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use ContractRegistryCoordinatorMetaData.Bin instead. +var ContractRegistryCoordinatorBin = ContractRegistryCoordinatorMetaData.Bin + +// DeployContractRegistryCoordinator deploys a new Ethereum contract, binding an instance of ContractRegistryCoordinator to it. +func DeployContractRegistryCoordinator(auth *bind.TransactOpts, backend bind.ContractBackend, _serviceManager common.Address, _stakeRegistry common.Address, _blsApkRegistry common.Address, _indexRegistry common.Address) (common.Address, *types.Transaction, *ContractRegistryCoordinator, error) { + parsed, err := ContractRegistryCoordinatorMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ContractRegistryCoordinatorBin), backend, _serviceManager, _stakeRegistry, _blsApkRegistry, _indexRegistry) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &ContractRegistryCoordinator{ContractRegistryCoordinatorCaller: ContractRegistryCoordinatorCaller{contract: contract}, ContractRegistryCoordinatorTransactor: ContractRegistryCoordinatorTransactor{contract: contract}, ContractRegistryCoordinatorFilterer: ContractRegistryCoordinatorFilterer{contract: contract}}, nil +} + +// ContractRegistryCoordinator is an auto generated Go binding around an Ethereum contract. +type ContractRegistryCoordinator struct { + ContractRegistryCoordinatorCaller // Read-only binding to the contract + ContractRegistryCoordinatorTransactor // Write-only binding to the contract + ContractRegistryCoordinatorFilterer // Log filterer for contract events +} + +// ContractRegistryCoordinatorCaller is an auto generated read-only Go binding around an Ethereum contract. +type ContractRegistryCoordinatorCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ContractRegistryCoordinatorTransactor is an auto generated write-only Go binding around an Ethereum contract. +type ContractRegistryCoordinatorTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ContractRegistryCoordinatorFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type ContractRegistryCoordinatorFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ContractRegistryCoordinatorSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type ContractRegistryCoordinatorSession struct { + Contract *ContractRegistryCoordinator // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ContractRegistryCoordinatorCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type ContractRegistryCoordinatorCallerSession struct { + Contract *ContractRegistryCoordinatorCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// ContractRegistryCoordinatorTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type ContractRegistryCoordinatorTransactorSession struct { + Contract *ContractRegistryCoordinatorTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ContractRegistryCoordinatorRaw is an auto generated low-level Go binding around an Ethereum contract. +type ContractRegistryCoordinatorRaw struct { + Contract *ContractRegistryCoordinator // Generic contract binding to access the raw methods on +} + +// ContractRegistryCoordinatorCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type ContractRegistryCoordinatorCallerRaw struct { + Contract *ContractRegistryCoordinatorCaller // Generic read-only contract binding to access the raw methods on +} + +// ContractRegistryCoordinatorTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type ContractRegistryCoordinatorTransactorRaw struct { + Contract *ContractRegistryCoordinatorTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewContractRegistryCoordinator creates a new instance of ContractRegistryCoordinator, bound to a specific deployed contract. +func NewContractRegistryCoordinator(address common.Address, backend bind.ContractBackend) (*ContractRegistryCoordinator, error) { + contract, err := bindContractRegistryCoordinator(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ContractRegistryCoordinator{ContractRegistryCoordinatorCaller: ContractRegistryCoordinatorCaller{contract: contract}, ContractRegistryCoordinatorTransactor: ContractRegistryCoordinatorTransactor{contract: contract}, ContractRegistryCoordinatorFilterer: ContractRegistryCoordinatorFilterer{contract: contract}}, nil +} + +// NewContractRegistryCoordinatorCaller creates a new read-only instance of ContractRegistryCoordinator, bound to a specific deployed contract. +func NewContractRegistryCoordinatorCaller(address common.Address, caller bind.ContractCaller) (*ContractRegistryCoordinatorCaller, error) { + contract, err := bindContractRegistryCoordinator(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ContractRegistryCoordinatorCaller{contract: contract}, nil +} + +// NewContractRegistryCoordinatorTransactor creates a new write-only instance of ContractRegistryCoordinator, bound to a specific deployed contract. +func NewContractRegistryCoordinatorTransactor(address common.Address, transactor bind.ContractTransactor) (*ContractRegistryCoordinatorTransactor, error) { + contract, err := bindContractRegistryCoordinator(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ContractRegistryCoordinatorTransactor{contract: contract}, nil +} + +// NewContractRegistryCoordinatorFilterer creates a new log filterer instance of ContractRegistryCoordinator, bound to a specific deployed contract. +func NewContractRegistryCoordinatorFilterer(address common.Address, filterer bind.ContractFilterer) (*ContractRegistryCoordinatorFilterer, error) { + contract, err := bindContractRegistryCoordinator(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ContractRegistryCoordinatorFilterer{contract: contract}, nil +} + +// bindContractRegistryCoordinator binds a generic wrapper to an already deployed contract. +func bindContractRegistryCoordinator(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ContractRegistryCoordinatorMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ContractRegistryCoordinator.Contract.ContractRegistryCoordinatorCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.ContractRegistryCoordinatorTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.ContractRegistryCoordinatorTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ContractRegistryCoordinator.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.contract.Transact(opts, method, params...) +} + +// OPERATORCHURNAPPROVALTYPEHASH is a free data retrieval call binding the contract method 0xca0de882. +// +// Solidity: function OPERATOR_CHURN_APPROVAL_TYPEHASH() view returns(bytes32) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCaller) OPERATORCHURNAPPROVALTYPEHASH(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ContractRegistryCoordinator.contract.Call(opts, &out, "OPERATOR_CHURN_APPROVAL_TYPEHASH") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// OPERATORCHURNAPPROVALTYPEHASH is a free data retrieval call binding the contract method 0xca0de882. +// +// Solidity: function OPERATOR_CHURN_APPROVAL_TYPEHASH() view returns(bytes32) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) OPERATORCHURNAPPROVALTYPEHASH() ([32]byte, error) { + return _ContractRegistryCoordinator.Contract.OPERATORCHURNAPPROVALTYPEHASH(&_ContractRegistryCoordinator.CallOpts) +} + +// OPERATORCHURNAPPROVALTYPEHASH is a free data retrieval call binding the contract method 0xca0de882. +// +// Solidity: function OPERATOR_CHURN_APPROVAL_TYPEHASH() view returns(bytes32) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCallerSession) OPERATORCHURNAPPROVALTYPEHASH() ([32]byte, error) { + return _ContractRegistryCoordinator.Contract.OPERATORCHURNAPPROVALTYPEHASH(&_ContractRegistryCoordinator.CallOpts) +} + +// PUBKEYREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0x9feab859. +// +// Solidity: function PUBKEY_REGISTRATION_TYPEHASH() view returns(bytes32) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCaller) PUBKEYREGISTRATIONTYPEHASH(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ContractRegistryCoordinator.contract.Call(opts, &out, "PUBKEY_REGISTRATION_TYPEHASH") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// PUBKEYREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0x9feab859. +// +// Solidity: function PUBKEY_REGISTRATION_TYPEHASH() view returns(bytes32) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) PUBKEYREGISTRATIONTYPEHASH() ([32]byte, error) { + return _ContractRegistryCoordinator.Contract.PUBKEYREGISTRATIONTYPEHASH(&_ContractRegistryCoordinator.CallOpts) +} + +// PUBKEYREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0x9feab859. +// +// Solidity: function PUBKEY_REGISTRATION_TYPEHASH() view returns(bytes32) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCallerSession) PUBKEYREGISTRATIONTYPEHASH() ([32]byte, error) { + return _ContractRegistryCoordinator.Contract.PUBKEYREGISTRATIONTYPEHASH(&_ContractRegistryCoordinator.CallOpts) +} + +// BlsApkRegistry is a free data retrieval call binding the contract method 0x5df45946. +// +// Solidity: function blsApkRegistry() view returns(address) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCaller) BlsApkRegistry(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ContractRegistryCoordinator.contract.Call(opts, &out, "blsApkRegistry") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// BlsApkRegistry is a free data retrieval call binding the contract method 0x5df45946. +// +// Solidity: function blsApkRegistry() view returns(address) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) BlsApkRegistry() (common.Address, error) { + return _ContractRegistryCoordinator.Contract.BlsApkRegistry(&_ContractRegistryCoordinator.CallOpts) +} + +// BlsApkRegistry is a free data retrieval call binding the contract method 0x5df45946. +// +// Solidity: function blsApkRegistry() view returns(address) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCallerSession) BlsApkRegistry() (common.Address, error) { + return _ContractRegistryCoordinator.Contract.BlsApkRegistry(&_ContractRegistryCoordinator.CallOpts) +} + +// CalculateOperatorChurnApprovalDigestHash is a free data retrieval call binding the contract method 0x84ca5213. +// +// Solidity: function calculateOperatorChurnApprovalDigestHash(address registeringOperator, bytes32 registeringOperatorId, (uint8,address)[] operatorKickParams, bytes32 salt, uint256 expiry) view returns(bytes32) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCaller) CalculateOperatorChurnApprovalDigestHash(opts *bind.CallOpts, registeringOperator common.Address, registeringOperatorId [32]byte, operatorKickParams []IRegistryCoordinatorOperatorKickParam, salt [32]byte, expiry *big.Int) ([32]byte, error) { + var out []interface{} + err := _ContractRegistryCoordinator.contract.Call(opts, &out, "calculateOperatorChurnApprovalDigestHash", registeringOperator, registeringOperatorId, operatorKickParams, salt, expiry) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// CalculateOperatorChurnApprovalDigestHash is a free data retrieval call binding the contract method 0x84ca5213. +// +// Solidity: function calculateOperatorChurnApprovalDigestHash(address registeringOperator, bytes32 registeringOperatorId, (uint8,address)[] operatorKickParams, bytes32 salt, uint256 expiry) view returns(bytes32) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) CalculateOperatorChurnApprovalDigestHash(registeringOperator common.Address, registeringOperatorId [32]byte, operatorKickParams []IRegistryCoordinatorOperatorKickParam, salt [32]byte, expiry *big.Int) ([32]byte, error) { + return _ContractRegistryCoordinator.Contract.CalculateOperatorChurnApprovalDigestHash(&_ContractRegistryCoordinator.CallOpts, registeringOperator, registeringOperatorId, operatorKickParams, salt, expiry) +} + +// CalculateOperatorChurnApprovalDigestHash is a free data retrieval call binding the contract method 0x84ca5213. +// +// Solidity: function calculateOperatorChurnApprovalDigestHash(address registeringOperator, bytes32 registeringOperatorId, (uint8,address)[] operatorKickParams, bytes32 salt, uint256 expiry) view returns(bytes32) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCallerSession) CalculateOperatorChurnApprovalDigestHash(registeringOperator common.Address, registeringOperatorId [32]byte, operatorKickParams []IRegistryCoordinatorOperatorKickParam, salt [32]byte, expiry *big.Int) ([32]byte, error) { + return _ContractRegistryCoordinator.Contract.CalculateOperatorChurnApprovalDigestHash(&_ContractRegistryCoordinator.CallOpts, registeringOperator, registeringOperatorId, operatorKickParams, salt, expiry) +} + +// ChurnApprover is a free data retrieval call binding the contract method 0x054310e6. +// +// Solidity: function churnApprover() view returns(address) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCaller) ChurnApprover(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ContractRegistryCoordinator.contract.Call(opts, &out, "churnApprover") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// ChurnApprover is a free data retrieval call binding the contract method 0x054310e6. +// +// Solidity: function churnApprover() view returns(address) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) ChurnApprover() (common.Address, error) { + return _ContractRegistryCoordinator.Contract.ChurnApprover(&_ContractRegistryCoordinator.CallOpts) +} + +// ChurnApprover is a free data retrieval call binding the contract method 0x054310e6. +// +// Solidity: function churnApprover() view returns(address) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCallerSession) ChurnApprover() (common.Address, error) { + return _ContractRegistryCoordinator.Contract.ChurnApprover(&_ContractRegistryCoordinator.CallOpts) +} + +// Ejector is a free data retrieval call binding the contract method 0x28f61b31. +// +// Solidity: function ejector() view returns(address) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCaller) Ejector(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ContractRegistryCoordinator.contract.Call(opts, &out, "ejector") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Ejector is a free data retrieval call binding the contract method 0x28f61b31. +// +// Solidity: function ejector() view returns(address) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) Ejector() (common.Address, error) { + return _ContractRegistryCoordinator.Contract.Ejector(&_ContractRegistryCoordinator.CallOpts) +} + +// Ejector is a free data retrieval call binding the contract method 0x28f61b31. +// +// Solidity: function ejector() view returns(address) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCallerSession) Ejector() (common.Address, error) { + return _ContractRegistryCoordinator.Contract.Ejector(&_ContractRegistryCoordinator.CallOpts) +} + +// GetCurrentQuorumBitmap is a free data retrieval call binding the contract method 0x871ef049. +// +// Solidity: function getCurrentQuorumBitmap(bytes32 operatorId) view returns(uint192) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCaller) GetCurrentQuorumBitmap(opts *bind.CallOpts, operatorId [32]byte) (*big.Int, error) { + var out []interface{} + err := _ContractRegistryCoordinator.contract.Call(opts, &out, "getCurrentQuorumBitmap", operatorId) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetCurrentQuorumBitmap is a free data retrieval call binding the contract method 0x871ef049. +// +// Solidity: function getCurrentQuorumBitmap(bytes32 operatorId) view returns(uint192) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) GetCurrentQuorumBitmap(operatorId [32]byte) (*big.Int, error) { + return _ContractRegistryCoordinator.Contract.GetCurrentQuorumBitmap(&_ContractRegistryCoordinator.CallOpts, operatorId) +} + +// GetCurrentQuorumBitmap is a free data retrieval call binding the contract method 0x871ef049. +// +// Solidity: function getCurrentQuorumBitmap(bytes32 operatorId) view returns(uint192) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCallerSession) GetCurrentQuorumBitmap(operatorId [32]byte) (*big.Int, error) { + return _ContractRegistryCoordinator.Contract.GetCurrentQuorumBitmap(&_ContractRegistryCoordinator.CallOpts, operatorId) +} + +// GetOperator is a free data retrieval call binding the contract method 0x5865c60c. +// +// Solidity: function getOperator(address operator) view returns((bytes32,uint8)) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCaller) GetOperator(opts *bind.CallOpts, operator common.Address) (IRegistryCoordinatorOperatorInfo, error) { + var out []interface{} + err := _ContractRegistryCoordinator.contract.Call(opts, &out, "getOperator", operator) + + if err != nil { + return *new(IRegistryCoordinatorOperatorInfo), err + } + + out0 := *abi.ConvertType(out[0], new(IRegistryCoordinatorOperatorInfo)).(*IRegistryCoordinatorOperatorInfo) + + return out0, err + +} + +// GetOperator is a free data retrieval call binding the contract method 0x5865c60c. +// +// Solidity: function getOperator(address operator) view returns((bytes32,uint8)) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) GetOperator(operator common.Address) (IRegistryCoordinatorOperatorInfo, error) { + return _ContractRegistryCoordinator.Contract.GetOperator(&_ContractRegistryCoordinator.CallOpts, operator) +} + +// GetOperator is a free data retrieval call binding the contract method 0x5865c60c. +// +// Solidity: function getOperator(address operator) view returns((bytes32,uint8)) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCallerSession) GetOperator(operator common.Address) (IRegistryCoordinatorOperatorInfo, error) { + return _ContractRegistryCoordinator.Contract.GetOperator(&_ContractRegistryCoordinator.CallOpts, operator) +} + +// GetOperatorFromId is a free data retrieval call binding the contract method 0x296bb064. +// +// Solidity: function getOperatorFromId(bytes32 operatorId) view returns(address) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCaller) GetOperatorFromId(opts *bind.CallOpts, operatorId [32]byte) (common.Address, error) { + var out []interface{} + err := _ContractRegistryCoordinator.contract.Call(opts, &out, "getOperatorFromId", operatorId) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetOperatorFromId is a free data retrieval call binding the contract method 0x296bb064. +// +// Solidity: function getOperatorFromId(bytes32 operatorId) view returns(address) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) GetOperatorFromId(operatorId [32]byte) (common.Address, error) { + return _ContractRegistryCoordinator.Contract.GetOperatorFromId(&_ContractRegistryCoordinator.CallOpts, operatorId) +} + +// GetOperatorFromId is a free data retrieval call binding the contract method 0x296bb064. +// +// Solidity: function getOperatorFromId(bytes32 operatorId) view returns(address) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCallerSession) GetOperatorFromId(operatorId [32]byte) (common.Address, error) { + return _ContractRegistryCoordinator.Contract.GetOperatorFromId(&_ContractRegistryCoordinator.CallOpts, operatorId) +} + +// GetOperatorId is a free data retrieval call binding the contract method 0x13542a4e. +// +// Solidity: function getOperatorId(address operator) view returns(bytes32) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCaller) GetOperatorId(opts *bind.CallOpts, operator common.Address) ([32]byte, error) { + var out []interface{} + err := _ContractRegistryCoordinator.contract.Call(opts, &out, "getOperatorId", operator) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// GetOperatorId is a free data retrieval call binding the contract method 0x13542a4e. +// +// Solidity: function getOperatorId(address operator) view returns(bytes32) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) GetOperatorId(operator common.Address) ([32]byte, error) { + return _ContractRegistryCoordinator.Contract.GetOperatorId(&_ContractRegistryCoordinator.CallOpts, operator) +} + +// GetOperatorId is a free data retrieval call binding the contract method 0x13542a4e. +// +// Solidity: function getOperatorId(address operator) view returns(bytes32) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCallerSession) GetOperatorId(operator common.Address) ([32]byte, error) { + return _ContractRegistryCoordinator.Contract.GetOperatorId(&_ContractRegistryCoordinator.CallOpts, operator) +} + +// GetOperatorSetParams is a free data retrieval call binding the contract method 0xe65797ad. +// +// Solidity: function getOperatorSetParams(uint8 quorumNumber) view returns((uint32,uint16,uint16)) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCaller) GetOperatorSetParams(opts *bind.CallOpts, quorumNumber uint8) (IRegistryCoordinatorOperatorSetParam, error) { + var out []interface{} + err := _ContractRegistryCoordinator.contract.Call(opts, &out, "getOperatorSetParams", quorumNumber) + + if err != nil { + return *new(IRegistryCoordinatorOperatorSetParam), err + } + + out0 := *abi.ConvertType(out[0], new(IRegistryCoordinatorOperatorSetParam)).(*IRegistryCoordinatorOperatorSetParam) + + return out0, err + +} + +// GetOperatorSetParams is a free data retrieval call binding the contract method 0xe65797ad. +// +// Solidity: function getOperatorSetParams(uint8 quorumNumber) view returns((uint32,uint16,uint16)) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) GetOperatorSetParams(quorumNumber uint8) (IRegistryCoordinatorOperatorSetParam, error) { + return _ContractRegistryCoordinator.Contract.GetOperatorSetParams(&_ContractRegistryCoordinator.CallOpts, quorumNumber) +} + +// GetOperatorSetParams is a free data retrieval call binding the contract method 0xe65797ad. +// +// Solidity: function getOperatorSetParams(uint8 quorumNumber) view returns((uint32,uint16,uint16)) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCallerSession) GetOperatorSetParams(quorumNumber uint8) (IRegistryCoordinatorOperatorSetParam, error) { + return _ContractRegistryCoordinator.Contract.GetOperatorSetParams(&_ContractRegistryCoordinator.CallOpts, quorumNumber) +} + +// GetOperatorStatus is a free data retrieval call binding the contract method 0xfd39105a. +// +// Solidity: function getOperatorStatus(address operator) view returns(uint8) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCaller) GetOperatorStatus(opts *bind.CallOpts, operator common.Address) (uint8, error) { + var out []interface{} + err := _ContractRegistryCoordinator.contract.Call(opts, &out, "getOperatorStatus", operator) + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +// GetOperatorStatus is a free data retrieval call binding the contract method 0xfd39105a. +// +// Solidity: function getOperatorStatus(address operator) view returns(uint8) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) GetOperatorStatus(operator common.Address) (uint8, error) { + return _ContractRegistryCoordinator.Contract.GetOperatorStatus(&_ContractRegistryCoordinator.CallOpts, operator) +} + +// GetOperatorStatus is a free data retrieval call binding the contract method 0xfd39105a. +// +// Solidity: function getOperatorStatus(address operator) view returns(uint8) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCallerSession) GetOperatorStatus(operator common.Address) (uint8, error) { + return _ContractRegistryCoordinator.Contract.GetOperatorStatus(&_ContractRegistryCoordinator.CallOpts, operator) +} + +// GetQuorumBitmapAtBlockNumberByIndex is a free data retrieval call binding the contract method 0x04ec6351. +// +// Solidity: function getQuorumBitmapAtBlockNumberByIndex(bytes32 operatorId, uint32 blockNumber, uint256 index) view returns(uint192) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCaller) GetQuorumBitmapAtBlockNumberByIndex(opts *bind.CallOpts, operatorId [32]byte, blockNumber uint32, index *big.Int) (*big.Int, error) { + var out []interface{} + err := _ContractRegistryCoordinator.contract.Call(opts, &out, "getQuorumBitmapAtBlockNumberByIndex", operatorId, blockNumber, index) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetQuorumBitmapAtBlockNumberByIndex is a free data retrieval call binding the contract method 0x04ec6351. +// +// Solidity: function getQuorumBitmapAtBlockNumberByIndex(bytes32 operatorId, uint32 blockNumber, uint256 index) view returns(uint192) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) GetQuorumBitmapAtBlockNumberByIndex(operatorId [32]byte, blockNumber uint32, index *big.Int) (*big.Int, error) { + return _ContractRegistryCoordinator.Contract.GetQuorumBitmapAtBlockNumberByIndex(&_ContractRegistryCoordinator.CallOpts, operatorId, blockNumber, index) +} + +// GetQuorumBitmapAtBlockNumberByIndex is a free data retrieval call binding the contract method 0x04ec6351. +// +// Solidity: function getQuorumBitmapAtBlockNumberByIndex(bytes32 operatorId, uint32 blockNumber, uint256 index) view returns(uint192) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCallerSession) GetQuorumBitmapAtBlockNumberByIndex(operatorId [32]byte, blockNumber uint32, index *big.Int) (*big.Int, error) { + return _ContractRegistryCoordinator.Contract.GetQuorumBitmapAtBlockNumberByIndex(&_ContractRegistryCoordinator.CallOpts, operatorId, blockNumber, index) +} + +// GetQuorumBitmapHistoryLength is a free data retrieval call binding the contract method 0x03fd3492. +// +// Solidity: function getQuorumBitmapHistoryLength(bytes32 operatorId) view returns(uint256) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCaller) GetQuorumBitmapHistoryLength(opts *bind.CallOpts, operatorId [32]byte) (*big.Int, error) { + var out []interface{} + err := _ContractRegistryCoordinator.contract.Call(opts, &out, "getQuorumBitmapHistoryLength", operatorId) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetQuorumBitmapHistoryLength is a free data retrieval call binding the contract method 0x03fd3492. +// +// Solidity: function getQuorumBitmapHistoryLength(bytes32 operatorId) view returns(uint256) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) GetQuorumBitmapHistoryLength(operatorId [32]byte) (*big.Int, error) { + return _ContractRegistryCoordinator.Contract.GetQuorumBitmapHistoryLength(&_ContractRegistryCoordinator.CallOpts, operatorId) +} + +// GetQuorumBitmapHistoryLength is a free data retrieval call binding the contract method 0x03fd3492. +// +// Solidity: function getQuorumBitmapHistoryLength(bytes32 operatorId) view returns(uint256) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCallerSession) GetQuorumBitmapHistoryLength(operatorId [32]byte) (*big.Int, error) { + return _ContractRegistryCoordinator.Contract.GetQuorumBitmapHistoryLength(&_ContractRegistryCoordinator.CallOpts, operatorId) +} + +// GetQuorumBitmapIndicesAtBlockNumber is a free data retrieval call binding the contract method 0xc391425e. +// +// Solidity: function getQuorumBitmapIndicesAtBlockNumber(uint32 blockNumber, bytes32[] operatorIds) view returns(uint32[]) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCaller) GetQuorumBitmapIndicesAtBlockNumber(opts *bind.CallOpts, blockNumber uint32, operatorIds [][32]byte) ([]uint32, error) { + var out []interface{} + err := _ContractRegistryCoordinator.contract.Call(opts, &out, "getQuorumBitmapIndicesAtBlockNumber", blockNumber, operatorIds) + + if err != nil { + return *new([]uint32), err + } + + out0 := *abi.ConvertType(out[0], new([]uint32)).(*[]uint32) + + return out0, err + +} + +// GetQuorumBitmapIndicesAtBlockNumber is a free data retrieval call binding the contract method 0xc391425e. +// +// Solidity: function getQuorumBitmapIndicesAtBlockNumber(uint32 blockNumber, bytes32[] operatorIds) view returns(uint32[]) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) GetQuorumBitmapIndicesAtBlockNumber(blockNumber uint32, operatorIds [][32]byte) ([]uint32, error) { + return _ContractRegistryCoordinator.Contract.GetQuorumBitmapIndicesAtBlockNumber(&_ContractRegistryCoordinator.CallOpts, blockNumber, operatorIds) +} + +// GetQuorumBitmapIndicesAtBlockNumber is a free data retrieval call binding the contract method 0xc391425e. +// +// Solidity: function getQuorumBitmapIndicesAtBlockNumber(uint32 blockNumber, bytes32[] operatorIds) view returns(uint32[]) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCallerSession) GetQuorumBitmapIndicesAtBlockNumber(blockNumber uint32, operatorIds [][32]byte) ([]uint32, error) { + return _ContractRegistryCoordinator.Contract.GetQuorumBitmapIndicesAtBlockNumber(&_ContractRegistryCoordinator.CallOpts, blockNumber, operatorIds) +} + +// GetQuorumBitmapUpdateByIndex is a free data retrieval call binding the contract method 0x1eb812da. +// +// Solidity: function getQuorumBitmapUpdateByIndex(bytes32 operatorId, uint256 index) view returns((uint32,uint32,uint192)) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCaller) GetQuorumBitmapUpdateByIndex(opts *bind.CallOpts, operatorId [32]byte, index *big.Int) (IRegistryCoordinatorQuorumBitmapUpdate, error) { + var out []interface{} + err := _ContractRegistryCoordinator.contract.Call(opts, &out, "getQuorumBitmapUpdateByIndex", operatorId, index) + + if err != nil { + return *new(IRegistryCoordinatorQuorumBitmapUpdate), err + } + + out0 := *abi.ConvertType(out[0], new(IRegistryCoordinatorQuorumBitmapUpdate)).(*IRegistryCoordinatorQuorumBitmapUpdate) + + return out0, err + +} + +// GetQuorumBitmapUpdateByIndex is a free data retrieval call binding the contract method 0x1eb812da. +// +// Solidity: function getQuorumBitmapUpdateByIndex(bytes32 operatorId, uint256 index) view returns((uint32,uint32,uint192)) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) GetQuorumBitmapUpdateByIndex(operatorId [32]byte, index *big.Int) (IRegistryCoordinatorQuorumBitmapUpdate, error) { + return _ContractRegistryCoordinator.Contract.GetQuorumBitmapUpdateByIndex(&_ContractRegistryCoordinator.CallOpts, operatorId, index) +} + +// GetQuorumBitmapUpdateByIndex is a free data retrieval call binding the contract method 0x1eb812da. +// +// Solidity: function getQuorumBitmapUpdateByIndex(bytes32 operatorId, uint256 index) view returns((uint32,uint32,uint192)) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCallerSession) GetQuorumBitmapUpdateByIndex(operatorId [32]byte, index *big.Int) (IRegistryCoordinatorQuorumBitmapUpdate, error) { + return _ContractRegistryCoordinator.Contract.GetQuorumBitmapUpdateByIndex(&_ContractRegistryCoordinator.CallOpts, operatorId, index) +} + +// IndexRegistry is a free data retrieval call binding the contract method 0x9e9923c2. +// +// Solidity: function indexRegistry() view returns(address) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCaller) IndexRegistry(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ContractRegistryCoordinator.contract.Call(opts, &out, "indexRegistry") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// IndexRegistry is a free data retrieval call binding the contract method 0x9e9923c2. +// +// Solidity: function indexRegistry() view returns(address) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) IndexRegistry() (common.Address, error) { + return _ContractRegistryCoordinator.Contract.IndexRegistry(&_ContractRegistryCoordinator.CallOpts) +} + +// IndexRegistry is a free data retrieval call binding the contract method 0x9e9923c2. +// +// Solidity: function indexRegistry() view returns(address) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCallerSession) IndexRegistry() (common.Address, error) { + return _ContractRegistryCoordinator.Contract.IndexRegistry(&_ContractRegistryCoordinator.CallOpts) +} + +// IsChurnApproverSaltUsed is a free data retrieval call binding the contract method 0x1478851f. +// +// Solidity: function isChurnApproverSaltUsed(bytes32 ) view returns(bool) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCaller) IsChurnApproverSaltUsed(opts *bind.CallOpts, arg0 [32]byte) (bool, error) { + var out []interface{} + err := _ContractRegistryCoordinator.contract.Call(opts, &out, "isChurnApproverSaltUsed", arg0) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsChurnApproverSaltUsed is a free data retrieval call binding the contract method 0x1478851f. +// +// Solidity: function isChurnApproverSaltUsed(bytes32 ) view returns(bool) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) IsChurnApproverSaltUsed(arg0 [32]byte) (bool, error) { + return _ContractRegistryCoordinator.Contract.IsChurnApproverSaltUsed(&_ContractRegistryCoordinator.CallOpts, arg0) +} + +// IsChurnApproverSaltUsed is a free data retrieval call binding the contract method 0x1478851f. +// +// Solidity: function isChurnApproverSaltUsed(bytes32 ) view returns(bool) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCallerSession) IsChurnApproverSaltUsed(arg0 [32]byte) (bool, error) { + return _ContractRegistryCoordinator.Contract.IsChurnApproverSaltUsed(&_ContractRegistryCoordinator.CallOpts, arg0) +} + +// NumRegistries is a free data retrieval call binding the contract method 0xd72d8dd6. +// +// Solidity: function numRegistries() view returns(uint256) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCaller) NumRegistries(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _ContractRegistryCoordinator.contract.Call(opts, &out, "numRegistries") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// NumRegistries is a free data retrieval call binding the contract method 0xd72d8dd6. +// +// Solidity: function numRegistries() view returns(uint256) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) NumRegistries() (*big.Int, error) { + return _ContractRegistryCoordinator.Contract.NumRegistries(&_ContractRegistryCoordinator.CallOpts) +} + +// NumRegistries is a free data retrieval call binding the contract method 0xd72d8dd6. +// +// Solidity: function numRegistries() view returns(uint256) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCallerSession) NumRegistries() (*big.Int, error) { + return _ContractRegistryCoordinator.Contract.NumRegistries(&_ContractRegistryCoordinator.CallOpts) +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ContractRegistryCoordinator.contract.Call(opts, &out, "owner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) Owner() (common.Address, error) { + return _ContractRegistryCoordinator.Contract.Owner(&_ContractRegistryCoordinator.CallOpts) +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCallerSession) Owner() (common.Address, error) { + return _ContractRegistryCoordinator.Contract.Owner(&_ContractRegistryCoordinator.CallOpts) +} + +// Paused is a free data retrieval call binding the contract method 0x5ac86ab7. +// +// Solidity: function paused(uint8 index) view returns(bool) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCaller) Paused(opts *bind.CallOpts, index uint8) (bool, error) { + var out []interface{} + err := _ContractRegistryCoordinator.contract.Call(opts, &out, "paused", index) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// Paused is a free data retrieval call binding the contract method 0x5ac86ab7. +// +// Solidity: function paused(uint8 index) view returns(bool) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) Paused(index uint8) (bool, error) { + return _ContractRegistryCoordinator.Contract.Paused(&_ContractRegistryCoordinator.CallOpts, index) +} + +// Paused is a free data retrieval call binding the contract method 0x5ac86ab7. +// +// Solidity: function paused(uint8 index) view returns(bool) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCallerSession) Paused(index uint8) (bool, error) { + return _ContractRegistryCoordinator.Contract.Paused(&_ContractRegistryCoordinator.CallOpts, index) +} + +// Paused0 is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(uint256) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCaller) Paused0(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _ContractRegistryCoordinator.contract.Call(opts, &out, "paused0") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// Paused0 is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(uint256) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) Paused0() (*big.Int, error) { + return _ContractRegistryCoordinator.Contract.Paused0(&_ContractRegistryCoordinator.CallOpts) +} + +// Paused0 is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(uint256) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCallerSession) Paused0() (*big.Int, error) { + return _ContractRegistryCoordinator.Contract.Paused0(&_ContractRegistryCoordinator.CallOpts) +} + +// PauserRegistry is a free data retrieval call binding the contract method 0x886f1195. +// +// Solidity: function pauserRegistry() view returns(address) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCaller) PauserRegistry(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ContractRegistryCoordinator.contract.Call(opts, &out, "pauserRegistry") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// PauserRegistry is a free data retrieval call binding the contract method 0x886f1195. +// +// Solidity: function pauserRegistry() view returns(address) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) PauserRegistry() (common.Address, error) { + return _ContractRegistryCoordinator.Contract.PauserRegistry(&_ContractRegistryCoordinator.CallOpts) +} + +// PauserRegistry is a free data retrieval call binding the contract method 0x886f1195. +// +// Solidity: function pauserRegistry() view returns(address) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCallerSession) PauserRegistry() (common.Address, error) { + return _ContractRegistryCoordinator.Contract.PauserRegistry(&_ContractRegistryCoordinator.CallOpts) +} + +// PubkeyRegistrationMessageHash is a free data retrieval call binding the contract method 0x3c2a7f4c. +// +// Solidity: function pubkeyRegistrationMessageHash(address operator) view returns((uint256,uint256)) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCaller) PubkeyRegistrationMessageHash(opts *bind.CallOpts, operator common.Address) (BN254G1Point, error) { + var out []interface{} + err := _ContractRegistryCoordinator.contract.Call(opts, &out, "pubkeyRegistrationMessageHash", operator) + + if err != nil { + return *new(BN254G1Point), err + } + + out0 := *abi.ConvertType(out[0], new(BN254G1Point)).(*BN254G1Point) + + return out0, err + +} + +// PubkeyRegistrationMessageHash is a free data retrieval call binding the contract method 0x3c2a7f4c. +// +// Solidity: function pubkeyRegistrationMessageHash(address operator) view returns((uint256,uint256)) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) PubkeyRegistrationMessageHash(operator common.Address) (BN254G1Point, error) { + return _ContractRegistryCoordinator.Contract.PubkeyRegistrationMessageHash(&_ContractRegistryCoordinator.CallOpts, operator) +} + +// PubkeyRegistrationMessageHash is a free data retrieval call binding the contract method 0x3c2a7f4c. +// +// Solidity: function pubkeyRegistrationMessageHash(address operator) view returns((uint256,uint256)) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCallerSession) PubkeyRegistrationMessageHash(operator common.Address) (BN254G1Point, error) { + return _ContractRegistryCoordinator.Contract.PubkeyRegistrationMessageHash(&_ContractRegistryCoordinator.CallOpts, operator) +} + +// QuorumCount is a free data retrieval call binding the contract method 0x9aa1653d. +// +// Solidity: function quorumCount() view returns(uint8) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCaller) QuorumCount(opts *bind.CallOpts) (uint8, error) { + var out []interface{} + err := _ContractRegistryCoordinator.contract.Call(opts, &out, "quorumCount") + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +// QuorumCount is a free data retrieval call binding the contract method 0x9aa1653d. +// +// Solidity: function quorumCount() view returns(uint8) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) QuorumCount() (uint8, error) { + return _ContractRegistryCoordinator.Contract.QuorumCount(&_ContractRegistryCoordinator.CallOpts) +} + +// QuorumCount is a free data retrieval call binding the contract method 0x9aa1653d. +// +// Solidity: function quorumCount() view returns(uint8) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCallerSession) QuorumCount() (uint8, error) { + return _ContractRegistryCoordinator.Contract.QuorumCount(&_ContractRegistryCoordinator.CallOpts) +} + +// QuorumUpdateBlockNumber is a free data retrieval call binding the contract method 0x249a0c42. +// +// Solidity: function quorumUpdateBlockNumber(uint8 ) view returns(uint256) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCaller) QuorumUpdateBlockNumber(opts *bind.CallOpts, arg0 uint8) (*big.Int, error) { + var out []interface{} + err := _ContractRegistryCoordinator.contract.Call(opts, &out, "quorumUpdateBlockNumber", arg0) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// QuorumUpdateBlockNumber is a free data retrieval call binding the contract method 0x249a0c42. +// +// Solidity: function quorumUpdateBlockNumber(uint8 ) view returns(uint256) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) QuorumUpdateBlockNumber(arg0 uint8) (*big.Int, error) { + return _ContractRegistryCoordinator.Contract.QuorumUpdateBlockNumber(&_ContractRegistryCoordinator.CallOpts, arg0) +} + +// QuorumUpdateBlockNumber is a free data retrieval call binding the contract method 0x249a0c42. +// +// Solidity: function quorumUpdateBlockNumber(uint8 ) view returns(uint256) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCallerSession) QuorumUpdateBlockNumber(arg0 uint8) (*big.Int, error) { + return _ContractRegistryCoordinator.Contract.QuorumUpdateBlockNumber(&_ContractRegistryCoordinator.CallOpts, arg0) +} + +// Registries is a free data retrieval call binding the contract method 0x6347c900. +// +// Solidity: function registries(uint256 ) view returns(address) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCaller) Registries(opts *bind.CallOpts, arg0 *big.Int) (common.Address, error) { + var out []interface{} + err := _ContractRegistryCoordinator.contract.Call(opts, &out, "registries", arg0) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Registries is a free data retrieval call binding the contract method 0x6347c900. +// +// Solidity: function registries(uint256 ) view returns(address) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) Registries(arg0 *big.Int) (common.Address, error) { + return _ContractRegistryCoordinator.Contract.Registries(&_ContractRegistryCoordinator.CallOpts, arg0) +} + +// Registries is a free data retrieval call binding the contract method 0x6347c900. +// +// Solidity: function registries(uint256 ) view returns(address) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCallerSession) Registries(arg0 *big.Int) (common.Address, error) { + return _ContractRegistryCoordinator.Contract.Registries(&_ContractRegistryCoordinator.CallOpts, arg0) +} + +// ServiceManager is a free data retrieval call binding the contract method 0x3998fdd3. +// +// Solidity: function serviceManager() view returns(address) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCaller) ServiceManager(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ContractRegistryCoordinator.contract.Call(opts, &out, "serviceManager") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// ServiceManager is a free data retrieval call binding the contract method 0x3998fdd3. +// +// Solidity: function serviceManager() view returns(address) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) ServiceManager() (common.Address, error) { + return _ContractRegistryCoordinator.Contract.ServiceManager(&_ContractRegistryCoordinator.CallOpts) +} + +// ServiceManager is a free data retrieval call binding the contract method 0x3998fdd3. +// +// Solidity: function serviceManager() view returns(address) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCallerSession) ServiceManager() (common.Address, error) { + return _ContractRegistryCoordinator.Contract.ServiceManager(&_ContractRegistryCoordinator.CallOpts) +} + +// StakeRegistry is a free data retrieval call binding the contract method 0x68304835. +// +// Solidity: function stakeRegistry() view returns(address) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCaller) StakeRegistry(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ContractRegistryCoordinator.contract.Call(opts, &out, "stakeRegistry") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// StakeRegistry is a free data retrieval call binding the contract method 0x68304835. +// +// Solidity: function stakeRegistry() view returns(address) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) StakeRegistry() (common.Address, error) { + return _ContractRegistryCoordinator.Contract.StakeRegistry(&_ContractRegistryCoordinator.CallOpts) +} + +// StakeRegistry is a free data retrieval call binding the contract method 0x68304835. +// +// Solidity: function stakeRegistry() view returns(address) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorCallerSession) StakeRegistry() (common.Address, error) { + return _ContractRegistryCoordinator.Contract.StakeRegistry(&_ContractRegistryCoordinator.CallOpts) +} + +// CreateQuorum is a paid mutator transaction binding the contract method 0xd75b4c88. +// +// Solidity: function createQuorum((uint32,uint16,uint16) operatorSetParams, uint96 minimumStake, (address,uint96)[] strategyParams) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactor) CreateQuorum(opts *bind.TransactOpts, operatorSetParams IRegistryCoordinatorOperatorSetParam, minimumStake *big.Int, strategyParams []IStakeRegistryStrategyParams) (*types.Transaction, error) { + return _ContractRegistryCoordinator.contract.Transact(opts, "createQuorum", operatorSetParams, minimumStake, strategyParams) +} + +// CreateQuorum is a paid mutator transaction binding the contract method 0xd75b4c88. +// +// Solidity: function createQuorum((uint32,uint16,uint16) operatorSetParams, uint96 minimumStake, (address,uint96)[] strategyParams) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) CreateQuorum(operatorSetParams IRegistryCoordinatorOperatorSetParam, minimumStake *big.Int, strategyParams []IStakeRegistryStrategyParams) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.CreateQuorum(&_ContractRegistryCoordinator.TransactOpts, operatorSetParams, minimumStake, strategyParams) +} + +// CreateQuorum is a paid mutator transaction binding the contract method 0xd75b4c88. +// +// Solidity: function createQuorum((uint32,uint16,uint16) operatorSetParams, uint96 minimumStake, (address,uint96)[] strategyParams) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactorSession) CreateQuorum(operatorSetParams IRegistryCoordinatorOperatorSetParam, minimumStake *big.Int, strategyParams []IStakeRegistryStrategyParams) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.CreateQuorum(&_ContractRegistryCoordinator.TransactOpts, operatorSetParams, minimumStake, strategyParams) +} + +// DeregisterOperator is a paid mutator transaction binding the contract method 0xca4f2d97. +// +// Solidity: function deregisterOperator(bytes quorumNumbers) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactor) DeregisterOperator(opts *bind.TransactOpts, quorumNumbers []byte) (*types.Transaction, error) { + return _ContractRegistryCoordinator.contract.Transact(opts, "deregisterOperator", quorumNumbers) +} + +// DeregisterOperator is a paid mutator transaction binding the contract method 0xca4f2d97. +// +// Solidity: function deregisterOperator(bytes quorumNumbers) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) DeregisterOperator(quorumNumbers []byte) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.DeregisterOperator(&_ContractRegistryCoordinator.TransactOpts, quorumNumbers) +} + +// DeregisterOperator is a paid mutator transaction binding the contract method 0xca4f2d97. +// +// Solidity: function deregisterOperator(bytes quorumNumbers) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactorSession) DeregisterOperator(quorumNumbers []byte) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.DeregisterOperator(&_ContractRegistryCoordinator.TransactOpts, quorumNumbers) +} + +// EjectOperator is a paid mutator transaction binding the contract method 0x6e3b17db. +// +// Solidity: function ejectOperator(address operator, bytes quorumNumbers) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactor) EjectOperator(opts *bind.TransactOpts, operator common.Address, quorumNumbers []byte) (*types.Transaction, error) { + return _ContractRegistryCoordinator.contract.Transact(opts, "ejectOperator", operator, quorumNumbers) +} + +// EjectOperator is a paid mutator transaction binding the contract method 0x6e3b17db. +// +// Solidity: function ejectOperator(address operator, bytes quorumNumbers) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) EjectOperator(operator common.Address, quorumNumbers []byte) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.EjectOperator(&_ContractRegistryCoordinator.TransactOpts, operator, quorumNumbers) +} + +// EjectOperator is a paid mutator transaction binding the contract method 0x6e3b17db. +// +// Solidity: function ejectOperator(address operator, bytes quorumNumbers) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactorSession) EjectOperator(operator common.Address, quorumNumbers []byte) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.EjectOperator(&_ContractRegistryCoordinator.TransactOpts, operator, quorumNumbers) +} + +// Initialize is a paid mutator transaction binding the contract method 0xdd8283f3. +// +// Solidity: function initialize(address _initialOwner, address _churnApprover, address _ejector, address _pauserRegistry, uint256 _initialPausedStatus, (uint32,uint16,uint16)[] _operatorSetParams, uint96[] _minimumStakes, (address,uint96)[][] _strategyParams) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactor) Initialize(opts *bind.TransactOpts, _initialOwner common.Address, _churnApprover common.Address, _ejector common.Address, _pauserRegistry common.Address, _initialPausedStatus *big.Int, _operatorSetParams []IRegistryCoordinatorOperatorSetParam, _minimumStakes []*big.Int, _strategyParams [][]IStakeRegistryStrategyParams) (*types.Transaction, error) { + return _ContractRegistryCoordinator.contract.Transact(opts, "initialize", _initialOwner, _churnApprover, _ejector, _pauserRegistry, _initialPausedStatus, _operatorSetParams, _minimumStakes, _strategyParams) +} + +// Initialize is a paid mutator transaction binding the contract method 0xdd8283f3. +// +// Solidity: function initialize(address _initialOwner, address _churnApprover, address _ejector, address _pauserRegistry, uint256 _initialPausedStatus, (uint32,uint16,uint16)[] _operatorSetParams, uint96[] _minimumStakes, (address,uint96)[][] _strategyParams) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) Initialize(_initialOwner common.Address, _churnApprover common.Address, _ejector common.Address, _pauserRegistry common.Address, _initialPausedStatus *big.Int, _operatorSetParams []IRegistryCoordinatorOperatorSetParam, _minimumStakes []*big.Int, _strategyParams [][]IStakeRegistryStrategyParams) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.Initialize(&_ContractRegistryCoordinator.TransactOpts, _initialOwner, _churnApprover, _ejector, _pauserRegistry, _initialPausedStatus, _operatorSetParams, _minimumStakes, _strategyParams) +} + +// Initialize is a paid mutator transaction binding the contract method 0xdd8283f3. +// +// Solidity: function initialize(address _initialOwner, address _churnApprover, address _ejector, address _pauserRegistry, uint256 _initialPausedStatus, (uint32,uint16,uint16)[] _operatorSetParams, uint96[] _minimumStakes, (address,uint96)[][] _strategyParams) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactorSession) Initialize(_initialOwner common.Address, _churnApprover common.Address, _ejector common.Address, _pauserRegistry common.Address, _initialPausedStatus *big.Int, _operatorSetParams []IRegistryCoordinatorOperatorSetParam, _minimumStakes []*big.Int, _strategyParams [][]IStakeRegistryStrategyParams) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.Initialize(&_ContractRegistryCoordinator.TransactOpts, _initialOwner, _churnApprover, _ejector, _pauserRegistry, _initialPausedStatus, _operatorSetParams, _minimumStakes, _strategyParams) +} + +// Pause is a paid mutator transaction binding the contract method 0x136439dd. +// +// Solidity: function pause(uint256 newPausedStatus) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactor) Pause(opts *bind.TransactOpts, newPausedStatus *big.Int) (*types.Transaction, error) { + return _ContractRegistryCoordinator.contract.Transact(opts, "pause", newPausedStatus) +} + +// Pause is a paid mutator transaction binding the contract method 0x136439dd. +// +// Solidity: function pause(uint256 newPausedStatus) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) Pause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.Pause(&_ContractRegistryCoordinator.TransactOpts, newPausedStatus) +} + +// Pause is a paid mutator transaction binding the contract method 0x136439dd. +// +// Solidity: function pause(uint256 newPausedStatus) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactorSession) Pause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.Pause(&_ContractRegistryCoordinator.TransactOpts, newPausedStatus) +} + +// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. +// +// Solidity: function pauseAll() returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactor) PauseAll(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ContractRegistryCoordinator.contract.Transact(opts, "pauseAll") +} + +// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. +// +// Solidity: function pauseAll() returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) PauseAll() (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.PauseAll(&_ContractRegistryCoordinator.TransactOpts) +} + +// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. +// +// Solidity: function pauseAll() returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactorSession) PauseAll() (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.PauseAll(&_ContractRegistryCoordinator.TransactOpts) +} + +// RegisterOperator is a paid mutator transaction binding the contract method 0xa50857bf. +// +// Solidity: function registerOperator(bytes quorumNumbers, string socket, ((uint256,uint256),(uint256,uint256),(uint256[2],uint256[2])) params, (bytes,bytes32,uint256) operatorSignature) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactor) RegisterOperator(opts *bind.TransactOpts, quorumNumbers []byte, socket string, params IBLSApkRegistryPubkeyRegistrationParams, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _ContractRegistryCoordinator.contract.Transact(opts, "registerOperator", quorumNumbers, socket, params, operatorSignature) +} + +// RegisterOperator is a paid mutator transaction binding the contract method 0xa50857bf. +// +// Solidity: function registerOperator(bytes quorumNumbers, string socket, ((uint256,uint256),(uint256,uint256),(uint256[2],uint256[2])) params, (bytes,bytes32,uint256) operatorSignature) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) RegisterOperator(quorumNumbers []byte, socket string, params IBLSApkRegistryPubkeyRegistrationParams, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.RegisterOperator(&_ContractRegistryCoordinator.TransactOpts, quorumNumbers, socket, params, operatorSignature) +} + +// RegisterOperator is a paid mutator transaction binding the contract method 0xa50857bf. +// +// Solidity: function registerOperator(bytes quorumNumbers, string socket, ((uint256,uint256),(uint256,uint256),(uint256[2],uint256[2])) params, (bytes,bytes32,uint256) operatorSignature) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactorSession) RegisterOperator(quorumNumbers []byte, socket string, params IBLSApkRegistryPubkeyRegistrationParams, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.RegisterOperator(&_ContractRegistryCoordinator.TransactOpts, quorumNumbers, socket, params, operatorSignature) +} + +// RegisterOperatorWithChurn is a paid mutator transaction binding the contract method 0x9b5d177b. +// +// Solidity: function registerOperatorWithChurn(bytes quorumNumbers, string socket, ((uint256,uint256),(uint256,uint256),(uint256[2],uint256[2])) params, (uint8,address)[] operatorKickParams, (bytes,bytes32,uint256) churnApproverSignature, (bytes,bytes32,uint256) operatorSignature) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactor) RegisterOperatorWithChurn(opts *bind.TransactOpts, quorumNumbers []byte, socket string, params IBLSApkRegistryPubkeyRegistrationParams, operatorKickParams []IRegistryCoordinatorOperatorKickParam, churnApproverSignature ISignatureUtilsSignatureWithSaltAndExpiry, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _ContractRegistryCoordinator.contract.Transact(opts, "registerOperatorWithChurn", quorumNumbers, socket, params, operatorKickParams, churnApproverSignature, operatorSignature) +} + +// RegisterOperatorWithChurn is a paid mutator transaction binding the contract method 0x9b5d177b. +// +// Solidity: function registerOperatorWithChurn(bytes quorumNumbers, string socket, ((uint256,uint256),(uint256,uint256),(uint256[2],uint256[2])) params, (uint8,address)[] operatorKickParams, (bytes,bytes32,uint256) churnApproverSignature, (bytes,bytes32,uint256) operatorSignature) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) RegisterOperatorWithChurn(quorumNumbers []byte, socket string, params IBLSApkRegistryPubkeyRegistrationParams, operatorKickParams []IRegistryCoordinatorOperatorKickParam, churnApproverSignature ISignatureUtilsSignatureWithSaltAndExpiry, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.RegisterOperatorWithChurn(&_ContractRegistryCoordinator.TransactOpts, quorumNumbers, socket, params, operatorKickParams, churnApproverSignature, operatorSignature) +} + +// RegisterOperatorWithChurn is a paid mutator transaction binding the contract method 0x9b5d177b. +// +// Solidity: function registerOperatorWithChurn(bytes quorumNumbers, string socket, ((uint256,uint256),(uint256,uint256),(uint256[2],uint256[2])) params, (uint8,address)[] operatorKickParams, (bytes,bytes32,uint256) churnApproverSignature, (bytes,bytes32,uint256) operatorSignature) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactorSession) RegisterOperatorWithChurn(quorumNumbers []byte, socket string, params IBLSApkRegistryPubkeyRegistrationParams, operatorKickParams []IRegistryCoordinatorOperatorKickParam, churnApproverSignature ISignatureUtilsSignatureWithSaltAndExpiry, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.RegisterOperatorWithChurn(&_ContractRegistryCoordinator.TransactOpts, quorumNumbers, socket, params, operatorKickParams, churnApproverSignature, operatorSignature) +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactor) RenounceOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ContractRegistryCoordinator.contract.Transact(opts, "renounceOwnership") +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) RenounceOwnership() (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.RenounceOwnership(&_ContractRegistryCoordinator.TransactOpts) +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactorSession) RenounceOwnership() (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.RenounceOwnership(&_ContractRegistryCoordinator.TransactOpts) +} + +// SetChurnApprover is a paid mutator transaction binding the contract method 0x29d1e0c3. +// +// Solidity: function setChurnApprover(address _churnApprover) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactor) SetChurnApprover(opts *bind.TransactOpts, _churnApprover common.Address) (*types.Transaction, error) { + return _ContractRegistryCoordinator.contract.Transact(opts, "setChurnApprover", _churnApprover) +} + +// SetChurnApprover is a paid mutator transaction binding the contract method 0x29d1e0c3. +// +// Solidity: function setChurnApprover(address _churnApprover) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) SetChurnApprover(_churnApprover common.Address) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.SetChurnApprover(&_ContractRegistryCoordinator.TransactOpts, _churnApprover) +} + +// SetChurnApprover is a paid mutator transaction binding the contract method 0x29d1e0c3. +// +// Solidity: function setChurnApprover(address _churnApprover) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactorSession) SetChurnApprover(_churnApprover common.Address) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.SetChurnApprover(&_ContractRegistryCoordinator.TransactOpts, _churnApprover) +} + +// SetEjector is a paid mutator transaction binding the contract method 0x2cdd1e86. +// +// Solidity: function setEjector(address _ejector) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactor) SetEjector(opts *bind.TransactOpts, _ejector common.Address) (*types.Transaction, error) { + return _ContractRegistryCoordinator.contract.Transact(opts, "setEjector", _ejector) +} + +// SetEjector is a paid mutator transaction binding the contract method 0x2cdd1e86. +// +// Solidity: function setEjector(address _ejector) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) SetEjector(_ejector common.Address) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.SetEjector(&_ContractRegistryCoordinator.TransactOpts, _ejector) +} + +// SetEjector is a paid mutator transaction binding the contract method 0x2cdd1e86. +// +// Solidity: function setEjector(address _ejector) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactorSession) SetEjector(_ejector common.Address) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.SetEjector(&_ContractRegistryCoordinator.TransactOpts, _ejector) +} + +// SetOperatorSetParams is a paid mutator transaction binding the contract method 0x5b0b829f. +// +// Solidity: function setOperatorSetParams(uint8 quorumNumber, (uint32,uint16,uint16) operatorSetParams) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactor) SetOperatorSetParams(opts *bind.TransactOpts, quorumNumber uint8, operatorSetParams IRegistryCoordinatorOperatorSetParam) (*types.Transaction, error) { + return _ContractRegistryCoordinator.contract.Transact(opts, "setOperatorSetParams", quorumNumber, operatorSetParams) +} + +// SetOperatorSetParams is a paid mutator transaction binding the contract method 0x5b0b829f. +// +// Solidity: function setOperatorSetParams(uint8 quorumNumber, (uint32,uint16,uint16) operatorSetParams) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) SetOperatorSetParams(quorumNumber uint8, operatorSetParams IRegistryCoordinatorOperatorSetParam) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.SetOperatorSetParams(&_ContractRegistryCoordinator.TransactOpts, quorumNumber, operatorSetParams) +} + +// SetOperatorSetParams is a paid mutator transaction binding the contract method 0x5b0b829f. +// +// Solidity: function setOperatorSetParams(uint8 quorumNumber, (uint32,uint16,uint16) operatorSetParams) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactorSession) SetOperatorSetParams(quorumNumber uint8, operatorSetParams IRegistryCoordinatorOperatorSetParam) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.SetOperatorSetParams(&_ContractRegistryCoordinator.TransactOpts, quorumNumber, operatorSetParams) +} + +// SetPauserRegistry is a paid mutator transaction binding the contract method 0x10d67a2f. +// +// Solidity: function setPauserRegistry(address newPauserRegistry) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactor) SetPauserRegistry(opts *bind.TransactOpts, newPauserRegistry common.Address) (*types.Transaction, error) { + return _ContractRegistryCoordinator.contract.Transact(opts, "setPauserRegistry", newPauserRegistry) +} + +// SetPauserRegistry is a paid mutator transaction binding the contract method 0x10d67a2f. +// +// Solidity: function setPauserRegistry(address newPauserRegistry) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) SetPauserRegistry(newPauserRegistry common.Address) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.SetPauserRegistry(&_ContractRegistryCoordinator.TransactOpts, newPauserRegistry) +} + +// SetPauserRegistry is a paid mutator transaction binding the contract method 0x10d67a2f. +// +// Solidity: function setPauserRegistry(address newPauserRegistry) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactorSession) SetPauserRegistry(newPauserRegistry common.Address) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.SetPauserRegistry(&_ContractRegistryCoordinator.TransactOpts, newPauserRegistry) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactor) TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) { + return _ContractRegistryCoordinator.contract.Transact(opts, "transferOwnership", newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.TransferOwnership(&_ContractRegistryCoordinator.TransactOpts, newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.TransferOwnership(&_ContractRegistryCoordinator.TransactOpts, newOwner) +} + +// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc. +// +// Solidity: function unpause(uint256 newPausedStatus) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactor) Unpause(opts *bind.TransactOpts, newPausedStatus *big.Int) (*types.Transaction, error) { + return _ContractRegistryCoordinator.contract.Transact(opts, "unpause", newPausedStatus) +} + +// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc. +// +// Solidity: function unpause(uint256 newPausedStatus) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) Unpause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.Unpause(&_ContractRegistryCoordinator.TransactOpts, newPausedStatus) +} + +// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc. +// +// Solidity: function unpause(uint256 newPausedStatus) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactorSession) Unpause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.Unpause(&_ContractRegistryCoordinator.TransactOpts, newPausedStatus) +} + +// UpdateOperators is a paid mutator transaction binding the contract method 0x00cf2ab5. +// +// Solidity: function updateOperators(address[] operators) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactor) UpdateOperators(opts *bind.TransactOpts, operators []common.Address) (*types.Transaction, error) { + return _ContractRegistryCoordinator.contract.Transact(opts, "updateOperators", operators) +} + +// UpdateOperators is a paid mutator transaction binding the contract method 0x00cf2ab5. +// +// Solidity: function updateOperators(address[] operators) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) UpdateOperators(operators []common.Address) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.UpdateOperators(&_ContractRegistryCoordinator.TransactOpts, operators) +} + +// UpdateOperators is a paid mutator transaction binding the contract method 0x00cf2ab5. +// +// Solidity: function updateOperators(address[] operators) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactorSession) UpdateOperators(operators []common.Address) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.UpdateOperators(&_ContractRegistryCoordinator.TransactOpts, operators) +} + +// UpdateOperatorsForQuorum is a paid mutator transaction binding the contract method 0x5140a548. +// +// Solidity: function updateOperatorsForQuorum(address[][] operatorsPerQuorum, bytes quorumNumbers) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactor) UpdateOperatorsForQuorum(opts *bind.TransactOpts, operatorsPerQuorum [][]common.Address, quorumNumbers []byte) (*types.Transaction, error) { + return _ContractRegistryCoordinator.contract.Transact(opts, "updateOperatorsForQuorum", operatorsPerQuorum, quorumNumbers) +} + +// UpdateOperatorsForQuorum is a paid mutator transaction binding the contract method 0x5140a548. +// +// Solidity: function updateOperatorsForQuorum(address[][] operatorsPerQuorum, bytes quorumNumbers) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) UpdateOperatorsForQuorum(operatorsPerQuorum [][]common.Address, quorumNumbers []byte) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.UpdateOperatorsForQuorum(&_ContractRegistryCoordinator.TransactOpts, operatorsPerQuorum, quorumNumbers) +} + +// UpdateOperatorsForQuorum is a paid mutator transaction binding the contract method 0x5140a548. +// +// Solidity: function updateOperatorsForQuorum(address[][] operatorsPerQuorum, bytes quorumNumbers) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactorSession) UpdateOperatorsForQuorum(operatorsPerQuorum [][]common.Address, quorumNumbers []byte) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.UpdateOperatorsForQuorum(&_ContractRegistryCoordinator.TransactOpts, operatorsPerQuorum, quorumNumbers) +} + +// UpdateSocket is a paid mutator transaction binding the contract method 0x0cf4b767. +// +// Solidity: function updateSocket(string socket) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactor) UpdateSocket(opts *bind.TransactOpts, socket string) (*types.Transaction, error) { + return _ContractRegistryCoordinator.contract.Transact(opts, "updateSocket", socket) +} + +// UpdateSocket is a paid mutator transaction binding the contract method 0x0cf4b767. +// +// Solidity: function updateSocket(string socket) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorSession) UpdateSocket(socket string) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.UpdateSocket(&_ContractRegistryCoordinator.TransactOpts, socket) +} + +// UpdateSocket is a paid mutator transaction binding the contract method 0x0cf4b767. +// +// Solidity: function updateSocket(string socket) returns() +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorTransactorSession) UpdateSocket(socket string) (*types.Transaction, error) { + return _ContractRegistryCoordinator.Contract.UpdateSocket(&_ContractRegistryCoordinator.TransactOpts, socket) +} + +// ContractRegistryCoordinatorChurnApproverUpdatedIterator is returned from FilterChurnApproverUpdated and is used to iterate over the raw logs and unpacked data for ChurnApproverUpdated events raised by the ContractRegistryCoordinator contract. +type ContractRegistryCoordinatorChurnApproverUpdatedIterator struct { + Event *ContractRegistryCoordinatorChurnApproverUpdated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractRegistryCoordinatorChurnApproverUpdatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractRegistryCoordinatorChurnApproverUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractRegistryCoordinatorChurnApproverUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractRegistryCoordinatorChurnApproverUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractRegistryCoordinatorChurnApproverUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractRegistryCoordinatorChurnApproverUpdated represents a ChurnApproverUpdated event raised by the ContractRegistryCoordinator contract. +type ContractRegistryCoordinatorChurnApproverUpdated struct { + PrevChurnApprover common.Address + NewChurnApprover common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterChurnApproverUpdated is a free log retrieval operation binding the contract event 0x315457d8a8fe60f04af17c16e2f5a5e1db612b31648e58030360759ef8f3528c. +// +// Solidity: event ChurnApproverUpdated(address prevChurnApprover, address newChurnApprover) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) FilterChurnApproverUpdated(opts *bind.FilterOpts) (*ContractRegistryCoordinatorChurnApproverUpdatedIterator, error) { + + logs, sub, err := _ContractRegistryCoordinator.contract.FilterLogs(opts, "ChurnApproverUpdated") + if err != nil { + return nil, err + } + return &ContractRegistryCoordinatorChurnApproverUpdatedIterator{contract: _ContractRegistryCoordinator.contract, event: "ChurnApproverUpdated", logs: logs, sub: sub}, nil +} + +// WatchChurnApproverUpdated is a free log subscription operation binding the contract event 0x315457d8a8fe60f04af17c16e2f5a5e1db612b31648e58030360759ef8f3528c. +// +// Solidity: event ChurnApproverUpdated(address prevChurnApprover, address newChurnApprover) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) WatchChurnApproverUpdated(opts *bind.WatchOpts, sink chan<- *ContractRegistryCoordinatorChurnApproverUpdated) (event.Subscription, error) { + + logs, sub, err := _ContractRegistryCoordinator.contract.WatchLogs(opts, "ChurnApproverUpdated") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractRegistryCoordinatorChurnApproverUpdated) + if err := _ContractRegistryCoordinator.contract.UnpackLog(event, "ChurnApproverUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseChurnApproverUpdated is a log parse operation binding the contract event 0x315457d8a8fe60f04af17c16e2f5a5e1db612b31648e58030360759ef8f3528c. +// +// Solidity: event ChurnApproverUpdated(address prevChurnApprover, address newChurnApprover) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) ParseChurnApproverUpdated(log types.Log) (*ContractRegistryCoordinatorChurnApproverUpdated, error) { + event := new(ContractRegistryCoordinatorChurnApproverUpdated) + if err := _ContractRegistryCoordinator.contract.UnpackLog(event, "ChurnApproverUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ContractRegistryCoordinatorEjectorUpdatedIterator is returned from FilterEjectorUpdated and is used to iterate over the raw logs and unpacked data for EjectorUpdated events raised by the ContractRegistryCoordinator contract. +type ContractRegistryCoordinatorEjectorUpdatedIterator struct { + Event *ContractRegistryCoordinatorEjectorUpdated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractRegistryCoordinatorEjectorUpdatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractRegistryCoordinatorEjectorUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractRegistryCoordinatorEjectorUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractRegistryCoordinatorEjectorUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractRegistryCoordinatorEjectorUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractRegistryCoordinatorEjectorUpdated represents a EjectorUpdated event raised by the ContractRegistryCoordinator contract. +type ContractRegistryCoordinatorEjectorUpdated struct { + PrevEjector common.Address + NewEjector common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterEjectorUpdated is a free log retrieval operation binding the contract event 0x8f30ab09f43a6c157d7fce7e0a13c003042c1c95e8a72e7a146a21c0caa24dc9. +// +// Solidity: event EjectorUpdated(address prevEjector, address newEjector) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) FilterEjectorUpdated(opts *bind.FilterOpts) (*ContractRegistryCoordinatorEjectorUpdatedIterator, error) { + + logs, sub, err := _ContractRegistryCoordinator.contract.FilterLogs(opts, "EjectorUpdated") + if err != nil { + return nil, err + } + return &ContractRegistryCoordinatorEjectorUpdatedIterator{contract: _ContractRegistryCoordinator.contract, event: "EjectorUpdated", logs: logs, sub: sub}, nil +} + +// WatchEjectorUpdated is a free log subscription operation binding the contract event 0x8f30ab09f43a6c157d7fce7e0a13c003042c1c95e8a72e7a146a21c0caa24dc9. +// +// Solidity: event EjectorUpdated(address prevEjector, address newEjector) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) WatchEjectorUpdated(opts *bind.WatchOpts, sink chan<- *ContractRegistryCoordinatorEjectorUpdated) (event.Subscription, error) { + + logs, sub, err := _ContractRegistryCoordinator.contract.WatchLogs(opts, "EjectorUpdated") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractRegistryCoordinatorEjectorUpdated) + if err := _ContractRegistryCoordinator.contract.UnpackLog(event, "EjectorUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseEjectorUpdated is a log parse operation binding the contract event 0x8f30ab09f43a6c157d7fce7e0a13c003042c1c95e8a72e7a146a21c0caa24dc9. +// +// Solidity: event EjectorUpdated(address prevEjector, address newEjector) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) ParseEjectorUpdated(log types.Log) (*ContractRegistryCoordinatorEjectorUpdated, error) { + event := new(ContractRegistryCoordinatorEjectorUpdated) + if err := _ContractRegistryCoordinator.contract.UnpackLog(event, "EjectorUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ContractRegistryCoordinatorInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the ContractRegistryCoordinator contract. +type ContractRegistryCoordinatorInitializedIterator struct { + Event *ContractRegistryCoordinatorInitialized // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractRegistryCoordinatorInitializedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractRegistryCoordinatorInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractRegistryCoordinatorInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractRegistryCoordinatorInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractRegistryCoordinatorInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractRegistryCoordinatorInitialized represents a Initialized event raised by the ContractRegistryCoordinator contract. +type ContractRegistryCoordinatorInitialized struct { + Version uint8 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) FilterInitialized(opts *bind.FilterOpts) (*ContractRegistryCoordinatorInitializedIterator, error) { + + logs, sub, err := _ContractRegistryCoordinator.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &ContractRegistryCoordinatorInitializedIterator{contract: _ContractRegistryCoordinator.contract, event: "Initialized", logs: logs, sub: sub}, nil +} + +// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *ContractRegistryCoordinatorInitialized) (event.Subscription, error) { + + logs, sub, err := _ContractRegistryCoordinator.contract.WatchLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractRegistryCoordinatorInitialized) + if err := _ContractRegistryCoordinator.contract.UnpackLog(event, "Initialized", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) ParseInitialized(log types.Log) (*ContractRegistryCoordinatorInitialized, error) { + event := new(ContractRegistryCoordinatorInitialized) + if err := _ContractRegistryCoordinator.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ContractRegistryCoordinatorOperatorDeregisteredIterator is returned from FilterOperatorDeregistered and is used to iterate over the raw logs and unpacked data for OperatorDeregistered events raised by the ContractRegistryCoordinator contract. +type ContractRegistryCoordinatorOperatorDeregisteredIterator struct { + Event *ContractRegistryCoordinatorOperatorDeregistered // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractRegistryCoordinatorOperatorDeregisteredIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractRegistryCoordinatorOperatorDeregistered) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractRegistryCoordinatorOperatorDeregistered) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractRegistryCoordinatorOperatorDeregisteredIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractRegistryCoordinatorOperatorDeregisteredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractRegistryCoordinatorOperatorDeregistered represents a OperatorDeregistered event raised by the ContractRegistryCoordinator contract. +type ContractRegistryCoordinatorOperatorDeregistered struct { + Operator common.Address + OperatorId [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOperatorDeregistered is a free log retrieval operation binding the contract event 0x396fdcb180cb0fea26928113fb0fd1c3549863f9cd563e6a184f1d578116c8e4. +// +// Solidity: event OperatorDeregistered(address indexed operator, bytes32 indexed operatorId) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) FilterOperatorDeregistered(opts *bind.FilterOpts, operator []common.Address, operatorId [][32]byte) (*ContractRegistryCoordinatorOperatorDeregisteredIterator, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + var operatorIdRule []interface{} + for _, operatorIdItem := range operatorId { + operatorIdRule = append(operatorIdRule, operatorIdItem) + } + + logs, sub, err := _ContractRegistryCoordinator.contract.FilterLogs(opts, "OperatorDeregistered", operatorRule, operatorIdRule) + if err != nil { + return nil, err + } + return &ContractRegistryCoordinatorOperatorDeregisteredIterator{contract: _ContractRegistryCoordinator.contract, event: "OperatorDeregistered", logs: logs, sub: sub}, nil +} + +// WatchOperatorDeregistered is a free log subscription operation binding the contract event 0x396fdcb180cb0fea26928113fb0fd1c3549863f9cd563e6a184f1d578116c8e4. +// +// Solidity: event OperatorDeregistered(address indexed operator, bytes32 indexed operatorId) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) WatchOperatorDeregistered(opts *bind.WatchOpts, sink chan<- *ContractRegistryCoordinatorOperatorDeregistered, operator []common.Address, operatorId [][32]byte) (event.Subscription, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + var operatorIdRule []interface{} + for _, operatorIdItem := range operatorId { + operatorIdRule = append(operatorIdRule, operatorIdItem) + } + + logs, sub, err := _ContractRegistryCoordinator.contract.WatchLogs(opts, "OperatorDeregistered", operatorRule, operatorIdRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractRegistryCoordinatorOperatorDeregistered) + if err := _ContractRegistryCoordinator.contract.UnpackLog(event, "OperatorDeregistered", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseOperatorDeregistered is a log parse operation binding the contract event 0x396fdcb180cb0fea26928113fb0fd1c3549863f9cd563e6a184f1d578116c8e4. +// +// Solidity: event OperatorDeregistered(address indexed operator, bytes32 indexed operatorId) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) ParseOperatorDeregistered(log types.Log) (*ContractRegistryCoordinatorOperatorDeregistered, error) { + event := new(ContractRegistryCoordinatorOperatorDeregistered) + if err := _ContractRegistryCoordinator.contract.UnpackLog(event, "OperatorDeregistered", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ContractRegistryCoordinatorOperatorRegisteredIterator is returned from FilterOperatorRegistered and is used to iterate over the raw logs and unpacked data for OperatorRegistered events raised by the ContractRegistryCoordinator contract. +type ContractRegistryCoordinatorOperatorRegisteredIterator struct { + Event *ContractRegistryCoordinatorOperatorRegistered // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractRegistryCoordinatorOperatorRegisteredIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractRegistryCoordinatorOperatorRegistered) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractRegistryCoordinatorOperatorRegistered) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractRegistryCoordinatorOperatorRegisteredIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractRegistryCoordinatorOperatorRegisteredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractRegistryCoordinatorOperatorRegistered represents a OperatorRegistered event raised by the ContractRegistryCoordinator contract. +type ContractRegistryCoordinatorOperatorRegistered struct { + Operator common.Address + OperatorId [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOperatorRegistered is a free log retrieval operation binding the contract event 0xe8e68cef1c3a761ed7be7e8463a375f27f7bc335e51824223cacce636ec5c3fe. +// +// Solidity: event OperatorRegistered(address indexed operator, bytes32 indexed operatorId) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) FilterOperatorRegistered(opts *bind.FilterOpts, operator []common.Address, operatorId [][32]byte) (*ContractRegistryCoordinatorOperatorRegisteredIterator, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + var operatorIdRule []interface{} + for _, operatorIdItem := range operatorId { + operatorIdRule = append(operatorIdRule, operatorIdItem) + } + + logs, sub, err := _ContractRegistryCoordinator.contract.FilterLogs(opts, "OperatorRegistered", operatorRule, operatorIdRule) + if err != nil { + return nil, err + } + return &ContractRegistryCoordinatorOperatorRegisteredIterator{contract: _ContractRegistryCoordinator.contract, event: "OperatorRegistered", logs: logs, sub: sub}, nil +} + +// WatchOperatorRegistered is a free log subscription operation binding the contract event 0xe8e68cef1c3a761ed7be7e8463a375f27f7bc335e51824223cacce636ec5c3fe. +// +// Solidity: event OperatorRegistered(address indexed operator, bytes32 indexed operatorId) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) WatchOperatorRegistered(opts *bind.WatchOpts, sink chan<- *ContractRegistryCoordinatorOperatorRegistered, operator []common.Address, operatorId [][32]byte) (event.Subscription, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + var operatorIdRule []interface{} + for _, operatorIdItem := range operatorId { + operatorIdRule = append(operatorIdRule, operatorIdItem) + } + + logs, sub, err := _ContractRegistryCoordinator.contract.WatchLogs(opts, "OperatorRegistered", operatorRule, operatorIdRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractRegistryCoordinatorOperatorRegistered) + if err := _ContractRegistryCoordinator.contract.UnpackLog(event, "OperatorRegistered", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseOperatorRegistered is a log parse operation binding the contract event 0xe8e68cef1c3a761ed7be7e8463a375f27f7bc335e51824223cacce636ec5c3fe. +// +// Solidity: event OperatorRegistered(address indexed operator, bytes32 indexed operatorId) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) ParseOperatorRegistered(log types.Log) (*ContractRegistryCoordinatorOperatorRegistered, error) { + event := new(ContractRegistryCoordinatorOperatorRegistered) + if err := _ContractRegistryCoordinator.contract.UnpackLog(event, "OperatorRegistered", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ContractRegistryCoordinatorOperatorSetParamsUpdatedIterator is returned from FilterOperatorSetParamsUpdated and is used to iterate over the raw logs and unpacked data for OperatorSetParamsUpdated events raised by the ContractRegistryCoordinator contract. +type ContractRegistryCoordinatorOperatorSetParamsUpdatedIterator struct { + Event *ContractRegistryCoordinatorOperatorSetParamsUpdated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractRegistryCoordinatorOperatorSetParamsUpdatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractRegistryCoordinatorOperatorSetParamsUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractRegistryCoordinatorOperatorSetParamsUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractRegistryCoordinatorOperatorSetParamsUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractRegistryCoordinatorOperatorSetParamsUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractRegistryCoordinatorOperatorSetParamsUpdated represents a OperatorSetParamsUpdated event raised by the ContractRegistryCoordinator contract. +type ContractRegistryCoordinatorOperatorSetParamsUpdated struct { + QuorumNumber uint8 + OperatorSetParams IRegistryCoordinatorOperatorSetParam + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOperatorSetParamsUpdated is a free log retrieval operation binding the contract event 0x3ee6fe8d54610244c3e9d3c066ae4aee997884aa28f10616ae821925401318ac. +// +// Solidity: event OperatorSetParamsUpdated(uint8 indexed quorumNumber, (uint32,uint16,uint16) operatorSetParams) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) FilterOperatorSetParamsUpdated(opts *bind.FilterOpts, quorumNumber []uint8) (*ContractRegistryCoordinatorOperatorSetParamsUpdatedIterator, error) { + + var quorumNumberRule []interface{} + for _, quorumNumberItem := range quorumNumber { + quorumNumberRule = append(quorumNumberRule, quorumNumberItem) + } + + logs, sub, err := _ContractRegistryCoordinator.contract.FilterLogs(opts, "OperatorSetParamsUpdated", quorumNumberRule) + if err != nil { + return nil, err + } + return &ContractRegistryCoordinatorOperatorSetParamsUpdatedIterator{contract: _ContractRegistryCoordinator.contract, event: "OperatorSetParamsUpdated", logs: logs, sub: sub}, nil +} + +// WatchOperatorSetParamsUpdated is a free log subscription operation binding the contract event 0x3ee6fe8d54610244c3e9d3c066ae4aee997884aa28f10616ae821925401318ac. +// +// Solidity: event OperatorSetParamsUpdated(uint8 indexed quorumNumber, (uint32,uint16,uint16) operatorSetParams) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) WatchOperatorSetParamsUpdated(opts *bind.WatchOpts, sink chan<- *ContractRegistryCoordinatorOperatorSetParamsUpdated, quorumNumber []uint8) (event.Subscription, error) { + + var quorumNumberRule []interface{} + for _, quorumNumberItem := range quorumNumber { + quorumNumberRule = append(quorumNumberRule, quorumNumberItem) + } + + logs, sub, err := _ContractRegistryCoordinator.contract.WatchLogs(opts, "OperatorSetParamsUpdated", quorumNumberRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractRegistryCoordinatorOperatorSetParamsUpdated) + if err := _ContractRegistryCoordinator.contract.UnpackLog(event, "OperatorSetParamsUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseOperatorSetParamsUpdated is a log parse operation binding the contract event 0x3ee6fe8d54610244c3e9d3c066ae4aee997884aa28f10616ae821925401318ac. +// +// Solidity: event OperatorSetParamsUpdated(uint8 indexed quorumNumber, (uint32,uint16,uint16) operatorSetParams) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) ParseOperatorSetParamsUpdated(log types.Log) (*ContractRegistryCoordinatorOperatorSetParamsUpdated, error) { + event := new(ContractRegistryCoordinatorOperatorSetParamsUpdated) + if err := _ContractRegistryCoordinator.contract.UnpackLog(event, "OperatorSetParamsUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ContractRegistryCoordinatorOperatorSocketUpdateIterator is returned from FilterOperatorSocketUpdate and is used to iterate over the raw logs and unpacked data for OperatorSocketUpdate events raised by the ContractRegistryCoordinator contract. +type ContractRegistryCoordinatorOperatorSocketUpdateIterator struct { + Event *ContractRegistryCoordinatorOperatorSocketUpdate // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractRegistryCoordinatorOperatorSocketUpdateIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractRegistryCoordinatorOperatorSocketUpdate) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractRegistryCoordinatorOperatorSocketUpdate) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractRegistryCoordinatorOperatorSocketUpdateIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractRegistryCoordinatorOperatorSocketUpdateIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractRegistryCoordinatorOperatorSocketUpdate represents a OperatorSocketUpdate event raised by the ContractRegistryCoordinator contract. +type ContractRegistryCoordinatorOperatorSocketUpdate struct { + OperatorId [32]byte + Socket string + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOperatorSocketUpdate is a free log retrieval operation binding the contract event 0xec2963ab21c1e50e1e582aa542af2e4bf7bf38e6e1403c27b42e1c5d6e621eaa. +// +// Solidity: event OperatorSocketUpdate(bytes32 indexed operatorId, string socket) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) FilterOperatorSocketUpdate(opts *bind.FilterOpts, operatorId [][32]byte) (*ContractRegistryCoordinatorOperatorSocketUpdateIterator, error) { + + var operatorIdRule []interface{} + for _, operatorIdItem := range operatorId { + operatorIdRule = append(operatorIdRule, operatorIdItem) + } + + logs, sub, err := _ContractRegistryCoordinator.contract.FilterLogs(opts, "OperatorSocketUpdate", operatorIdRule) + if err != nil { + return nil, err + } + return &ContractRegistryCoordinatorOperatorSocketUpdateIterator{contract: _ContractRegistryCoordinator.contract, event: "OperatorSocketUpdate", logs: logs, sub: sub}, nil +} + +// WatchOperatorSocketUpdate is a free log subscription operation binding the contract event 0xec2963ab21c1e50e1e582aa542af2e4bf7bf38e6e1403c27b42e1c5d6e621eaa. +// +// Solidity: event OperatorSocketUpdate(bytes32 indexed operatorId, string socket) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) WatchOperatorSocketUpdate(opts *bind.WatchOpts, sink chan<- *ContractRegistryCoordinatorOperatorSocketUpdate, operatorId [][32]byte) (event.Subscription, error) { + + var operatorIdRule []interface{} + for _, operatorIdItem := range operatorId { + operatorIdRule = append(operatorIdRule, operatorIdItem) + } + + logs, sub, err := _ContractRegistryCoordinator.contract.WatchLogs(opts, "OperatorSocketUpdate", operatorIdRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractRegistryCoordinatorOperatorSocketUpdate) + if err := _ContractRegistryCoordinator.contract.UnpackLog(event, "OperatorSocketUpdate", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseOperatorSocketUpdate is a log parse operation binding the contract event 0xec2963ab21c1e50e1e582aa542af2e4bf7bf38e6e1403c27b42e1c5d6e621eaa. +// +// Solidity: event OperatorSocketUpdate(bytes32 indexed operatorId, string socket) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) ParseOperatorSocketUpdate(log types.Log) (*ContractRegistryCoordinatorOperatorSocketUpdate, error) { + event := new(ContractRegistryCoordinatorOperatorSocketUpdate) + if err := _ContractRegistryCoordinator.contract.UnpackLog(event, "OperatorSocketUpdate", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ContractRegistryCoordinatorOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the ContractRegistryCoordinator contract. +type ContractRegistryCoordinatorOwnershipTransferredIterator struct { + Event *ContractRegistryCoordinatorOwnershipTransferred // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractRegistryCoordinatorOwnershipTransferredIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractRegistryCoordinatorOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractRegistryCoordinatorOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractRegistryCoordinatorOwnershipTransferredIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractRegistryCoordinatorOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractRegistryCoordinatorOwnershipTransferred represents a OwnershipTransferred event raised by the ContractRegistryCoordinator contract. +type ContractRegistryCoordinatorOwnershipTransferred struct { + PreviousOwner common.Address + NewOwner common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOwnershipTransferred is a free log retrieval operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*ContractRegistryCoordinatorOwnershipTransferredIterator, error) { + + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + } + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) + } + + logs, sub, err := _ContractRegistryCoordinator.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return &ContractRegistryCoordinatorOwnershipTransferredIterator{contract: _ContractRegistryCoordinator.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +// WatchOwnershipTransferred is a free log subscription operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ContractRegistryCoordinatorOwnershipTransferred, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { + + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + } + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) + } + + logs, sub, err := _ContractRegistryCoordinator.contract.WatchLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractRegistryCoordinatorOwnershipTransferred) + if err := _ContractRegistryCoordinator.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseOwnershipTransferred is a log parse operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) ParseOwnershipTransferred(log types.Log) (*ContractRegistryCoordinatorOwnershipTransferred, error) { + event := new(ContractRegistryCoordinatorOwnershipTransferred) + if err := _ContractRegistryCoordinator.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ContractRegistryCoordinatorPausedIterator is returned from FilterPaused and is used to iterate over the raw logs and unpacked data for Paused events raised by the ContractRegistryCoordinator contract. +type ContractRegistryCoordinatorPausedIterator struct { + Event *ContractRegistryCoordinatorPaused // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractRegistryCoordinatorPausedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractRegistryCoordinatorPaused) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractRegistryCoordinatorPaused) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractRegistryCoordinatorPausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractRegistryCoordinatorPausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractRegistryCoordinatorPaused represents a Paused event raised by the ContractRegistryCoordinator contract. +type ContractRegistryCoordinatorPaused struct { + Account common.Address + NewPausedStatus *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterPaused is a free log retrieval operation binding the contract event 0xab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d. +// +// Solidity: event Paused(address indexed account, uint256 newPausedStatus) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) FilterPaused(opts *bind.FilterOpts, account []common.Address) (*ContractRegistryCoordinatorPausedIterator, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _ContractRegistryCoordinator.contract.FilterLogs(opts, "Paused", accountRule) + if err != nil { + return nil, err + } + return &ContractRegistryCoordinatorPausedIterator{contract: _ContractRegistryCoordinator.contract, event: "Paused", logs: logs, sub: sub}, nil +} + +// WatchPaused is a free log subscription operation binding the contract event 0xab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d. +// +// Solidity: event Paused(address indexed account, uint256 newPausedStatus) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) WatchPaused(opts *bind.WatchOpts, sink chan<- *ContractRegistryCoordinatorPaused, account []common.Address) (event.Subscription, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _ContractRegistryCoordinator.contract.WatchLogs(opts, "Paused", accountRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractRegistryCoordinatorPaused) + if err := _ContractRegistryCoordinator.contract.UnpackLog(event, "Paused", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParsePaused is a log parse operation binding the contract event 0xab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d. +// +// Solidity: event Paused(address indexed account, uint256 newPausedStatus) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) ParsePaused(log types.Log) (*ContractRegistryCoordinatorPaused, error) { + event := new(ContractRegistryCoordinatorPaused) + if err := _ContractRegistryCoordinator.contract.UnpackLog(event, "Paused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ContractRegistryCoordinatorPauserRegistrySetIterator is returned from FilterPauserRegistrySet and is used to iterate over the raw logs and unpacked data for PauserRegistrySet events raised by the ContractRegistryCoordinator contract. +type ContractRegistryCoordinatorPauserRegistrySetIterator struct { + Event *ContractRegistryCoordinatorPauserRegistrySet // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractRegistryCoordinatorPauserRegistrySetIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractRegistryCoordinatorPauserRegistrySet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractRegistryCoordinatorPauserRegistrySet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractRegistryCoordinatorPauserRegistrySetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractRegistryCoordinatorPauserRegistrySetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractRegistryCoordinatorPauserRegistrySet represents a PauserRegistrySet event raised by the ContractRegistryCoordinator contract. +type ContractRegistryCoordinatorPauserRegistrySet struct { + PauserRegistry common.Address + NewPauserRegistry common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterPauserRegistrySet is a free log retrieval operation binding the contract event 0x6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6. +// +// Solidity: event PauserRegistrySet(address pauserRegistry, address newPauserRegistry) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) FilterPauserRegistrySet(opts *bind.FilterOpts) (*ContractRegistryCoordinatorPauserRegistrySetIterator, error) { + + logs, sub, err := _ContractRegistryCoordinator.contract.FilterLogs(opts, "PauserRegistrySet") + if err != nil { + return nil, err + } + return &ContractRegistryCoordinatorPauserRegistrySetIterator{contract: _ContractRegistryCoordinator.contract, event: "PauserRegistrySet", logs: logs, sub: sub}, nil +} + +// WatchPauserRegistrySet is a free log subscription operation binding the contract event 0x6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6. +// +// Solidity: event PauserRegistrySet(address pauserRegistry, address newPauserRegistry) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) WatchPauserRegistrySet(opts *bind.WatchOpts, sink chan<- *ContractRegistryCoordinatorPauserRegistrySet) (event.Subscription, error) { + + logs, sub, err := _ContractRegistryCoordinator.contract.WatchLogs(opts, "PauserRegistrySet") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractRegistryCoordinatorPauserRegistrySet) + if err := _ContractRegistryCoordinator.contract.UnpackLog(event, "PauserRegistrySet", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParsePauserRegistrySet is a log parse operation binding the contract event 0x6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6. +// +// Solidity: event PauserRegistrySet(address pauserRegistry, address newPauserRegistry) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) ParsePauserRegistrySet(log types.Log) (*ContractRegistryCoordinatorPauserRegistrySet, error) { + event := new(ContractRegistryCoordinatorPauserRegistrySet) + if err := _ContractRegistryCoordinator.contract.UnpackLog(event, "PauserRegistrySet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ContractRegistryCoordinatorQuorumBlockNumberUpdatedIterator is returned from FilterQuorumBlockNumberUpdated and is used to iterate over the raw logs and unpacked data for QuorumBlockNumberUpdated events raised by the ContractRegistryCoordinator contract. +type ContractRegistryCoordinatorQuorumBlockNumberUpdatedIterator struct { + Event *ContractRegistryCoordinatorQuorumBlockNumberUpdated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractRegistryCoordinatorQuorumBlockNumberUpdatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractRegistryCoordinatorQuorumBlockNumberUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractRegistryCoordinatorQuorumBlockNumberUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractRegistryCoordinatorQuorumBlockNumberUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractRegistryCoordinatorQuorumBlockNumberUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractRegistryCoordinatorQuorumBlockNumberUpdated represents a QuorumBlockNumberUpdated event raised by the ContractRegistryCoordinator contract. +type ContractRegistryCoordinatorQuorumBlockNumberUpdated struct { + QuorumNumber uint8 + Blocknumber *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterQuorumBlockNumberUpdated is a free log retrieval operation binding the contract event 0x46077d55330763f16269fd75e5761663f4192d2791747c0189b16ad31db07db4. +// +// Solidity: event QuorumBlockNumberUpdated(uint8 indexed quorumNumber, uint256 blocknumber) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) FilterQuorumBlockNumberUpdated(opts *bind.FilterOpts, quorumNumber []uint8) (*ContractRegistryCoordinatorQuorumBlockNumberUpdatedIterator, error) { + + var quorumNumberRule []interface{} + for _, quorumNumberItem := range quorumNumber { + quorumNumberRule = append(quorumNumberRule, quorumNumberItem) + } + + logs, sub, err := _ContractRegistryCoordinator.contract.FilterLogs(opts, "QuorumBlockNumberUpdated", quorumNumberRule) + if err != nil { + return nil, err + } + return &ContractRegistryCoordinatorQuorumBlockNumberUpdatedIterator{contract: _ContractRegistryCoordinator.contract, event: "QuorumBlockNumberUpdated", logs: logs, sub: sub}, nil +} + +// WatchQuorumBlockNumberUpdated is a free log subscription operation binding the contract event 0x46077d55330763f16269fd75e5761663f4192d2791747c0189b16ad31db07db4. +// +// Solidity: event QuorumBlockNumberUpdated(uint8 indexed quorumNumber, uint256 blocknumber) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) WatchQuorumBlockNumberUpdated(opts *bind.WatchOpts, sink chan<- *ContractRegistryCoordinatorQuorumBlockNumberUpdated, quorumNumber []uint8) (event.Subscription, error) { + + var quorumNumberRule []interface{} + for _, quorumNumberItem := range quorumNumber { + quorumNumberRule = append(quorumNumberRule, quorumNumberItem) + } + + logs, sub, err := _ContractRegistryCoordinator.contract.WatchLogs(opts, "QuorumBlockNumberUpdated", quorumNumberRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractRegistryCoordinatorQuorumBlockNumberUpdated) + if err := _ContractRegistryCoordinator.contract.UnpackLog(event, "QuorumBlockNumberUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseQuorumBlockNumberUpdated is a log parse operation binding the contract event 0x46077d55330763f16269fd75e5761663f4192d2791747c0189b16ad31db07db4. +// +// Solidity: event QuorumBlockNumberUpdated(uint8 indexed quorumNumber, uint256 blocknumber) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) ParseQuorumBlockNumberUpdated(log types.Log) (*ContractRegistryCoordinatorQuorumBlockNumberUpdated, error) { + event := new(ContractRegistryCoordinatorQuorumBlockNumberUpdated) + if err := _ContractRegistryCoordinator.contract.UnpackLog(event, "QuorumBlockNumberUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ContractRegistryCoordinatorUnpausedIterator is returned from FilterUnpaused and is used to iterate over the raw logs and unpacked data for Unpaused events raised by the ContractRegistryCoordinator contract. +type ContractRegistryCoordinatorUnpausedIterator struct { + Event *ContractRegistryCoordinatorUnpaused // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ContractRegistryCoordinatorUnpausedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ContractRegistryCoordinatorUnpaused) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ContractRegistryCoordinatorUnpaused) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ContractRegistryCoordinatorUnpausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ContractRegistryCoordinatorUnpausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ContractRegistryCoordinatorUnpaused represents a Unpaused event raised by the ContractRegistryCoordinator contract. +type ContractRegistryCoordinatorUnpaused struct { + Account common.Address + NewPausedStatus *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUnpaused is a free log retrieval operation binding the contract event 0x3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c. +// +// Solidity: event Unpaused(address indexed account, uint256 newPausedStatus) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) FilterUnpaused(opts *bind.FilterOpts, account []common.Address) (*ContractRegistryCoordinatorUnpausedIterator, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _ContractRegistryCoordinator.contract.FilterLogs(opts, "Unpaused", accountRule) + if err != nil { + return nil, err + } + return &ContractRegistryCoordinatorUnpausedIterator{contract: _ContractRegistryCoordinator.contract, event: "Unpaused", logs: logs, sub: sub}, nil +} + +// WatchUnpaused is a free log subscription operation binding the contract event 0x3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c. +// +// Solidity: event Unpaused(address indexed account, uint256 newPausedStatus) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) WatchUnpaused(opts *bind.WatchOpts, sink chan<- *ContractRegistryCoordinatorUnpaused, account []common.Address) (event.Subscription, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _ContractRegistryCoordinator.contract.WatchLogs(opts, "Unpaused", accountRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ContractRegistryCoordinatorUnpaused) + if err := _ContractRegistryCoordinator.contract.UnpackLog(event, "Unpaused", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseUnpaused is a log parse operation binding the contract event 0x3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c. +// +// Solidity: event Unpaused(address indexed account, uint256 newPausedStatus) +func (_ContractRegistryCoordinator *ContractRegistryCoordinatorFilterer) ParseUnpaused(log types.Log) (*ContractRegistryCoordinatorUnpaused, error) { + event := new(ContractRegistryCoordinatorUnpaused) + if err := _ContractRegistryCoordinator.contract.UnpackLog(event, "Unpaused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/contracts/bindings/StakeRegistry/binding.go b/contracts/bindings/StakeRegistry/binding.go index 98f57e026f..e8f6a516ed 100644 --- a/contracts/bindings/StakeRegistry/binding.go +++ b/contracts/bindings/StakeRegistry/binding.go @@ -29,23 +29,23 @@ var ( _ = abi.ConvertType ) -// IStakeRegistryOperatorStakeUpdate is an auto generated low-level Go binding around an user-defined struct. -type IStakeRegistryOperatorStakeUpdate struct { +// IStakeRegistryStakeUpdate is an auto generated low-level Go binding around an user-defined struct. +type IStakeRegistryStakeUpdate struct { UpdateBlockNumber uint32 NextUpdateBlockNumber uint32 Stake *big.Int } -// IVoteWeigherStrategyAndWeightingMultiplier is an auto generated low-level Go binding around an user-defined struct. -type IVoteWeigherStrategyAndWeightingMultiplier struct { +// IStakeRegistryStrategyParams is an auto generated low-level Go binding around an user-defined struct. +type IStakeRegistryStrategyParams struct { Strategy common.Address Multiplier *big.Int } // ContractStakeRegistryMetaData contains all meta data concerning the ContractStakeRegistry contract. var ContractStakeRegistryMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"contractIRegistryCoordinator\",\"name\":\"_registryCoordinator\",\"type\":\"address\"},{\"internalType\":\"contractIStrategyManager\",\"name\":\"_strategyManager\",\"type\":\"address\"},{\"internalType\":\"contractIServiceManager\",\"name\":\"_serviceManager\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"minimumStake\",\"type\":\"uint96\"}],\"name\":\"MinimumStakeForQuorumUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"}],\"name\":\"QuorumCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"operatorId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"stake\",\"type\":\"uint96\"}],\"name\":\"StakeUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"contractIStrategy\",\"name\":\"strategy\",\"type\":\"address\"}],\"name\":\"StrategyAddedToQuorum\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"contractIStrategy\",\"name\":\"strategy\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"multiplier\",\"type\":\"uint256\"}],\"name\":\"StrategyMultiplierUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"contractIStrategy\",\"name\":\"strategy\",\"type\":\"address\"}],\"name\":\"StrategyRemovedFromQuorum\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MAX_QUORUM_COUNT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_WEIGHING_FUNCTION_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WEIGHTING_DIVISOR\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"},{\"components\":[{\"internalType\":\"contractIStrategy\",\"name\":\"strategy\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"multiplier\",\"type\":\"uint96\"}],\"internalType\":\"structIVoteWeigher.StrategyAndWeightingMultiplier[]\",\"name\":\"_newStrategiesConsideredAndMultipliers\",\"type\":\"tuple[]\"}],\"name\":\"addStrategiesConsideredAndMultipliers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"contractIStrategy\",\"name\":\"strategy\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"multiplier\",\"type\":\"uint96\"}],\"internalType\":\"structIVoteWeigher.StrategyAndWeightingMultiplier[]\",\"name\":\"_strategiesConsideredAndMultipliers\",\"type\":\"tuple[]\"}],\"name\":\"createQuorum\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delegation\",\"outputs\":[{\"internalType\":\"contractIDelegationManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"operatorId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"quorumNumbers\",\"type\":\"bytes\"}],\"name\":\"deregisterOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"operatorId\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"}],\"name\":\"getCurrentOperatorStakeForQuorum\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"\",\"type\":\"uint96\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"}],\"name\":\"getCurrentTotalStakeForQuorum\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"\",\"type\":\"uint96\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"operatorId\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"}],\"name\":\"getLengthOfOperatorIdStakeHistoryForQuorum\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"}],\"name\":\"getLengthOfTotalStakeHistoryForQuorum\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"operatorId\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"}],\"name\":\"getMostRecentStakeUpdateByOperatorId\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"updateBlockNumber\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"nextUpdateBlockNumber\",\"type\":\"uint32\"},{\"internalType\":\"uint96\",\"name\":\"stake\",\"type\":\"uint96\"}],\"internalType\":\"structIStakeRegistry.OperatorStakeUpdate\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"operatorId\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"}],\"name\":\"getOperatorIdToStakeHistory\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"updateBlockNumber\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"nextUpdateBlockNumber\",\"type\":\"uint32\"},{\"internalType\":\"uint96\",\"name\":\"stake\",\"type\":\"uint96\"}],\"internalType\":\"structIStakeRegistry.OperatorStakeUpdate[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"operatorId\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"blockNumber\",\"type\":\"uint32\"}],\"name\":\"getStakeForOperatorIdForQuorumAtBlockNumber\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"\",\"type\":\"uint96\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"blockNumber\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"operatorId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getStakeForQuorumAtBlockNumberFromOperatorIdAndIndex\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"\",\"type\":\"uint96\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"operatorId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getStakeUpdateForQuorumFromOperatorIdAndIndex\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"updateBlockNumber\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"nextUpdateBlockNumber\",\"type\":\"uint32\"},{\"internalType\":\"uint96\",\"name\":\"stake\",\"type\":\"uint96\"}],\"internalType\":\"structIStakeRegistry.OperatorStakeUpdate\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"operatorId\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"blockNumber\",\"type\":\"uint32\"}],\"name\":\"getStakeUpdateIndexForOperatorIdForQuorumAtBlockNumber\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"blockNumber\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getTotalStakeAtBlockNumberFromIndex\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"\",\"type\":\"uint96\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"blockNumber\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"quorumNumbers\",\"type\":\"bytes\"}],\"name\":\"getTotalStakeIndicesByQuorumNumbersAtBlockNumber\",\"outputs\":[{\"internalType\":\"uint32[]\",\"name\":\"\",\"type\":\"uint32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getTotalStakeUpdateForQuorumFromIndex\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"updateBlockNumber\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"nextUpdateBlockNumber\",\"type\":\"uint32\"},{\"internalType\":\"uint96\",\"name\":\"stake\",\"type\":\"uint96\"}],\"internalType\":\"structIStakeRegistry.OperatorStakeUpdate\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint96[]\",\"name\":\"_minimumStakeForQuorum\",\"type\":\"uint96[]\"},{\"components\":[{\"internalType\":\"contractIStrategy\",\"name\":\"strategy\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"multiplier\",\"type\":\"uint96\"}],\"internalType\":\"structIVoteWeigher.StrategyAndWeightingMultiplier[][]\",\"name\":\"_quorumStrategiesConsideredAndMultipliers\",\"type\":\"tuple[][]\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"minimumStakeForQuorum\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"\",\"type\":\"uint96\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"},{\"internalType\":\"uint256[]\",\"name\":\"strategyIndices\",\"type\":\"uint256[]\"},{\"internalType\":\"uint96[]\",\"name\":\"newMultipliers\",\"type\":\"uint96[]\"}],\"name\":\"modifyStrategyWeights\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"quorumCount\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"operatorId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"quorumNumbers\",\"type\":\"bytes\"}],\"name\":\"registerOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"registryCoordinator\",\"outputs\":[{\"internalType\":\"contractIRegistryCoordinator\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"},{\"internalType\":\"uint256[]\",\"name\":\"indicesToRemove\",\"type\":\"uint256[]\"}],\"name\":\"removeStrategiesConsideredAndMultipliers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"serviceManager\",\"outputs\":[{\"internalType\":\"contractIServiceManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"},{\"internalType\":\"uint96\",\"name\":\"minimumStake\",\"type\":\"uint96\"}],\"name\":\"setMinimumStakeForQuorum\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"slasher\",\"outputs\":[{\"internalType\":\"contractISlasher\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"strategiesConsideredAndMultipliers\",\"outputs\":[{\"internalType\":\"contractIStrategy\",\"name\":\"strategy\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"multiplier\",\"type\":\"uint96\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"}],\"name\":\"strategiesConsideredAndMultipliersLength\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"strategyAndWeightingMultiplierForQuorumByIndex\",\"outputs\":[{\"components\":[{\"internalType\":\"contractIStrategy\",\"name\":\"strategy\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"multiplier\",\"type\":\"uint96\"}],\"internalType\":\"structIVoteWeigher.StrategyAndWeightingMultiplier\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"strategyManager\",\"outputs\":[{\"internalType\":\"contractIStrategyManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"operators\",\"type\":\"address[]\"}],\"name\":\"updateStakes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"weightOfOperatorForQuorum\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"\",\"type\":\"uint96\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"quorumNumber\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"weightOfOperatorForQuorumView\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"\",\"type\":\"uint96\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x6101206040523480156200001257600080fd5b50604051620040f6380380620040f683398101604081905262000035916200024a565b8282828181816001600160a01b031660a0816001600160a01b031681525050816001600160a01b031663df5cf7236040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000093573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000b991906200029e565b6001600160a01b03166080816001600160a01b031681525050816001600160a01b031663b13442716040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000111573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200013791906200029e565b6001600160a01b0390811660c052811660e052620001546200016f565b505050506001600160a01b03166101005250620002c5915050565b600054610100900460ff1615620001dc5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811610156200022f576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200024757600080fd5b50565b6000806000606084860312156200026057600080fd5b83516200026d8162000231565b6020850151909350620002808162000231565b6040850151909250620002938162000231565b809150509250925092565b600060208284031215620002b157600080fd5b8151620002be8162000231565b9392505050565b60805160a05160c05160e05161010051613da662000350600039600081816103b3015281816109340152818161185301528181611c0a0152611cea0152600081816102e201528181610bf001528181610f820152818161154a0152818161169e015261178a01526000610510015260006103210152600081816105bc01526107cf0152613da66000f3fe608060405234801561001057600080fd5b50600436106102275760003560e01c8063944472a911610130578063bd29b8cd116100b8578063df5cf7231161007c578063df5cf723146105b7578063e192e9ad146105de578063e25427dd146105fe578063e89c0a0014610611578063eb92199c1461062457600080fd5b8063bd29b8cd14610558578063c8294c561461056b578063c8f739d01461057e578063cd050d9c14610591578063ce977ec3146105a457600080fd5b8063a43cde89116100ff578063a43cde89146104f0578063a673466714610503578063b13442711461050b578063bba549fa14610532578063bc9a40c31461054557600080fd5b8063944472a91461047357806399eed4ee146104935780639aa1653d146104a65780639e8ca620146104cd57600080fd5b806348085866116101b35780636d14a987116101825780636d14a987146103ae5780636e8f03ca146103d55780637c172347146104065780637cc0d75f146104205780637ed9430f1461046057600080fd5b806348085866146103435780635e5a67751461036b5780635f2948ec146103885780636ab538d41461039b57600080fd5b806325504777116101fa57806325504777146102a25780632b3d8816146102b75780632c2a5d2b146102ca5780633998fdd3146102dd57806339b70e381461031c57600080fd5b80631b3272251461022c5780631de680181461025c5780631f9b74e01461026f578063248d657314610282575b600080fd5b61023f61023a366004613189565b610645565b6040516001600160601b0390911681526020015b60405180910390f35b61023f61026a3660046131da565b6106a9565b61023f61027d3660046131da565b6106ea565b610295610290366004613211565b610890565b6040516102539190613244565b6102b56102b03660046132c1565b610929565b005b6102b56102c5366004613360565b610bee565b6102b56102d83660046133b2565b610f80565b6103047f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610253565b6103047f000000000000000000000000000000000000000000000000000000000000000081565b610356610351366004613189565b6112b6565b60405163ffffffff9091168152602001610253565b61037a670de0b6b3a764000081565b604051908152602001610253565b6102b56103963660046135f8565b6112cb565b61023f6103a93660046136b7565b6113e0565b6103047f000000000000000000000000000000000000000000000000000000000000000081565b61037a6103e33660046136b7565b60009182526101b36020908152604080842060ff93909316845291905290205490565b61040e602081565b60405160ff9091168152602001610253565b61043361042e3660046136e3565b6113fb565b6040805182516001600160a01b031681526020928301516001600160601b03169281019290925201610253565b61023f61046e36600461370d565b611475565b6104866104813660046136b7565b6114a9565b6040516102539190613726565b6102b56104a136600461379e565b611548565b6000546104ba9062010000900461ffff1681565b60405161ffff9091168152602001610253565b61037a6104db3660046137d2565b60ff1660009081526001602052604090205490565b61023f6104fe3660046137ed565b611606565b61040e60c081565b6103047f000000000000000000000000000000000000000000000000000000000000000081565b6102b561054036600461382f565b61169c565b6102b5610553366004613872565b611788565b6102b561056636600461389c565b611848565b61023f6105793660046138da565b6119df565b61023f61058c3660046137d2565b611a6e565b61029561059f3660046136b7565b611adf565b6102b56105b2366004613916565b611bc6565b6103047f000000000000000000000000000000000000000000000000000000000000000081565b6105f16105ec366004613957565b611ea6565b6040516102539190613990565b61029561060c3660046136e3565b612113565b61037a61061f3660046137d2565b6121ab565b6106376106323660046136e3565b6121cc565b6040516102539291906139ce565b60008381526101b36020908152604080832060ff86168452909152812061066d858585612215565b63ffffffff1681548110610683576106836139f0565b600091825260209091200154600160401b90046001600160601b031690505b9392505050565b60008054839062010000900461ffff1660ff8216106106e35760405162461bcd60e51b81526004016106da90613a06565b60405180910390fd5b5092915050565b60008054839062010000900461ffff1660ff82161061071b5760405162461bcd60e51b81526004016106da90613a06565b60ff84166000908152600160209081526040808320548151808301909252838252918101839052825b828110156108845760ff88166000908152600160205260409020805482908110610770576107706139f0565b6000918252602080832060408051808201825293909101546001600160a01b03808216808652600160a01b9092046001600160601b031693850193909352905163778e55f360e01b81528b8316600482015260248101919091529194507f0000000000000000000000000000000000000000000000000000000000000000169063778e55f390604401602060405180830381865afa158015610816573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083a9190613a63565b9050801561087b57670de0b6b3a764000083602001516001600160601b0316826108649190613a92565b61086e9190613ab1565b6108789086613ad3565b94505b50600101610744565b50919695505050505050565b60408051606081018252600080825260208083018290528284018290528582526101b3815283822060ff881683529052919091208054839081106108d6576108d66139f0565b600091825260209182902060408051606081018252929091015463ffffffff8082168452600160201b82041693830193909352600160401b9092046001600160601b031691810191909152949350505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109715760405162461bcd60e51b81526004016106da90613afe565b60005462010000900461ffff16828261098b600182613b70565b81811061099a5761099a6139f0565b9050013560f81c60f81b60f81c60ff1610610a3a5760405162461bcd60e51b815260206004820152605460248201527f5374616b6552656769737472792e5f72656769737465724f70657261746f723a60448201527f2067726561746573742071756f72756d4e756d626572206d757374206265206c606482015273195cdcc81d1a185b881c5d5bdc9d5b50dbdd5b9d60621b608482015260a4016106da565b604080516060810182526000602082018190529181018290524363ffffffff168152905b60ff8116831115610be657600084848360ff16818110610a8057610a806139f0565b919091013560f81c915060009050610a9988888461253c565b9150506001600160601b038116610b3e5760405162461bcd60e51b815260206004820152605c60248201527f5374616b6552656769737472792e5f72656769737465724f70657261746f723a60448201527f204f70657261746f7220646f6573206e6f74206d656574206d696e696d756d2060648201527f7374616b6520726571756972656d656e7420666f722071756f72756d00000000608482015260a4016106da565b600060b38360ff166101008110610b5757610b576139f0565b01549050818115610bbe5760b38460ff166101008110610b7957610b796139f0565b01610b85600184613b70565b81548110610b9557610b956139f0565b600091825260209091200154610bbb90600160401b90046001600160601b031682613ad3565b90505b6001600160601b0381166040870152610bd78487612641565b84600101945050505050610a5e565b505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c709190613b87565b6001600160a01b0316336001600160a01b031614610ca05760405162461bcd60e51b81526004016106da90613ba4565b600054839062010000900461ffff1660ff821610610cd05760405162461bcd60e51b81526004016106da90613a06565b8180610d6a5760405162461bcd60e51b815260206004820152605760248201527f566f746557656967686572426173652e72656d6f76655374726174656769657360448201527f436f6e73696465726564416e644d756c7469706c696572733a206e6f20696e6460648201527f6963657320746f2072656d6f76652070726f7669646564000000000000000000608482015260a4016106da565b60005b81811015610be65760ff861660008181526001602052604090207f31fa2e2cd280c9375e13ffcf3d81e2378100186e4058f8d3ddb690b82dcd31f790878785818110610dbb57610dbb6139f0565b9050602002013581548110610dd257610dd26139f0565b600091825260209182902001546040516001600160a01b0390911681520160405180910390a260ff861660008181526001602052604090207f11a5641322da1dff56a4b66eaac31ffa465295ece907cd163437793b4d009a7590878785818110610e3e57610e3e6139f0565b9050602002013581548110610e5557610e556139f0565b600091825260208083209190910154604080516001600160a01b039092168252918101929092520160405180910390a260ff8616600090815260016020819052604090912080549091610ea791613b70565b81548110610eb757610eb76139f0565b6000918252602080832060ff8a16845260019091526040909220910190868684818110610ee657610ee66139f0565b9050602002013581548110610efd57610efd6139f0565b600091825260208083208454920180546001600160a01b0319166001600160a01b03909316928317815593546001600160601b03600160a01b91829004160290911790925560ff88168152600190915260409020805480610f6057610f60613c20565b600082815260208120820160001990810191909155019055600101610d6d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fde573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110029190613b87565b6001600160a01b0316336001600160a01b0316146110325760405162461bcd60e51b81526004016106da90613ba4565b600054859062010000900461ffff1660ff8216106110625760405162461bcd60e51b81526004016106da90613a06565b83806110e25760405162461bcd60e51b815260206004820152604360248201527f566f746557656967686572426173652e6d6f646966795374726174656779576560448201527f69676874733a206e6f20737472617465677920696e64696365732070726f766960648201526219195960ea1b608482015260a4016106da565b8281146111575760405162461bcd60e51b815260206004820152603c60248201527f566f746557656967686572426173652e6d6f646966795374726174656779576560448201527f69676874733a20696e707574206c656e677468206d69736d617463680000000060648201526084016106da565b60005b818110156112ac57848482818110611174576111746139f0565b90506020020160208101906111899190613c36565b60ff891660009081526001602052604090208888848181106111ad576111ad6139f0565b90506020020135815481106111c4576111c46139f0565b6000918252602080832090910180546001600160601b0394909416600160a01b026001600160a01b039094169390931790925560ff8a168082526001909252604090207f11a5641322da1dff56a4b66eaac31ffa465295ece907cd163437793b4d009a759089898581811061123b5761123b6139f0565b9050602002013581548110611252576112526139f0565b6000918252602090912001546001600160a01b0316878785818110611279576112796139f0565b905060200201602081019061128e9190613c36565b60405161129c9291906139ce565b60405180910390a260010161115a565b5050505050505050565b60006112c3848484612215565b949350505050565b600054610100900460ff16158080156112eb5750600054600160ff909116105b806113055750303b158015611305575060005460ff166001145b6113685760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106da565b6000805460ff19166001179055801561138b576000805461ff0019166101001790555b611395838361275b565b80156113db576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6000806113ed8484611adf565b604001519150505b92915050565b604080518082019091526000808252602082015260ff83166000908152600160205260409020805483908110611433576114336139f0565b6000918252602091829020604080518082019091529101546001600160a01b0381168252600160a01b90046001600160601b0316918101919091529392505050565b603381610100811061148657600080fd5b60029182820401919006600c02915054906101000a90046001600160601b031681565b60008281526101b36020908152604080832060ff851684528252808320805482518185028101850190935280835260609492939192909184015b8282101561153c576000848152602090819020604080516060810182529185015463ffffffff8082168452600160201b82041683850152600160401b90046001600160601b0316908201528252600190920191016114e3565b50505050905092915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ca9190613b87565b6001600160a01b0316336001600160a01b0316146115fa5760405162461bcd60e51b81526004016106da90613ba4565b6116038161289f565b50565b60008281526101b36020908152604080832060ff881684529091528120805482919084908110611638576116386139f0565b600091825260209182902060408051606081018252919092015463ffffffff8082168352600160201b820416938201939093526001600160601b03600160401b9093049290921690820152905061168f818661299f565b6040015195945050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171e9190613b87565b6001600160a01b0316336001600160a01b03161461174e5760405162461bcd60e51b81526004016106da90613ba4565b600054829062010000900461ffff1660ff82161061177e5760405162461bcd60e51b81526004016106da90613a06565b6113db8383612b20565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061180a9190613b87565b6001600160a01b0316336001600160a01b03161461183a5760405162461bcd60e51b81526004016106da90613ba4565b6118448282612f52565b5050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146118905760405162461bcd60e51b81526004016106da90613afe565b60408051606080820183526000602080840182905283850182905263ffffffff43168085528551938401865290830182905293820181905292815290915b60ff8116841115610be657600085858360ff168181106118f0576118f06139f0565b919091013560f81c915060009050611909888387612fe7565b90508060b38360ff166101008110611923576119236139f0565b01600160b38560ff16610100811061193d5761193d6139f0565b01546119499190613b70565b81548110611959576119596139f0565b60009182526020909120015461197f9190600160401b90046001600160601b0316613c51565b6001600160601b031660408501526119978285612641565b6040805160ff841681526000602082015289917fe7c60c52692f0e0ff8d1c289ffe63cb02e79373f35e3000cafe7cca898885934910160405180910390a250506001016118ce565b60008060b38560ff1661010081106119f9576119f96139f0565b018381548110611a0b57611a0b6139f0565b600091825260209182902060408051606081018252919092015463ffffffff8082168352600160201b820416938201939093526001600160601b03600160401b90930492909216908201529050611a62818561299f565b60400151949350505050565b600060b38260ff166101008110611a8757611a876139f0565b01600160b38460ff166101008110611aa157611aa16139f0565b0154611aad9190613b70565b81548110611abd57611abd6139f0565b600091825260209091200154600160401b90046001600160601b031692915050565b6040805160608082018352600080835260208084018290528385018290528682526101b3815284822060ff87168352815284822054855193840186528284529083018290529382015290919081611b395791506113f59050565b60008581526101b36020908152604080832060ff881684529091529020611b61600184613b70565b81548110611b7157611b716139f0565b600091825260209182902060408051606081018252919092015463ffffffff8082168352600160201b820416938201939093526001600160601b03600160401b909304929092169082015292506113f5915050565b60005b60005462010000900461ffff1660ff821610156113db5760408051606081018252600080825260208201819052918101829052905b83811015611e855760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166313542a4e878785818110611c4957611c496139f0565b9050602002016020810190611c5e9190613c79565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611ca2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc69190613a63565b604051633431af2560e01b8152600481018290529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633431af2590602401602060405180830381865afa158015611d31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d559190613c96565b905060016001600160c01b03821660ff87161c81161415611e7b57835163ffffffff16611e175760b38560ff166101008110611d9357611d936139f0565b01600160b38760ff166101008110611dad57611dad6139f0565b0154611db99190613b70565b81548110611dc957611dc96139f0565b600091825260209182902060408051606081018252919092015463ffffffff8082168352600160201b820416938201939093526001600160601b03600160401b909304929092169082015293505b600080611e4b898987818110611e2f57611e2f6139f0565b9050602002016020810190611e449190613c79565b858961253c565b9150915080828760400151611e609190613c51565b611e6a9190613ad3565b6001600160601b0316604087015250505b5050600101611bfe565b50805163ffffffff1615611e9d57611e9d8282612641565b50600101611bc9565b60606000826001600160401b03811115611ec257611ec2613432565b604051908082528060200260200182016040528015611eeb578160200160208202803683370190505b50905060005b8381101561210a576000858583818110611f0d57611f0d6139f0565b919091013560f81c91505063ffffffff871660b3826101008110611f3357611f336139f0565b01600081548110611f4657611f466139f0565b60009182526020909120015463ffffffff1611156120055760405162461bcd60e51b815260206004820152606a60248201527f5374616b6552656769737472792e676574546f74616c5374616b65496e64696360448201527f6573427951756f72756d4e756d626572734174426c6f636b4e756d6265723a2060648201527f71756f72756d20686173206e6f207374616b6520686973746f727920617420626084820152693637b1b5a73ab6b132b960b11b60a482015260c4016106da565b600060b38260ff16610100811061201e5761201e6139f0565b0154905060005b8163ffffffff168163ffffffff1610156120f4578863ffffffff1660b38460ff166101008110612057576120576139f0565b0160016120648486613cbf565b61206e9190613cbf565b63ffffffff1681548110612084576120846139f0565b60009182526020909120015463ffffffff16116120e25760016120a78284613cbf565b6120b19190613cbf565b8585815181106120c3576120c36139f0565b602002602001019063ffffffff16908163ffffffff16815250506120f4565b806120ec81613cdc565b915050612025565b505050808061210290613d00565b915050611ef1565b50949350505050565b604080516060810182526000808252602082018190529181019190915260b38360ff166101008110612147576121476139f0565b018281548110612159576121596139f0565b600091825260209182902060408051606081018252929091015463ffffffff8082168452600160201b82041693830193909352600160401b9092046001600160601b0316918101919091529392505050565b600060b38260ff1661010081106121c4576121c46139f0565b015492915050565b600160205281600052604060002081815481106121e857600080fd5b6000918252602090912001546001600160a01b0381169250600160a01b90046001600160601b0316905082565b60008381526101b36020908152604080832060ff86168452909152812054815b8163ffffffff168163ffffffff16101561246c5760008681526101b36020908152604080832060ff89168452909152902063ffffffff851690600161227a8486613cbf565b6122849190613cbf565b63ffffffff168154811061229a5761229a6139f0565b60009182526020909120015463ffffffff161161245a5760008681526101b36020908152604080832060ff89168452909152902060016122da8385613cbf565b6122e49190613cbf565b63ffffffff16815481106122fa576122fa6139f0565b600091825260209091200154600160201b900463ffffffff161580612386575060008681526101b36020908152604080832060ff89168452909152902063ffffffff851690600161234b8486613cbf565b6123559190613cbf565b63ffffffff168154811061236b5761236b6139f0565b600091825260209091200154600160201b900463ffffffff16115b61243b5760405162461bcd60e51b815260206004820152607460248201527f5374616b6552656769737472792e5f6765745374616b65557064617465496e6460448201527f6578466f724f70657261746f724964466f7251756f72756d4174426c6f636b4e60648201527f756d6265723a206f70657261746f72496420686173206e6f207374616b652075608482015273383230ba329030ba10313637b1b5a73ab6b132b960611b60a482015260c4016106da565b60016124478284613cbf565b6124519190613cbf565b925050506106a2565b8061246481613cdc565b915050612235565b5060405162461bcd60e51b815260206004820152608c60248201527f5374616b6552656769737472792e5f6765745374616b65557064617465496e6460448201527f6578466f724f70657261746f724964466f7251756f72756d4174426c6f636b4e60648201527f756d6265723a206e6f207374616b652075706461746520666f756e6420666f7260848201527f206f70657261746f72496420616e642071756f72756d4e756d6265722061742060a48201526b313637b1b590373ab6b132b960a11b60c482015260e4016106da565b604080516060810182526000602082018190529181018290524363ffffffff168152819061256a84876106ea565b6001600160601b03166040820152603360ff8516610100811061258f5761258f6139f0565b60029182820401919006600c029054906101000a90046001600160601b03166001600160601b031681604001516001600160601b031610156125d357600060408201525b60006125e0868684612fe7565b604080840151815160ff891681526001600160601b03909116602082015291925087917fe7c60c52692f0e0ff8d1c289ffe63cb02e79373f35e3000cafe7cca898885934910160405180910390a26040909101519092509050935093915050565b600060b38360ff16610100811061265a5761265a6139f0565b0154905080156126c4574360b38460ff16610100811061267c5761267c6139f0565b01612688600184613b70565b81548110612698576126986139f0565b9060005260206000200160000160046101000a81548163ffffffff021916908363ffffffff1602179055505b63ffffffff4316825260b360ff841661010081106126e4576126e46139f0565b0180546001810182556000918252602091829020845191018054928501516040909501516001600160601b0316600160401b026bffffffffffffffffffffffff60401b1963ffffffff968716600160201b0267ffffffffffffffff1990951696909316959095179290921716929092179091555050565b600054610100900460ff166127c65760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016106da565b805182511461283d5760405162461bcd60e51b815260206004820152603b60248201527f52656769737472792e5f696e697469616c697a653a206d696e696d756d53746160448201527f6b65466f7251756f72756d206c656e677468206d69736d61746368000000000060648201526084016106da565b60005b81518160ff1610156113db5761287281848360ff1681518110612865576128656139f0565b6020026020010151612f52565b612897828260ff168151811061288a5761288a6139f0565b602002602001015161289f565b600101612840565b60005462010000900461ffff1660c0811061293a5760405162461bcd60e51b815260206004820152604f60248201527f566f746557656967686572426173652e5f63726561746551756f72756d3a206e60448201527f756d626572206f662071756f72756d732063616e6e6f7420657863656564204d60648201526e105617d45553d4955357d0d3d55395608a1b608482015260a4016106da565b80612946816001613d1b565b600060026101000a81548161ffff021916908361ffff16021790555061296c8184612b20565b60405160ff8216907f831a9c86c45bb303caf3f064be2bc2b9fd4ecf19e47c4ac02a61e75dabfe55b490600090a2505050565b815163ffffffff80831691161115612a455760405162461bcd60e51b815260206004820152606060248201527f5374616b6552656769737472792e5f76616c69646174654f70657261746f725360448201527f74616b654174426c6f636b4e756d6265723a206f70657261746f725374616b6560648201527f5570646174652069732066726f6d20616674657220626c6f636b4e756d626572608482015260a4016106da565b602082015163ffffffff161580612a6b57508063ffffffff16826020015163ffffffff16115b6118445760405162461bcd60e51b815260206004820152607460248201527f5374616b6552656769737472792e5f76616c69646174654f70657261746f725360448201527f74616b654174426c6f636b4e756d6265723a2074686572652069732061206e6560648201527f776572206f70657261746f725374616b6555706461746520617661696c61626c60848201527332903132b337b93290313637b1b5a73ab6b132b960611b60a482015260c4016106da565b6000815111612b9c5760405162461bcd60e51b815260206004820152604e6024820152600080516020613d5183398151915260448201527f6e73696465726564416e644d756c7469706c696572733a206e6f20737472617460648201526d1959da595cc81c1c9bdd9a59195960921b608482015260a4016106da565b805160ff831660009081526001602090815260409091205490612bbf8383613d38565b1115612c475760405162461bcd60e51b815260206004820152605b6024820152600080516020613d5183398151915260448201527f6e73696465726564416e644d756c7469706c696572733a20657863656564204d60648201527f41585f5745494748494e475f46554e4354494f4e5f4c454e4754480000000000608482015260a4016106da565b60005b82811015612f4b5760005b612c5f8284613d38565b811015612d5257848281518110612c7857612c786139f0565b6020026020010151600001516001600160a01b0316600160008860ff1660ff1681526020019081526020016000208281548110612cb757612cb76139f0565b6000918252602090912001546001600160a01b03161415612d4a5760405162461bcd60e51b81526020600482015260536024820152600080516020613d5183398151915260448201527f6e73696465726564416e644d756c7469706c696572733a2063616e6e6f7420616064820152720c8c840e6c2daca40e6e8e4c2e8cacef24064f606b1b608482015260a4016106da565b600101612c55565b506000848281518110612d6757612d676139f0565b6020026020010151602001516001600160601b031611612e035760405162461bcd60e51b815260206004820152605c6024820152600080516020613d5183398151915260448201527f6e73696465726564416e644d756c7469706c696572733a2063616e6e6f74206160648201527f64642073747261746567792077697468207a65726f2077656967687400000000608482015260a4016106da565b60ff851660009081526001602052604090208451859083908110612e2957612e296139f0565b6020908102919091018101518254600181018455600093845292829020815191909201516001600160601b0316600160a01b026001600160a01b0390911617910155835160ff8616907f10565e56cacbf32eca267945f054fec02e59750032d113d3302182ad967f540490869084908110612ea657612ea66139f0565b602090810291909101810151516040516001600160a01b0390911681520160405180910390a28460ff167f11a5641322da1dff56a4b66eaac31ffa465295ece907cd163437793b4d009a75858381518110612f0357612f036139f0565b602002602001015160000151868481518110612f2157612f216139f0565b602002602001015160200151604051612f3b9291906139ce565b60405180910390a2600101612c4a565b5050505050565b8060338360ff166101008110612f6a57612f6a6139f0565b60029182820401919006600c026101000a8154816001600160601b0302191690836001600160601b031602179055508160ff167f26eecff2b70b0a71104ff4d940ba7162d23a95c248771fc487a7be17a596b3cf82604051612fdb91906001600160601b0391909116815260200190565b60405180910390a25050565b60008381526101b36020908152604080832060ff86168452909152812054819080156130ca5760008681526101b36020908152604080832060ff8916845290915290204390613037600184613b70565b81548110613047576130476139f0565b60009182526020808320909101805463ffffffff94909416600160201b0267ffffffff0000000019909416939093179092558781526101b38252604080822060ff891683529092522061309b600183613b70565b815481106130ab576130ab6139f0565b600091825260209091200154600160401b90046001600160601b031691505b5060008581526101b36020908152604080832060ff88168452825280832080546001810182559084529282902086519301805492870151918701516001600160601b0316600160401b026bffffffffffffffffffffffff60401b1963ffffffff938416600160201b0267ffffffffffffffff199095169390951692909217929092179290921691909117905590509392505050565b803560ff8116811461317057600080fd5b919050565b803563ffffffff8116811461317057600080fd5b60008060006060848603121561319e57600080fd5b833592506131ae6020850161315f565b91506131bc60408501613175565b90509250925092565b6001600160a01b038116811461160357600080fd5b600080604083850312156131ed57600080fd5b6131f68361315f565b91506020830135613206816131c5565b809150509250929050565b60008060006060848603121561322657600080fd5b61322f8461315f565b95602085013595506040909401359392505050565b815163ffffffff9081168252602080840151909116908201526040808301516001600160601b031690820152606081016113f5565b60008083601f84011261328b57600080fd5b5081356001600160401b038111156132a257600080fd5b6020830191508360208285010111156132ba57600080fd5b9250929050565b600080600080606085870312156132d757600080fd5b84356132e2816131c5565b93506020850135925060408501356001600160401b0381111561330457600080fd5b61331087828801613279565b95989497509550505050565b60008083601f84011261332e57600080fd5b5081356001600160401b0381111561334557600080fd5b6020830191508360208260051b85010111156132ba57600080fd5b60008060006040848603121561337557600080fd5b61337e8461315f565b925060208401356001600160401b0381111561339957600080fd5b6133a58682870161331c565b9497909650939450505050565b6000806000806000606086880312156133ca57600080fd5b6133d38661315f565b945060208601356001600160401b03808211156133ef57600080fd5b6133fb89838a0161331c565b9096509450604088013591508082111561341457600080fd5b506134218882890161331c565b969995985093965092949392505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b038111828210171561346a5761346a613432565b60405290565b604051601f8201601f191681016001600160401b038111828210171561349857613498613432565b604052919050565b60006001600160401b038211156134b9576134b9613432565b5060051b60200190565b80356001600160601b038116811461317057600080fd5b600082601f8301126134eb57600080fd5b813560206135006134fb836134a0565b613470565b82815260069290921b8401810191818101908684111561351f57600080fd5b8286015b8481101561356e576040818903121561353c5760008081fd5b613544613448565b813561354f816131c5565b815261355c8286016134c3565b81860152835291830191604001613523565b509695505050505050565b600082601f83011261358a57600080fd5b8135602061359a6134fb836134a0565b82815260059290921b840181019181810190868411156135b957600080fd5b8286015b8481101561356e5780356001600160401b038111156135dc5760008081fd5b6135ea8986838b01016134da565b8452509183019183016135bd565b6000806040838503121561360b57600080fd5b82356001600160401b038082111561362257600080fd5b818501915085601f83011261363657600080fd5b813560206136466134fb836134a0565b82815260059290921b8401810191818101908984111561366557600080fd5b948201945b8386101561368a5761367b866134c3565b8252948201949082019061366a565b965050860135925050808211156136a057600080fd5b506136ad85828601613579565b9150509250929050565b600080604083850312156136ca57600080fd5b823591506136da6020840161315f565b90509250929050565b600080604083850312156136f657600080fd5b6136ff8361315f565b946020939093013593505050565b60006020828403121561371f57600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b818110156137925761377f83855163ffffffff808251168352806020830151166020840152506001600160601b0360408201511660408301525050565b9284019260609290920191600101613742565b50909695505050505050565b6000602082840312156137b057600080fd5b81356001600160401b038111156137c657600080fd5b6112c3848285016134da565b6000602082840312156137e457600080fd5b6106a28261315f565b6000806000806080858703121561380357600080fd5b61380c8561315f565b935061381a60208601613175565b93969395505050506040820135916060013590565b6000806040838503121561384257600080fd5b61384b8361315f565b915060208301356001600160401b0381111561386657600080fd5b6136ad858286016134da565b6000806040838503121561388557600080fd5b61388e8361315f565b91506136da602084016134c3565b6000806000604084860312156138b157600080fd5b8335925060208401356001600160401b038111156138ce57600080fd5b6133a586828701613279565b6000806000606084860312156138ef57600080fd5b6138f88461315f565b925061390660208501613175565b9150604084013590509250925092565b6000806020838503121561392957600080fd5b82356001600160401b0381111561393f57600080fd5b61394b8582860161331c565b90969095509350505050565b60008060006040848603121561396c57600080fd5b61397584613175565b925060208401356001600160401b038111156138ce57600080fd5b6020808252825182820181905260009190848201906040850190845b8181101561379257835163ffffffff16835292840192918401916001016139ac565b6001600160a01b039290921682526001600160601b0316602082015260400190565b634e487b7160e01b600052603260045260246000fd5b6020808252603c908201527f566f746557656967686572426173652e76616c696451756f72756d4e756d626560408201527f723a2071756f72756d4e756d626572206973206e6f742076616c696400000000606082015260800190565b600060208284031215613a7557600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615613aac57613aac613a7c565b500290565b600082613ace57634e487b7160e01b600052601260045260246000fd5b500490565b60006001600160601b03808316818516808303821115613af557613af5613a7c565b01949350505050565b6020808252604c908201527f5374616b6552656769737472792e6f6e6c795265676973747279436f6f72646960408201527f6e61746f723a2063616c6c6572206973206e6f7420746865205265676973747260608201526b3ca1b7b7b93234b730ba37b960a11b608082015260a00190565b600082821015613b8257613b82613a7c565b500390565b600060208284031215613b9957600080fd5b81516106a2816131c5565b60208082526056908201527f566f746557656967686572426173652e6f6e6c79536572766963654d616e616760408201527f65724f776e65723a2063616c6c6572206973206e6f7420746865206f776e65726060820152751037b3103a34329039b2b93b34b1b2a6b0b730b3b2b960511b608082015260a00190565b634e487b7160e01b600052603160045260246000fd5b600060208284031215613c4857600080fd5b6106a2826134c3565b60006001600160601b0383811690831681811015613c7157613c71613a7c565b039392505050565b600060208284031215613c8b57600080fd5b81356106a2816131c5565b600060208284031215613ca857600080fd5b81516001600160c01b03811681146106a257600080fd5b600063ffffffff83811690831681811015613c7157613c71613a7c565b600063ffffffff80831681811415613cf657613cf6613a7c565b6001019392505050565b6000600019821415613d1457613d14613a7c565b5060010190565b600061ffff808316818516808303821115613af557613af5613a7c565b60008219821115613d4b57613d4b613a7c565b50019056fe566f746557656967686572426173652e5f61646453747261746567696573436fa2646970667358221220c245275c8f501d0fe2187a34157349e070138e3816f193445aa5c03fad5d0bc064736f6c634300080c0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_registryCoordinator\",\"type\":\"address\",\"internalType\":\"contractIRegistryCoordinator\"},{\"name\":\"_delegationManager\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"MAX_WEIGHING_FUNCTION_LENGTH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WEIGHTING_DIVISOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"addStrategies\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"_strategyParams\",\"type\":\"tuple[]\",\"internalType\":\"structIStakeRegistry.StrategyParams[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegation\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deregisterOperator\",\"inputs\":[{\"name\":\"operatorId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getCurrentStake\",\"inputs\":[{\"name\":\"operatorId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint96\",\"internalType\":\"uint96\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getCurrentTotalStake\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint96\",\"internalType\":\"uint96\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getLatestStakeUpdate\",\"inputs\":[{\"name\":\"operatorId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIStakeRegistry.StakeUpdate\",\"components\":[{\"name\":\"updateBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"nextUpdateBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"stake\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getStakeAtBlockNumber\",\"inputs\":[{\"name\":\"operatorId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"blockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint96\",\"internalType\":\"uint96\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getStakeAtBlockNumberAndIndex\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"blockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"operatorId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint96\",\"internalType\":\"uint96\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getStakeHistory\",\"inputs\":[{\"name\":\"operatorId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple[]\",\"internalType\":\"structIStakeRegistry.StakeUpdate[]\",\"components\":[{\"name\":\"updateBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"nextUpdateBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"stake\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getStakeHistoryLength\",\"inputs\":[{\"name\":\"operatorId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getStakeUpdateAtIndex\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"operatorId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIStakeRegistry.StakeUpdate\",\"components\":[{\"name\":\"updateBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"nextUpdateBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"stake\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getStakeUpdateIndexAtBlockNumber\",\"inputs\":[{\"name\":\"operatorId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"blockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTotalStakeAtBlockNumberFromIndex\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"blockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint96\",\"internalType\":\"uint96\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTotalStakeHistoryLength\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTotalStakeIndicesAtBlockNumber\",\"inputs\":[{\"name\":\"blockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTotalStakeUpdateAtIndex\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIStakeRegistry.StakeUpdate\",\"components\":[{\"name\":\"updateBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"nextUpdateBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"stake\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initializeQuorum\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"minimumStake\",\"type\":\"uint96\",\"internalType\":\"uint96\"},{\"name\":\"_strategyParams\",\"type\":\"tuple[]\",\"internalType\":\"structIStakeRegistry.StrategyParams[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"minimumStakeForQuorum\",\"inputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint96\",\"internalType\":\"uint96\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"modifyStrategyParams\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"strategyIndices\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"newMultipliers\",\"type\":\"uint96[]\",\"internalType\":\"uint96[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registerOperator\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint96[]\",\"internalType\":\"uint96[]\"},{\"name\":\"\",\"type\":\"uint96[]\",\"internalType\":\"uint96[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registryCoordinator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"removeStrategies\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"indicesToRemove\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setMinimumStakeForQuorum\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"minimumStake\",\"type\":\"uint96\",\"internalType\":\"uint96\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"strategyParams\",\"inputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyParamsByIndex\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIStakeRegistry.StrategyParams\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyParamsLength\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"updateOperatorStake\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint192\",\"internalType\":\"uint192\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"weightOfOperatorForQuorum\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint96\",\"internalType\":\"uint96\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"MinimumStakeForQuorumUpdated\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"uint8\"},{\"name\":\"minimumStake\",\"type\":\"uint96\",\"indexed\":false,\"internalType\":\"uint96\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorStakeUpdate\",\"inputs\":[{\"name\":\"operatorId\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"},{\"name\":\"stake\",\"type\":\"uint96\",\"indexed\":false,\"internalType\":\"uint96\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"QuorumCreated\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategyAddedToQuorum\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"uint8\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategyMultiplierUpdated\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"uint8\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategyRemovedFromQuorum\",\"inputs\":[{\"name\":\"quorumNumber\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"uint8\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"}],\"anonymous\":false}]", + Bin: "0x60c06040523480156200001157600080fd5b50604051620037e2380380620037e2833981016040819052620000349162000065565b6001600160a01b0391821660a05216608052620000a4565b6001600160a01b03811681146200006257600080fd5b50565b600080604083850312156200007957600080fd5b825162000086816200004c565b602084015190925062000099816200004c565b809150509250929050565b60805160a0516136d9620001096000396000818161036f015281816106140152818161095101528181610cc80152818161101e015281816115d8015281816116da015281816117fe0152611bbc01526000818161050b0152611de001526136d96000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c8063ac6bfb0311610104578063c8294c56116100a2578063f2be94ae11610071578063f2be94ae1461052d578063f851e19814610540578063fa28c62714610553578063ff694a771461056657600080fd5b8063c8294c56146104b8578063d5eccc05146104cb578063dd9846b9146104de578063df5cf7231461050657600080fd5b8063bc9a40c3116100de578063bc9a40c314610456578063bd29b8cd14610469578063c46778a51461047c578063c601527d146104a557600080fd5b8063ac6bfb03146103e3578063adc804da14610403578063b6904b781461044357600080fd5b80634bd26e091161017c57806366acfefe1161014b57806366acfefe1461033f5780636d14a9871461036a5780637c172347146103a957806381c07502146103c357600080fd5b80634bd26e09146102da5780635401ed271461030a5780635e5a67751461031d5780635f1f2d771461032c57600080fd5b806320b66298116101b857806320b662981461026157806325504777146102765780632cd95940146102975780633ca5a5f5146102b757600080fd5b80630491b41c146101df57806308732461146102155780631f9b74e014610236575b600080fd5b6102026101ed366004612b9e565b60ff1660009081526001602052604090205490565b6040519081526020015b60405180910390f35b610228610223366004612bb9565b610579565b60405161020c929190612be3565b610249610244366004612c1d565b6105c2565b6040516001600160601b03909116815260200161020c565b61027461026f366004612c98565b610612565b005b610289610284366004612d59565b610943565b60405161020c929190612df8565b6102aa6102a5366004612e1d565b610c0e565b60405161020c9190612e49565b6102026102c5366004612b9e565b60ff1660009081526003602052604090205490565b6102026102e8366004612e1d565b600091825260026020908152604080842060ff93909316845291905290205490565b610249610318366004612e1d565b610cad565b610202670de0b6b3a764000081565b61027461033a366004612f52565b610cc6565b61035261034d366004612d59565b611011565b6040516001600160c01b03909116815260200161020c565b6103917f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161020c565b6103b1602081565b60405160ff909116815260200161020c565b6103d66103d136600461300e565b61116b565b60405161020c9190613060565b6103f66103f136600461309e565b611435565b60405161020c91906130d1565b610416610411366004612bb9565b6114cd565b6040805182516001600160a01b031681526020928301516001600160601b0316928101929092520161020c565b6103f6610451366004612bb9565b611547565b61027461046436600461311d565b6115d6565b610274610477366004613147565b6116cf565b61024961048a366004612b9e565b6000602081905290815260409020546001600160601b031681565b6102746104b3366004613213565b6117fc565b6102496104c6366004613260565b6118f0565b6102496104d9366004612b9e565b61196e565b6104f16104ec36600461329c565b6119c1565b60405163ffffffff909116815260200161020c565b6103917f000000000000000000000000000000000000000000000000000000000000000081565b61024961053b3660046132d8565b6119d6565b6103f661054e366004612e1d565b611a6b565b61024961056136600461329c565b611b50565b61027461057436600461331a565b611bb1565b6003602052816000526040600020818154811061059557600080fd5b6000918252602090912001546001600160a01b0381169250600160a01b90046001600160601b0316905082565b60ff821660009081526001602052604081205483906105fc5760405162461bcd60e51b81526004016105f390613377565b60405180910390fd5b60006106088585611d1c565b5095945050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610670573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069491906133c8565b6001600160a01b0316336001600160a01b0316146106c45760405162461bcd60e51b81526004016105f3906133e5565b846106e08160ff16600090815260016020526040902054151590565b6106fc5760405162461bcd60e51b81526004016105f390613377565b8380610772576040805162461bcd60e51b81526020600482015260248101919091527f5374616b6552656769737472792e6d6f6469667953747261746567795061726160448201527f6d733a206e6f20737472617465677920696e64696365732070726f766964656460648201526084016105f3565b8281146107e75760405162461bcd60e51b815260206004820152603960248201527f5374616b6552656769737472792e6d6f6469667953747261746567795061726160448201527f6d733a20696e707574206c656e677468206d69736d617463680000000000000060648201526084016105f3565b60ff87166000908152600360205260408120905b828110156109385785858281811061081557610815613461565b905060200201602081019061082a9190613477565b8289898481811061083d5761083d613461565b905060200201358154811061085457610854613461565b9060005260206000200160000160146101000a8154816001600160601b0302191690836001600160601b031602179055508860ff167f11a5641322da1dff56a4b66eaac31ffa465295ece907cd163437793b4d009a75838a8a858181106108bd576108bd613461565b90506020020135815481106108d4576108d4613461565b6000918252602090912001546001600160a01b03168888858181106108fb576108fb613461565b90506020020160208101906109109190613477565b60405161091e929190612be3565b60405180910390a280610930816134a8565b9150506107fb565b505050505050505050565b606080336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461098e5760405162461bcd60e51b81526004016105f3906134c3565b6000836001600160401b038111156109a8576109a8612ec1565b6040519080825280602002602001820160405280156109d1578160200160208202803683370190505b5090506000846001600160401b038111156109ee576109ee612ec1565b604051908082528060200260200182016040528015610a17578160200160208202803683370190505b50905060005b85811015610c00576000878783818110610a3957610a39613461565b919091013560f81c60008181526001602052604090205490925015159050610ac15760405162461bcd60e51b815260206004820152603560248201527f5374616b6552656769737472792e72656769737465724f70657261746f723a206044820152741c5d5bdc9d5b48191bd95cc81b9bdd08195e1a5cdd605a1b60648201526084016105f3565b600080610ace838d611d1c565b9150915080610b6b5760405162461bcd60e51b815260206004820152605b60248201527f5374616b6552656769737472792e72656769737465724f70657261746f723a2060448201527f4f70657261746f7220646f6573206e6f74206d656574206d696e696d756d207360648201527f74616b6520726571756972656d656e7420666f722071756f72756d0000000000608482015260a4016105f3565b6000610b788c8585611ed2565b905082878681518110610b8d57610b8d613461565b60200260200101906001600160601b031690816001600160601b031681525050610bb78482612152565b868681518110610bc957610bc9613461565b60200260200101906001600160601b031690816001600160601b031681525050505050508080610bf8906134a8565b915050610a1d565b509097909650945050505050565b600082815260026020908152604080832060ff851684528252808320805482518185028101850190935280835260609492939192909184015b82821015610ca0576000848152602090819020604080516060810182529185015463ffffffff8082168452600160201b82041683850152600160401b90046001600160601b031690820152825260019092019101610c47565b5050505090505b92915050565b600080610cba8484611a6b565b60400151949350505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4891906133c8565b6001600160a01b0316336001600160a01b031614610d785760405162461bcd60e51b81526004016105f3906133e5565b81610d948160ff16600090815260016020526040902054151590565b610db05760405162461bcd60e51b81526004016105f390613377565b815180610e255760405162461bcd60e51b815260206004820152603d60248201527f5374616b6552656769737472792e72656d6f7665537472617465676965733a2060448201527f6e6f20696e646963657320746f2072656d6f76652070726f766964656400000060648201526084016105f3565b60ff84166000908152600360205260408120905b82811015611009578560ff167f31fa2e2cd280c9375e13ffcf3d81e2378100186e4058f8d3ddb690b82dcd31f783878481518110610e7957610e79613461565b602002602001015181548110610e9157610e91613461565b600091825260209182902001546040516001600160a01b0390911681520160405180910390a28560ff167f11a5641322da1dff56a4b66eaac31ffa465295ece907cd163437793b4d009a7583878481518110610eef57610eef613461565b602002602001015181548110610f0757610f07613461565b600091825260208083209190910154604080516001600160a01b039092168252918101929092520160405180910390a281548290610f4790600190613535565b81548110610f5757610f57613461565b9060005260206000200182868381518110610f7457610f74613461565b602002602001015181548110610f8c57610f8c613461565b600091825260209091208254910180546001600160a01b0319166001600160a01b03909216918217815591546001600160601b03600160a01b9182900416021790558154829080610fdf57610fdf61354c565b60008281526020812082016000199081019190915501905580611001816134a8565b915050610e39565b505050505050565b6000336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461105b5760405162461bcd60e51b81526004016105f3906134c3565b6000805b8381101561060857600085858381811061107b5761107b613461565b919091013560f81c6000818152600160205260409020549092501515905061110b5760405162461bcd60e51b815260206004820152603860248201527f5374616b6552656769737472792e7570646174654f70657261746f725374616b60448201527f653a2071756f72756d20646f6573206e6f74206578697374000000000000000060648201526084016105f3565b600080611118838b611d1c565b915091508061113a5760009150600160ff84161b6001600160c01b0386161794505b60006111478a8585611ed2565b90506111538482612152565b50505050508080611163906134a8565b91505061105f565b60606000826001600160401b0381111561118757611187612ec1565b6040519080825280602002602001820160405280156111b0578160200160208202803683370190505b50905060005b8381101561142a5760008585838181106111d2576111d2613461565b919091013560f81c600081815260016020526040902054909250151590506112715760405162461bcd60e51b815260206004820152604660248201527f5374616b6552656769737472792e676574546f74616c5374616b65496e64696360448201527f65734174426c6f636b4e756d6265723a2071756f72756d20646f6573206e6f7460648201526508195e1a5cdd60d21b608482015260a4016105f3565b60ff81166000908152600160205260408120805463ffffffff8a16929061129a5761129a613461565b60009182526020909120015463ffffffff1611156113465760405162461bcd60e51b815260206004820152605b60248201527f5374616b6552656769737472792e676574546f74616c5374616b65496e64696360448201527f65734174426c6f636b4e756d6265723a2071756f72756d20686173206e6f207360648201527f74616b6520686973746f727920617420626c6f636b4e756d6265720000000000608482015260a4016105f3565b60ff8116600090815260016020526040812054905b818110156114145760ff8316600090815260016020819052604090912063ffffffff8b169161138a8486613535565b6113949190613535565b815481106113a4576113a4613461565b60009182526020909120015463ffffffff16116114025760016113c78284613535565b6113d19190613535565b8585815181106113e3576113e3613461565b602002602001019063ffffffff16908163ffffffff1681525050611414565b8061140c816134a8565b91505061135b565b5050508080611422906134a8565b9150506111b6565b5090505b9392505050565b60408051606081018252600080825260208083018290528284018290528582526002815283822060ff8816835290529190912080548390811061147a5761147a613461565b600091825260209182902060408051606081018252929091015463ffffffff8082168452600160201b82041693830193909352600160401b9092046001600160601b031691810191909152949350505050565b604080518082019091526000808252602082015260ff8316600090815260036020526040902080548390811061150557611505613461565b6000918252602091829020604080518082019091529101546001600160a01b0381168252600160a01b90046001600160601b0316918101919091529392505050565b604080516060810182526000808252602080830182905282840182905260ff86168252600190529190912080548390811061158457611584613461565b600091825260209182902060408051606081018252929091015463ffffffff8082168452600160201b82041693830193909352600160401b9092046001600160601b0316918101919091529392505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611634573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061165891906133c8565b6001600160a01b0316336001600160a01b0316146116885760405162461bcd60e51b81526004016105f3906133e5565b816116a48160ff16600090815260016020526040902054151590565b6116c05760405162461bcd60e51b81526004016105f390613377565b6116ca83836122cc565b505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146117175760405162461bcd60e51b81526004016105f3906134c3565b60005b818110156117f657600083838381811061173657611736613461565b919091013560f81c600081815260016020526040902054909250151590506117c65760405162461bcd60e51b815260206004820152603760248201527f5374616b6552656769737472792e646572656769737465724f70657261746f7260448201527f3a2071756f72756d20646f6573206e6f7420657869737400000000000000000060648201526084016105f3565b60006117d486836000611ed2565b90506117e08282612152565b50505080806117ee906134a8565b91505061171a565b50505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561185a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061187e91906133c8565b6001600160a01b0316336001600160a01b0316146118ae5760405162461bcd60e51b81526004016105f3906133e5565b816118ca8160ff16600090815260016020526040902054151590565b6118e65760405162461bcd60e51b81526004016105f390613377565b6116ca8383612335565b60ff8316600090815260016020526040812080548291908490811061191757611917613461565b600091825260209182902060408051606081018252919092015463ffffffff8082168352600160201b820416938201939093526001600160601b03600160401b90930492909216908201529050610cba8185612719565b60ff8116600090815260016020819052604082208054909161198f91613535565b8154811061199f5761199f613461565b600091825260209091200154600160401b90046001600160601b031692915050565b60006119ce8484846128a4565b949350505050565b600082815260026020908152604080832060ff881684529091528120805482919084908110611a0757611a07613461565b600091825260209182902060408051606081018252919092015463ffffffff8082168352600160201b820416938201939093526001600160601b03600160401b90930492909216908201529050611a5e8186612719565b6040015195945050505050565b6040805160608082018352600080835260208084018290528385018290528682526002815284822060ff87168352815284822054855193840186528284529083018290529382015290919081611ac4579150610ca79050565b600085815260026020908152604080832060ff881684529091529020611aeb600184613535565b81548110611afb57611afb613461565b600091825260209182902060408051606081018252919092015463ffffffff8082168352600160201b820416938201939093526001600160601b03600160401b90930492909216908201529250610ca7915050565b600083815260026020908152604080832060ff861684529091528120611b778585856128a4565b63ffffffff1681548110611b8d57611b8d613461565b600091825260209091200154600160401b90046001600160601b0316949350505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611bf95760405162461bcd60e51b81526004016105f3906134c3565b60ff831660009081526001602052604090205415611c775760405162461bcd60e51b815260206004820152603560248201527f5374616b6552656769737472792e696e697469616c697a6551756f72756d3a2060448201527471756f72756d20616c72656164792065786973747360581b60648201526084016105f3565b611c818382612335565b611c8b83836122cc565b505060ff166000908152600160208181526040808420815160608101835263ffffffff438116825281850187815293820187815283549687018455928752939095209451949093018054915193516001600160601b0316600160401b02600160401b600160a01b0319948416600160201b0267ffffffffffffffff1990931695909316949094171791909116179055565b600080600080611d3b8660ff1660009081526003602052604090205490565b604080518082019091526000808252602082015290915060005b82811015611e9f5760ff88166000908152600360205260409020805482908110611d8157611d81613461565b6000918252602080832060408051808201825293909101546001600160a01b03808216808652600160a01b9092046001600160601b031693850193909352905163778e55f360e01b81528b8316600482015260248101919091529194507f0000000000000000000000000000000000000000000000000000000000000000169063778e55f390604401602060405180830381865afa158015611e27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e4b9190613562565b90508015611e8c57670de0b6b3a764000083602001516001600160601b031682611e75919061357b565b611e7f919061359a565b611e8990866135bc565b94505b5080611e97816134a8565b915050611d55565b50505060ff85166000908152602081905260409020549092506001600160601b03908116908316101590505b9250929050565b600083815260026020908152604080832060ff86168452909152812054819080611f9657600086815260026020908152604080832060ff891684528252808320815160608101835263ffffffff43811682528185018681526001600160601b03808c16958401958652845460018101865594885295909620915191909201805495519351909416600160401b02600160401b600160a01b0319938316600160201b0267ffffffffffffffff19909616919092161793909317169190911790556120f8565b600086815260026020908152604080832060ff891684529091528120611fbd600184613535565b81548110611fcd57611fcd613461565b600091825260209091200180546001600160601b03600160401b909104811694509091508516831415612006576000935050505061142e565b80544363ffffffff90811691161415612040578054600160401b600160a01b031916600160401b6001600160601b038716021781556120f6565b805467ffffffff000000001916600160201b4363ffffffff90811682810293909317845560008a815260026020908152604080832060ff8d168452825280832081516060810183529687528683018481526001600160601b038d81169389019384528254600181018455928652939094209651960180549351915196851667ffffffffffffffff1990941693909317931690930291909117600160401b600160a01b031916600160401b93909216929092021790555b505b6040805160ff871681526001600160601b038616602082015287917f2f527d527e95d8fe40aec55377743bb779087da3f6d0d08f12e36444da62327d910160405180910390a26121488285612b42565b9695505050505050565b60ff8216600090815260016020819052604082208054918391906121769084613535565b8154811061218657612186613461565b90600052602060002001905083600014156121b55754600160401b90046001600160601b03169150610ca79050565b80546000906121d490600160401b90046001600160601b031686612b5a565b82549091504363ffffffff90811691161415612211578154600160401b600160a01b031916600160401b6001600160601b038316021782556122c3565b815463ffffffff438116600160201b81810267ffffffff000000001990941693909317855560ff8916600090815260016020818152604080842081516060810183529586528583018581526001600160601b03808b169388019384528254958601835591865292909420945194909201805491519251909316600160401b02600160401b600160a01b031992861690960267ffffffffffffffff19909116939094169290921792909217169190911790555b95945050505050565b60ff82166000818152602081815260409182902080546bffffffffffffffffffffffff19166001600160601b03861690811790915591519182527f26eecff2b70b0a71104ff4d940ba7162d23a95c248771fc487a7be17a596b3cf910160405180910390a25050565b600081511161239a5760405162461bcd60e51b8152602060048201526038602482015260008051602061368483398151915260448201527f3a206e6f20737472617465676965732070726f7669646564000000000000000060648201526084016105f3565b805160ff8316600090815260036020908152604090912054906123bd83836135e7565b111561242d5760405162461bcd60e51b8152602060048201526045602482015260008051602061368483398151915260448201527f3a20657863656564204d41585f5745494748494e475f46554e4354494f4e5f4c60648201526408a9c8ea8960db1b608482015260a4016105f3565b60005b828110156127125760005b61244582846135e7565b8110156125265784828151811061245e5761245e613461565b6020026020010151600001516001600160a01b0316600360008860ff1660ff168152602001908152602001600020828154811061249d5761249d613461565b6000918252602090912001546001600160a01b031614156125145760405162461bcd60e51b815260206004820152603d602482015260008051602061368483398151915260448201527f3a2063616e6e6f74206164642073616d6520737472617465677920327800000060648201526084016105f3565b8061251e816134a8565b91505061243b565b50600084828151811061253b5761253b613461565b6020026020010151602001516001600160601b0316116125c05760405162461bcd60e51b8152602060048201526046602482015260008051602061368483398151915260448201527f3a2063616e6e6f74206164642073747261746567792077697468207a65726f206064820152651dd95a59da1d60d21b608482015260a4016105f3565b60ff8516600090815260036020526040902084518590839081106125e6576125e6613461565b6020908102919091018101518254600181018455600093845292829020815191909201516001600160601b0316600160a01b026001600160a01b0390911617910155835160ff8616907f10565e56cacbf32eca267945f054fec02e59750032d113d3302182ad967f54049086908490811061266357612663613461565b602090810291909101810151516040516001600160a01b0390911681520160405180910390a28460ff167f11a5641322da1dff56a4b66eaac31ffa465295ece907cd163437793b4d009a758583815181106126c0576126c0613461565b6020026020010151600001518684815181106126de576126de613461565b6020026020010151602001516040516126f8929190612be3565b60405180910390a28061270a816134a8565b915050612430565b5050505050565b816000015163ffffffff168163ffffffff1610156127c55760405162461bcd60e51b815260206004820152606060248201527f5374616b6552656769737472792e5f76616c69646174654f70657261746f725360448201527f74616b654174426c6f636b4e756d6265723a206f70657261746f725374616b6560648201527f5570646174652069732066726f6d20616674657220626c6f636b4e756d626572608482015260a4016105f3565b602082015163ffffffff1615806127eb5750816020015163ffffffff168163ffffffff16105b6128a05760405162461bcd60e51b815260206004820152607460248201527f5374616b6552656769737472792e5f76616c69646174654f70657261746f725360448201527f74616b654174426c6f636b4e756d6265723a2074686572652069732061206e6560648201527f776572206f70657261746f725374616b6555706461746520617661696c61626c60848201527332903132b337b93290313637b1b5a73ab6b132b960611b60a482015260c4016105f3565b5050565b600083815260026020908152604080832060ff86168452909152812054815b81811015612a7d57600086815260026020908152604080832060ff89168452909152902063ffffffff85169060016128fb8486613535565b6129059190613535565b8154811061291557612915613461565b60009182526020909120015463ffffffff1611612a6b57600086815260026020908152604080832060ff89168452909152812060016129548486613535565b61295e9190613535565b8154811061296e5761296e613461565b600091825260209091200154600160201b900463ffffffff1690508015806129a157508463ffffffff168163ffffffff16115b612a4b5760405162461bcd60e51b815260206004820152606960248201527f5374616b6552656769737472792e5f6765745374616b65557064617465496e6460448201527f6578466f724f70657261746f724174426c6f636b4e756d6265723a206f70657260648201527f61746f72496420686173206e6f207374616b652075706461746520617420626c60848201526837b1b5a73ab6b132b960b91b60a482015260c4016105f3565b6001612a578385613535565b612a619190613535565b935050505061142e565b80612a75816134a8565b9150506128c3565b5060405162461bcd60e51b815260206004820152608160248201527f5374616b6552656769737472792e5f6765745374616b65557064617465496e6460448201527f6578466f724f70657261746f724174426c6f636b4e756d6265723a206e6f207360648201527f74616b652075706461746520666f756e6420666f72206f70657261746f72496460848201527f20616e642071756f72756d4e756d62657220617420626c6f636b206e756d626560a4820152603960f91b60c482015260e4016105f3565b600061142e6001600160601b038085169084166135ff565b600080821215612b7e57612b6d8261363e565b612b77908461365b565b9050610ca7565b612b7782846135bc565b803560ff81168114612b9957600080fd5b919050565b600060208284031215612bb057600080fd5b61142e82612b88565b60008060408385031215612bcc57600080fd5b612bd583612b88565b946020939093013593505050565b6001600160a01b039290921682526001600160601b0316602082015260400190565b6001600160a01b0381168114612c1a57600080fd5b50565b60008060408385031215612c3057600080fd5b612c3983612b88565b91506020830135612c4981612c05565b809150509250929050565b60008083601f840112612c6657600080fd5b5081356001600160401b03811115612c7d57600080fd5b6020830191508360208260051b8501011115611ecb57600080fd5b600080600080600060608688031215612cb057600080fd5b612cb986612b88565b945060208601356001600160401b0380821115612cd557600080fd5b612ce189838a01612c54565b90965094506040880135915080821115612cfa57600080fd5b50612d0788828901612c54565b969995985093965092949392505050565b60008083601f840112612d2a57600080fd5b5081356001600160401b03811115612d4157600080fd5b602083019150836020828501011115611ecb57600080fd5b60008060008060608587031215612d6f57600080fd5b8435612d7a81612c05565b93506020850135925060408501356001600160401b03811115612d9c57600080fd5b612da887828801612d18565b95989497509550505050565b600081518084526020808501945080840160005b83811015612ded5781516001600160601b031687529582019590820190600101612dc8565b509495945050505050565b604081526000612e0b6040830185612db4565b82810360208401526122c38185612db4565b60008060408385031215612e3057600080fd5b82359150612e4060208401612b88565b90509250929050565b6020808252825182820181905260009190848201906040850190845b81811015612eb557612ea283855163ffffffff808251168352806020830151166020840152506001600160601b0360408201511660408301525050565b9284019260609290920191600101612e65565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715612ef957612ef9612ec1565b60405290565b604051601f8201601f191681016001600160401b0381118282101715612f2757612f27612ec1565b604052919050565b60006001600160401b03821115612f4857612f48612ec1565b5060051b60200190565b60008060408385031215612f6557600080fd5b612f6e83612b88565b91506020808401356001600160401b03811115612f8a57600080fd5b8401601f81018613612f9b57600080fd5b8035612fae612fa982612f2f565b612eff565b81815260059190911b82018301908381019088831115612fcd57600080fd5b928401925b82841015612feb57833582529284019290840190612fd2565b80955050505050509250929050565b803563ffffffff81168114612b9957600080fd5b60008060006040848603121561302357600080fd5b61302c84612ffa565b925060208401356001600160401b0381111561304757600080fd5b61305386828701612d18565b9497909650939450505050565b6020808252825182820181905260009190848201906040850190845b81811015612eb557835163ffffffff168352928401929184019160010161307c565b6000806000606084860312156130b357600080fd5b6130bc84612b88565b95602085013595506040909401359392505050565b815163ffffffff9081168252602080840151909116908201526040808301516001600160601b03169082015260608101610ca7565b80356001600160601b0381168114612b9957600080fd5b6000806040838503121561313057600080fd5b61313983612b88565b9150612e4060208401613106565b60008060006040848603121561315c57600080fd5b8335925060208401356001600160401b0381111561304757600080fd5b600082601f83011261318a57600080fd5b8135602061319a612fa983612f2f565b82815260069290921b840181019181810190868411156131b957600080fd5b8286015b8481101561320857604081890312156131d65760008081fd5b6131de612ed7565b81356131e981612c05565b81526131f6828601613106565b818601528352918301916040016131bd565b509695505050505050565b6000806040838503121561322657600080fd5b61322f83612b88565b915060208301356001600160401b0381111561324a57600080fd5b61325685828601613179565b9150509250929050565b60008060006060848603121561327557600080fd5b61327e84612b88565b925061328c60208501612ffa565b9150604084013590509250925092565b6000806000606084860312156132b157600080fd5b833592506132c160208501612b88565b91506132cf60408501612ffa565b90509250925092565b600080600080608085870312156132ee57600080fd5b6132f785612b88565b935061330560208601612ffa565b93969395505050506040820135916060013590565b60008060006060848603121561332f57600080fd5b61333884612b88565b925061334660208501613106565b915060408401356001600160401b0381111561336157600080fd5b61336d86828701613179565b9150509250925092565b60208082526031908201527f5374616b6552656769737472792e71756f72756d4578697374733a2071756f726040820152701d5b48191bd95cc81b9bdd08195e1a5cdd607a1b606082015260800190565b6000602082840312156133da57600080fd5b815161142e81612c05565b60208082526056908201527f5374616b6552656769737472792e6f6e6c79436f6f7264696e61746f724f776e60408201527f65723a2063616c6c6572206973206e6f7420746865206f776e6572206f6620746060820152753432903932b3b4b9ba393ca1b7b7b93234b730ba37b960511b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561348957600080fd5b61142e82613106565b634e487b7160e01b600052601160045260246000fd5b60006000198214156134bc576134bc613492565b5060010190565b6020808252604c908201527f5374616b6552656769737472792e6f6e6c795265676973747279436f6f72646960408201527f6e61746f723a2063616c6c6572206973206e6f7420746865205265676973747260608201526b3ca1b7b7b93234b730ba37b960a11b608082015260a00190565b60008282101561354757613547613492565b500390565b634e487b7160e01b600052603160045260246000fd5b60006020828403121561357457600080fd5b5051919050565b600081600019048311821515161561359557613595613492565b500290565b6000826135b757634e487b7160e01b600052601260045260246000fd5b500490565b60006001600160601b038083168185168083038211156135de576135de613492565b01949350505050565b600082198211156135fa576135fa613492565b500190565b60008083128015600160ff1b85018412161561361d5761361d613492565b6001600160ff1b038401831381161561363857613638613492565b50500390565b6000600160ff1b82141561365457613654613492565b5060000390565b60006001600160601b038381169083168181101561367b5761367b613492565b03939250505056fe5374616b6552656769737472792e5f6164645374726174656779506172616d73a2646970667358221220594c8a62a981ad81b6008b3b207eafc73c9bf7b4a2dea0aaf0f01e969ec612ba64736f6c634300080c0033", } // ContractStakeRegistryABI is the input ABI used to generate the binding from. @@ -57,7 +57,7 @@ var ContractStakeRegistryABI = ContractStakeRegistryMetaData.ABI var ContractStakeRegistryBin = ContractStakeRegistryMetaData.Bin // DeployContractStakeRegistry deploys a new Ethereum contract, binding an instance of ContractStakeRegistry to it. -func DeployContractStakeRegistry(auth *bind.TransactOpts, backend bind.ContractBackend, _registryCoordinator common.Address, _strategyManager common.Address, _serviceManager common.Address) (common.Address, *types.Transaction, *ContractStakeRegistry, error) { +func DeployContractStakeRegistry(auth *bind.TransactOpts, backend bind.ContractBackend, _registryCoordinator common.Address, _delegationManager common.Address) (common.Address, *types.Transaction, *ContractStakeRegistry, error) { parsed, err := ContractStakeRegistryMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -66,7 +66,7 @@ func DeployContractStakeRegistry(auth *bind.TransactOpts, backend bind.ContractB return common.Address{}, nil, nil, errors.New("GetABI returned nil") } - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ContractStakeRegistryBin), backend, _registryCoordinator, _strategyManager, _serviceManager) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ContractStakeRegistryBin), backend, _registryCoordinator, _delegationManager) if err != nil { return common.Address{}, nil, nil, err } @@ -215,37 +215,6 @@ func (_ContractStakeRegistry *ContractStakeRegistryTransactorRaw) Transact(opts return _ContractStakeRegistry.Contract.contract.Transact(opts, method, params...) } -// MAXQUORUMCOUNT is a free data retrieval call binding the contract method 0xa6734667. -// -// Solidity: function MAX_QUORUM_COUNT() view returns(uint8) -func (_ContractStakeRegistry *ContractStakeRegistryCaller) MAXQUORUMCOUNT(opts *bind.CallOpts) (uint8, error) { - var out []interface{} - err := _ContractStakeRegistry.contract.Call(opts, &out, "MAX_QUORUM_COUNT") - - if err != nil { - return *new(uint8), err - } - - out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) - - return out0, err - -} - -// MAXQUORUMCOUNT is a free data retrieval call binding the contract method 0xa6734667. -// -// Solidity: function MAX_QUORUM_COUNT() view returns(uint8) -func (_ContractStakeRegistry *ContractStakeRegistrySession) MAXQUORUMCOUNT() (uint8, error) { - return _ContractStakeRegistry.Contract.MAXQUORUMCOUNT(&_ContractStakeRegistry.CallOpts) -} - -// MAXQUORUMCOUNT is a free data retrieval call binding the contract method 0xa6734667. -// -// Solidity: function MAX_QUORUM_COUNT() view returns(uint8) -func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) MAXQUORUMCOUNT() (uint8, error) { - return _ContractStakeRegistry.Contract.MAXQUORUMCOUNT(&_ContractStakeRegistry.CallOpts) -} - // MAXWEIGHINGFUNCTIONLENGTH is a free data retrieval call binding the contract method 0x7c172347. // // Solidity: function MAX_WEIGHING_FUNCTION_LENGTH() view returns(uint8) @@ -339,12 +308,12 @@ func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) Delegation() ( return _ContractStakeRegistry.Contract.Delegation(&_ContractStakeRegistry.CallOpts) } -// GetCurrentOperatorStakeForQuorum is a free data retrieval call binding the contract method 0x6ab538d4. +// GetCurrentStake is a free data retrieval call binding the contract method 0x5401ed27. // -// Solidity: function getCurrentOperatorStakeForQuorum(bytes32 operatorId, uint8 quorumNumber) view returns(uint96) -func (_ContractStakeRegistry *ContractStakeRegistryCaller) GetCurrentOperatorStakeForQuorum(opts *bind.CallOpts, operatorId [32]byte, quorumNumber uint8) (*big.Int, error) { +// Solidity: function getCurrentStake(bytes32 operatorId, uint8 quorumNumber) view returns(uint96) +func (_ContractStakeRegistry *ContractStakeRegistryCaller) GetCurrentStake(opts *bind.CallOpts, operatorId [32]byte, quorumNumber uint8) (*big.Int, error) { var out []interface{} - err := _ContractStakeRegistry.contract.Call(opts, &out, "getCurrentOperatorStakeForQuorum", operatorId, quorumNumber) + err := _ContractStakeRegistry.contract.Call(opts, &out, "getCurrentStake", operatorId, quorumNumber) if err != nil { return *new(*big.Int), err @@ -356,26 +325,26 @@ func (_ContractStakeRegistry *ContractStakeRegistryCaller) GetCurrentOperatorSta } -// GetCurrentOperatorStakeForQuorum is a free data retrieval call binding the contract method 0x6ab538d4. +// GetCurrentStake is a free data retrieval call binding the contract method 0x5401ed27. // -// Solidity: function getCurrentOperatorStakeForQuorum(bytes32 operatorId, uint8 quorumNumber) view returns(uint96) -func (_ContractStakeRegistry *ContractStakeRegistrySession) GetCurrentOperatorStakeForQuorum(operatorId [32]byte, quorumNumber uint8) (*big.Int, error) { - return _ContractStakeRegistry.Contract.GetCurrentOperatorStakeForQuorum(&_ContractStakeRegistry.CallOpts, operatorId, quorumNumber) +// Solidity: function getCurrentStake(bytes32 operatorId, uint8 quorumNumber) view returns(uint96) +func (_ContractStakeRegistry *ContractStakeRegistrySession) GetCurrentStake(operatorId [32]byte, quorumNumber uint8) (*big.Int, error) { + return _ContractStakeRegistry.Contract.GetCurrentStake(&_ContractStakeRegistry.CallOpts, operatorId, quorumNumber) } -// GetCurrentOperatorStakeForQuorum is a free data retrieval call binding the contract method 0x6ab538d4. +// GetCurrentStake is a free data retrieval call binding the contract method 0x5401ed27. // -// Solidity: function getCurrentOperatorStakeForQuorum(bytes32 operatorId, uint8 quorumNumber) view returns(uint96) -func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) GetCurrentOperatorStakeForQuorum(operatorId [32]byte, quorumNumber uint8) (*big.Int, error) { - return _ContractStakeRegistry.Contract.GetCurrentOperatorStakeForQuorum(&_ContractStakeRegistry.CallOpts, operatorId, quorumNumber) +// Solidity: function getCurrentStake(bytes32 operatorId, uint8 quorumNumber) view returns(uint96) +func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) GetCurrentStake(operatorId [32]byte, quorumNumber uint8) (*big.Int, error) { + return _ContractStakeRegistry.Contract.GetCurrentStake(&_ContractStakeRegistry.CallOpts, operatorId, quorumNumber) } -// GetCurrentTotalStakeForQuorum is a free data retrieval call binding the contract method 0xc8f739d0. +// GetCurrentTotalStake is a free data retrieval call binding the contract method 0xd5eccc05. // -// Solidity: function getCurrentTotalStakeForQuorum(uint8 quorumNumber) view returns(uint96) -func (_ContractStakeRegistry *ContractStakeRegistryCaller) GetCurrentTotalStakeForQuorum(opts *bind.CallOpts, quorumNumber uint8) (*big.Int, error) { +// Solidity: function getCurrentTotalStake(uint8 quorumNumber) view returns(uint96) +func (_ContractStakeRegistry *ContractStakeRegistryCaller) GetCurrentTotalStake(opts *bind.CallOpts, quorumNumber uint8) (*big.Int, error) { var out []interface{} - err := _ContractStakeRegistry.contract.Call(opts, &out, "getCurrentTotalStakeForQuorum", quorumNumber) + err := _ContractStakeRegistry.contract.Call(opts, &out, "getCurrentTotalStake", quorumNumber) if err != nil { return *new(*big.Int), err @@ -387,57 +356,57 @@ func (_ContractStakeRegistry *ContractStakeRegistryCaller) GetCurrentTotalStakeF } -// GetCurrentTotalStakeForQuorum is a free data retrieval call binding the contract method 0xc8f739d0. +// GetCurrentTotalStake is a free data retrieval call binding the contract method 0xd5eccc05. // -// Solidity: function getCurrentTotalStakeForQuorum(uint8 quorumNumber) view returns(uint96) -func (_ContractStakeRegistry *ContractStakeRegistrySession) GetCurrentTotalStakeForQuorum(quorumNumber uint8) (*big.Int, error) { - return _ContractStakeRegistry.Contract.GetCurrentTotalStakeForQuorum(&_ContractStakeRegistry.CallOpts, quorumNumber) +// Solidity: function getCurrentTotalStake(uint8 quorumNumber) view returns(uint96) +func (_ContractStakeRegistry *ContractStakeRegistrySession) GetCurrentTotalStake(quorumNumber uint8) (*big.Int, error) { + return _ContractStakeRegistry.Contract.GetCurrentTotalStake(&_ContractStakeRegistry.CallOpts, quorumNumber) } -// GetCurrentTotalStakeForQuorum is a free data retrieval call binding the contract method 0xc8f739d0. +// GetCurrentTotalStake is a free data retrieval call binding the contract method 0xd5eccc05. // -// Solidity: function getCurrentTotalStakeForQuorum(uint8 quorumNumber) view returns(uint96) -func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) GetCurrentTotalStakeForQuorum(quorumNumber uint8) (*big.Int, error) { - return _ContractStakeRegistry.Contract.GetCurrentTotalStakeForQuorum(&_ContractStakeRegistry.CallOpts, quorumNumber) +// Solidity: function getCurrentTotalStake(uint8 quorumNumber) view returns(uint96) +func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) GetCurrentTotalStake(quorumNumber uint8) (*big.Int, error) { + return _ContractStakeRegistry.Contract.GetCurrentTotalStake(&_ContractStakeRegistry.CallOpts, quorumNumber) } -// GetLengthOfOperatorIdStakeHistoryForQuorum is a free data retrieval call binding the contract method 0x6e8f03ca. +// GetLatestStakeUpdate is a free data retrieval call binding the contract method 0xf851e198. // -// Solidity: function getLengthOfOperatorIdStakeHistoryForQuorum(bytes32 operatorId, uint8 quorumNumber) view returns(uint256) -func (_ContractStakeRegistry *ContractStakeRegistryCaller) GetLengthOfOperatorIdStakeHistoryForQuorum(opts *bind.CallOpts, operatorId [32]byte, quorumNumber uint8) (*big.Int, error) { +// Solidity: function getLatestStakeUpdate(bytes32 operatorId, uint8 quorumNumber) view returns((uint32,uint32,uint96)) +func (_ContractStakeRegistry *ContractStakeRegistryCaller) GetLatestStakeUpdate(opts *bind.CallOpts, operatorId [32]byte, quorumNumber uint8) (IStakeRegistryStakeUpdate, error) { var out []interface{} - err := _ContractStakeRegistry.contract.Call(opts, &out, "getLengthOfOperatorIdStakeHistoryForQuorum", operatorId, quorumNumber) + err := _ContractStakeRegistry.contract.Call(opts, &out, "getLatestStakeUpdate", operatorId, quorumNumber) if err != nil { - return *new(*big.Int), err + return *new(IStakeRegistryStakeUpdate), err } - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + out0 := *abi.ConvertType(out[0], new(IStakeRegistryStakeUpdate)).(*IStakeRegistryStakeUpdate) return out0, err } -// GetLengthOfOperatorIdStakeHistoryForQuorum is a free data retrieval call binding the contract method 0x6e8f03ca. +// GetLatestStakeUpdate is a free data retrieval call binding the contract method 0xf851e198. // -// Solidity: function getLengthOfOperatorIdStakeHistoryForQuorum(bytes32 operatorId, uint8 quorumNumber) view returns(uint256) -func (_ContractStakeRegistry *ContractStakeRegistrySession) GetLengthOfOperatorIdStakeHistoryForQuorum(operatorId [32]byte, quorumNumber uint8) (*big.Int, error) { - return _ContractStakeRegistry.Contract.GetLengthOfOperatorIdStakeHistoryForQuorum(&_ContractStakeRegistry.CallOpts, operatorId, quorumNumber) +// Solidity: function getLatestStakeUpdate(bytes32 operatorId, uint8 quorumNumber) view returns((uint32,uint32,uint96)) +func (_ContractStakeRegistry *ContractStakeRegistrySession) GetLatestStakeUpdate(operatorId [32]byte, quorumNumber uint8) (IStakeRegistryStakeUpdate, error) { + return _ContractStakeRegistry.Contract.GetLatestStakeUpdate(&_ContractStakeRegistry.CallOpts, operatorId, quorumNumber) } -// GetLengthOfOperatorIdStakeHistoryForQuorum is a free data retrieval call binding the contract method 0x6e8f03ca. +// GetLatestStakeUpdate is a free data retrieval call binding the contract method 0xf851e198. // -// Solidity: function getLengthOfOperatorIdStakeHistoryForQuorum(bytes32 operatorId, uint8 quorumNumber) view returns(uint256) -func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) GetLengthOfOperatorIdStakeHistoryForQuorum(operatorId [32]byte, quorumNumber uint8) (*big.Int, error) { - return _ContractStakeRegistry.Contract.GetLengthOfOperatorIdStakeHistoryForQuorum(&_ContractStakeRegistry.CallOpts, operatorId, quorumNumber) +// Solidity: function getLatestStakeUpdate(bytes32 operatorId, uint8 quorumNumber) view returns((uint32,uint32,uint96)) +func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) GetLatestStakeUpdate(operatorId [32]byte, quorumNumber uint8) (IStakeRegistryStakeUpdate, error) { + return _ContractStakeRegistry.Contract.GetLatestStakeUpdate(&_ContractStakeRegistry.CallOpts, operatorId, quorumNumber) } -// GetLengthOfTotalStakeHistoryForQuorum is a free data retrieval call binding the contract method 0xe89c0a00. +// GetStakeAtBlockNumber is a free data retrieval call binding the contract method 0xfa28c627. // -// Solidity: function getLengthOfTotalStakeHistoryForQuorum(uint8 quorumNumber) view returns(uint256) -func (_ContractStakeRegistry *ContractStakeRegistryCaller) GetLengthOfTotalStakeHistoryForQuorum(opts *bind.CallOpts, quorumNumber uint8) (*big.Int, error) { +// Solidity: function getStakeAtBlockNumber(bytes32 operatorId, uint8 quorumNumber, uint32 blockNumber) view returns(uint96) +func (_ContractStakeRegistry *ContractStakeRegistryCaller) GetStakeAtBlockNumber(opts *bind.CallOpts, operatorId [32]byte, quorumNumber uint8, blockNumber uint32) (*big.Int, error) { var out []interface{} - err := _ContractStakeRegistry.contract.Call(opts, &out, "getLengthOfTotalStakeHistoryForQuorum", quorumNumber) + err := _ContractStakeRegistry.contract.Call(opts, &out, "getStakeAtBlockNumber", operatorId, quorumNumber, blockNumber) if err != nil { return *new(*big.Int), err @@ -449,119 +418,88 @@ func (_ContractStakeRegistry *ContractStakeRegistryCaller) GetLengthOfTotalStake } -// GetLengthOfTotalStakeHistoryForQuorum is a free data retrieval call binding the contract method 0xe89c0a00. +// GetStakeAtBlockNumber is a free data retrieval call binding the contract method 0xfa28c627. // -// Solidity: function getLengthOfTotalStakeHistoryForQuorum(uint8 quorumNumber) view returns(uint256) -func (_ContractStakeRegistry *ContractStakeRegistrySession) GetLengthOfTotalStakeHistoryForQuorum(quorumNumber uint8) (*big.Int, error) { - return _ContractStakeRegistry.Contract.GetLengthOfTotalStakeHistoryForQuorum(&_ContractStakeRegistry.CallOpts, quorumNumber) +// Solidity: function getStakeAtBlockNumber(bytes32 operatorId, uint8 quorumNumber, uint32 blockNumber) view returns(uint96) +func (_ContractStakeRegistry *ContractStakeRegistrySession) GetStakeAtBlockNumber(operatorId [32]byte, quorumNumber uint8, blockNumber uint32) (*big.Int, error) { + return _ContractStakeRegistry.Contract.GetStakeAtBlockNumber(&_ContractStakeRegistry.CallOpts, operatorId, quorumNumber, blockNumber) } -// GetLengthOfTotalStakeHistoryForQuorum is a free data retrieval call binding the contract method 0xe89c0a00. +// GetStakeAtBlockNumber is a free data retrieval call binding the contract method 0xfa28c627. // -// Solidity: function getLengthOfTotalStakeHistoryForQuorum(uint8 quorumNumber) view returns(uint256) -func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) GetLengthOfTotalStakeHistoryForQuorum(quorumNumber uint8) (*big.Int, error) { - return _ContractStakeRegistry.Contract.GetLengthOfTotalStakeHistoryForQuorum(&_ContractStakeRegistry.CallOpts, quorumNumber) +// Solidity: function getStakeAtBlockNumber(bytes32 operatorId, uint8 quorumNumber, uint32 blockNumber) view returns(uint96) +func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) GetStakeAtBlockNumber(operatorId [32]byte, quorumNumber uint8, blockNumber uint32) (*big.Int, error) { + return _ContractStakeRegistry.Contract.GetStakeAtBlockNumber(&_ContractStakeRegistry.CallOpts, operatorId, quorumNumber, blockNumber) } -// GetMostRecentStakeUpdateByOperatorId is a free data retrieval call binding the contract method 0xcd050d9c. +// GetStakeAtBlockNumberAndIndex is a free data retrieval call binding the contract method 0xf2be94ae. // -// Solidity: function getMostRecentStakeUpdateByOperatorId(bytes32 operatorId, uint8 quorumNumber) view returns((uint32,uint32,uint96)) -func (_ContractStakeRegistry *ContractStakeRegistryCaller) GetMostRecentStakeUpdateByOperatorId(opts *bind.CallOpts, operatorId [32]byte, quorumNumber uint8) (IStakeRegistryOperatorStakeUpdate, error) { +// Solidity: function getStakeAtBlockNumberAndIndex(uint8 quorumNumber, uint32 blockNumber, bytes32 operatorId, uint256 index) view returns(uint96) +func (_ContractStakeRegistry *ContractStakeRegistryCaller) GetStakeAtBlockNumberAndIndex(opts *bind.CallOpts, quorumNumber uint8, blockNumber uint32, operatorId [32]byte, index *big.Int) (*big.Int, error) { var out []interface{} - err := _ContractStakeRegistry.contract.Call(opts, &out, "getMostRecentStakeUpdateByOperatorId", operatorId, quorumNumber) + err := _ContractStakeRegistry.contract.Call(opts, &out, "getStakeAtBlockNumberAndIndex", quorumNumber, blockNumber, operatorId, index) if err != nil { - return *new(IStakeRegistryOperatorStakeUpdate), err - } - - out0 := *abi.ConvertType(out[0], new(IStakeRegistryOperatorStakeUpdate)).(*IStakeRegistryOperatorStakeUpdate) - - return out0, err - -} - -// GetMostRecentStakeUpdateByOperatorId is a free data retrieval call binding the contract method 0xcd050d9c. -// -// Solidity: function getMostRecentStakeUpdateByOperatorId(bytes32 operatorId, uint8 quorumNumber) view returns((uint32,uint32,uint96)) -func (_ContractStakeRegistry *ContractStakeRegistrySession) GetMostRecentStakeUpdateByOperatorId(operatorId [32]byte, quorumNumber uint8) (IStakeRegistryOperatorStakeUpdate, error) { - return _ContractStakeRegistry.Contract.GetMostRecentStakeUpdateByOperatorId(&_ContractStakeRegistry.CallOpts, operatorId, quorumNumber) -} - -// GetMostRecentStakeUpdateByOperatorId is a free data retrieval call binding the contract method 0xcd050d9c. -// -// Solidity: function getMostRecentStakeUpdateByOperatorId(bytes32 operatorId, uint8 quorumNumber) view returns((uint32,uint32,uint96)) -func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) GetMostRecentStakeUpdateByOperatorId(operatorId [32]byte, quorumNumber uint8) (IStakeRegistryOperatorStakeUpdate, error) { - return _ContractStakeRegistry.Contract.GetMostRecentStakeUpdateByOperatorId(&_ContractStakeRegistry.CallOpts, operatorId, quorumNumber) -} - -// GetOperatorIdToStakeHistory is a free data retrieval call binding the contract method 0x944472a9. -// -// Solidity: function getOperatorIdToStakeHistory(bytes32 operatorId, uint8 quorumNumber) view returns((uint32,uint32,uint96)[]) -func (_ContractStakeRegistry *ContractStakeRegistryCaller) GetOperatorIdToStakeHistory(opts *bind.CallOpts, operatorId [32]byte, quorumNumber uint8) ([]IStakeRegistryOperatorStakeUpdate, error) { - var out []interface{} - err := _ContractStakeRegistry.contract.Call(opts, &out, "getOperatorIdToStakeHistory", operatorId, quorumNumber) - - if err != nil { - return *new([]IStakeRegistryOperatorStakeUpdate), err + return *new(*big.Int), err } - out0 := *abi.ConvertType(out[0], new([]IStakeRegistryOperatorStakeUpdate)).(*[]IStakeRegistryOperatorStakeUpdate) + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) return out0, err } -// GetOperatorIdToStakeHistory is a free data retrieval call binding the contract method 0x944472a9. +// GetStakeAtBlockNumberAndIndex is a free data retrieval call binding the contract method 0xf2be94ae. // -// Solidity: function getOperatorIdToStakeHistory(bytes32 operatorId, uint8 quorumNumber) view returns((uint32,uint32,uint96)[]) -func (_ContractStakeRegistry *ContractStakeRegistrySession) GetOperatorIdToStakeHistory(operatorId [32]byte, quorumNumber uint8) ([]IStakeRegistryOperatorStakeUpdate, error) { - return _ContractStakeRegistry.Contract.GetOperatorIdToStakeHistory(&_ContractStakeRegistry.CallOpts, operatorId, quorumNumber) +// Solidity: function getStakeAtBlockNumberAndIndex(uint8 quorumNumber, uint32 blockNumber, bytes32 operatorId, uint256 index) view returns(uint96) +func (_ContractStakeRegistry *ContractStakeRegistrySession) GetStakeAtBlockNumberAndIndex(quorumNumber uint8, blockNumber uint32, operatorId [32]byte, index *big.Int) (*big.Int, error) { + return _ContractStakeRegistry.Contract.GetStakeAtBlockNumberAndIndex(&_ContractStakeRegistry.CallOpts, quorumNumber, blockNumber, operatorId, index) } -// GetOperatorIdToStakeHistory is a free data retrieval call binding the contract method 0x944472a9. +// GetStakeAtBlockNumberAndIndex is a free data retrieval call binding the contract method 0xf2be94ae. // -// Solidity: function getOperatorIdToStakeHistory(bytes32 operatorId, uint8 quorumNumber) view returns((uint32,uint32,uint96)[]) -func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) GetOperatorIdToStakeHistory(operatorId [32]byte, quorumNumber uint8) ([]IStakeRegistryOperatorStakeUpdate, error) { - return _ContractStakeRegistry.Contract.GetOperatorIdToStakeHistory(&_ContractStakeRegistry.CallOpts, operatorId, quorumNumber) +// Solidity: function getStakeAtBlockNumberAndIndex(uint8 quorumNumber, uint32 blockNumber, bytes32 operatorId, uint256 index) view returns(uint96) +func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) GetStakeAtBlockNumberAndIndex(quorumNumber uint8, blockNumber uint32, operatorId [32]byte, index *big.Int) (*big.Int, error) { + return _ContractStakeRegistry.Contract.GetStakeAtBlockNumberAndIndex(&_ContractStakeRegistry.CallOpts, quorumNumber, blockNumber, operatorId, index) } -// GetStakeForOperatorIdForQuorumAtBlockNumber is a free data retrieval call binding the contract method 0x1b327225. +// GetStakeHistory is a free data retrieval call binding the contract method 0x2cd95940. // -// Solidity: function getStakeForOperatorIdForQuorumAtBlockNumber(bytes32 operatorId, uint8 quorumNumber, uint32 blockNumber) view returns(uint96) -func (_ContractStakeRegistry *ContractStakeRegistryCaller) GetStakeForOperatorIdForQuorumAtBlockNumber(opts *bind.CallOpts, operatorId [32]byte, quorumNumber uint8, blockNumber uint32) (*big.Int, error) { +// Solidity: function getStakeHistory(bytes32 operatorId, uint8 quorumNumber) view returns((uint32,uint32,uint96)[]) +func (_ContractStakeRegistry *ContractStakeRegistryCaller) GetStakeHistory(opts *bind.CallOpts, operatorId [32]byte, quorumNumber uint8) ([]IStakeRegistryStakeUpdate, error) { var out []interface{} - err := _ContractStakeRegistry.contract.Call(opts, &out, "getStakeForOperatorIdForQuorumAtBlockNumber", operatorId, quorumNumber, blockNumber) + err := _ContractStakeRegistry.contract.Call(opts, &out, "getStakeHistory", operatorId, quorumNumber) if err != nil { - return *new(*big.Int), err + return *new([]IStakeRegistryStakeUpdate), err } - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + out0 := *abi.ConvertType(out[0], new([]IStakeRegistryStakeUpdate)).(*[]IStakeRegistryStakeUpdate) return out0, err } -// GetStakeForOperatorIdForQuorumAtBlockNumber is a free data retrieval call binding the contract method 0x1b327225. +// GetStakeHistory is a free data retrieval call binding the contract method 0x2cd95940. // -// Solidity: function getStakeForOperatorIdForQuorumAtBlockNumber(bytes32 operatorId, uint8 quorumNumber, uint32 blockNumber) view returns(uint96) -func (_ContractStakeRegistry *ContractStakeRegistrySession) GetStakeForOperatorIdForQuorumAtBlockNumber(operatorId [32]byte, quorumNumber uint8, blockNumber uint32) (*big.Int, error) { - return _ContractStakeRegistry.Contract.GetStakeForOperatorIdForQuorumAtBlockNumber(&_ContractStakeRegistry.CallOpts, operatorId, quorumNumber, blockNumber) +// Solidity: function getStakeHistory(bytes32 operatorId, uint8 quorumNumber) view returns((uint32,uint32,uint96)[]) +func (_ContractStakeRegistry *ContractStakeRegistrySession) GetStakeHistory(operatorId [32]byte, quorumNumber uint8) ([]IStakeRegistryStakeUpdate, error) { + return _ContractStakeRegistry.Contract.GetStakeHistory(&_ContractStakeRegistry.CallOpts, operatorId, quorumNumber) } -// GetStakeForOperatorIdForQuorumAtBlockNumber is a free data retrieval call binding the contract method 0x1b327225. +// GetStakeHistory is a free data retrieval call binding the contract method 0x2cd95940. // -// Solidity: function getStakeForOperatorIdForQuorumAtBlockNumber(bytes32 operatorId, uint8 quorumNumber, uint32 blockNumber) view returns(uint96) -func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) GetStakeForOperatorIdForQuorumAtBlockNumber(operatorId [32]byte, quorumNumber uint8, blockNumber uint32) (*big.Int, error) { - return _ContractStakeRegistry.Contract.GetStakeForOperatorIdForQuorumAtBlockNumber(&_ContractStakeRegistry.CallOpts, operatorId, quorumNumber, blockNumber) +// Solidity: function getStakeHistory(bytes32 operatorId, uint8 quorumNumber) view returns((uint32,uint32,uint96)[]) +func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) GetStakeHistory(operatorId [32]byte, quorumNumber uint8) ([]IStakeRegistryStakeUpdate, error) { + return _ContractStakeRegistry.Contract.GetStakeHistory(&_ContractStakeRegistry.CallOpts, operatorId, quorumNumber) } -// GetStakeForQuorumAtBlockNumberFromOperatorIdAndIndex is a free data retrieval call binding the contract method 0xa43cde89. +// GetStakeHistoryLength is a free data retrieval call binding the contract method 0x4bd26e09. // -// Solidity: function getStakeForQuorumAtBlockNumberFromOperatorIdAndIndex(uint8 quorumNumber, uint32 blockNumber, bytes32 operatorId, uint256 index) view returns(uint96) -func (_ContractStakeRegistry *ContractStakeRegistryCaller) GetStakeForQuorumAtBlockNumberFromOperatorIdAndIndex(opts *bind.CallOpts, quorumNumber uint8, blockNumber uint32, operatorId [32]byte, index *big.Int) (*big.Int, error) { +// Solidity: function getStakeHistoryLength(bytes32 operatorId, uint8 quorumNumber) view returns(uint256) +func (_ContractStakeRegistry *ContractStakeRegistryCaller) GetStakeHistoryLength(opts *bind.CallOpts, operatorId [32]byte, quorumNumber uint8) (*big.Int, error) { var out []interface{} - err := _ContractStakeRegistry.contract.Call(opts, &out, "getStakeForQuorumAtBlockNumberFromOperatorIdAndIndex", quorumNumber, blockNumber, operatorId, index) + err := _ContractStakeRegistry.contract.Call(opts, &out, "getStakeHistoryLength", operatorId, quorumNumber) if err != nil { return *new(*big.Int), err @@ -573,57 +511,57 @@ func (_ContractStakeRegistry *ContractStakeRegistryCaller) GetStakeForQuorumAtBl } -// GetStakeForQuorumAtBlockNumberFromOperatorIdAndIndex is a free data retrieval call binding the contract method 0xa43cde89. +// GetStakeHistoryLength is a free data retrieval call binding the contract method 0x4bd26e09. // -// Solidity: function getStakeForQuorumAtBlockNumberFromOperatorIdAndIndex(uint8 quorumNumber, uint32 blockNumber, bytes32 operatorId, uint256 index) view returns(uint96) -func (_ContractStakeRegistry *ContractStakeRegistrySession) GetStakeForQuorumAtBlockNumberFromOperatorIdAndIndex(quorumNumber uint8, blockNumber uint32, operatorId [32]byte, index *big.Int) (*big.Int, error) { - return _ContractStakeRegistry.Contract.GetStakeForQuorumAtBlockNumberFromOperatorIdAndIndex(&_ContractStakeRegistry.CallOpts, quorumNumber, blockNumber, operatorId, index) +// Solidity: function getStakeHistoryLength(bytes32 operatorId, uint8 quorumNumber) view returns(uint256) +func (_ContractStakeRegistry *ContractStakeRegistrySession) GetStakeHistoryLength(operatorId [32]byte, quorumNumber uint8) (*big.Int, error) { + return _ContractStakeRegistry.Contract.GetStakeHistoryLength(&_ContractStakeRegistry.CallOpts, operatorId, quorumNumber) } -// GetStakeForQuorumAtBlockNumberFromOperatorIdAndIndex is a free data retrieval call binding the contract method 0xa43cde89. +// GetStakeHistoryLength is a free data retrieval call binding the contract method 0x4bd26e09. // -// Solidity: function getStakeForQuorumAtBlockNumberFromOperatorIdAndIndex(uint8 quorumNumber, uint32 blockNumber, bytes32 operatorId, uint256 index) view returns(uint96) -func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) GetStakeForQuorumAtBlockNumberFromOperatorIdAndIndex(quorumNumber uint8, blockNumber uint32, operatorId [32]byte, index *big.Int) (*big.Int, error) { - return _ContractStakeRegistry.Contract.GetStakeForQuorumAtBlockNumberFromOperatorIdAndIndex(&_ContractStakeRegistry.CallOpts, quorumNumber, blockNumber, operatorId, index) +// Solidity: function getStakeHistoryLength(bytes32 operatorId, uint8 quorumNumber) view returns(uint256) +func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) GetStakeHistoryLength(operatorId [32]byte, quorumNumber uint8) (*big.Int, error) { + return _ContractStakeRegistry.Contract.GetStakeHistoryLength(&_ContractStakeRegistry.CallOpts, operatorId, quorumNumber) } -// GetStakeUpdateForQuorumFromOperatorIdAndIndex is a free data retrieval call binding the contract method 0x248d6573. +// GetStakeUpdateAtIndex is a free data retrieval call binding the contract method 0xac6bfb03. // -// Solidity: function getStakeUpdateForQuorumFromOperatorIdAndIndex(uint8 quorumNumber, bytes32 operatorId, uint256 index) view returns((uint32,uint32,uint96)) -func (_ContractStakeRegistry *ContractStakeRegistryCaller) GetStakeUpdateForQuorumFromOperatorIdAndIndex(opts *bind.CallOpts, quorumNumber uint8, operatorId [32]byte, index *big.Int) (IStakeRegistryOperatorStakeUpdate, error) { +// Solidity: function getStakeUpdateAtIndex(uint8 quorumNumber, bytes32 operatorId, uint256 index) view returns((uint32,uint32,uint96)) +func (_ContractStakeRegistry *ContractStakeRegistryCaller) GetStakeUpdateAtIndex(opts *bind.CallOpts, quorumNumber uint8, operatorId [32]byte, index *big.Int) (IStakeRegistryStakeUpdate, error) { var out []interface{} - err := _ContractStakeRegistry.contract.Call(opts, &out, "getStakeUpdateForQuorumFromOperatorIdAndIndex", quorumNumber, operatorId, index) + err := _ContractStakeRegistry.contract.Call(opts, &out, "getStakeUpdateAtIndex", quorumNumber, operatorId, index) if err != nil { - return *new(IStakeRegistryOperatorStakeUpdate), err + return *new(IStakeRegistryStakeUpdate), err } - out0 := *abi.ConvertType(out[0], new(IStakeRegistryOperatorStakeUpdate)).(*IStakeRegistryOperatorStakeUpdate) + out0 := *abi.ConvertType(out[0], new(IStakeRegistryStakeUpdate)).(*IStakeRegistryStakeUpdate) return out0, err } -// GetStakeUpdateForQuorumFromOperatorIdAndIndex is a free data retrieval call binding the contract method 0x248d6573. +// GetStakeUpdateAtIndex is a free data retrieval call binding the contract method 0xac6bfb03. // -// Solidity: function getStakeUpdateForQuorumFromOperatorIdAndIndex(uint8 quorumNumber, bytes32 operatorId, uint256 index) view returns((uint32,uint32,uint96)) -func (_ContractStakeRegistry *ContractStakeRegistrySession) GetStakeUpdateForQuorumFromOperatorIdAndIndex(quorumNumber uint8, operatorId [32]byte, index *big.Int) (IStakeRegistryOperatorStakeUpdate, error) { - return _ContractStakeRegistry.Contract.GetStakeUpdateForQuorumFromOperatorIdAndIndex(&_ContractStakeRegistry.CallOpts, quorumNumber, operatorId, index) +// Solidity: function getStakeUpdateAtIndex(uint8 quorumNumber, bytes32 operatorId, uint256 index) view returns((uint32,uint32,uint96)) +func (_ContractStakeRegistry *ContractStakeRegistrySession) GetStakeUpdateAtIndex(quorumNumber uint8, operatorId [32]byte, index *big.Int) (IStakeRegistryStakeUpdate, error) { + return _ContractStakeRegistry.Contract.GetStakeUpdateAtIndex(&_ContractStakeRegistry.CallOpts, quorumNumber, operatorId, index) } -// GetStakeUpdateForQuorumFromOperatorIdAndIndex is a free data retrieval call binding the contract method 0x248d6573. +// GetStakeUpdateAtIndex is a free data retrieval call binding the contract method 0xac6bfb03. // -// Solidity: function getStakeUpdateForQuorumFromOperatorIdAndIndex(uint8 quorumNumber, bytes32 operatorId, uint256 index) view returns((uint32,uint32,uint96)) -func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) GetStakeUpdateForQuorumFromOperatorIdAndIndex(quorumNumber uint8, operatorId [32]byte, index *big.Int) (IStakeRegistryOperatorStakeUpdate, error) { - return _ContractStakeRegistry.Contract.GetStakeUpdateForQuorumFromOperatorIdAndIndex(&_ContractStakeRegistry.CallOpts, quorumNumber, operatorId, index) +// Solidity: function getStakeUpdateAtIndex(uint8 quorumNumber, bytes32 operatorId, uint256 index) view returns((uint32,uint32,uint96)) +func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) GetStakeUpdateAtIndex(quorumNumber uint8, operatorId [32]byte, index *big.Int) (IStakeRegistryStakeUpdate, error) { + return _ContractStakeRegistry.Contract.GetStakeUpdateAtIndex(&_ContractStakeRegistry.CallOpts, quorumNumber, operatorId, index) } -// GetStakeUpdateIndexForOperatorIdForQuorumAtBlockNumber is a free data retrieval call binding the contract method 0x48085866. +// GetStakeUpdateIndexAtBlockNumber is a free data retrieval call binding the contract method 0xdd9846b9. // -// Solidity: function getStakeUpdateIndexForOperatorIdForQuorumAtBlockNumber(bytes32 operatorId, uint8 quorumNumber, uint32 blockNumber) view returns(uint32) -func (_ContractStakeRegistry *ContractStakeRegistryCaller) GetStakeUpdateIndexForOperatorIdForQuorumAtBlockNumber(opts *bind.CallOpts, operatorId [32]byte, quorumNumber uint8, blockNumber uint32) (uint32, error) { +// Solidity: function getStakeUpdateIndexAtBlockNumber(bytes32 operatorId, uint8 quorumNumber, uint32 blockNumber) view returns(uint32) +func (_ContractStakeRegistry *ContractStakeRegistryCaller) GetStakeUpdateIndexAtBlockNumber(opts *bind.CallOpts, operatorId [32]byte, quorumNumber uint8, blockNumber uint32) (uint32, error) { var out []interface{} - err := _ContractStakeRegistry.contract.Call(opts, &out, "getStakeUpdateIndexForOperatorIdForQuorumAtBlockNumber", operatorId, quorumNumber, blockNumber) + err := _ContractStakeRegistry.contract.Call(opts, &out, "getStakeUpdateIndexAtBlockNumber", operatorId, quorumNumber, blockNumber) if err != nil { return *new(uint32), err @@ -635,18 +573,18 @@ func (_ContractStakeRegistry *ContractStakeRegistryCaller) GetStakeUpdateIndexFo } -// GetStakeUpdateIndexForOperatorIdForQuorumAtBlockNumber is a free data retrieval call binding the contract method 0x48085866. +// GetStakeUpdateIndexAtBlockNumber is a free data retrieval call binding the contract method 0xdd9846b9. // -// Solidity: function getStakeUpdateIndexForOperatorIdForQuorumAtBlockNumber(bytes32 operatorId, uint8 quorumNumber, uint32 blockNumber) view returns(uint32) -func (_ContractStakeRegistry *ContractStakeRegistrySession) GetStakeUpdateIndexForOperatorIdForQuorumAtBlockNumber(operatorId [32]byte, quorumNumber uint8, blockNumber uint32) (uint32, error) { - return _ContractStakeRegistry.Contract.GetStakeUpdateIndexForOperatorIdForQuorumAtBlockNumber(&_ContractStakeRegistry.CallOpts, operatorId, quorumNumber, blockNumber) +// Solidity: function getStakeUpdateIndexAtBlockNumber(bytes32 operatorId, uint8 quorumNumber, uint32 blockNumber) view returns(uint32) +func (_ContractStakeRegistry *ContractStakeRegistrySession) GetStakeUpdateIndexAtBlockNumber(operatorId [32]byte, quorumNumber uint8, blockNumber uint32) (uint32, error) { + return _ContractStakeRegistry.Contract.GetStakeUpdateIndexAtBlockNumber(&_ContractStakeRegistry.CallOpts, operatorId, quorumNumber, blockNumber) } -// GetStakeUpdateIndexForOperatorIdForQuorumAtBlockNumber is a free data retrieval call binding the contract method 0x48085866. +// GetStakeUpdateIndexAtBlockNumber is a free data retrieval call binding the contract method 0xdd9846b9. // -// Solidity: function getStakeUpdateIndexForOperatorIdForQuorumAtBlockNumber(bytes32 operatorId, uint8 quorumNumber, uint32 blockNumber) view returns(uint32) -func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) GetStakeUpdateIndexForOperatorIdForQuorumAtBlockNumber(operatorId [32]byte, quorumNumber uint8, blockNumber uint32) (uint32, error) { - return _ContractStakeRegistry.Contract.GetStakeUpdateIndexForOperatorIdForQuorumAtBlockNumber(&_ContractStakeRegistry.CallOpts, operatorId, quorumNumber, blockNumber) +// Solidity: function getStakeUpdateIndexAtBlockNumber(bytes32 operatorId, uint8 quorumNumber, uint32 blockNumber) view returns(uint32) +func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) GetStakeUpdateIndexAtBlockNumber(operatorId [32]byte, quorumNumber uint8, blockNumber uint32) (uint32, error) { + return _ContractStakeRegistry.Contract.GetStakeUpdateIndexAtBlockNumber(&_ContractStakeRegistry.CallOpts, operatorId, quorumNumber, blockNumber) } // GetTotalStakeAtBlockNumberFromIndex is a free data retrieval call binding the contract method 0xc8294c56. @@ -680,128 +618,128 @@ func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) GetTotalStakeA return _ContractStakeRegistry.Contract.GetTotalStakeAtBlockNumberFromIndex(&_ContractStakeRegistry.CallOpts, quorumNumber, blockNumber, index) } -// GetTotalStakeIndicesByQuorumNumbersAtBlockNumber is a free data retrieval call binding the contract method 0xe192e9ad. +// GetTotalStakeHistoryLength is a free data retrieval call binding the contract method 0x0491b41c. // -// Solidity: function getTotalStakeIndicesByQuorumNumbersAtBlockNumber(uint32 blockNumber, bytes quorumNumbers) view returns(uint32[]) -func (_ContractStakeRegistry *ContractStakeRegistryCaller) GetTotalStakeIndicesByQuorumNumbersAtBlockNumber(opts *bind.CallOpts, blockNumber uint32, quorumNumbers []byte) ([]uint32, error) { +// Solidity: function getTotalStakeHistoryLength(uint8 quorumNumber) view returns(uint256) +func (_ContractStakeRegistry *ContractStakeRegistryCaller) GetTotalStakeHistoryLength(opts *bind.CallOpts, quorumNumber uint8) (*big.Int, error) { var out []interface{} - err := _ContractStakeRegistry.contract.Call(opts, &out, "getTotalStakeIndicesByQuorumNumbersAtBlockNumber", blockNumber, quorumNumbers) + err := _ContractStakeRegistry.contract.Call(opts, &out, "getTotalStakeHistoryLength", quorumNumber) if err != nil { - return *new([]uint32), err + return *new(*big.Int), err } - out0 := *abi.ConvertType(out[0], new([]uint32)).(*[]uint32) + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) return out0, err } -// GetTotalStakeIndicesByQuorumNumbersAtBlockNumber is a free data retrieval call binding the contract method 0xe192e9ad. +// GetTotalStakeHistoryLength is a free data retrieval call binding the contract method 0x0491b41c. // -// Solidity: function getTotalStakeIndicesByQuorumNumbersAtBlockNumber(uint32 blockNumber, bytes quorumNumbers) view returns(uint32[]) -func (_ContractStakeRegistry *ContractStakeRegistrySession) GetTotalStakeIndicesByQuorumNumbersAtBlockNumber(blockNumber uint32, quorumNumbers []byte) ([]uint32, error) { - return _ContractStakeRegistry.Contract.GetTotalStakeIndicesByQuorumNumbersAtBlockNumber(&_ContractStakeRegistry.CallOpts, blockNumber, quorumNumbers) +// Solidity: function getTotalStakeHistoryLength(uint8 quorumNumber) view returns(uint256) +func (_ContractStakeRegistry *ContractStakeRegistrySession) GetTotalStakeHistoryLength(quorumNumber uint8) (*big.Int, error) { + return _ContractStakeRegistry.Contract.GetTotalStakeHistoryLength(&_ContractStakeRegistry.CallOpts, quorumNumber) } -// GetTotalStakeIndicesByQuorumNumbersAtBlockNumber is a free data retrieval call binding the contract method 0xe192e9ad. +// GetTotalStakeHistoryLength is a free data retrieval call binding the contract method 0x0491b41c. // -// Solidity: function getTotalStakeIndicesByQuorumNumbersAtBlockNumber(uint32 blockNumber, bytes quorumNumbers) view returns(uint32[]) -func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) GetTotalStakeIndicesByQuorumNumbersAtBlockNumber(blockNumber uint32, quorumNumbers []byte) ([]uint32, error) { - return _ContractStakeRegistry.Contract.GetTotalStakeIndicesByQuorumNumbersAtBlockNumber(&_ContractStakeRegistry.CallOpts, blockNumber, quorumNumbers) +// Solidity: function getTotalStakeHistoryLength(uint8 quorumNumber) view returns(uint256) +func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) GetTotalStakeHistoryLength(quorumNumber uint8) (*big.Int, error) { + return _ContractStakeRegistry.Contract.GetTotalStakeHistoryLength(&_ContractStakeRegistry.CallOpts, quorumNumber) } -// GetTotalStakeUpdateForQuorumFromIndex is a free data retrieval call binding the contract method 0xe25427dd. +// GetTotalStakeIndicesAtBlockNumber is a free data retrieval call binding the contract method 0x81c07502. // -// Solidity: function getTotalStakeUpdateForQuorumFromIndex(uint8 quorumNumber, uint256 index) view returns((uint32,uint32,uint96)) -func (_ContractStakeRegistry *ContractStakeRegistryCaller) GetTotalStakeUpdateForQuorumFromIndex(opts *bind.CallOpts, quorumNumber uint8, index *big.Int) (IStakeRegistryOperatorStakeUpdate, error) { +// Solidity: function getTotalStakeIndicesAtBlockNumber(uint32 blockNumber, bytes quorumNumbers) view returns(uint32[]) +func (_ContractStakeRegistry *ContractStakeRegistryCaller) GetTotalStakeIndicesAtBlockNumber(opts *bind.CallOpts, blockNumber uint32, quorumNumbers []byte) ([]uint32, error) { var out []interface{} - err := _ContractStakeRegistry.contract.Call(opts, &out, "getTotalStakeUpdateForQuorumFromIndex", quorumNumber, index) + err := _ContractStakeRegistry.contract.Call(opts, &out, "getTotalStakeIndicesAtBlockNumber", blockNumber, quorumNumbers) if err != nil { - return *new(IStakeRegistryOperatorStakeUpdate), err + return *new([]uint32), err } - out0 := *abi.ConvertType(out[0], new(IStakeRegistryOperatorStakeUpdate)).(*IStakeRegistryOperatorStakeUpdate) + out0 := *abi.ConvertType(out[0], new([]uint32)).(*[]uint32) return out0, err } -// GetTotalStakeUpdateForQuorumFromIndex is a free data retrieval call binding the contract method 0xe25427dd. +// GetTotalStakeIndicesAtBlockNumber is a free data retrieval call binding the contract method 0x81c07502. // -// Solidity: function getTotalStakeUpdateForQuorumFromIndex(uint8 quorumNumber, uint256 index) view returns((uint32,uint32,uint96)) -func (_ContractStakeRegistry *ContractStakeRegistrySession) GetTotalStakeUpdateForQuorumFromIndex(quorumNumber uint8, index *big.Int) (IStakeRegistryOperatorStakeUpdate, error) { - return _ContractStakeRegistry.Contract.GetTotalStakeUpdateForQuorumFromIndex(&_ContractStakeRegistry.CallOpts, quorumNumber, index) +// Solidity: function getTotalStakeIndicesAtBlockNumber(uint32 blockNumber, bytes quorumNumbers) view returns(uint32[]) +func (_ContractStakeRegistry *ContractStakeRegistrySession) GetTotalStakeIndicesAtBlockNumber(blockNumber uint32, quorumNumbers []byte) ([]uint32, error) { + return _ContractStakeRegistry.Contract.GetTotalStakeIndicesAtBlockNumber(&_ContractStakeRegistry.CallOpts, blockNumber, quorumNumbers) } -// GetTotalStakeUpdateForQuorumFromIndex is a free data retrieval call binding the contract method 0xe25427dd. +// GetTotalStakeIndicesAtBlockNumber is a free data retrieval call binding the contract method 0x81c07502. // -// Solidity: function getTotalStakeUpdateForQuorumFromIndex(uint8 quorumNumber, uint256 index) view returns((uint32,uint32,uint96)) -func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) GetTotalStakeUpdateForQuorumFromIndex(quorumNumber uint8, index *big.Int) (IStakeRegistryOperatorStakeUpdate, error) { - return _ContractStakeRegistry.Contract.GetTotalStakeUpdateForQuorumFromIndex(&_ContractStakeRegistry.CallOpts, quorumNumber, index) +// Solidity: function getTotalStakeIndicesAtBlockNumber(uint32 blockNumber, bytes quorumNumbers) view returns(uint32[]) +func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) GetTotalStakeIndicesAtBlockNumber(blockNumber uint32, quorumNumbers []byte) ([]uint32, error) { + return _ContractStakeRegistry.Contract.GetTotalStakeIndicesAtBlockNumber(&_ContractStakeRegistry.CallOpts, blockNumber, quorumNumbers) } -// MinimumStakeForQuorum is a free data retrieval call binding the contract method 0x7ed9430f. +// GetTotalStakeUpdateAtIndex is a free data retrieval call binding the contract method 0xb6904b78. // -// Solidity: function minimumStakeForQuorum(uint256 ) view returns(uint96) -func (_ContractStakeRegistry *ContractStakeRegistryCaller) MinimumStakeForQuorum(opts *bind.CallOpts, arg0 *big.Int) (*big.Int, error) { +// Solidity: function getTotalStakeUpdateAtIndex(uint8 quorumNumber, uint256 index) view returns((uint32,uint32,uint96)) +func (_ContractStakeRegistry *ContractStakeRegistryCaller) GetTotalStakeUpdateAtIndex(opts *bind.CallOpts, quorumNumber uint8, index *big.Int) (IStakeRegistryStakeUpdate, error) { var out []interface{} - err := _ContractStakeRegistry.contract.Call(opts, &out, "minimumStakeForQuorum", arg0) + err := _ContractStakeRegistry.contract.Call(opts, &out, "getTotalStakeUpdateAtIndex", quorumNumber, index) if err != nil { - return *new(*big.Int), err + return *new(IStakeRegistryStakeUpdate), err } - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + out0 := *abi.ConvertType(out[0], new(IStakeRegistryStakeUpdate)).(*IStakeRegistryStakeUpdate) return out0, err } -// MinimumStakeForQuorum is a free data retrieval call binding the contract method 0x7ed9430f. +// GetTotalStakeUpdateAtIndex is a free data retrieval call binding the contract method 0xb6904b78. // -// Solidity: function minimumStakeForQuorum(uint256 ) view returns(uint96) -func (_ContractStakeRegistry *ContractStakeRegistrySession) MinimumStakeForQuorum(arg0 *big.Int) (*big.Int, error) { - return _ContractStakeRegistry.Contract.MinimumStakeForQuorum(&_ContractStakeRegistry.CallOpts, arg0) +// Solidity: function getTotalStakeUpdateAtIndex(uint8 quorumNumber, uint256 index) view returns((uint32,uint32,uint96)) +func (_ContractStakeRegistry *ContractStakeRegistrySession) GetTotalStakeUpdateAtIndex(quorumNumber uint8, index *big.Int) (IStakeRegistryStakeUpdate, error) { + return _ContractStakeRegistry.Contract.GetTotalStakeUpdateAtIndex(&_ContractStakeRegistry.CallOpts, quorumNumber, index) } -// MinimumStakeForQuorum is a free data retrieval call binding the contract method 0x7ed9430f. +// GetTotalStakeUpdateAtIndex is a free data retrieval call binding the contract method 0xb6904b78. // -// Solidity: function minimumStakeForQuorum(uint256 ) view returns(uint96) -func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) MinimumStakeForQuorum(arg0 *big.Int) (*big.Int, error) { - return _ContractStakeRegistry.Contract.MinimumStakeForQuorum(&_ContractStakeRegistry.CallOpts, arg0) +// Solidity: function getTotalStakeUpdateAtIndex(uint8 quorumNumber, uint256 index) view returns((uint32,uint32,uint96)) +func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) GetTotalStakeUpdateAtIndex(quorumNumber uint8, index *big.Int) (IStakeRegistryStakeUpdate, error) { + return _ContractStakeRegistry.Contract.GetTotalStakeUpdateAtIndex(&_ContractStakeRegistry.CallOpts, quorumNumber, index) } -// QuorumCount is a free data retrieval call binding the contract method 0x9aa1653d. +// MinimumStakeForQuorum is a free data retrieval call binding the contract method 0xc46778a5. // -// Solidity: function quorumCount() view returns(uint16) -func (_ContractStakeRegistry *ContractStakeRegistryCaller) QuorumCount(opts *bind.CallOpts) (uint16, error) { +// Solidity: function minimumStakeForQuorum(uint8 ) view returns(uint96) +func (_ContractStakeRegistry *ContractStakeRegistryCaller) MinimumStakeForQuorum(opts *bind.CallOpts, arg0 uint8) (*big.Int, error) { var out []interface{} - err := _ContractStakeRegistry.contract.Call(opts, &out, "quorumCount") + err := _ContractStakeRegistry.contract.Call(opts, &out, "minimumStakeForQuorum", arg0) if err != nil { - return *new(uint16), err + return *new(*big.Int), err } - out0 := *abi.ConvertType(out[0], new(uint16)).(*uint16) + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) return out0, err } -// QuorumCount is a free data retrieval call binding the contract method 0x9aa1653d. +// MinimumStakeForQuorum is a free data retrieval call binding the contract method 0xc46778a5. // -// Solidity: function quorumCount() view returns(uint16) -func (_ContractStakeRegistry *ContractStakeRegistrySession) QuorumCount() (uint16, error) { - return _ContractStakeRegistry.Contract.QuorumCount(&_ContractStakeRegistry.CallOpts) +// Solidity: function minimumStakeForQuorum(uint8 ) view returns(uint96) +func (_ContractStakeRegistry *ContractStakeRegistrySession) MinimumStakeForQuorum(arg0 uint8) (*big.Int, error) { + return _ContractStakeRegistry.Contract.MinimumStakeForQuorum(&_ContractStakeRegistry.CallOpts, arg0) } -// QuorumCount is a free data retrieval call binding the contract method 0x9aa1653d. +// MinimumStakeForQuorum is a free data retrieval call binding the contract method 0xc46778a5. // -// Solidity: function quorumCount() view returns(uint16) -func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) QuorumCount() (uint16, error) { - return _ContractStakeRegistry.Contract.QuorumCount(&_ContractStakeRegistry.CallOpts) +// Solidity: function minimumStakeForQuorum(uint8 ) view returns(uint96) +func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) MinimumStakeForQuorum(arg0 uint8) (*big.Int, error) { + return _ContractStakeRegistry.Contract.MinimumStakeForQuorum(&_ContractStakeRegistry.CallOpts, arg0) } // RegistryCoordinator is a free data retrieval call binding the contract method 0x6d14a987. @@ -835,77 +773,15 @@ func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) RegistryCoordi return _ContractStakeRegistry.Contract.RegistryCoordinator(&_ContractStakeRegistry.CallOpts) } -// ServiceManager is a free data retrieval call binding the contract method 0x3998fdd3. -// -// Solidity: function serviceManager() view returns(address) -func (_ContractStakeRegistry *ContractStakeRegistryCaller) ServiceManager(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _ContractStakeRegistry.contract.Call(opts, &out, "serviceManager") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// ServiceManager is a free data retrieval call binding the contract method 0x3998fdd3. -// -// Solidity: function serviceManager() view returns(address) -func (_ContractStakeRegistry *ContractStakeRegistrySession) ServiceManager() (common.Address, error) { - return _ContractStakeRegistry.Contract.ServiceManager(&_ContractStakeRegistry.CallOpts) -} - -// ServiceManager is a free data retrieval call binding the contract method 0x3998fdd3. +// StrategyParams is a free data retrieval call binding the contract method 0x08732461. // -// Solidity: function serviceManager() view returns(address) -func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) ServiceManager() (common.Address, error) { - return _ContractStakeRegistry.Contract.ServiceManager(&_ContractStakeRegistry.CallOpts) -} - -// Slasher is a free data retrieval call binding the contract method 0xb1344271. -// -// Solidity: function slasher() view returns(address) -func (_ContractStakeRegistry *ContractStakeRegistryCaller) Slasher(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _ContractStakeRegistry.contract.Call(opts, &out, "slasher") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// Slasher is a free data retrieval call binding the contract method 0xb1344271. -// -// Solidity: function slasher() view returns(address) -func (_ContractStakeRegistry *ContractStakeRegistrySession) Slasher() (common.Address, error) { - return _ContractStakeRegistry.Contract.Slasher(&_ContractStakeRegistry.CallOpts) -} - -// Slasher is a free data retrieval call binding the contract method 0xb1344271. -// -// Solidity: function slasher() view returns(address) -func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) Slasher() (common.Address, error) { - return _ContractStakeRegistry.Contract.Slasher(&_ContractStakeRegistry.CallOpts) -} - -// StrategiesConsideredAndMultipliers is a free data retrieval call binding the contract method 0xeb92199c. -// -// Solidity: function strategiesConsideredAndMultipliers(uint8 , uint256 ) view returns(address strategy, uint96 multiplier) -func (_ContractStakeRegistry *ContractStakeRegistryCaller) StrategiesConsideredAndMultipliers(opts *bind.CallOpts, arg0 uint8, arg1 *big.Int) (struct { +// Solidity: function strategyParams(uint8 , uint256 ) view returns(address strategy, uint96 multiplier) +func (_ContractStakeRegistry *ContractStakeRegistryCaller) StrategyParams(opts *bind.CallOpts, arg0 uint8, arg1 *big.Int) (struct { Strategy common.Address Multiplier *big.Int }, error) { var out []interface{} - err := _ContractStakeRegistry.contract.Call(opts, &out, "strategiesConsideredAndMultipliers", arg0, arg1) + err := _ContractStakeRegistry.contract.Call(opts, &out, "strategyParams", arg0, arg1) outstruct := new(struct { Strategy common.Address @@ -922,117 +798,86 @@ func (_ContractStakeRegistry *ContractStakeRegistryCaller) StrategiesConsideredA } -// StrategiesConsideredAndMultipliers is a free data retrieval call binding the contract method 0xeb92199c. +// StrategyParams is a free data retrieval call binding the contract method 0x08732461. // -// Solidity: function strategiesConsideredAndMultipliers(uint8 , uint256 ) view returns(address strategy, uint96 multiplier) -func (_ContractStakeRegistry *ContractStakeRegistrySession) StrategiesConsideredAndMultipliers(arg0 uint8, arg1 *big.Int) (struct { +// Solidity: function strategyParams(uint8 , uint256 ) view returns(address strategy, uint96 multiplier) +func (_ContractStakeRegistry *ContractStakeRegistrySession) StrategyParams(arg0 uint8, arg1 *big.Int) (struct { Strategy common.Address Multiplier *big.Int }, error) { - return _ContractStakeRegistry.Contract.StrategiesConsideredAndMultipliers(&_ContractStakeRegistry.CallOpts, arg0, arg1) + return _ContractStakeRegistry.Contract.StrategyParams(&_ContractStakeRegistry.CallOpts, arg0, arg1) } -// StrategiesConsideredAndMultipliers is a free data retrieval call binding the contract method 0xeb92199c. +// StrategyParams is a free data retrieval call binding the contract method 0x08732461. // -// Solidity: function strategiesConsideredAndMultipliers(uint8 , uint256 ) view returns(address strategy, uint96 multiplier) -func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) StrategiesConsideredAndMultipliers(arg0 uint8, arg1 *big.Int) (struct { +// Solidity: function strategyParams(uint8 , uint256 ) view returns(address strategy, uint96 multiplier) +func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) StrategyParams(arg0 uint8, arg1 *big.Int) (struct { Strategy common.Address Multiplier *big.Int }, error) { - return _ContractStakeRegistry.Contract.StrategiesConsideredAndMultipliers(&_ContractStakeRegistry.CallOpts, arg0, arg1) -} - -// StrategiesConsideredAndMultipliersLength is a free data retrieval call binding the contract method 0x9e8ca620. -// -// Solidity: function strategiesConsideredAndMultipliersLength(uint8 quorumNumber) view returns(uint256) -func (_ContractStakeRegistry *ContractStakeRegistryCaller) StrategiesConsideredAndMultipliersLength(opts *bind.CallOpts, quorumNumber uint8) (*big.Int, error) { - var out []interface{} - err := _ContractStakeRegistry.contract.Call(opts, &out, "strategiesConsideredAndMultipliersLength", quorumNumber) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - + return _ContractStakeRegistry.Contract.StrategyParams(&_ContractStakeRegistry.CallOpts, arg0, arg1) } -// StrategiesConsideredAndMultipliersLength is a free data retrieval call binding the contract method 0x9e8ca620. +// StrategyParamsByIndex is a free data retrieval call binding the contract method 0xadc804da. // -// Solidity: function strategiesConsideredAndMultipliersLength(uint8 quorumNumber) view returns(uint256) -func (_ContractStakeRegistry *ContractStakeRegistrySession) StrategiesConsideredAndMultipliersLength(quorumNumber uint8) (*big.Int, error) { - return _ContractStakeRegistry.Contract.StrategiesConsideredAndMultipliersLength(&_ContractStakeRegistry.CallOpts, quorumNumber) -} - -// StrategiesConsideredAndMultipliersLength is a free data retrieval call binding the contract method 0x9e8ca620. -// -// Solidity: function strategiesConsideredAndMultipliersLength(uint8 quorumNumber) view returns(uint256) -func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) StrategiesConsideredAndMultipliersLength(quorumNumber uint8) (*big.Int, error) { - return _ContractStakeRegistry.Contract.StrategiesConsideredAndMultipliersLength(&_ContractStakeRegistry.CallOpts, quorumNumber) -} - -// StrategyAndWeightingMultiplierForQuorumByIndex is a free data retrieval call binding the contract method 0x7cc0d75f. -// -// Solidity: function strategyAndWeightingMultiplierForQuorumByIndex(uint8 quorumNumber, uint256 index) view returns((address,uint96)) -func (_ContractStakeRegistry *ContractStakeRegistryCaller) StrategyAndWeightingMultiplierForQuorumByIndex(opts *bind.CallOpts, quorumNumber uint8, index *big.Int) (IVoteWeigherStrategyAndWeightingMultiplier, error) { +// Solidity: function strategyParamsByIndex(uint8 quorumNumber, uint256 index) view returns((address,uint96)) +func (_ContractStakeRegistry *ContractStakeRegistryCaller) StrategyParamsByIndex(opts *bind.CallOpts, quorumNumber uint8, index *big.Int) (IStakeRegistryStrategyParams, error) { var out []interface{} - err := _ContractStakeRegistry.contract.Call(opts, &out, "strategyAndWeightingMultiplierForQuorumByIndex", quorumNumber, index) + err := _ContractStakeRegistry.contract.Call(opts, &out, "strategyParamsByIndex", quorumNumber, index) if err != nil { - return *new(IVoteWeigherStrategyAndWeightingMultiplier), err + return *new(IStakeRegistryStrategyParams), err } - out0 := *abi.ConvertType(out[0], new(IVoteWeigherStrategyAndWeightingMultiplier)).(*IVoteWeigherStrategyAndWeightingMultiplier) + out0 := *abi.ConvertType(out[0], new(IStakeRegistryStrategyParams)).(*IStakeRegistryStrategyParams) return out0, err } -// StrategyAndWeightingMultiplierForQuorumByIndex is a free data retrieval call binding the contract method 0x7cc0d75f. +// StrategyParamsByIndex is a free data retrieval call binding the contract method 0xadc804da. // -// Solidity: function strategyAndWeightingMultiplierForQuorumByIndex(uint8 quorumNumber, uint256 index) view returns((address,uint96)) -func (_ContractStakeRegistry *ContractStakeRegistrySession) StrategyAndWeightingMultiplierForQuorumByIndex(quorumNumber uint8, index *big.Int) (IVoteWeigherStrategyAndWeightingMultiplier, error) { - return _ContractStakeRegistry.Contract.StrategyAndWeightingMultiplierForQuorumByIndex(&_ContractStakeRegistry.CallOpts, quorumNumber, index) +// Solidity: function strategyParamsByIndex(uint8 quorumNumber, uint256 index) view returns((address,uint96)) +func (_ContractStakeRegistry *ContractStakeRegistrySession) StrategyParamsByIndex(quorumNumber uint8, index *big.Int) (IStakeRegistryStrategyParams, error) { + return _ContractStakeRegistry.Contract.StrategyParamsByIndex(&_ContractStakeRegistry.CallOpts, quorumNumber, index) } -// StrategyAndWeightingMultiplierForQuorumByIndex is a free data retrieval call binding the contract method 0x7cc0d75f. +// StrategyParamsByIndex is a free data retrieval call binding the contract method 0xadc804da. // -// Solidity: function strategyAndWeightingMultiplierForQuorumByIndex(uint8 quorumNumber, uint256 index) view returns((address,uint96)) -func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) StrategyAndWeightingMultiplierForQuorumByIndex(quorumNumber uint8, index *big.Int) (IVoteWeigherStrategyAndWeightingMultiplier, error) { - return _ContractStakeRegistry.Contract.StrategyAndWeightingMultiplierForQuorumByIndex(&_ContractStakeRegistry.CallOpts, quorumNumber, index) +// Solidity: function strategyParamsByIndex(uint8 quorumNumber, uint256 index) view returns((address,uint96)) +func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) StrategyParamsByIndex(quorumNumber uint8, index *big.Int) (IStakeRegistryStrategyParams, error) { + return _ContractStakeRegistry.Contract.StrategyParamsByIndex(&_ContractStakeRegistry.CallOpts, quorumNumber, index) } -// StrategyManager is a free data retrieval call binding the contract method 0x39b70e38. +// StrategyParamsLength is a free data retrieval call binding the contract method 0x3ca5a5f5. // -// Solidity: function strategyManager() view returns(address) -func (_ContractStakeRegistry *ContractStakeRegistryCaller) StrategyManager(opts *bind.CallOpts) (common.Address, error) { +// Solidity: function strategyParamsLength(uint8 quorumNumber) view returns(uint256) +func (_ContractStakeRegistry *ContractStakeRegistryCaller) StrategyParamsLength(opts *bind.CallOpts, quorumNumber uint8) (*big.Int, error) { var out []interface{} - err := _ContractStakeRegistry.contract.Call(opts, &out, "strategyManager") + err := _ContractStakeRegistry.contract.Call(opts, &out, "strategyParamsLength", quorumNumber) if err != nil { - return *new(common.Address), err + return *new(*big.Int), err } - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) return out0, err } -// StrategyManager is a free data retrieval call binding the contract method 0x39b70e38. +// StrategyParamsLength is a free data retrieval call binding the contract method 0x3ca5a5f5. // -// Solidity: function strategyManager() view returns(address) -func (_ContractStakeRegistry *ContractStakeRegistrySession) StrategyManager() (common.Address, error) { - return _ContractStakeRegistry.Contract.StrategyManager(&_ContractStakeRegistry.CallOpts) +// Solidity: function strategyParamsLength(uint8 quorumNumber) view returns(uint256) +func (_ContractStakeRegistry *ContractStakeRegistrySession) StrategyParamsLength(quorumNumber uint8) (*big.Int, error) { + return _ContractStakeRegistry.Contract.StrategyParamsLength(&_ContractStakeRegistry.CallOpts, quorumNumber) } -// StrategyManager is a free data retrieval call binding the contract method 0x39b70e38. +// StrategyParamsLength is a free data retrieval call binding the contract method 0x3ca5a5f5. // -// Solidity: function strategyManager() view returns(address) -func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) StrategyManager() (common.Address, error) { - return _ContractStakeRegistry.Contract.StrategyManager(&_ContractStakeRegistry.CallOpts) +// Solidity: function strategyParamsLength(uint8 quorumNumber) view returns(uint256) +func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) StrategyParamsLength(quorumNumber uint8) (*big.Int, error) { + return _ContractStakeRegistry.Contract.StrategyParamsLength(&_ContractStakeRegistry.CallOpts, quorumNumber) } // WeightOfOperatorForQuorum is a free data retrieval call binding the contract method 0x1f9b74e0. @@ -1066,77 +911,25 @@ func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) WeightOfOperat return _ContractStakeRegistry.Contract.WeightOfOperatorForQuorum(&_ContractStakeRegistry.CallOpts, quorumNumber, operator) } -// WeightOfOperatorForQuorumView is a free data retrieval call binding the contract method 0x1de68018. +// AddStrategies is a paid mutator transaction binding the contract method 0xc601527d. // -// Solidity: function weightOfOperatorForQuorumView(uint8 quorumNumber, address operator) view returns(uint96) -func (_ContractStakeRegistry *ContractStakeRegistryCaller) WeightOfOperatorForQuorumView(opts *bind.CallOpts, quorumNumber uint8, operator common.Address) (*big.Int, error) { - var out []interface{} - err := _ContractStakeRegistry.contract.Call(opts, &out, "weightOfOperatorForQuorumView", quorumNumber, operator) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// WeightOfOperatorForQuorumView is a free data retrieval call binding the contract method 0x1de68018. -// -// Solidity: function weightOfOperatorForQuorumView(uint8 quorumNumber, address operator) view returns(uint96) -func (_ContractStakeRegistry *ContractStakeRegistrySession) WeightOfOperatorForQuorumView(quorumNumber uint8, operator common.Address) (*big.Int, error) { - return _ContractStakeRegistry.Contract.WeightOfOperatorForQuorumView(&_ContractStakeRegistry.CallOpts, quorumNumber, operator) -} - -// WeightOfOperatorForQuorumView is a free data retrieval call binding the contract method 0x1de68018. -// -// Solidity: function weightOfOperatorForQuorumView(uint8 quorumNumber, address operator) view returns(uint96) -func (_ContractStakeRegistry *ContractStakeRegistryCallerSession) WeightOfOperatorForQuorumView(quorumNumber uint8, operator common.Address) (*big.Int, error) { - return _ContractStakeRegistry.Contract.WeightOfOperatorForQuorumView(&_ContractStakeRegistry.CallOpts, quorumNumber, operator) -} - -// AddStrategiesConsideredAndMultipliers is a paid mutator transaction binding the contract method 0xbba549fa. -// -// Solidity: function addStrategiesConsideredAndMultipliers(uint8 quorumNumber, (address,uint96)[] _newStrategiesConsideredAndMultipliers) returns() -func (_ContractStakeRegistry *ContractStakeRegistryTransactor) AddStrategiesConsideredAndMultipliers(opts *bind.TransactOpts, quorumNumber uint8, _newStrategiesConsideredAndMultipliers []IVoteWeigherStrategyAndWeightingMultiplier) (*types.Transaction, error) { - return _ContractStakeRegistry.contract.Transact(opts, "addStrategiesConsideredAndMultipliers", quorumNumber, _newStrategiesConsideredAndMultipliers) -} - -// AddStrategiesConsideredAndMultipliers is a paid mutator transaction binding the contract method 0xbba549fa. -// -// Solidity: function addStrategiesConsideredAndMultipliers(uint8 quorumNumber, (address,uint96)[] _newStrategiesConsideredAndMultipliers) returns() -func (_ContractStakeRegistry *ContractStakeRegistrySession) AddStrategiesConsideredAndMultipliers(quorumNumber uint8, _newStrategiesConsideredAndMultipliers []IVoteWeigherStrategyAndWeightingMultiplier) (*types.Transaction, error) { - return _ContractStakeRegistry.Contract.AddStrategiesConsideredAndMultipliers(&_ContractStakeRegistry.TransactOpts, quorumNumber, _newStrategiesConsideredAndMultipliers) -} - -// AddStrategiesConsideredAndMultipliers is a paid mutator transaction binding the contract method 0xbba549fa. -// -// Solidity: function addStrategiesConsideredAndMultipliers(uint8 quorumNumber, (address,uint96)[] _newStrategiesConsideredAndMultipliers) returns() -func (_ContractStakeRegistry *ContractStakeRegistryTransactorSession) AddStrategiesConsideredAndMultipliers(quorumNumber uint8, _newStrategiesConsideredAndMultipliers []IVoteWeigherStrategyAndWeightingMultiplier) (*types.Transaction, error) { - return _ContractStakeRegistry.Contract.AddStrategiesConsideredAndMultipliers(&_ContractStakeRegistry.TransactOpts, quorumNumber, _newStrategiesConsideredAndMultipliers) -} - -// CreateQuorum is a paid mutator transaction binding the contract method 0x99eed4ee. -// -// Solidity: function createQuorum((address,uint96)[] _strategiesConsideredAndMultipliers) returns() -func (_ContractStakeRegistry *ContractStakeRegistryTransactor) CreateQuorum(opts *bind.TransactOpts, _strategiesConsideredAndMultipliers []IVoteWeigherStrategyAndWeightingMultiplier) (*types.Transaction, error) { - return _ContractStakeRegistry.contract.Transact(opts, "createQuorum", _strategiesConsideredAndMultipliers) +// Solidity: function addStrategies(uint8 quorumNumber, (address,uint96)[] _strategyParams) returns() +func (_ContractStakeRegistry *ContractStakeRegistryTransactor) AddStrategies(opts *bind.TransactOpts, quorumNumber uint8, _strategyParams []IStakeRegistryStrategyParams) (*types.Transaction, error) { + return _ContractStakeRegistry.contract.Transact(opts, "addStrategies", quorumNumber, _strategyParams) } -// CreateQuorum is a paid mutator transaction binding the contract method 0x99eed4ee. +// AddStrategies is a paid mutator transaction binding the contract method 0xc601527d. // -// Solidity: function createQuorum((address,uint96)[] _strategiesConsideredAndMultipliers) returns() -func (_ContractStakeRegistry *ContractStakeRegistrySession) CreateQuorum(_strategiesConsideredAndMultipliers []IVoteWeigherStrategyAndWeightingMultiplier) (*types.Transaction, error) { - return _ContractStakeRegistry.Contract.CreateQuorum(&_ContractStakeRegistry.TransactOpts, _strategiesConsideredAndMultipliers) +// Solidity: function addStrategies(uint8 quorumNumber, (address,uint96)[] _strategyParams) returns() +func (_ContractStakeRegistry *ContractStakeRegistrySession) AddStrategies(quorumNumber uint8, _strategyParams []IStakeRegistryStrategyParams) (*types.Transaction, error) { + return _ContractStakeRegistry.Contract.AddStrategies(&_ContractStakeRegistry.TransactOpts, quorumNumber, _strategyParams) } -// CreateQuorum is a paid mutator transaction binding the contract method 0x99eed4ee. +// AddStrategies is a paid mutator transaction binding the contract method 0xc601527d. // -// Solidity: function createQuorum((address,uint96)[] _strategiesConsideredAndMultipliers) returns() -func (_ContractStakeRegistry *ContractStakeRegistryTransactorSession) CreateQuorum(_strategiesConsideredAndMultipliers []IVoteWeigherStrategyAndWeightingMultiplier) (*types.Transaction, error) { - return _ContractStakeRegistry.Contract.CreateQuorum(&_ContractStakeRegistry.TransactOpts, _strategiesConsideredAndMultipliers) +// Solidity: function addStrategies(uint8 quorumNumber, (address,uint96)[] _strategyParams) returns() +func (_ContractStakeRegistry *ContractStakeRegistryTransactorSession) AddStrategies(quorumNumber uint8, _strategyParams []IStakeRegistryStrategyParams) (*types.Transaction, error) { + return _ContractStakeRegistry.Contract.AddStrategies(&_ContractStakeRegistry.TransactOpts, quorumNumber, _strategyParams) } // DeregisterOperator is a paid mutator transaction binding the contract method 0xbd29b8cd. @@ -1160,88 +953,88 @@ func (_ContractStakeRegistry *ContractStakeRegistryTransactorSession) Deregister return _ContractStakeRegistry.Contract.DeregisterOperator(&_ContractStakeRegistry.TransactOpts, operatorId, quorumNumbers) } -// Initialize is a paid mutator transaction binding the contract method 0x5f2948ec. +// InitializeQuorum is a paid mutator transaction binding the contract method 0xff694a77. // -// Solidity: function initialize(uint96[] _minimumStakeForQuorum, (address,uint96)[][] _quorumStrategiesConsideredAndMultipliers) returns() -func (_ContractStakeRegistry *ContractStakeRegistryTransactor) Initialize(opts *bind.TransactOpts, _minimumStakeForQuorum []*big.Int, _quorumStrategiesConsideredAndMultipliers [][]IVoteWeigherStrategyAndWeightingMultiplier) (*types.Transaction, error) { - return _ContractStakeRegistry.contract.Transact(opts, "initialize", _minimumStakeForQuorum, _quorumStrategiesConsideredAndMultipliers) +// Solidity: function initializeQuorum(uint8 quorumNumber, uint96 minimumStake, (address,uint96)[] _strategyParams) returns() +func (_ContractStakeRegistry *ContractStakeRegistryTransactor) InitializeQuorum(opts *bind.TransactOpts, quorumNumber uint8, minimumStake *big.Int, _strategyParams []IStakeRegistryStrategyParams) (*types.Transaction, error) { + return _ContractStakeRegistry.contract.Transact(opts, "initializeQuorum", quorumNumber, minimumStake, _strategyParams) } -// Initialize is a paid mutator transaction binding the contract method 0x5f2948ec. +// InitializeQuorum is a paid mutator transaction binding the contract method 0xff694a77. // -// Solidity: function initialize(uint96[] _minimumStakeForQuorum, (address,uint96)[][] _quorumStrategiesConsideredAndMultipliers) returns() -func (_ContractStakeRegistry *ContractStakeRegistrySession) Initialize(_minimumStakeForQuorum []*big.Int, _quorumStrategiesConsideredAndMultipliers [][]IVoteWeigherStrategyAndWeightingMultiplier) (*types.Transaction, error) { - return _ContractStakeRegistry.Contract.Initialize(&_ContractStakeRegistry.TransactOpts, _minimumStakeForQuorum, _quorumStrategiesConsideredAndMultipliers) +// Solidity: function initializeQuorum(uint8 quorumNumber, uint96 minimumStake, (address,uint96)[] _strategyParams) returns() +func (_ContractStakeRegistry *ContractStakeRegistrySession) InitializeQuorum(quorumNumber uint8, minimumStake *big.Int, _strategyParams []IStakeRegistryStrategyParams) (*types.Transaction, error) { + return _ContractStakeRegistry.Contract.InitializeQuorum(&_ContractStakeRegistry.TransactOpts, quorumNumber, minimumStake, _strategyParams) } -// Initialize is a paid mutator transaction binding the contract method 0x5f2948ec. +// InitializeQuorum is a paid mutator transaction binding the contract method 0xff694a77. // -// Solidity: function initialize(uint96[] _minimumStakeForQuorum, (address,uint96)[][] _quorumStrategiesConsideredAndMultipliers) returns() -func (_ContractStakeRegistry *ContractStakeRegistryTransactorSession) Initialize(_minimumStakeForQuorum []*big.Int, _quorumStrategiesConsideredAndMultipliers [][]IVoteWeigherStrategyAndWeightingMultiplier) (*types.Transaction, error) { - return _ContractStakeRegistry.Contract.Initialize(&_ContractStakeRegistry.TransactOpts, _minimumStakeForQuorum, _quorumStrategiesConsideredAndMultipliers) +// Solidity: function initializeQuorum(uint8 quorumNumber, uint96 minimumStake, (address,uint96)[] _strategyParams) returns() +func (_ContractStakeRegistry *ContractStakeRegistryTransactorSession) InitializeQuorum(quorumNumber uint8, minimumStake *big.Int, _strategyParams []IStakeRegistryStrategyParams) (*types.Transaction, error) { + return _ContractStakeRegistry.Contract.InitializeQuorum(&_ContractStakeRegistry.TransactOpts, quorumNumber, minimumStake, _strategyParams) } -// ModifyStrategyWeights is a paid mutator transaction binding the contract method 0x2c2a5d2b. +// ModifyStrategyParams is a paid mutator transaction binding the contract method 0x20b66298. // -// Solidity: function modifyStrategyWeights(uint8 quorumNumber, uint256[] strategyIndices, uint96[] newMultipliers) returns() -func (_ContractStakeRegistry *ContractStakeRegistryTransactor) ModifyStrategyWeights(opts *bind.TransactOpts, quorumNumber uint8, strategyIndices []*big.Int, newMultipliers []*big.Int) (*types.Transaction, error) { - return _ContractStakeRegistry.contract.Transact(opts, "modifyStrategyWeights", quorumNumber, strategyIndices, newMultipliers) +// Solidity: function modifyStrategyParams(uint8 quorumNumber, uint256[] strategyIndices, uint96[] newMultipliers) returns() +func (_ContractStakeRegistry *ContractStakeRegistryTransactor) ModifyStrategyParams(opts *bind.TransactOpts, quorumNumber uint8, strategyIndices []*big.Int, newMultipliers []*big.Int) (*types.Transaction, error) { + return _ContractStakeRegistry.contract.Transact(opts, "modifyStrategyParams", quorumNumber, strategyIndices, newMultipliers) } -// ModifyStrategyWeights is a paid mutator transaction binding the contract method 0x2c2a5d2b. +// ModifyStrategyParams is a paid mutator transaction binding the contract method 0x20b66298. // -// Solidity: function modifyStrategyWeights(uint8 quorumNumber, uint256[] strategyIndices, uint96[] newMultipliers) returns() -func (_ContractStakeRegistry *ContractStakeRegistrySession) ModifyStrategyWeights(quorumNumber uint8, strategyIndices []*big.Int, newMultipliers []*big.Int) (*types.Transaction, error) { - return _ContractStakeRegistry.Contract.ModifyStrategyWeights(&_ContractStakeRegistry.TransactOpts, quorumNumber, strategyIndices, newMultipliers) +// Solidity: function modifyStrategyParams(uint8 quorumNumber, uint256[] strategyIndices, uint96[] newMultipliers) returns() +func (_ContractStakeRegistry *ContractStakeRegistrySession) ModifyStrategyParams(quorumNumber uint8, strategyIndices []*big.Int, newMultipliers []*big.Int) (*types.Transaction, error) { + return _ContractStakeRegistry.Contract.ModifyStrategyParams(&_ContractStakeRegistry.TransactOpts, quorumNumber, strategyIndices, newMultipliers) } -// ModifyStrategyWeights is a paid mutator transaction binding the contract method 0x2c2a5d2b. +// ModifyStrategyParams is a paid mutator transaction binding the contract method 0x20b66298. // -// Solidity: function modifyStrategyWeights(uint8 quorumNumber, uint256[] strategyIndices, uint96[] newMultipliers) returns() -func (_ContractStakeRegistry *ContractStakeRegistryTransactorSession) ModifyStrategyWeights(quorumNumber uint8, strategyIndices []*big.Int, newMultipliers []*big.Int) (*types.Transaction, error) { - return _ContractStakeRegistry.Contract.ModifyStrategyWeights(&_ContractStakeRegistry.TransactOpts, quorumNumber, strategyIndices, newMultipliers) +// Solidity: function modifyStrategyParams(uint8 quorumNumber, uint256[] strategyIndices, uint96[] newMultipliers) returns() +func (_ContractStakeRegistry *ContractStakeRegistryTransactorSession) ModifyStrategyParams(quorumNumber uint8, strategyIndices []*big.Int, newMultipliers []*big.Int) (*types.Transaction, error) { + return _ContractStakeRegistry.Contract.ModifyStrategyParams(&_ContractStakeRegistry.TransactOpts, quorumNumber, strategyIndices, newMultipliers) } // RegisterOperator is a paid mutator transaction binding the contract method 0x25504777. // -// Solidity: function registerOperator(address operator, bytes32 operatorId, bytes quorumNumbers) returns() +// Solidity: function registerOperator(address operator, bytes32 operatorId, bytes quorumNumbers) returns(uint96[], uint96[]) func (_ContractStakeRegistry *ContractStakeRegistryTransactor) RegisterOperator(opts *bind.TransactOpts, operator common.Address, operatorId [32]byte, quorumNumbers []byte) (*types.Transaction, error) { return _ContractStakeRegistry.contract.Transact(opts, "registerOperator", operator, operatorId, quorumNumbers) } // RegisterOperator is a paid mutator transaction binding the contract method 0x25504777. // -// Solidity: function registerOperator(address operator, bytes32 operatorId, bytes quorumNumbers) returns() +// Solidity: function registerOperator(address operator, bytes32 operatorId, bytes quorumNumbers) returns(uint96[], uint96[]) func (_ContractStakeRegistry *ContractStakeRegistrySession) RegisterOperator(operator common.Address, operatorId [32]byte, quorumNumbers []byte) (*types.Transaction, error) { return _ContractStakeRegistry.Contract.RegisterOperator(&_ContractStakeRegistry.TransactOpts, operator, operatorId, quorumNumbers) } // RegisterOperator is a paid mutator transaction binding the contract method 0x25504777. // -// Solidity: function registerOperator(address operator, bytes32 operatorId, bytes quorumNumbers) returns() +// Solidity: function registerOperator(address operator, bytes32 operatorId, bytes quorumNumbers) returns(uint96[], uint96[]) func (_ContractStakeRegistry *ContractStakeRegistryTransactorSession) RegisterOperator(operator common.Address, operatorId [32]byte, quorumNumbers []byte) (*types.Transaction, error) { return _ContractStakeRegistry.Contract.RegisterOperator(&_ContractStakeRegistry.TransactOpts, operator, operatorId, quorumNumbers) } -// RemoveStrategiesConsideredAndMultipliers is a paid mutator transaction binding the contract method 0x2b3d8816. +// RemoveStrategies is a paid mutator transaction binding the contract method 0x5f1f2d77. // -// Solidity: function removeStrategiesConsideredAndMultipliers(uint8 quorumNumber, uint256[] indicesToRemove) returns() -func (_ContractStakeRegistry *ContractStakeRegistryTransactor) RemoveStrategiesConsideredAndMultipliers(opts *bind.TransactOpts, quorumNumber uint8, indicesToRemove []*big.Int) (*types.Transaction, error) { - return _ContractStakeRegistry.contract.Transact(opts, "removeStrategiesConsideredAndMultipliers", quorumNumber, indicesToRemove) +// Solidity: function removeStrategies(uint8 quorumNumber, uint256[] indicesToRemove) returns() +func (_ContractStakeRegistry *ContractStakeRegistryTransactor) RemoveStrategies(opts *bind.TransactOpts, quorumNumber uint8, indicesToRemove []*big.Int) (*types.Transaction, error) { + return _ContractStakeRegistry.contract.Transact(opts, "removeStrategies", quorumNumber, indicesToRemove) } -// RemoveStrategiesConsideredAndMultipliers is a paid mutator transaction binding the contract method 0x2b3d8816. +// RemoveStrategies is a paid mutator transaction binding the contract method 0x5f1f2d77. // -// Solidity: function removeStrategiesConsideredAndMultipliers(uint8 quorumNumber, uint256[] indicesToRemove) returns() -func (_ContractStakeRegistry *ContractStakeRegistrySession) RemoveStrategiesConsideredAndMultipliers(quorumNumber uint8, indicesToRemove []*big.Int) (*types.Transaction, error) { - return _ContractStakeRegistry.Contract.RemoveStrategiesConsideredAndMultipliers(&_ContractStakeRegistry.TransactOpts, quorumNumber, indicesToRemove) +// Solidity: function removeStrategies(uint8 quorumNumber, uint256[] indicesToRemove) returns() +func (_ContractStakeRegistry *ContractStakeRegistrySession) RemoveStrategies(quorumNumber uint8, indicesToRemove []*big.Int) (*types.Transaction, error) { + return _ContractStakeRegistry.Contract.RemoveStrategies(&_ContractStakeRegistry.TransactOpts, quorumNumber, indicesToRemove) } -// RemoveStrategiesConsideredAndMultipliers is a paid mutator transaction binding the contract method 0x2b3d8816. +// RemoveStrategies is a paid mutator transaction binding the contract method 0x5f1f2d77. // -// Solidity: function removeStrategiesConsideredAndMultipliers(uint8 quorumNumber, uint256[] indicesToRemove) returns() -func (_ContractStakeRegistry *ContractStakeRegistryTransactorSession) RemoveStrategiesConsideredAndMultipliers(quorumNumber uint8, indicesToRemove []*big.Int) (*types.Transaction, error) { - return _ContractStakeRegistry.Contract.RemoveStrategiesConsideredAndMultipliers(&_ContractStakeRegistry.TransactOpts, quorumNumber, indicesToRemove) +// Solidity: function removeStrategies(uint8 quorumNumber, uint256[] indicesToRemove) returns() +func (_ContractStakeRegistry *ContractStakeRegistryTransactorSession) RemoveStrategies(quorumNumber uint8, indicesToRemove []*big.Int) (*types.Transaction, error) { + return _ContractStakeRegistry.Contract.RemoveStrategies(&_ContractStakeRegistry.TransactOpts, quorumNumber, indicesToRemove) } // SetMinimumStakeForQuorum is a paid mutator transaction binding the contract method 0xbc9a40c3. @@ -1265,159 +1058,25 @@ func (_ContractStakeRegistry *ContractStakeRegistryTransactorSession) SetMinimum return _ContractStakeRegistry.Contract.SetMinimumStakeForQuorum(&_ContractStakeRegistry.TransactOpts, quorumNumber, minimumStake) } -// UpdateStakes is a paid mutator transaction binding the contract method 0xce977ec3. +// UpdateOperatorStake is a paid mutator transaction binding the contract method 0x66acfefe. // -// Solidity: function updateStakes(address[] operators) returns() -func (_ContractStakeRegistry *ContractStakeRegistryTransactor) UpdateStakes(opts *bind.TransactOpts, operators []common.Address) (*types.Transaction, error) { - return _ContractStakeRegistry.contract.Transact(opts, "updateStakes", operators) +// Solidity: function updateOperatorStake(address operator, bytes32 operatorId, bytes quorumNumbers) returns(uint192) +func (_ContractStakeRegistry *ContractStakeRegistryTransactor) UpdateOperatorStake(opts *bind.TransactOpts, operator common.Address, operatorId [32]byte, quorumNumbers []byte) (*types.Transaction, error) { + return _ContractStakeRegistry.contract.Transact(opts, "updateOperatorStake", operator, operatorId, quorumNumbers) } -// UpdateStakes is a paid mutator transaction binding the contract method 0xce977ec3. +// UpdateOperatorStake is a paid mutator transaction binding the contract method 0x66acfefe. // -// Solidity: function updateStakes(address[] operators) returns() -func (_ContractStakeRegistry *ContractStakeRegistrySession) UpdateStakes(operators []common.Address) (*types.Transaction, error) { - return _ContractStakeRegistry.Contract.UpdateStakes(&_ContractStakeRegistry.TransactOpts, operators) +// Solidity: function updateOperatorStake(address operator, bytes32 operatorId, bytes quorumNumbers) returns(uint192) +func (_ContractStakeRegistry *ContractStakeRegistrySession) UpdateOperatorStake(operator common.Address, operatorId [32]byte, quorumNumbers []byte) (*types.Transaction, error) { + return _ContractStakeRegistry.Contract.UpdateOperatorStake(&_ContractStakeRegistry.TransactOpts, operator, operatorId, quorumNumbers) } -// UpdateStakes is a paid mutator transaction binding the contract method 0xce977ec3. +// UpdateOperatorStake is a paid mutator transaction binding the contract method 0x66acfefe. // -// Solidity: function updateStakes(address[] operators) returns() -func (_ContractStakeRegistry *ContractStakeRegistryTransactorSession) UpdateStakes(operators []common.Address) (*types.Transaction, error) { - return _ContractStakeRegistry.Contract.UpdateStakes(&_ContractStakeRegistry.TransactOpts, operators) -} - -// ContractStakeRegistryInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the ContractStakeRegistry contract. -type ContractStakeRegistryInitializedIterator struct { - Event *ContractStakeRegistryInitialized // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *ContractStakeRegistryInitializedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(ContractStakeRegistryInitialized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(ContractStakeRegistryInitialized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *ContractStakeRegistryInitializedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ContractStakeRegistryInitializedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ContractStakeRegistryInitialized represents a Initialized event raised by the ContractStakeRegistry contract. -type ContractStakeRegistryInitialized struct { - Version uint8 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_ContractStakeRegistry *ContractStakeRegistryFilterer) FilterInitialized(opts *bind.FilterOpts) (*ContractStakeRegistryInitializedIterator, error) { - - logs, sub, err := _ContractStakeRegistry.contract.FilterLogs(opts, "Initialized") - if err != nil { - return nil, err - } - return &ContractStakeRegistryInitializedIterator{contract: _ContractStakeRegistry.contract, event: "Initialized", logs: logs, sub: sub}, nil -} - -// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_ContractStakeRegistry *ContractStakeRegistryFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *ContractStakeRegistryInitialized) (event.Subscription, error) { - - logs, sub, err := _ContractStakeRegistry.contract.WatchLogs(opts, "Initialized") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(ContractStakeRegistryInitialized) - if err := _ContractStakeRegistry.contract.UnpackLog(event, "Initialized", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_ContractStakeRegistry *ContractStakeRegistryFilterer) ParseInitialized(log types.Log) (*ContractStakeRegistryInitialized, error) { - event := new(ContractStakeRegistryInitialized) - if err := _ContractStakeRegistry.contract.UnpackLog(event, "Initialized", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil +// Solidity: function updateOperatorStake(address operator, bytes32 operatorId, bytes quorumNumbers) returns(uint192) +func (_ContractStakeRegistry *ContractStakeRegistryTransactorSession) UpdateOperatorStake(operator common.Address, operatorId [32]byte, quorumNumbers []byte) (*types.Transaction, error) { + return _ContractStakeRegistry.Contract.UpdateOperatorStake(&_ContractStakeRegistry.TransactOpts, operator, operatorId, quorumNumbers) } // ContractStakeRegistryMinimumStakeForQuorumUpdatedIterator is returned from FilterMinimumStakeForQuorumUpdated and is used to iterate over the raw logs and unpacked data for MinimumStakeForQuorumUpdated events raised by the ContractStakeRegistry contract. @@ -1565,9 +1224,9 @@ func (_ContractStakeRegistry *ContractStakeRegistryFilterer) ParseMinimumStakeFo return event, nil } -// ContractStakeRegistryQuorumCreatedIterator is returned from FilterQuorumCreated and is used to iterate over the raw logs and unpacked data for QuorumCreated events raised by the ContractStakeRegistry contract. -type ContractStakeRegistryQuorumCreatedIterator struct { - Event *ContractStakeRegistryQuorumCreated // Event containing the contract specifics and raw log +// ContractStakeRegistryOperatorStakeUpdateIterator is returned from FilterOperatorStakeUpdate and is used to iterate over the raw logs and unpacked data for OperatorStakeUpdate events raised by the ContractStakeRegistry contract. +type ContractStakeRegistryOperatorStakeUpdateIterator struct { + Event *ContractStakeRegistryOperatorStakeUpdate // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -1581,7 +1240,7 @@ type ContractStakeRegistryQuorumCreatedIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *ContractStakeRegistryQuorumCreatedIterator) Next() bool { +func (it *ContractStakeRegistryOperatorStakeUpdateIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1590,7 +1249,7 @@ func (it *ContractStakeRegistryQuorumCreatedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(ContractStakeRegistryQuorumCreated) + it.Event = new(ContractStakeRegistryOperatorStakeUpdate) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1605,7 +1264,7 @@ func (it *ContractStakeRegistryQuorumCreatedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(ContractStakeRegistryQuorumCreated) + it.Event = new(ContractStakeRegistryOperatorStakeUpdate) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1621,51 +1280,53 @@ func (it *ContractStakeRegistryQuorumCreatedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *ContractStakeRegistryQuorumCreatedIterator) Error() error { +func (it *ContractStakeRegistryOperatorStakeUpdateIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *ContractStakeRegistryQuorumCreatedIterator) Close() error { +func (it *ContractStakeRegistryOperatorStakeUpdateIterator) Close() error { it.sub.Unsubscribe() return nil } -// ContractStakeRegistryQuorumCreated represents a QuorumCreated event raised by the ContractStakeRegistry contract. -type ContractStakeRegistryQuorumCreated struct { +// ContractStakeRegistryOperatorStakeUpdate represents a OperatorStakeUpdate event raised by the ContractStakeRegistry contract. +type ContractStakeRegistryOperatorStakeUpdate struct { + OperatorId [32]byte QuorumNumber uint8 + Stake *big.Int Raw types.Log // Blockchain specific contextual infos } -// FilterQuorumCreated is a free log retrieval operation binding the contract event 0x831a9c86c45bb303caf3f064be2bc2b9fd4ecf19e47c4ac02a61e75dabfe55b4. +// FilterOperatorStakeUpdate is a free log retrieval operation binding the contract event 0x2f527d527e95d8fe40aec55377743bb779087da3f6d0d08f12e36444da62327d. // -// Solidity: event QuorumCreated(uint8 indexed quorumNumber) -func (_ContractStakeRegistry *ContractStakeRegistryFilterer) FilterQuorumCreated(opts *bind.FilterOpts, quorumNumber []uint8) (*ContractStakeRegistryQuorumCreatedIterator, error) { +// Solidity: event OperatorStakeUpdate(bytes32 indexed operatorId, uint8 quorumNumber, uint96 stake) +func (_ContractStakeRegistry *ContractStakeRegistryFilterer) FilterOperatorStakeUpdate(opts *bind.FilterOpts, operatorId [][32]byte) (*ContractStakeRegistryOperatorStakeUpdateIterator, error) { - var quorumNumberRule []interface{} - for _, quorumNumberItem := range quorumNumber { - quorumNumberRule = append(quorumNumberRule, quorumNumberItem) + var operatorIdRule []interface{} + for _, operatorIdItem := range operatorId { + operatorIdRule = append(operatorIdRule, operatorIdItem) } - logs, sub, err := _ContractStakeRegistry.contract.FilterLogs(opts, "QuorumCreated", quorumNumberRule) + logs, sub, err := _ContractStakeRegistry.contract.FilterLogs(opts, "OperatorStakeUpdate", operatorIdRule) if err != nil { return nil, err } - return &ContractStakeRegistryQuorumCreatedIterator{contract: _ContractStakeRegistry.contract, event: "QuorumCreated", logs: logs, sub: sub}, nil + return &ContractStakeRegistryOperatorStakeUpdateIterator{contract: _ContractStakeRegistry.contract, event: "OperatorStakeUpdate", logs: logs, sub: sub}, nil } -// WatchQuorumCreated is a free log subscription operation binding the contract event 0x831a9c86c45bb303caf3f064be2bc2b9fd4ecf19e47c4ac02a61e75dabfe55b4. +// WatchOperatorStakeUpdate is a free log subscription operation binding the contract event 0x2f527d527e95d8fe40aec55377743bb779087da3f6d0d08f12e36444da62327d. // -// Solidity: event QuorumCreated(uint8 indexed quorumNumber) -func (_ContractStakeRegistry *ContractStakeRegistryFilterer) WatchQuorumCreated(opts *bind.WatchOpts, sink chan<- *ContractStakeRegistryQuorumCreated, quorumNumber []uint8) (event.Subscription, error) { +// Solidity: event OperatorStakeUpdate(bytes32 indexed operatorId, uint8 quorumNumber, uint96 stake) +func (_ContractStakeRegistry *ContractStakeRegistryFilterer) WatchOperatorStakeUpdate(opts *bind.WatchOpts, sink chan<- *ContractStakeRegistryOperatorStakeUpdate, operatorId [][32]byte) (event.Subscription, error) { - var quorumNumberRule []interface{} - for _, quorumNumberItem := range quorumNumber { - quorumNumberRule = append(quorumNumberRule, quorumNumberItem) + var operatorIdRule []interface{} + for _, operatorIdItem := range operatorId { + operatorIdRule = append(operatorIdRule, operatorIdItem) } - logs, sub, err := _ContractStakeRegistry.contract.WatchLogs(opts, "QuorumCreated", quorumNumberRule) + logs, sub, err := _ContractStakeRegistry.contract.WatchLogs(opts, "OperatorStakeUpdate", operatorIdRule) if err != nil { return nil, err } @@ -1675,8 +1336,8 @@ func (_ContractStakeRegistry *ContractStakeRegistryFilterer) WatchQuorumCreated( select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(ContractStakeRegistryQuorumCreated) - if err := _ContractStakeRegistry.contract.UnpackLog(event, "QuorumCreated", log); err != nil { + event := new(ContractStakeRegistryOperatorStakeUpdate) + if err := _ContractStakeRegistry.contract.UnpackLog(event, "OperatorStakeUpdate", log); err != nil { return err } event.Raw = log @@ -1697,21 +1358,21 @@ func (_ContractStakeRegistry *ContractStakeRegistryFilterer) WatchQuorumCreated( }), nil } -// ParseQuorumCreated is a log parse operation binding the contract event 0x831a9c86c45bb303caf3f064be2bc2b9fd4ecf19e47c4ac02a61e75dabfe55b4. +// ParseOperatorStakeUpdate is a log parse operation binding the contract event 0x2f527d527e95d8fe40aec55377743bb779087da3f6d0d08f12e36444da62327d. // -// Solidity: event QuorumCreated(uint8 indexed quorumNumber) -func (_ContractStakeRegistry *ContractStakeRegistryFilterer) ParseQuorumCreated(log types.Log) (*ContractStakeRegistryQuorumCreated, error) { - event := new(ContractStakeRegistryQuorumCreated) - if err := _ContractStakeRegistry.contract.UnpackLog(event, "QuorumCreated", log); err != nil { +// Solidity: event OperatorStakeUpdate(bytes32 indexed operatorId, uint8 quorumNumber, uint96 stake) +func (_ContractStakeRegistry *ContractStakeRegistryFilterer) ParseOperatorStakeUpdate(log types.Log) (*ContractStakeRegistryOperatorStakeUpdate, error) { + event := new(ContractStakeRegistryOperatorStakeUpdate) + if err := _ContractStakeRegistry.contract.UnpackLog(event, "OperatorStakeUpdate", log); err != nil { return nil, err } event.Raw = log return event, nil } -// ContractStakeRegistryStakeUpdateIterator is returned from FilterStakeUpdate and is used to iterate over the raw logs and unpacked data for StakeUpdate events raised by the ContractStakeRegistry contract. -type ContractStakeRegistryStakeUpdateIterator struct { - Event *ContractStakeRegistryStakeUpdate // Event containing the contract specifics and raw log +// ContractStakeRegistryQuorumCreatedIterator is returned from FilterQuorumCreated and is used to iterate over the raw logs and unpacked data for QuorumCreated events raised by the ContractStakeRegistry contract. +type ContractStakeRegistryQuorumCreatedIterator struct { + Event *ContractStakeRegistryQuorumCreated // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -1725,7 +1386,7 @@ type ContractStakeRegistryStakeUpdateIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *ContractStakeRegistryStakeUpdateIterator) Next() bool { +func (it *ContractStakeRegistryQuorumCreatedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1734,7 +1395,7 @@ func (it *ContractStakeRegistryStakeUpdateIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(ContractStakeRegistryStakeUpdate) + it.Event = new(ContractStakeRegistryQuorumCreated) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1749,7 +1410,7 @@ func (it *ContractStakeRegistryStakeUpdateIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(ContractStakeRegistryStakeUpdate) + it.Event = new(ContractStakeRegistryQuorumCreated) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1765,53 +1426,51 @@ func (it *ContractStakeRegistryStakeUpdateIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *ContractStakeRegistryStakeUpdateIterator) Error() error { +func (it *ContractStakeRegistryQuorumCreatedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *ContractStakeRegistryStakeUpdateIterator) Close() error { +func (it *ContractStakeRegistryQuorumCreatedIterator) Close() error { it.sub.Unsubscribe() return nil } -// ContractStakeRegistryStakeUpdate represents a StakeUpdate event raised by the ContractStakeRegistry contract. -type ContractStakeRegistryStakeUpdate struct { - OperatorId [32]byte +// ContractStakeRegistryQuorumCreated represents a QuorumCreated event raised by the ContractStakeRegistry contract. +type ContractStakeRegistryQuorumCreated struct { QuorumNumber uint8 - Stake *big.Int Raw types.Log // Blockchain specific contextual infos } -// FilterStakeUpdate is a free log retrieval operation binding the contract event 0xe7c60c52692f0e0ff8d1c289ffe63cb02e79373f35e3000cafe7cca898885934. +// FilterQuorumCreated is a free log retrieval operation binding the contract event 0x831a9c86c45bb303caf3f064be2bc2b9fd4ecf19e47c4ac02a61e75dabfe55b4. // -// Solidity: event StakeUpdate(bytes32 indexed operatorId, uint8 quorumNumber, uint96 stake) -func (_ContractStakeRegistry *ContractStakeRegistryFilterer) FilterStakeUpdate(opts *bind.FilterOpts, operatorId [][32]byte) (*ContractStakeRegistryStakeUpdateIterator, error) { +// Solidity: event QuorumCreated(uint8 indexed quorumNumber) +func (_ContractStakeRegistry *ContractStakeRegistryFilterer) FilterQuorumCreated(opts *bind.FilterOpts, quorumNumber []uint8) (*ContractStakeRegistryQuorumCreatedIterator, error) { - var operatorIdRule []interface{} - for _, operatorIdItem := range operatorId { - operatorIdRule = append(operatorIdRule, operatorIdItem) + var quorumNumberRule []interface{} + for _, quorumNumberItem := range quorumNumber { + quorumNumberRule = append(quorumNumberRule, quorumNumberItem) } - logs, sub, err := _ContractStakeRegistry.contract.FilterLogs(opts, "StakeUpdate", operatorIdRule) + logs, sub, err := _ContractStakeRegistry.contract.FilterLogs(opts, "QuorumCreated", quorumNumberRule) if err != nil { return nil, err } - return &ContractStakeRegistryStakeUpdateIterator{contract: _ContractStakeRegistry.contract, event: "StakeUpdate", logs: logs, sub: sub}, nil + return &ContractStakeRegistryQuorumCreatedIterator{contract: _ContractStakeRegistry.contract, event: "QuorumCreated", logs: logs, sub: sub}, nil } -// WatchStakeUpdate is a free log subscription operation binding the contract event 0xe7c60c52692f0e0ff8d1c289ffe63cb02e79373f35e3000cafe7cca898885934. +// WatchQuorumCreated is a free log subscription operation binding the contract event 0x831a9c86c45bb303caf3f064be2bc2b9fd4ecf19e47c4ac02a61e75dabfe55b4. // -// Solidity: event StakeUpdate(bytes32 indexed operatorId, uint8 quorumNumber, uint96 stake) -func (_ContractStakeRegistry *ContractStakeRegistryFilterer) WatchStakeUpdate(opts *bind.WatchOpts, sink chan<- *ContractStakeRegistryStakeUpdate, operatorId [][32]byte) (event.Subscription, error) { +// Solidity: event QuorumCreated(uint8 indexed quorumNumber) +func (_ContractStakeRegistry *ContractStakeRegistryFilterer) WatchQuorumCreated(opts *bind.WatchOpts, sink chan<- *ContractStakeRegistryQuorumCreated, quorumNumber []uint8) (event.Subscription, error) { - var operatorIdRule []interface{} - for _, operatorIdItem := range operatorId { - operatorIdRule = append(operatorIdRule, operatorIdItem) + var quorumNumberRule []interface{} + for _, quorumNumberItem := range quorumNumber { + quorumNumberRule = append(quorumNumberRule, quorumNumberItem) } - logs, sub, err := _ContractStakeRegistry.contract.WatchLogs(opts, "StakeUpdate", operatorIdRule) + logs, sub, err := _ContractStakeRegistry.contract.WatchLogs(opts, "QuorumCreated", quorumNumberRule) if err != nil { return nil, err } @@ -1821,8 +1480,8 @@ func (_ContractStakeRegistry *ContractStakeRegistryFilterer) WatchStakeUpdate(op select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(ContractStakeRegistryStakeUpdate) - if err := _ContractStakeRegistry.contract.UnpackLog(event, "StakeUpdate", log); err != nil { + event := new(ContractStakeRegistryQuorumCreated) + if err := _ContractStakeRegistry.contract.UnpackLog(event, "QuorumCreated", log); err != nil { return err } event.Raw = log @@ -1843,12 +1502,12 @@ func (_ContractStakeRegistry *ContractStakeRegistryFilterer) WatchStakeUpdate(op }), nil } -// ParseStakeUpdate is a log parse operation binding the contract event 0xe7c60c52692f0e0ff8d1c289ffe63cb02e79373f35e3000cafe7cca898885934. +// ParseQuorumCreated is a log parse operation binding the contract event 0x831a9c86c45bb303caf3f064be2bc2b9fd4ecf19e47c4ac02a61e75dabfe55b4. // -// Solidity: event StakeUpdate(bytes32 indexed operatorId, uint8 quorumNumber, uint96 stake) -func (_ContractStakeRegistry *ContractStakeRegistryFilterer) ParseStakeUpdate(log types.Log) (*ContractStakeRegistryStakeUpdate, error) { - event := new(ContractStakeRegistryStakeUpdate) - if err := _ContractStakeRegistry.contract.UnpackLog(event, "StakeUpdate", log); err != nil { +// Solidity: event QuorumCreated(uint8 indexed quorumNumber) +func (_ContractStakeRegistry *ContractStakeRegistryFilterer) ParseQuorumCreated(log types.Log) (*ContractStakeRegistryQuorumCreated, error) { + event := new(ContractStakeRegistryQuorumCreated) + if err := _ContractStakeRegistry.contract.UnpackLog(event, "QuorumCreated", log); err != nil { return nil, err } event.Raw = log diff --git a/contracts/compile.sh b/contracts/compile.sh index 8ad6d9c00e..2b6723da8a 100755 --- a/contracts/compile.sh +++ b/contracts/compile.sh @@ -21,7 +21,7 @@ function create_binding { forge clean forge build -contracts="BitmapUtils BLSOperatorStateRetriever BN254 BLSRegistryCoordinatorWithIndices BLSPublicKeyCompendium BLSPubkeyRegistry IBLSPubkeyRegistry IndexRegistry StakeRegistry EigenDAServiceManager IEigenDAServiceManager MockRollup" +contracts="AVSDirectory DelegationManager BitmapUtils OperatorStateRetriever RegistryCoordinator BLSApkRegistry IndexRegistry StakeRegistry BN254 EigenDAServiceManager IEigenDAServiceManager MockRollup" for contract in $contracts; do create_binding ./ $contract ./bindings done diff --git a/contracts/foundry.toml b/contracts/foundry.toml index 6e8f58a35a..d8683e1f4e 100644 --- a/contracts/foundry.toml +++ b/contracts/foundry.toml @@ -4,15 +4,6 @@ out = 'out' libs = ['lib'] fs_permissions = [{ access = "read-write", path = "./"}] -remappings = [ - "@eigenlayer-middleware/=lib/eigenlayer-middleware/src/", - "@eigenlayer-core/=lib/eigenlayer-contracts/src/", - "@eigenlayer-scripts/=lib/eigenlayer-contracts/script/", - "@openzeppelin/=lib/openzeppelin-contracts/", - "@openzeppelin-upgrades/=lib/openzeppelin-contracts-upgradeable/", - "forge-std/=lib/forge-std/src/" -] - gas_reports = ["*"] # A list of ignored solc error codes diff --git a/contracts/lib/eigenlayer-contracts b/contracts/lib/eigenlayer-contracts index 2965deb6c4..20c06b238a 160000 --- a/contracts/lib/eigenlayer-contracts +++ b/contracts/lib/eigenlayer-contracts @@ -1 +1 @@ -Subproject commit 2965deb6c4fccbe2e2d98c7502d125d741e26393 +Subproject commit 20c06b238a4bdfca76145eb3004f52a2e18bf0c7 diff --git a/contracts/lib/eigenlayer-middleware b/contracts/lib/eigenlayer-middleware index bee1c9f388..4e41195f6d 160000 --- a/contracts/lib/eigenlayer-middleware +++ b/contracts/lib/eigenlayer-middleware @@ -1 +1 @@ -Subproject commit bee1c9f38862c08c413e2e1a1db97cc56ab50f14 +Subproject commit 4e41195f6da2248a084089930bf9a10351f9743a diff --git a/contracts/remappings.txt b/contracts/remappings.txt new file mode 100644 index 0000000000..38c5e41796 --- /dev/null +++ b/contracts/remappings.txt @@ -0,0 +1,6 @@ +@openzeppelin-upgrades/=lib/openzeppelin-contracts-upgradeable/ +@openzeppelin/=lib/openzeppelin-contracts/ +eigenlayer-middleware/=lib/eigenlayer-middleware/src/ +eigenlayer-core/=lib/eigenlayer-contracts/src/ +eigenlayer-scripts/=lib/eigenlayer-contracts/script/ +forge-std/=lib/forge-std/src/ \ No newline at end of file diff --git a/contracts/script/EigenDADeployer.s.sol b/contracts/script/EigenDADeployer.s.sol index 61b1c05643..1a21a0fb90 100644 --- a/contracts/script/EigenDADeployer.s.sol +++ b/contracts/script/EigenDADeployer.s.sol @@ -1,31 +1,30 @@ -// SPDX-License-Identifier: UNLICENSED +// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.9; -import "@eigenlayer-scripts/middleware/DeployOpenEigenLayer.s.sol"; +import {PauserRegistry} from "eigenlayer-core/contracts/permissions/PauserRegistry.sol"; +import {EmptyContract} from "eigenlayer-core/test/mocks/EmptyContract.sol"; -import "@eigenlayer-core/contracts/permissions/PauserRegistry.sol"; -import "@eigenlayer-core/test/mocks/EmptyContract.sol"; - -import "@eigenlayer-middleware/BLSPublicKeyCompendium.sol"; -import "@eigenlayer-middleware/BLSRegistryCoordinatorWithIndices.sol"; -import "@eigenlayer-middleware/BLSPubkeyRegistry.sol"; -import "@eigenlayer-middleware/IndexRegistry.sol"; -import "@eigenlayer-middleware/StakeRegistry.sol"; -import "@eigenlayer-middleware/BLSOperatorStateRetriever.sol"; +import {BLSApkRegistry} from "eigenlayer-middleware/BLSApkRegistry.sol"; +import {RegistryCoordinator} from "eigenlayer-middleware/RegistryCoordinator.sol"; +import {OperatorStateRetriever} from "eigenlayer-middleware/OperatorStateRetriever.sol"; +import {IRegistryCoordinator} from "eigenlayer-middleware/interfaces/IRegistryCoordinator.sol"; +import {IndexRegistry} from "eigenlayer-middleware/IndexRegistry.sol"; +import {IIndexRegistry} from "eigenlayer-middleware/interfaces/IIndexRegistry.sol"; +import {StakeRegistry} from "eigenlayer-middleware/StakeRegistry.sol"; +import {IStakeRegistry} from "eigenlayer-middleware/interfaces/IStakeRegistry.sol"; +import {IServiceManager} from "eigenlayer-middleware/interfaces/IServiceManager.sol"; +import {IBLSApkRegistry} from "eigenlayer-middleware/interfaces/IBLSApkRegistry.sol"; import {EigenDAServiceManager} from "../src/core/EigenDAServiceManager.sol"; -import "../src/libraries/EigenDAHasher.sol"; +import {EigenDAHasher} from "../src/libraries/EigenDAHasher.sol"; +import "eigenlayer-scripts/middleware/DeployOpenEigenLayer.s.sol"; import "forge-std/Test.sol"; - import "forge-std/Script.sol"; import "forge-std/StdJson.sol"; -// TODO: REVIEW AND FIX THIS ENTIRE SCRIPT - // # To load the variables in the .env file // source .env - // # To deploy and verify our contract // forge script script/Deployer.s.sol:EigenDADeployer --rpc-url $RPC_URL --private-key $PRIVATE_KEY --broadcast -vvvv contract EigenDADeployer is DeployOpenEigenLayer { @@ -33,17 +32,16 @@ contract EigenDADeployer is DeployOpenEigenLayer { ProxyAdmin public eigenDAProxyAdmin; PauserRegistry public eigenDAPauserReg; - BLSPublicKeyCompendium public pubkeyCompendium; + BLSApkRegistry public apkRegistry; EigenDAServiceManager public eigenDAServiceManager; - BLSRegistryCoordinatorWithIndices public registryCoordinator; - IBLSPubkeyRegistry public blsPubkeyRegistry; + RegistryCoordinator public registryCoordinator; IIndexRegistry public indexRegistry; IStakeRegistry public stakeRegistry; - BLSOperatorStateRetriever public blsOperatorStateRetriever; + OperatorStateRetriever public operatorStateRetriever; + BLSApkRegistry public apkRegistryImplementation; EigenDAServiceManager public eigenDAServiceManagerImplementation; - IBLSRegistryCoordinatorWithIndices public registryCoordinatorImplementation; - IBLSPubkeyRegistry public blsPubkeyRegistryImplementation; + IRegistryCoordinator public registryCoordinatorImplementation; IIndexRegistry public indexRegistryImplementation; IStakeRegistry public stakeRegistryImplementation; @@ -55,6 +53,7 @@ contract EigenDADeployer is DeployOpenEigenLayer { address eigenDAPauser; address churner; address ejector; + address confirmer; } function _deployEigenDAAndEigenLayerContracts( @@ -100,11 +99,7 @@ contract EigenDADeployer is DeployOpenEigenLayer { eigenDAServiceManager = EigenDAServiceManager( address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenDAProxyAdmin), "")) ); - pubkeyCompendium = new BLSPublicKeyCompendium(); - registryCoordinator = BLSRegistryCoordinatorWithIndices( - address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenDAProxyAdmin), "")) - ); - blsPubkeyRegistry = IBLSPubkeyRegistry( + registryCoordinator = RegistryCoordinator( address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenDAProxyAdmin), "")) ); indexRegistry = IIndexRegistry( @@ -113,93 +108,87 @@ contract EigenDADeployer is DeployOpenEigenLayer { stakeRegistry = IStakeRegistry( address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenDAProxyAdmin), "")) ); + apkRegistry = BLSApkRegistry( + address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenDAProxyAdmin), "")) + ); - // Second, deploy the *implementation* contracts, using the *proxy contracts* as inputs - { - stakeRegistryImplementation = new StakeRegistry( - registryCoordinator, - strategyManager, - IServiceManager(address(eigenDAServiceManager)) - ); + indexRegistryImplementation = new IndexRegistry( + registryCoordinator + ); - // set up a quorum with each strategy that needs to be set up - uint96[] memory minimumStakeForQuourm = new uint96[](numStrategies); - IVoteWeigher.StrategyAndWeightingMultiplier[][] memory strategyAndWeightingMultipliers = new IVoteWeigher.StrategyAndWeightingMultiplier[][](numStrategies); - for (uint i = 0; i < numStrategies; i++) { - strategyAndWeightingMultipliers[i] = new IVoteWeigher.StrategyAndWeightingMultiplier[](1); - strategyAndWeightingMultipliers[i][0] = IVoteWeigher.StrategyAndWeightingMultiplier({ - strategy: deployedStrategyArray[i], - multiplier: 1 ether - }); - } + eigenDAProxyAdmin.upgrade( + TransparentUpgradeableProxy(payable(address(indexRegistry))), + address(indexRegistryImplementation) + ); - eigenDAProxyAdmin.upgradeAndCall( - TransparentUpgradeableProxy(payable(address(stakeRegistry))), - address(stakeRegistryImplementation), - abi.encodeWithSelector( - StakeRegistry.initialize.selector, - minimumStakeForQuourm, - strategyAndWeightingMultipliers - ) - ); - } + stakeRegistryImplementation = new StakeRegistry( + registryCoordinator, + delegation + ); - registryCoordinatorImplementation = new BLSRegistryCoordinatorWithIndices( - slasher, - IServiceManager(address(eigenDAServiceManager)), - stakeRegistry, - blsPubkeyRegistry, - indexRegistry + eigenDAProxyAdmin.upgrade( + TransparentUpgradeableProxy(payable(address(stakeRegistry))), + address(stakeRegistryImplementation) ); - + + apkRegistryImplementation = new BLSApkRegistry( + registryCoordinator + ); + + eigenDAProxyAdmin.upgrade( + TransparentUpgradeableProxy(payable(address(apkRegistry))), + address(apkRegistryImplementation) + ); + + registryCoordinatorImplementation = new RegistryCoordinator( + IServiceManager(address(eigenDAServiceManager)), + stakeRegistry, + apkRegistry, + indexRegistry + ); + { - IBLSRegistryCoordinatorWithIndices.OperatorSetParam[] memory operatorSetParams = new IBLSRegistryCoordinatorWithIndices.OperatorSetParam[](numStrategies); + IRegistryCoordinator.OperatorSetParam[] memory operatorSetParams = new IRegistryCoordinator.OperatorSetParam[](numStrategies); for (uint i = 0; i < numStrategies; i++) { // hard code these for now - operatorSetParams[i] = IBLSRegistryCoordinatorWithIndices.OperatorSetParam({ + operatorSetParams[i] = IRegistryCoordinator.OperatorSetParam({ maxOperatorCount: uint32(maxOperatorCount), kickBIPsOfOperatorStake: 11000, // an operator needs to have kickBIPsOfOperatorStake / 10000 times the stake of the operator with the least stake to kick them out kickBIPsOfTotalStake: 1001 // an operator needs to have less than kickBIPsOfTotalStake / 10000 of the total stake to be kicked out }); } + + uint96[] memory minimumStakeForQuourm = new uint96[](numStrategies); + IStakeRegistry.StrategyParams[][] memory strategyAndWeightingMultipliers = new IStakeRegistry.StrategyParams[][](numStrategies); + for (uint i = 0; i < numStrategies; i++) { + strategyAndWeightingMultipliers[i] = new IStakeRegistry.StrategyParams[](1); + strategyAndWeightingMultipliers[i][0] = IStakeRegistry.StrategyParams({ + strategy: deployedStrategyArray[i], + multiplier: 1 ether + }); + } + eigenDAProxyAdmin.upgradeAndCall( TransparentUpgradeableProxy(payable(address(registryCoordinator))), address(registryCoordinatorImplementation), abi.encodeWithSelector( - BLSRegistryCoordinatorWithIndices.initialize.selector, + RegistryCoordinator.initialize.selector, + addressConfig.eigenDACommunityMultisig, addressConfig.churner, addressConfig.ejector, - operatorSetParams, IPauserRegistry(address(eigenDAPauserReg)), - 0 // initial paused status is nothing paused + 0, // initial paused status is nothing paused + operatorSetParams, + minimumStakeForQuourm, + strategyAndWeightingMultipliers ) ); } - blsPubkeyRegistryImplementation = new BLSPubkeyRegistry( - registryCoordinator, - pubkeyCompendium - ); - - eigenDAProxyAdmin.upgrade( - TransparentUpgradeableProxy(payable(address(blsPubkeyRegistry))), - address(blsPubkeyRegistryImplementation) - ); - - indexRegistryImplementation = new IndexRegistry( - registryCoordinator - ); - - eigenDAProxyAdmin.upgrade( - TransparentUpgradeableProxy(payable(address(indexRegistry))), - address(indexRegistryImplementation) - ); - eigenDAServiceManagerImplementation = new EigenDAServiceManager( + avsDirectory, registryCoordinator, - strategyManager, - delegation, - slasher + stakeRegistry ); // Third, upgrade the proxy contracts to use the correct implementation contracts and initialize them. @@ -209,12 +198,12 @@ contract EigenDADeployer is DeployOpenEigenLayer { abi.encodeWithSelector( EigenDAServiceManager.initialize.selector, eigenDAPauserReg, - addressConfig.eigenDACommunityMultisig, 0, + addressConfig.eigenDACommunityMultisig, addressConfig.eigenDACommunityMultisig ) ); - blsOperatorStateRetriever = new BLSOperatorStateRetriever(); + operatorStateRetriever = new OperatorStateRetriever(); } } diff --git a/contracts/script/GenerateUnitTestHashes.s.sol b/contracts/script/GenerateUnitTestHashes.s.sol index bc246ba48c..7537372035 100644 --- a/contracts/script/GenerateUnitTestHashes.s.sol +++ b/contracts/script/GenerateUnitTestHashes.s.sol @@ -24,7 +24,7 @@ contract GenerateHashes is Script { quorumNumber: 0, adversaryThresholdPercentage: 80, quorumThresholdPercentage: 100, - quantizationParameter: 0 + chunkLength: 10 }); @@ -41,7 +41,7 @@ contract GenerateHashes is Script { quorumNumber: 1, adversaryThresholdPercentage: 80, quorumThresholdPercentage: 100, - quantizationParameter: 0 + chunkLength: 10 }); IEigenDAServiceManager.BlobHeader memory header = IEigenDAServiceManager.BlobHeader({ diff --git a/contracts/script/MockRollupDeployer.s.sol b/contracts/script/MockRollupDeployer.s.sol index 2db1af9cdf..74db04814d 100644 --- a/contracts/script/MockRollupDeployer.s.sol +++ b/contracts/script/MockRollupDeployer.s.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.9; import "forge-std/Script.sol"; -import "../test/mocks/MockRollup.sol"; +import "../src/rollup/MockRollup.sol"; import {IEigenDAServiceManager} from "../src/interfaces/IEigenDAServiceManager.sol"; contract MockRollupDeployer is Script { diff --git a/contracts/script/SetUpEigenDA.s.sol b/contracts/script/SetUpEigenDA.s.sol index 20ff883c99..a8984ee612 100644 --- a/contracts/script/SetUpEigenDA.s.sol +++ b/contracts/script/SetUpEigenDA.s.sol @@ -1,37 +1,28 @@ -// SPDX-License-Identifier: UNLICENSED +// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.9; -import "@eigenlayer-scripts/middleware/DeployOpenEigenLayer.s.sol"; - -import "@eigenlayer-core/contracts/permissions/PauserRegistry.sol"; -import "@eigenlayer-core/test/mocks/EmptyContract.sol"; - -import "@eigenlayer-middleware/BLSPublicKeyCompendium.sol"; -import "@eigenlayer-middleware/BLSRegistryCoordinatorWithIndices.sol"; -import "@eigenlayer-middleware/BLSPubkeyRegistry.sol"; -import "@eigenlayer-middleware/IndexRegistry.sol"; -import "@eigenlayer-middleware/StakeRegistry.sol"; +import {PauserRegistry} from "eigenlayer-core/contracts/permissions/PauserRegistry.sol"; +import {EmptyContract} from "eigenlayer-core/test/mocks/EmptyContract.sol"; +import {RegistryCoordinator} from "eigenlayer-middleware/RegistryCoordinator.sol"; +import {IndexRegistry} from "eigenlayer-middleware/IndexRegistry.sol"; +import {StakeRegistry} from "eigenlayer-middleware/StakeRegistry.sol"; +import {IIndexRegistry} from "eigenlayer-middleware/interfaces/IIndexRegistry.sol"; import {EigenDAServiceManager} from "../src/core/EigenDAServiceManager.sol"; -import "../src/libraries/EigenDAHasher.sol"; - -import "./EigenDADeployer.s.sol"; -import "./EigenLayerUtils.s.sol"; +import {EigenDAHasher} from "../src/libraries/EigenDAHasher.sol"; +import {EigenDADeployer} from "./EigenDADeployer.s.sol"; +import {EigenLayerUtils} from "./EigenLayerUtils.s.sol"; +import "eigenlayer-scripts/middleware/DeployOpenEigenLayer.s.sol"; import "forge-std/Test.sol"; - import "forge-std/Script.sol"; import "forge-std/StdJson.sol"; -// TODO: REVIEW AND FIX THIS ENTIRE SCRIPT - // # To load the variables in the .env file // source .env - // # To deploy and verify our contract // forge script script/Deployer.s.sol:SetupEigenDA --rpc-url $RPC_URL --private-key $PRIVATE_KEY --broadcast -vvvv - contract SetupEigenDA is EigenDADeployer, EigenLayerUtils { string deployConfigPath = "script/eigenda_deploy_config.json"; @@ -54,6 +45,7 @@ contract SetupEigenDA is EigenDADeployer, EigenLayerUtils { addressConfig.eigenDAPauser = msg.sender; addressConfig.churner = msg.sender; addressConfig.ejector = msg.sender; + addressConfig.confirmer = msg.sender; uint256 initialSupply = 1000 ether; address tokenOwner = msg.sender; @@ -74,6 +66,9 @@ contract SetupEigenDA is EigenDADeployer, EigenLayerUtils { maxOperatorCount = stdJson.readUint(config_data, ".maxOperatorCount"); } + + addressConfig.confirmer = vm.addr(stdJson.readUint(config_data, ".confirmerPrivateKey")); + vm.startBroadcast(); @@ -84,6 +79,8 @@ contract SetupEigenDA is EigenDADeployer, EigenLayerUtils { tokenOwner, maxOperatorCount ); + + eigenDAServiceManager.setBatchConfirmer(addressConfig.confirmer); vm.stopBroadcast(); } @@ -140,10 +137,11 @@ contract SetupEigenDA is EigenDADeployer, EigenLayerUtils { { IStrategy[] memory strategies = new IStrategy[](numStrategies); + bool[] memory transferLocks = new bool[](numStrategies); for (uint8 i = 0; i < numStrategies; i++) { strategies[i] = deployedStrategyArray[i]; } - strategyManager.addStrategiesToDepositWhitelist(strategies); + strategyManager.addStrategiesToDepositWhitelist(strategies, transferLocks); } vm.stopBroadcast(); @@ -178,10 +176,9 @@ contract SetupEigenDA is EigenDADeployer, EigenLayerUtils { string memory output = "eigenDA deployment output"; vm.serializeAddress(output, "eigenDAServiceManager", address(eigenDAServiceManager)); - vm.serializeAddress(output, "blsOperatorStateRetriever", address(blsOperatorStateRetriever)); - vm.serializeAddress(output, "pubkeyCompendium", address(pubkeyCompendium)); - vm.serializeAddress(output, "blsPubkeyRegistry", address(blsPubkeyRegistry)); - vm.serializeAddress(output, "blsRegistryCoordinatorWithIndices", address(registryCoordinator)); + vm.serializeAddress(output, "operatorStateRetriever", address(operatorStateRetriever)); + vm.serializeAddress(output, "blsApkRegistry" , address(apkRegistry)); + vm.serializeAddress(output, "registryCoordinator", address(registryCoordinator)); string memory finalJson = vm.serializeString(output, "object", output); diff --git a/contracts/script/deploy/existing/GV2_preprod_deployment_2024_30_1.json b/contracts/script/deploy/existing/GV2_preprod_deployment_2024_30_1.json new file mode 100644 index 0000000000..f705e6f9f5 --- /dev/null +++ b/contracts/script/deploy/existing/GV2_preprod_deployment_2024_30_1.json @@ -0,0 +1,30 @@ +{ + "addresses": { + "baseStrategyImplementation": "0xA548BF0106108A0c14779F3f1d8981517b8fA9D0", + "delayedWithdrawalRouter": "0x9572e46797B7A07257314e587061dC46c4dfCE0E", + "delayedWithdrawalRouterImplementation": "0x44a40C60857b4B420Ad3D8b9646FefEBF2D0dB86", + "delegation": "0x45b4c4DAE69393f62e1d14C5fe375792DF4E6332", + "delegationImplementation": "0x934eB3E2b6D5C2E1601B29B7180026D71438F20D", + "eigenLayerPauserReg": "0x94A2679B6A87ADb4e0CabA8E3E40f463C6062DeC", + "eigenLayerProxyAdmin": "0x555573Ff2B3b2731e69eeBAfb40a4EEA7fBaC54A", + "eigenPodBeacon": "0x38cBD4e08eA1840B91dA42fE02B55Abc89083bFB", + "eigenPodImplementation": "0x83cbB48391F428878Bc5DD97C9792a8dbCAa0729", + "eigenPodManager": "0x33e42d539abFe9b387B27b0e467374Bbb76cf925", + "eigenPodManagerImplementation": "0xEEdCC9dB001fB8429721FE21426F51f0Cdd329EC", + "emptyContract": "0xb23633b2240D78502fA308B817C892b2d5778469", + "slasher": "0xF751E8C37ACd3AD5a35D5db03E57dB6F9AD0bDd0", + "slasherImplementation": "0x05c235183e8b9dFb7113Cf92bbDc3f5085324158", + "strategyManager": "0xD309ADd2B269d522112DcEe0dCf0b0f04a09C29e", + "strategyManagerImplementation": "0xb9B69504f1a727E783F4B4248A115D56F4080DF8", + "avsDirectory": "0x47eFB8e38656a805BC6B3b13FA331d34dcDeB374", + "avsDirectoryImplementation": "0x728111B10227F44E5e389e5650725948d1DCcE7A" + }, + "chainInfo": { + "chainId": 5, + "deploymentBlock": 10469472 + }, + "parameters": { + "executorMultisig": "0x27977e6E4426A525d055A587d2a0537b4cb376eA", + "operationsMultisig": "0x27977e6E4426A525d055A587d2a0537b4cb376eA" + } +} \ No newline at end of file diff --git a/contracts/script/m2/existing/M1_deployment_goerli_2023_3_23.json b/contracts/script/deploy/existing/M1_deployment_goerli_2023_3_23.json similarity index 100% rename from contracts/script/m2/existing/M1_deployment_goerli_2023_3_23.json rename to contracts/script/deploy/existing/M1_deployment_goerli_2023_3_23.json diff --git a/contracts/script/m2/existing/M2_from_scratch_deployment_data.json b/contracts/script/deploy/existing/M2_from_scratch_deployment_data.json similarity index 100% rename from contracts/script/m2/existing/M2_from_scratch_deployment_data.json rename to contracts/script/deploy/existing/M2_from_scratch_deployment_data.json diff --git a/contracts/script/deploy/goerliv2/GoerliV2_Deploy.s.sol b/contracts/script/deploy/goerliv2/GoerliV2_Deploy.s.sol new file mode 100644 index 0000000000..69fdc47458 --- /dev/null +++ b/contracts/script/deploy/goerliv2/GoerliV2_Deploy.s.sol @@ -0,0 +1,361 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity =0.8.12; + +import {PauserRegistry} from "eigenlayer-core/contracts/permissions/PauserRegistry.sol"; +import {EmptyContract} from "eigenlayer-core/test/mocks/EmptyContract.sol"; + +import {BLSApkRegistry} from "eigenlayer-middleware/BLSApkRegistry.sol"; +import {IBLSApkRegistry} from "eigenlayer-middleware/interfaces/IBLSApkRegistry.sol"; +import {RegistryCoordinator} from "eigenlayer-middleware/RegistryCoordinator.sol"; +import {IRegistryCoordinator} from "eigenlayer-middleware/interfaces/IRegistryCoordinator.sol"; +import {IndexRegistry} from "eigenlayer-middleware/IndexRegistry.sol"; +import {IIndexRegistry} from "eigenlayer-middleware/interfaces/IIndexRegistry.sol"; +import {StakeRegistry} from "eigenlayer-middleware/StakeRegistry.sol"; +import {IStakeRegistry} from "eigenlayer-middleware/interfaces/IStakeRegistry.sol"; +import {EigenDAServiceManager} from "src/core/EigenDAServiceManager.sol"; +import {IServiceManager} from "eigenlayer-middleware/interfaces/IServiceManager.sol"; +import {OperatorStateRetriever} from "eigenlayer-middleware/OperatorStateRetriever.sol"; + +import "eigenlayer-scripts/utils/ExistingDeploymentParser.sol"; +import "forge-std/Test.sol"; +import "forge-std/Script.sol"; +import "forge-std/StdJson.sol"; + + +//forge script script/deploy/goerliv2/GoerliV2_Deploy.s.sol:Deployer_GV2 --rpc-url $RPC_URL --private-key $PRIVATE_KEY -vvvv //--broadcast +contract Deployer_GV2 is ExistingDeploymentParser { + + //string public existingDeploymentInfoPath = string(bytes("./script/deploy/existing/M1_deployment_goerli_2023_3_23.json")); + string public existingDeploymentInfoPath = string(bytes("./script/deploy/existing/GV2_preprod_deployment_2024_30_1.json")); + //string public deployConfigPath = string(bytes("./script/deploy/goerliv2/config/prod.config.json")); + string public deployConfigPath = string(bytes("./script/deploy/goerliv2/config/preprod.config.json")); + string public outputPath = string.concat("script/deploy/goerliv2/output/GV2_preprod_deployment_data.json"); + + ProxyAdmin public eigenDAProxyAdmin; + address public eigenDAOwner; + address public eigenDAUpgrader; + address public batchConfirmer; + address public pauser; + uint256 public initalPausedStatus; + + BLSApkRegistry public apkRegistry; + EigenDAServiceManager public eigenDAServiceManager; + RegistryCoordinator public registryCoordinator; + IndexRegistry public indexRegistry; + StakeRegistry public stakeRegistry; + OperatorStateRetriever public operatorStateRetriever; + + BLSApkRegistry public apkRegistryImplementation; + EigenDAServiceManager public eigenDAServiceManagerImplementation; + RegistryCoordinator public registryCoordinatorImplementation; + IndexRegistry public indexRegistryImplementation; + StakeRegistry public stakeRegistryImplementation; + + function run() external { + // get info on all the already-deployed contracts + _parseDeployedContracts(existingDeploymentInfoPath); + + // READ JSON CONFIG DATA + string memory config_data = vm.readFile(deployConfigPath); + + // check that the chainID matches the one in the config + uint256 currentChainId = block.chainid; + uint256 configChainId = stdJson.readUint(config_data, ".chainInfo.chainId"); + emit log_named_uint("You are deploying on ChainID", currentChainId); + require(configChainId == currentChainId, "You are on the wrong chain for this config"); + + // parse the addresses of permissioned roles + eigenDAOwner = stdJson.readAddress(config_data, ".permissions.owner"); + eigenDAUpgrader = stdJson.readAddress(config_data, ".permissions.upgrader"); + batchConfirmer = stdJson.readAddress(config_data, ".permissions.batchConfirmer"); + pauser = stdJson.readAddress(config_data, ".permissions.pauser"); + initalPausedStatus = stdJson.readUint(config_data, ".permissions.initalPausedStatus"); + + if(pauser == address(0)) { + pauser = address(eigenLayerPauserReg); + } + + vm.startBroadcast(); + + // deploy proxy admin for ability to upgrade proxy contracts + eigenDAProxyAdmin = new ProxyAdmin(); + + /** + * First, deploy upgradeable proxy contracts that **will point** to the implementations. Since the implementation contracts are + * not yet deployed, we give these proxies an empty contract as the initial implementation, to act as if they have no code. + */ + eigenDAServiceManager = EigenDAServiceManager( + address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenDAProxyAdmin), "")) + ); + registryCoordinator = RegistryCoordinator( + address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenDAProxyAdmin), "")) + ); + indexRegistry = IndexRegistry( + address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenDAProxyAdmin), "")) + ); + stakeRegistry = StakeRegistry( + address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenDAProxyAdmin), "")) + ); + apkRegistry = BLSApkRegistry( + address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenDAProxyAdmin), "")) + ); + + //deploy index registry implementation + indexRegistryImplementation = new IndexRegistry( + registryCoordinator + ); + + //upgrade index registry proxy to implementation + eigenDAProxyAdmin.upgrade( + TransparentUpgradeableProxy(payable(address(indexRegistry))), + address(indexRegistryImplementation) + ); + + //deploy stake registry implementation + stakeRegistryImplementation = new StakeRegistry( + registryCoordinator, + delegation + ); + + //upgrade stake registry proxy to implementation + eigenDAProxyAdmin.upgrade( + TransparentUpgradeableProxy(payable(address(stakeRegistry))), + address(stakeRegistryImplementation) + ); + + //deploy apk registry implementation + apkRegistryImplementation = new BLSApkRegistry( + registryCoordinator + ); + + //upgrade apk registry proxy to implementation + eigenDAProxyAdmin.upgrade( + TransparentUpgradeableProxy(payable(address(apkRegistry))), + address(apkRegistryImplementation) + ); + + //deploy the registry coordinator implementation. + registryCoordinatorImplementation = new RegistryCoordinator( + IServiceManager(address(eigenDAServiceManager)), + stakeRegistry, + apkRegistry, + indexRegistry + ); + + { + // parse initalization params and permissions from config data + ( + uint96[] memory minimumStakeForQuourm, + IStakeRegistry.StrategyParams[][] memory strategyAndWeightingMultipliers + ) = _parseStakeRegistryParams(config_data); + ( + IRegistryCoordinator.OperatorSetParam[] memory operatorSetParams, + address churner, + address ejector + ) = _parseRegistryCoordinatorParams(config_data); + + //upgrade the registry coordinator proxy to implementation + eigenDAProxyAdmin.upgradeAndCall( + TransparentUpgradeableProxy(payable(address(registryCoordinator))), + address(registryCoordinatorImplementation), + abi.encodeWithSelector( + RegistryCoordinator.initialize.selector, + eigenDAOwner, + churner, + ejector, + IPauserRegistry(pauser), + initalPausedStatus, + operatorSetParams, + minimumStakeForQuourm, + strategyAndWeightingMultipliers + ) + ); + } + + //deploy the eigenDA service manager implementation + eigenDAServiceManagerImplementation = new EigenDAServiceManager( + avsDirectory, + registryCoordinator, + stakeRegistry + ); + + //upgrade the eigenDA service manager proxy to implementation + eigenDAProxyAdmin.upgradeAndCall( + TransparentUpgradeableProxy(payable(address(eigenDAServiceManager))), + address(eigenDAServiceManagerImplementation), + abi.encodeWithSelector( + EigenDAServiceManager.initialize.selector, + IPauserRegistry(pauser), + initalPausedStatus, + eigenDAOwner, + batchConfirmer + ) + ); + + //deploy the operator state retriever + operatorStateRetriever = new OperatorStateRetriever(); + + // transfer ownership of proxy admin to upgrader + eigenDAProxyAdmin.transferOwnership(eigenDAUpgrader); + + vm.stopBroadcast(); + + // sanity checks + _verifyContractPointers( + apkRegistry, + eigenDAServiceManager, + registryCoordinator, + indexRegistry, + stakeRegistry + ); + + _verifyContractPointers( + apkRegistryImplementation, + eigenDAServiceManagerImplementation, + registryCoordinatorImplementation, + indexRegistryImplementation, + stakeRegistryImplementation + ); + + _verifyImplementations(); + _verifyInitalizations(config_data); + + //write output + _writeOutput(config_data); + } + + function _verifyContractPointers( + BLSApkRegistry _apkRegistry, + EigenDAServiceManager _eigenDAServiceManager, + RegistryCoordinator _registryCoordinator, + IndexRegistry _indexRegistry, + StakeRegistry _stakeRegistry + ) internal view { + require(address(_apkRegistry.registryCoordinator()) == address(registryCoordinator), "blsApkRegistry.registryCoordinator() != registryCoordinator"); + + require(address(_indexRegistry.registryCoordinator()) == address(registryCoordinator), "indexRegistry.registryCoordinator() != registryCoordinator"); + + require(address(_stakeRegistry.registryCoordinator()) == address(registryCoordinator), "stakeRegistry.registryCoordinator() != registryCoordinator"); + require(address(_stakeRegistry.delegation()) == address(delegation), "stakeRegistry.delegationManager() != delegation"); + + require(address(_eigenDAServiceManager.registryCoordinator()) == address(registryCoordinator), "eigenDAServiceManager.registryCoordinator() != registryCoordinator"); + require(address(_eigenDAServiceManager.stakeRegistry()) == address(stakeRegistry), "eigenDAServiceManager.stakeRegistry() != stakeRegistry"); + + require(address(_registryCoordinator.serviceManager()) == address(eigenDAServiceManager), "registryCoordinator.eigenDAServiceManager() != eigenDAServiceManager"); + require(address(_registryCoordinator.stakeRegistry()) == address(stakeRegistry), "registryCoordinator.stakeRegistry() != stakeRegistry"); + require(address(_registryCoordinator.blsApkRegistry()) == address(apkRegistry), "registryCoordinator.blsApkRegistry() != blsPubkeyRegistry"); + require(address(_registryCoordinator.indexRegistry()) == address(indexRegistry), "registryCoordinator.indexRegistry() != indexRegistry"); + } + + function _verifyImplementations() internal view { + require(eigenDAProxyAdmin.getProxyImplementation( + TransparentUpgradeableProxy(payable(address(eigenDAServiceManager)))) == address(eigenDAServiceManagerImplementation), + "eigenDAServiceManager: implementation set incorrectly"); + require(eigenDAProxyAdmin.getProxyImplementation( + TransparentUpgradeableProxy(payable(address(registryCoordinator)))) == address(registryCoordinatorImplementation), + "registryCoordinator: implementation set incorrectly"); + require(eigenDAProxyAdmin.getProxyImplementation( + TransparentUpgradeableProxy(payable(address(apkRegistry)))) == address(apkRegistryImplementation), + "blsApkRegistry: implementation set incorrectly"); + require(eigenDAProxyAdmin.getProxyImplementation( + TransparentUpgradeableProxy(payable(address(indexRegistry)))) == address(indexRegistryImplementation), + "indexRegistry: implementation set incorrectly"); + require(eigenDAProxyAdmin.getProxyImplementation( + TransparentUpgradeableProxy(payable(address(stakeRegistry)))) == address(stakeRegistryImplementation), + "stakeRegistry: implementation set incorrectly"); + } + + function _verifyInitalizations(string memory config_data) internal { + ( + uint96[] memory minimumStakeForQuourm, + IStakeRegistry.StrategyParams[][] memory strategyAndWeightingMultipliers + ) = _parseStakeRegistryParams(config_data); + ( + IRegistryCoordinator.OperatorSetParam[] memory operatorSetParams, + address churner, + address ejector + ) = _parseRegistryCoordinatorParams(config_data); + + require(eigenDAServiceManager.owner() == eigenDAOwner, "eigenDAServiceManager.owner() != eigenDAOwner"); + require(eigenDAServiceManager.pauserRegistry() == IPauserRegistry(pauser), "eigenDAServiceManager: pauser registry not set correctly"); + require(eigenDAServiceManager.batchConfirmer() == batchConfirmer, "eigenDAServiceManager.batchConfirmer() != batchConfirmer"); + require(eigenDAServiceManager.paused() == initalPausedStatus, "eigenDAServiceManager: init paused status set incorrectly"); + + require(registryCoordinator.owner() == eigenDAOwner, "registryCoordinator.owner() != eigenDAOwner"); + require(registryCoordinator.churnApprover() == churner, "registryCoordinator.churner() != churner"); + require(registryCoordinator.ejector() == ejector, "registryCoordinator.ejector() != ejector"); + require(registryCoordinator.pauserRegistry() == IPauserRegistry(pauser), "registryCoordinator: pauser registry not set correctly"); + require(registryCoordinator.paused() == initalPausedStatus, "registryCoordinator: init paused status set incorrectly"); + + for (uint8 i = 0; i < operatorSetParams.length; ++i) { + require(keccak256(abi.encode(registryCoordinator.getOperatorSetParams(i))) == keccak256(abi.encode(operatorSetParams[i])), "registryCoordinator.operatorSetParams != operatorSetParams"); + } + + for (uint8 i = 0; i < minimumStakeForQuourm.length; ++i) { + require(stakeRegistry.minimumStakeForQuorum(i) == minimumStakeForQuourm[i], "stakeRegistry.minimumStakeForQuourm != minimumStakeForQuourm"); + } + + for (uint8 i = 0; i < strategyAndWeightingMultipliers.length; ++i) { + for(uint8 j = 0; j < strategyAndWeightingMultipliers[i].length; ++j) { + IStakeRegistry.StrategyParams memory strategyParams = stakeRegistry.strategyParamsByIndex(i, j); + require(address(strategyParams.strategy) == address(strategyAndWeightingMultipliers[i][j].strategy), "stakeRegistry.strategyAndWeightingMultipliers != strategyAndWeightingMultipliers"); + require(strategyParams.multiplier == strategyAndWeightingMultipliers[i][j].multiplier, "stakeRegistry.strategyAndWeightingMultipliers != strategyAndWeightingMultipliers"); + } + } + + require(operatorSetParams.length == strategyAndWeightingMultipliers.length && operatorSetParams.length == minimumStakeForQuourm.length, "operatorSetParams, strategyAndWeightingMultipliers, and minimumStakeForQuourm must be the same length"); + } + + function _writeOutput(string memory config_data) internal { + string memory parent_object = "parent object"; + + string memory deployed_addresses = "addresses"; + vm.serializeAddress(deployed_addresses, "eigenDAProxyAdmin", address(eigenDAProxyAdmin)); + vm.serializeAddress(deployed_addresses, "operatorStateRetriever", address(operatorStateRetriever)); + vm.serializeAddress(deployed_addresses, "eigenDAServiceManager", address(eigenDAServiceManager)); + vm.serializeAddress(deployed_addresses, "eigenDAServiceManagerImplementation", address(eigenDAServiceManagerImplementation)); + vm.serializeAddress(deployed_addresses, "registryCoordinator", address(registryCoordinator)); + vm.serializeAddress(deployed_addresses, "registryCoordinatorImplementation", address(registryCoordinatorImplementation)); + vm.serializeAddress(deployed_addresses, "blsApkRegistry", address(apkRegistry)); + vm.serializeAddress(deployed_addresses, "blsApkRegistryImplementation", address(apkRegistryImplementation)); + vm.serializeAddress(deployed_addresses, "indexRegistry", address(indexRegistry)); + vm.serializeAddress(deployed_addresses, "indexRegistryImplementation", address(indexRegistryImplementation)); + vm.serializeAddress(deployed_addresses, "stakeRegistry", address(stakeRegistry)); + string memory deployed_addresses_output = vm.serializeAddress(deployed_addresses, "stakeRegistryImplementation", address(stakeRegistryImplementation)); + + string memory chain_info = "chainInfo"; + vm.serializeUint(chain_info, "deploymentBlock", block.number); + string memory chain_info_output = vm.serializeUint(chain_info, "chainId", block.chainid); + + address churner = stdJson.readAddress(config_data, ".permissions.churner"); + address ejector = stdJson.readAddress(config_data, ".permissions.ejector"); + string memory permissions = "permissions"; + vm.serializeAddress(permissions, "eigenDAOwner", eigenDAOwner); + vm.serializeAddress(permissions, "eigenDAUpgrader", eigenDAUpgrader); + vm.serializeAddress(permissions, "eigenDAChurner", churner); + vm.serializeAddress(permissions, "eigenDABatchConfirmer", batchConfirmer); + vm.serializeAddress(permissions, "pauserRegistry", pauser); + string memory permissions_output = vm.serializeAddress(permissions, "eigenDAEjector", ejector); + + vm.serializeString(parent_object, chain_info, chain_info_output); + vm.serializeString(parent_object, deployed_addresses, deployed_addresses_output); + string memory finalJson = vm.serializeString(parent_object, permissions, permissions_output); + vm.writeJson(finalJson, outputPath); + } + + function _parseStakeRegistryParams(string memory config_data) internal pure returns (uint96[] memory minimumStakeForQuourm, IStakeRegistry.StrategyParams[][] memory strategyAndWeightingMultipliers) { + bytes memory stakesConfigsRaw = stdJson.parseRaw(config_data, ".minimumStakes"); + minimumStakeForQuourm = abi.decode(stakesConfigsRaw, (uint96[])); + + bytes memory strategyConfigsRaw = stdJson.parseRaw(config_data, ".strategyWeights"); + strategyAndWeightingMultipliers = abi.decode(strategyConfigsRaw, (IStakeRegistry.StrategyParams[][])); + } + + function _parseRegistryCoordinatorParams(string memory config_data) internal returns (IRegistryCoordinator.OperatorSetParam[] memory operatorSetParams, address churner, address ejector) { + bytes memory operatorConfigsRaw = stdJson.parseRaw(config_data, ".operatorSetParams"); + operatorSetParams = abi.decode(operatorConfigsRaw, (IRegistryCoordinator.OperatorSetParam[])); + + churner = stdJson.readAddress(config_data, ".permissions.churner"); + ejector = stdJson.readAddress(config_data, ".permissions.ejector"); + } +} diff --git a/contracts/script/deploy/goerliv2/config/preprod.config.json b/contracts/script/deploy/goerliv2/config/preprod.config.json new file mode 100644 index 0000000000..7d7808dc0b --- /dev/null +++ b/contracts/script/deploy/goerliv2/config/preprod.config.json @@ -0,0 +1,65 @@ +{ + "chainInfo": { + "chainId": 5 + }, + + "permissions" : { + "owner": "0xbCAc81D98ad3b9cAA48db35d20eDe91D2C59a0e1", + "upgrader": "0xbCAc81D98ad3b9cAA48db35d20eDe91D2C59a0e1", + "churner": "0xbCAc81D98ad3b9cAA48db35d20eDe91D2C59a0e1", + "ejector": "0xbCAc81D98ad3b9cAA48db35d20eDe91D2C59a0e1", + "batchConfirmer": "0x09983E7E97cF430c1dE8408Ccf67261FC8317EA6", + "pauser": "0x0000000000000000000000000000000000000000", + "initalPausedStatus": 0 + }, + + "minimumStakes": [ + 0 + ], + + "strategyWeights": [ + [ + { + "0_strategy": "0xB613E78E2068d7489bb66419fB1cfa11275d14da", + "1_multiplier": 1070136092289993178 + }, + { + "0_strategy": "0x879944A8cB437a5f8061361f82A6d4EED59070b5", + "1_multiplier": 1071364636818145808 + }, + { + "0_strategy": "0xbeaC0eeEeeeeEEeEeEEEEeeEEeEeeeEeeEEBEaC0", + "1_multiplier": 1000000000000000000 + }, + { + "0_strategy": "0xD89dc4C40d901D4622C203Fb8808e6e7C7fcE164", + "1_multiplier": 1003448367695000000 + }, + { + "0_strategy": "0xa9DC3c93ae59B8d26AF17Ae63c96Be78793537A9", + "1_multiplier": 1042906799399447651 + }, + { + "0_strategy": "0x98b47798B68b734af53c930495595729E96cdB8E", + "1_multiplier": 1003890047865077222 + }, + { + "0_strategy": "0x5d1E9DC056C906CBfe06205a39B0D965A6Df7C14", + "1_multiplier": 1010394246511034973 + }, + { + "0_strategy": "0x1755d34476BB4DaEd726ee4a81E8132dF00F9b14", + "1_multiplier": 1002859280743792963 + } + ] + ], + + "operatorSetParams": [ + { + "0_maxOperatorCount": 200, + "1_kickBIPsOfOperatorStake": 11000, + "2_kickBIPsOfTotalStake": 50 + } + ] + +} \ No newline at end of file diff --git a/contracts/script/deploy/goerliv2/output/GV2_preprod_deployment_data.json b/contracts/script/deploy/goerliv2/output/GV2_preprod_deployment_data.json new file mode 100644 index 0000000000..3d269d1a05 --- /dev/null +++ b/contracts/script/deploy/goerliv2/output/GV2_preprod_deployment_data.json @@ -0,0 +1,28 @@ +{ + "addresses": { + "blsApkRegistry": "0xe47b025ed3C54D391c4E0738c6EF050D40dd79b5", + "blsApkRegistryImplementation": "0x8753287F516a6a339D4f14fB02C5E5C3d1BDCDc7", + "eigenDAProxyAdmin": "0xD556A62BD8249EE094e3e9bE2031623c2b1d2B52", + "eigenDAServiceManager": "0x5f2b48682F0854b7F33e44124D92AC77768143b5", + "eigenDAServiceManagerImplementation": "0x0833d1aeE705C779Fd08766D94b0F9CB5C281408", + "indexRegistry": "0x76c055E5A0c6546E8D3Ce6dd13C27957fB3b43e8", + "indexRegistryImplementation": "0x270141fF2d1173AcdE4F6a71a1fc74edB1e8e435", + "operatorStateRetriever": "0x5aE60cf2D46A169AE3D14B562ae5308dCbD9646C", + "registryCoordinator": "0x5d1d838C2952cbc7da3ee76E836312e889CabFB9", + "registryCoordinatorImplementation": "0xcB6D14F2b471067d58ACE6F9A79Fe811bB8162B5", + "stakeRegistry": "0x80cb5262E7D4E9ae5F1Be8040083A6790Cb67353", + "stakeRegistryImplementation": "0x596Bd559133872342BD1126FE85Dc234356B5ee8" + }, + "chainInfo": { + "chainId": 5, + "deploymentBlock": 10469650 + }, + "permissions": { + "eigenDABatchConfirmer": "0x09983E7E97cF430c1dE8408Ccf67261FC8317EA6", + "eigenDAChurner": "0xbCAc81D98ad3b9cAA48db35d20eDe91D2C59a0e1", + "eigenDAEjector": "0xbCAc81D98ad3b9cAA48db35d20eDe91D2C59a0e1", + "eigenDAOwner": "0xbCAc81D98ad3b9cAA48db35d20eDe91D2C59a0e1", + "eigenDAUpgrader": "0xbCAc81D98ad3b9cAA48db35d20eDe91D2C59a0e1", + "pauserRegistry": "0x94A2679B6A87ADb4e0CabA8E3E40f463C6062DeC" + } +} \ No newline at end of file diff --git a/contracts/script/m2/M2_Deploy.s.sol b/contracts/script/deploy/m2/M2_Deploy.s.sol similarity index 97% rename from contracts/script/m2/M2_Deploy.s.sol rename to contracts/script/deploy/m2/M2_Deploy.s.sol index 41cc6791ce..bbf03da31e 100644 --- a/contracts/script/m2/M2_Deploy.s.sol +++ b/contracts/script/deploy/m2/M2_Deploy.s.sol @@ -1,16 +1,17 @@ // SPDX-License-Identifier: BUSL-1.1 +/* pragma solidity =0.8.12; -import "@eigenlayer-scripts/utils/ExistingDeploymentParser.sol"; +import "eigenlayer-scripts/utils/ExistingDeploymentParser.sol"; -import "@eigenlayer-middleware/BLSPublicKeyCompendium.sol"; -import "@eigenlayer-middleware/BLSRegistryCoordinatorWithIndices.sol"; -import "@eigenlayer-middleware/BLSPubkeyRegistry.sol"; -import "@eigenlayer-middleware/IndexRegistry.sol"; -import "@eigenlayer-middleware/StakeRegistry.sol"; -import "@eigenlayer-middleware/BLSOperatorStateRetriever.sol"; +import "eigenlayer-middleware/BLSPublicKeyCompendium.sol"; +import "eigenlayer-middleware/BLSRegistryCoordinatorWithIndices.sol"; +import "eigenlayer-middleware/BLSPubkeyRegistry.sol"; +import "eigenlayer-middleware/IndexRegistry.sol"; +import "eigenlayer-middleware/StakeRegistry.sol"; +import "eigenlayer-middleware/BLSOperatorStateRetriever.sol"; -import "@eigenlayer-core/contracts/permissions/PauserRegistry.sol"; +import "eigenlayer-core/contracts/permissions/PauserRegistry.sol"; import {EigenDAServiceManager} from "../../src/core/EigenDAServiceManager.sol"; @@ -336,5 +337,5 @@ contract Deployer_M2 is ExistingDeploymentParser { string memory finalJson = vm.serializeString(parent_object, permissions, permissions_output); vm.writeJson(finalJson, outputPath); } - -} \ No newline at end of file +} +*/ \ No newline at end of file diff --git a/contracts/script/m2/config/M2_deploy.config.json b/contracts/script/deploy/m2/config/M2_deploy.config.json similarity index 100% rename from contracts/script/m2/config/M2_deploy.config.json rename to contracts/script/deploy/m2/config/M2_deploy.config.json diff --git a/contracts/script/m2/config/M2_preprod_deploy.config.json b/contracts/script/deploy/m2/config/M2_preprod_deploy.config.json similarity index 100% rename from contracts/script/m2/config/M2_preprod_deploy.config.json rename to contracts/script/deploy/m2/config/M2_preprod_deploy.config.json diff --git a/contracts/script/m2/output/M2_preprod_deployment_data.json b/contracts/script/deploy/m2/output/M2_preprod_deployment_data.json similarity index 100% rename from contracts/script/m2/output/M2_preprod_deployment_data.json rename to contracts/script/deploy/m2/output/M2_preprod_deployment_data.json diff --git a/contracts/src/Imports.sol b/contracts/src/Imports.sol index 92f8e6231d..17ea848f2a 100644 --- a/contracts/src/Imports.sol +++ b/contracts/src/Imports.sol @@ -1,5 +1,5 @@ // Imports used for compiling for bindings for clients -import "@eigenlayer-middleware/BLSOperatorStateRetriever.sol"; -import "@eigenlayer-middleware/BLSPublicKeyCompendium.sol"; -import "@eigenlayer-middleware/BLSRegistryCoordinatorWithIndices.sol"; +import "eigenlayer-middleware/OperatorStateRetriever.sol"; +import "eigenlayer-middleware/BLSApkRegistry.sol"; +import "eigenlayer-middleware/RegistryCoordinator.sol"; diff --git a/contracts/src/core/EigenDAServiceManager.sol b/contracts/src/core/EigenDAServiceManager.sol index 1b26765404..074c210056 100644 --- a/contracts/src/core/EigenDAServiceManager.sol +++ b/contracts/src/core/EigenDAServiceManager.sol @@ -1,19 +1,17 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.9; -import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; -import "@openzeppelin-upgrades/contracts/proxy/utils/Initializable.sol"; -import "@openzeppelin-upgrades/contracts/access/OwnableUpgradeable.sol"; +import {Pausable} from "eigenlayer-core/contracts/permissions/Pausable.sol"; +import {IAVSDirectory} from "eigenlayer-core/contracts/interfaces/IAVSDirectory.sol"; +import {IPauserRegistry} from "eigenlayer-core/contracts/interfaces/IPauserRegistry.sol"; -import "@eigenlayer-core/contracts/interfaces/IDelegationManager.sol"; +import {ServiceManagerBase} from "eigenlayer-middleware/ServiceManagerBase.sol"; +import {BLSSignatureChecker} from "eigenlayer-middleware/BLSSignatureChecker.sol"; +import {IRegistryCoordinator} from "eigenlayer-middleware/interfaces/IRegistryCoordinator.sol"; +import {IStakeRegistry} from "eigenlayer-middleware/interfaces/IStakeRegistry.sol"; -import "@eigenlayer-core/contracts/libraries/BytesLib.sol"; -import "@eigenlayer-core/contracts/libraries/Merkle.sol"; -import "@eigenlayer-core/contracts/permissions/Pausable.sol"; - -import "../libraries/EigenDAHasher.sol"; - -import "./EigenDAServiceManagerStorage.sol"; +import {EigenDAServiceManagerStorage} from "./EigenDAServiceManagerStorage.sol"; +import {EigenDAHasher} from "../libraries/EigenDAHasher.sol"; /** * @title Primary entrypoint for procuring services from EigenDA. @@ -23,54 +21,41 @@ import "./EigenDAServiceManagerStorage.sol"; * - confirming the data store by the disperser with inferred aggregated signatures of the quorum * - freezing operators as the result of various "challenges" */ -contract EigenDAServiceManager is Initializable, OwnableUpgradeable, EigenDAServiceManagerStorage, BLSSignatureChecker, Pausable { - using BytesLib for bytes; +contract EigenDAServiceManager is EigenDAServiceManagerStorage, ServiceManagerBase, BLSSignatureChecker, Pausable { using EigenDAHasher for BatchHeader; using EigenDAHasher for ReducedBatchHeader; uint8 internal constant PAUSED_CONFIRM_BATCH = 0; - /** - * @notice The EigenLayer delegation contract for this EigenDA which is primarily used by - * delegators to delegate their stake to operators who would serve as EigenDA - * nodes and so on. - * @dev For more details, see DelegationManager.sol. - */ - IDelegationManager public immutable delegationManager; - - IStrategyManager public immutable strategyManager; - - ISlasher public immutable slasher; - - /// @notice when applied to a function, ensures that the function is only callable by the `registryCoordinator`. - modifier onlyRegistryCoordinator() { - require(msg.sender == address(registryCoordinator), "onlyRegistryCoordinator: not from registry coordinator"); + /// @notice when applied to a function, ensures that the function is only callable by the `batchConfirmer`. + modifier onlyBatchConfirmer() { + require(msg.sender == batchConfirmer, "onlyBatchConfirmer: not from batch confirmer"); _; } constructor( - IBLSRegistryCoordinatorWithIndices _registryCoordinator, - IStrategyManager _strategyManager, - IDelegationManager _delegationMananger, - ISlasher _slasher + IAVSDirectory __avsDirectory, + IRegistryCoordinator __registryCoordinator, + IStakeRegistry __stakeRegistry ) - BLSSignatureChecker(_registryCoordinator) + BLSSignatureChecker(__registryCoordinator) + ServiceManagerBase(__avsDirectory, __registryCoordinator, __stakeRegistry) { - strategyManager = _strategyManager; - delegationManager = _delegationMananger; - slasher = _slasher; _disableInitializers(); } function initialize( IPauserRegistry _pauserRegistry, - address initialOwner + uint256 _initialPausedStatus, + address _initialOwner, + address _batchConfirmer ) public initializer { - _initializePauser(_pauserRegistry, UNPAUSE_ALL); - _transferOwnership(initialOwner); + _initializePauser(_pauserRegistry, _initialPausedStatus); + _transferOwnership(_initialOwner); + _setBatchConfirmer(_batchConfirmer); } /** @@ -82,7 +67,7 @@ contract EigenDAServiceManager is Initializable, OwnableUpgradeable, EigenDAServ function confirmBatch( BatchHeader calldata batchHeader, NonSignerStakesAndSignature memory nonSignerStakesAndSignature - ) external onlyWhenNotPaused(PAUSED_CONFIRM_BATCH) { + ) external onlyWhenNotPaused(PAUSED_CONFIRM_BATCH) onlyBatchConfirmer() { // make sure the information needed to derive the non-signers and batch is in calldata to avoid emitting events require(tx.origin == msg.sender, "EigenDAServiceManager.confirmBatch: header and nonsigner data must be in calldata"); // make sure the stakes against which the Batch is being confirmed are not stale @@ -121,58 +106,29 @@ contract EigenDAServiceManager is Initializable, OwnableUpgradeable, EigenDAServ } // store the metadata hash - uint96 fee = 0; uint32 batchIdMemory = batchId; bytes32 batchHeaderHash = batchHeader.hashBatchHeader(); - batchIdToBatchMetadataHash[batchIdMemory] = EigenDAHasher.hashBatchHashedMetadata(batchHeaderHash, signatoryRecordHash, fee, uint32(block.number)); + batchIdToBatchMetadataHash[batchIdMemory] = EigenDAHasher.hashBatchHashedMetadata(batchHeaderHash, signatoryRecordHash, uint32(block.number)); - emit BatchConfirmed(reducedBatchHeaderHash, batchIdMemory, fee); + emit BatchConfirmed(reducedBatchHeaderHash, batchIdMemory); // increment the batchId batchId = batchIdMemory + 1; } - /// @notice Called in the event of challenge resolution, in order to forward a call to the Slasher, which 'freezes' the `operator`. - function freezeOperator(address /*operator*/) external { - revert("EigenDAServiceManager.freezeOperator: not implemented"); - // require( - // msg.sender == address(eigenDAChallenge) - // || msg.sender == address(eigenDABombVerifier), - // "EigenDAServiceManager.freezeOperator: Only challenge resolvers can slash operators" - // ); - // slasher.freezeOperator(operator); + /// @notice This function is used for changing the batch confirmer + function setBatchConfirmer(address _batchConfirmer) external onlyOwner() { + _setBatchConfirmer(_batchConfirmer); } - /** - * @notice Called by the Registry in the event of a new registration, to forward a call to the Slasher - * @param operator The operator whose stake is being updated - * @param serveUntilBlock The block until which the stake accounted for in the first update is slashable by this middleware - */ - function recordFirstStakeUpdate(address operator, uint32 serveUntilBlock) external onlyRegistryCoordinator { - // slasher.recordFirstStakeUpdate(operator, serveUntilBlock); + /// @notice changes the batch confirmer + function _setBatchConfirmer(address _batchConfirmer) internal { + address previousBatchConfirmer = batchConfirmer; + batchConfirmer = _batchConfirmer; + emit BatchConfirmerChanged(previousBatchConfirmer, batchConfirmer); } - /** - * @notice Called by the registryCoordinator, in order to forward a call to the Slasher, informing it of a stake update - * @param operator The operator whose stake is being updated - * @param updateBlock The block at which the update is being made - * @param serveUntilBlock The block until which the stake withdrawn from the operator in this update is slashable by this middleware - * @param prevElement The value of the previous element in the linked list of stake updates (generated offchain) - */ - function recordStakeUpdate(address operator, uint32 updateBlock, uint32 serveUntilBlock, uint256 prevElement) external onlyRegistryCoordinator { - // slasher.recordStakeUpdate(operator, updateBlock, serveUntilBlock, prevElement); - } - - /** - * @notice Called by the registryCoordinator in the event of deregistration, to forward a call to the Slasher - * @param operator The operator being deregistered - * @param serveUntilBlock The block until which the stake delegated to the operator is slashable by this middleware - */ - function recordLastStakeUpdateAndRevokeSlashingAbility(address operator, uint32 serveUntilBlock) external onlyRegistryCoordinator { - // slasher.recordLastStakeUpdateAndRevokeSlashingAbility(operator, serveUntilBlock); - } - - // VIEW FUNCTIONS + /// @notice Returns the current batchId function taskNumber() external view returns (uint32) { return batchId; } @@ -182,8 +138,4 @@ contract EigenDAServiceManager is Initializable, OwnableUpgradeable, EigenDAServ return uint32(block.number) + STORE_DURATION_BLOCKS + BLOCK_STALE_MEASURE; } - /// @dev need to override function here since its defined in both these contracts - function owner() public view override(OwnableUpgradeable, IServiceManager) returns (address) { - return OwnableUpgradeable.owner(); - } } \ No newline at end of file diff --git a/contracts/src/core/EigenDAServiceManagerStorage.sol b/contracts/src/core/EigenDAServiceManagerStorage.sol index cbff84a07f..4d2531c665 100644 --- a/contracts/src/core/EigenDAServiceManagerStorage.sol +++ b/contracts/src/core/EigenDAServiceManagerStorage.sol @@ -1,11 +1,7 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.9; -import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; -import "@eigenlayer-core/contracts/interfaces/IDelegationManager.sol"; -import "@eigenlayer-core/contracts/interfaces/IStrategyManager.sol"; - -import "../interfaces/IEigenDAServiceManager.sol"; +import {IEigenDAServiceManager} from "../interfaces/IEigenDAServiceManager.sol"; /** * @title Storage variables for the `EigenDAServiceManager` contract. @@ -39,4 +35,12 @@ abstract contract EigenDAServiceManagerStorage is IEigenDAServiceManager { /// @notice mapping between the batchId to the hash of the metadata of the corresponding Batch mapping(uint32 => bytes32) public batchIdToBatchMetadataHash; + + /// @notice address that is permissioned to confirm batches + address public batchConfirmer; + + // storage gap for upgradeability + // slither-disable-next-line shadowing-state + uint256[47] private __GAP; + } diff --git a/contracts/src/interfaces/IEigenDAServiceManager.sol b/contracts/src/interfaces/IEigenDAServiceManager.sol index 2533e8860c..bcaddd9dc2 100644 --- a/contracts/src/interfaces/IEigenDAServiceManager.sol +++ b/contracts/src/interfaces/IEigenDAServiceManager.sol @@ -1,27 +1,26 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.9; -import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; -import "@eigenlayer-middleware/interfaces/IServiceManager.sol"; -import "@eigenlayer-middleware/interfaces/IDelayedService.sol"; -import "@eigenlayer-middleware/BLSSignatureChecker.sol"; -import "@eigenlayer-core/contracts/interfaces/IDelegationManager.sol"; +import {IServiceManager} from "eigenlayer-middleware/interfaces/IServiceManager.sol"; +import {BLSSignatureChecker} from "eigenlayer-middleware/BLSSignatureChecker.sol"; +import {BN254} from "eigenlayer-middleware/libraries/BN254.sol"; -interface IEigenDAServiceManager is IServiceManager, IDelayedService { +interface IEigenDAServiceManager is IServiceManager { // EVENTS - /**b + /** * @notice Emitted when a Batch is confirmed. * @param batchHeaderHash The hash of the batch header * @param batchId The ID for the Batch inside of the specified duration (i.e. *not* the globalBatchId) */ - event BatchConfirmed(bytes32 indexed batchHeaderHash, uint32 batchId, uint96 fee); - - event FeePerBytePerTimeSet(uint256 previousValue, uint256 newValue); - - event PaymentManagerSet(address previousAddress, address newAddress); + event BatchConfirmed(bytes32 indexed batchHeaderHash, uint32 batchId); - event FeeSetterChanged(address previousAddress, address newAddress); + /** + * @notice Emitted when the batch confirmer is changed. + * @param previousAddress The address of the previous batch confirmer + * @param newAddress The address of the new batch confirmer + */ + event BatchConfirmerChanged(address previousAddress, address newAddress); // STRUCTS @@ -29,8 +28,7 @@ interface IEigenDAServiceManager is IServiceManager, IDelayedService { uint8 quorumNumber; uint8 adversaryThresholdPercentage; uint8 quorumThresholdPercentage; - uint8 quantizationParameter; // the quantization parameter used for determining - // the precision of the amount of data and the stake that nodes have + uint32 chunkLength; // the length of the chunks in the quorum } struct BlobHeader { @@ -84,4 +82,16 @@ interface IEigenDAServiceManager is IServiceManager, IDelayedService { BatchHeader calldata batchHeader, BLSSignatureChecker.NonSignerStakesAndSignature memory nonSignerStakesAndSignature ) external; + + /// @notice This function is used for changing the batch confirmer + function setBatchConfirmer(address _batchConfirmer) external; + + /// @notice Returns the current batchId + function taskNumber() external view returns (uint32); + + /// @notice Returns the block until which operators must serve. + function latestServeUntilBlock() external view returns (uint32); + + /// @notice The maximum amount of blocks in the past that the service will consider stake amounts to still be 'valid'. + function BLOCK_STALE_MEASURE() external view returns (uint32); } diff --git a/contracts/src/libraries/EigenDAHasher.sol b/contracts/src/libraries/EigenDAHasher.sol index 6d9d8b4d60..4f8d72c116 100644 --- a/contracts/src/libraries/EigenDAHasher.sol +++ b/contracts/src/libraries/EigenDAHasher.sol @@ -14,16 +14,28 @@ library EigenDAHasher { * @notice hashes the given metdata into the commitment that will be stored in the contract * @param batchHeaderHash the hash of the batchHeader * @param signatoryRecordHash the hash of the signatory record - * @param fee the fee paid in paymentToken for the batch * @param blockNumber the block number at which the batch was confirmed */ function hashBatchHashedMetadata( bytes32 batchHeaderHash, bytes32 signatoryRecordHash, - uint96 fee, uint32 blockNumber ) internal pure returns(bytes32) { - return keccak256(abi.encodePacked(batchHeaderHash, signatoryRecordHash, fee, blockNumber)); + return keccak256(abi.encodePacked(batchHeaderHash, signatoryRecordHash, blockNumber)); + } + + /** + * @notice hashes the given metdata into the commitment that will be stored in the contract + * @param batchHeaderHash the hash of the batchHeader + * @param confirmationData the confirmation data of the batch + * @param blockNumber the block number at which the batch was confirmed + */ + function hashBatchHashedMetadata( + bytes32 batchHeaderHash, + bytes memory confirmationData, + uint32 blockNumber + ) internal pure returns(bytes32) { + return keccak256(abi.encodePacked(batchHeaderHash, confirmationData, blockNumber)); } /** @@ -37,7 +49,6 @@ library EigenDAHasher { return hashBatchHashedMetadata( keccak256(abi.encode(batchMetadata.batchHeader)), batchMetadata.signatoryRecordHash, - batchMetadata.fee, batchMetadata.confirmationBlockNumber ); } diff --git a/contracts/src/libraries/EigenDAKZGUtils.sol b/contracts/src/libraries/EigenDAKZGUtils.sol deleted file mode 100644 index f2183515f9..0000000000 --- a/contracts/src/libraries/EigenDAKZGUtils.sol +++ /dev/null @@ -1,40 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED - -pragma solidity ^0.8.9; - -import {BN254} from "../../src/core/EigenDAServiceManager.sol"; - -/** - * @title Library for verifying KZG commitments. - * @author Layr Labs, Inc. -*/ -library EigenDAKZGUtils { - using BN254 for BN254.G1Point; - - /** - * @notice opens the KZG commitment at a point - * @param point the point to evaluate the polynomial at - * @param evaluation the evaluation of the polynomial at the point - * @param tau the power of tau - * @param commitment the commitment to the polynomial - * @param proof the proof of the commitment - */ - function openCommitment( - uint256 point, - uint256 evaluation, - BN254.G1Point memory tau, - BN254.G1Point memory commitment, - BN254.G2Point memory proof - ) internal view returns(bool) { - BN254.G1Point memory negGeneratorG1 = BN254.generatorG1().negate(); - - //e([s]_1 - w[1]_1, [pi(x)]_2) = e([p(x)]_1 - p(w)[1]_1, [1]_2) - return BN254.pairing( - tau.plus(negGeneratorG1.scalar_mul(point)), - proof, - commitment.plus(negGeneratorG1.scalar_mul(evaluation)), - BN254.negGeneratorG2() - ); - } - -} diff --git a/contracts/src/libraries/EigenDABlobUtils.sol b/contracts/src/libraries/EigenDARollupUtils.sol similarity index 60% rename from contracts/src/libraries/EigenDABlobUtils.sol rename to contracts/src/libraries/EigenDARollupUtils.sol index 8544bcf68c..a342a0566d 100644 --- a/contracts/src/libraries/EigenDABlobUtils.sol +++ b/contracts/src/libraries/EigenDARollupUtils.sol @@ -1,16 +1,19 @@ -// SPDX-License-Identifier: UNLICENSED +// SPDX-License-Identifier: MIT pragma solidity ^0.8.9; -import "@eigenlayer-core/contracts/libraries/Merkle.sol"; -import "./EigenDAHasher.sol"; -import "../interfaces/IEigenDAServiceManager.sol"; +import {Merkle} from "eigenlayer-core/contracts/libraries/Merkle.sol"; +import {BN254} from "eigenlayer-middleware/libraries/BN254.sol"; +import {EigenDAHasher} from "./EigenDAHasher.sol"; +import {IEigenDAServiceManager} from "../interfaces/IEigenDAServiceManager.sol"; /** - * @title Library of functions to be used by smart contracts wanting to prove blobs on EigenDA. + * @title Library of functions to be used by smart contracts wanting to prove blobs on EigenDA and open KZG commitments. * @author Layr Labs, Inc. */ -library EigenDABlobUtils { +library EigenDARollupUtils { + using BN254 for BN254.G1Point; + // STRUCTS struct BlobVerificationProof { uint32 batchId; @@ -34,7 +37,7 @@ library EigenDABlobUtils { require( EigenDAHasher.hashBatchMetadata(blobVerificationProof.batchMetadata) == eigenDAServiceManager.batchIdToBatchMetadataHash(blobVerificationProof.batchId), - "EigenDABlobUtils.verifyBlob: batchMetadata does not match stored metadata" + "EigenDARollupUtils.verifyBlob: batchMetadata does not match stored metadata" ); require( @@ -44,28 +47,54 @@ library EigenDABlobUtils { keccak256(abi.encodePacked(EigenDAHasher.hashBlobHeader(blobHeader))), blobVerificationProof.blobIndex ), - "EigenDABlobUtils.verifyBlob: inclusion proof is invalid" + "EigenDARollupUtils.verifyBlob: inclusion proof is invalid" ); // require that the security param in each blob is met for (uint i = 0; i < blobHeader.quorumBlobParams.length; i++) { // make sure that the quorumIndex matches the given quorumNumber require(uint8(blobVerificationProof.batchMetadata.batchHeader.quorumNumbers[uint8(blobVerificationProof.quorumThresholdIndexes[i])]) == blobHeader.quorumBlobParams[i].quorumNumber, - "EigenDABlobUtils.verifyBlob: quorumNumber does not match" + "EigenDARollupUtils.verifyBlob: quorumNumber does not match" ); // make sure that the adversaryThresholdPercentage is less than the given quorumThresholdPercentage require(blobHeader.quorumBlobParams[i].adversaryThresholdPercentage < blobHeader.quorumBlobParams[i].quorumThresholdPercentage, - "EigenDABlobUtils.verifyBlob: adversaryThresholdPercentage is not valid" + "EigenDARollupUtils.verifyBlob: adversaryThresholdPercentage is not valid" ); // make sure that the stake signed for is greater than the given quorumThresholdPercentage require(uint8(blobVerificationProof.batchMetadata.batchHeader.quorumThresholdPercentages[uint8(blobVerificationProof.quorumThresholdIndexes[i])]) >= blobHeader.quorumBlobParams[i].quorumThresholdPercentage, - "EigenDABlobUtils.verifyBlob: quorumThresholdPercentage is not met" + "EigenDARollupUtils.verifyBlob: quorumThresholdPercentage is not met" ); } } + + /** + * @notice opens the KZG commitment at a point + * @param point the point to evaluate the polynomial at + * @param evaluation the evaluation of the polynomial at the point + * @param tau the power of tau + * @param commitment the commitment to the polynomial + * @param proof the proof of the commitment + */ + function openCommitment( + uint256 point, + uint256 evaluation, + BN254.G1Point memory tau, + BN254.G1Point memory commitment, + BN254.G2Point memory proof + ) internal view returns(bool) { + BN254.G1Point memory negGeneratorG1 = BN254.generatorG1().negate(); + + //e([s]_1 - w[1]_1, [pi(x)]_2) = e([p(x)]_1 - p(w)[1]_1, [1]_2) + return BN254.pairing( + tau.plus(negGeneratorG1.scalar_mul(point)), + proof, + commitment.plus(negGeneratorG1.scalar_mul(evaluation)), + BN254.negGeneratorG2() + ); + } } diff --git a/contracts/test/mocks/MockRollup.sol b/contracts/src/rollup/MockRollup.sol similarity index 84% rename from contracts/test/mocks/MockRollup.sol rename to contracts/src/rollup/MockRollup.sol index 592d47b45c..2e54f6bbf5 100644 --- a/contracts/test/mocks/MockRollup.sol +++ b/contracts/src/rollup/MockRollup.sol @@ -2,11 +2,10 @@ pragma solidity ^0.8.9; -import {EigenDAKZGUtils} from "../../src/libraries/EigenDAKZGUtils.sol"; -import {EigenDABlobUtils} from "../../src/libraries/EigenDABlobUtils.sol"; -import {EigenDAServiceManager, IEigenDAServiceManager, BN254} from "../../src/core/EigenDAServiceManager.sol"; -//import {BN254} from "../../lib/eigenlayer-middleware/src/libraries/BN254.sol"; - +import {EigenDARollupUtils} from "../libraries/EigenDARollupUtils.sol"; +import {EigenDAServiceManager} from "../core/EigenDAServiceManager.sol"; +import {IEigenDAServiceManager} from "../interfaces/IEigenDAServiceManager.sol"; +import {BN254} from "eigenlayer-middleware/libraries/BN254.sol"; struct Commitment { address validator; // validator who posted the commitment @@ -55,13 +54,13 @@ contract MockRollup { */ function postCommitment( IEigenDAServiceManager.BlobHeader memory blobHeader, - EigenDABlobUtils.BlobVerificationProof memory blobVerificationProof + EigenDARollupUtils.BlobVerificationProof memory blobVerificationProof ) external { require(validators[msg.sender], "MockRollup.postCommitment: Validator not registered"); require(commitments[block.timestamp].validator == address(0), "MockRollup.postCommitment: Commitment already posted"); // verify that the blob was included in the batch - EigenDABlobUtils.verifyBlob(blobHeader, eigenDAServiceManager, blobVerificationProof); + EigenDARollupUtils.verifyBlob(blobHeader, eigenDAServiceManager, blobVerificationProof); commitments[block.timestamp] = Commitment(msg.sender, blobHeader.dataLength, blobHeader.commitment); } @@ -80,7 +79,7 @@ contract MockRollup { require(point < commitment.dataLength, "MockRollup.challengeCommitment: Point must be less than data length"); // verify that the commitment contains the illegal value - require(EigenDAKZGUtils.openCommitment(point, illegalValue, tau, commitment.polynomialCommitment, proof), "MockRollup.challengeCommitment: Does not evaluate to illegal value"); + require(EigenDARollupUtils.openCommitment(point, illegalValue, tau, commitment.polynomialCommitment, proof), "MockRollup.challengeCommitment: Does not evaluate to illegal value"); // blacklist the validator validators[commitment.validator] = false; diff --git a/contracts/test/harnesses/EigenDABlobUtilsHarness.sol b/contracts/test/harnesses/EigenDABlobUtilsHarness.sol index b34149a482..8a4c7a4582 100644 --- a/contracts/test/harnesses/EigenDABlobUtilsHarness.sol +++ b/contracts/test/harnesses/EigenDABlobUtilsHarness.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.9; -import "../../src/libraries/EigenDABlobUtils.sol"; +import "../../src/libraries/EigenDARollupUtils.sol"; import "forge-std/Test.sol"; contract EigenDABlobUtilsHarness is Test { @@ -10,8 +10,8 @@ contract EigenDABlobUtilsHarness is Test { function verifyBlob( IEigenDAServiceManager.BlobHeader calldata blobHeader, IEigenDAServiceManager eigenDAServiceManager, - EigenDABlobUtils.BlobVerificationProof calldata blobVerificationProof + EigenDARollupUtils.BlobVerificationProof calldata blobVerificationProof ) external view { - EigenDABlobUtils.verifyBlob(blobHeader, eigenDAServiceManager, blobVerificationProof); + EigenDARollupUtils.verifyBlob(blobHeader, eigenDAServiceManager, blobVerificationProof); } } diff --git a/contracts/test/unit/EigenDABlobUtils.t.sol b/contracts/test/unit/EigenDABlobUtils.t.sol index d0db1986fe..021ed36970 100644 --- a/contracts/test/unit/EigenDABlobUtils.t.sol +++ b/contracts/test/unit/EigenDABlobUtils.t.sol @@ -6,10 +6,12 @@ import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.so import "../../lib/eigenlayer-middleware/test/utils/BLSMockAVSDeployer.sol"; import {EigenDAHasher} from "../../src/libraries/EigenDAHasher.sol"; import {EigenDAServiceManager} from "../../src/core/EigenDAServiceManager.sol"; -import {EigenDABlobUtils} from "../../src/libraries/EigenDABlobUtils.sol"; +import {EigenDARollupUtils} from "../../src/libraries/EigenDARollupUtils.sol"; import {EigenDAHasher} from "../../src/libraries/EigenDAHasher.sol"; import {EigenDABlobUtilsHarness} from "../harnesses/EigenDABlobUtilsHarness.sol"; -import {EigenDAServiceManager, IEigenDAServiceManager} from "../../src/core/EigenDAServiceManager.sol"; +import {EigenDAServiceManager} from "../../src/core/EigenDAServiceManager.sol"; +import {IEigenDAServiceManager} from "../../src/interfaces/IEigenDAServiceManager.sol"; + import "forge-std/StdStorage.sol"; @@ -43,10 +45,9 @@ contract EigenDABlobUtilsUnit is BLSMockAVSDeployer { _setUpBLSMockAVSDeployer(); eigenDAServiceManagerImplementation = new EigenDAServiceManager( + avsDirectory, registryCoordinator, - strategyManagerMock, - delegationMock, - slasher + stakeRegistry ); // Third, upgrade the proxy contracts to use the correct implementation contracts and initialize them. @@ -58,9 +59,9 @@ contract EigenDABlobUtilsUnit is BLSMockAVSDeployer { abi.encodeWithSelector( EigenDAServiceManager.initialize.selector, pauserRegistry, - serviceManagerOwner, - feePerBytePerTime, - serviceManagerOwner + 0, + registryCoordinatorOwner, + confirmer ) ) ) @@ -100,7 +101,7 @@ contract EigenDABlobUtilsUnit is BLSMockAVSDeployer { .with_key(defaultBatchId) .checked_write(batchMetadata.hashBatchMetadata()); - EigenDABlobUtils.BlobVerificationProof memory blobVerificationProof; + EigenDARollupUtils.BlobVerificationProof memory blobVerificationProof; blobVerificationProof.batchId = defaultBatchId; blobVerificationProof.batchMetadata = batchMetadata; blobVerificationProof.inclusionProof = abi.encodePacked(keccak256(firstBlobHash)); @@ -123,10 +124,10 @@ contract EigenDABlobUtilsUnit is BLSMockAVSDeployer { uint256 anotherPseudoRandomNumber = uint256(keccak256(abi.encodePacked(pseudoRandomNumber))); blobHeader[1] = _generateRandomBlobHeader(anotherPseudoRandomNumber, numQuorumBlobParams, defaultCodingRatioPercentage); - EigenDABlobUtils.BlobVerificationProof memory blobVerificationProof; + EigenDARollupUtils.BlobVerificationProof memory blobVerificationProof; blobVerificationProof.batchId = defaultBatchId; - cheats.expectRevert("EigenDABlobUtils.verifyBlob: batchMetadata does not match stored metadata"); + cheats.expectRevert("EigenDARollupUtils.verifyBlob: batchMetadata does not match stored metadata"); eigenDABlobUtilsHarness.verifyBlob(blobHeader[1], eigenDAServiceManager, blobVerificationProof); } @@ -146,13 +147,13 @@ contract EigenDABlobUtilsUnit is BLSMockAVSDeployer { .with_key(defaultBatchId) .checked_write(batchMetadata.hashBatchMetadata()); - EigenDABlobUtils.BlobVerificationProof memory blobVerificationProof; + EigenDARollupUtils.BlobVerificationProof memory blobVerificationProof; blobVerificationProof.batchId = defaultBatchId; blobVerificationProof.batchMetadata = batchMetadata; blobVerificationProof.inclusionProof = abi.encodePacked(bytes32(0)); blobVerificationProof.blobIndex = 1; - cheats.expectRevert("EigenDABlobUtils.verifyBlob: inclusion proof is invalid"); + cheats.expectRevert("EigenDARollupUtils.verifyBlob: inclusion proof is invalid"); eigenDABlobUtilsHarness.verifyBlob(blobHeader[1], eigenDAServiceManager, blobVerificationProof); } @@ -187,7 +188,7 @@ contract EigenDABlobUtilsUnit is BLSMockAVSDeployer { .with_key(defaultBatchId) .checked_write(batchMetadata.hashBatchMetadata()); - EigenDABlobUtils.BlobVerificationProof memory blobVerificationProof; + EigenDARollupUtils.BlobVerificationProof memory blobVerificationProof; blobVerificationProof.batchId = defaultBatchId; blobVerificationProof.batchMetadata = batchMetadata; blobVerificationProof.inclusionProof = abi.encodePacked(keccak256(firstBlobHash)); @@ -234,7 +235,7 @@ contract EigenDABlobUtilsUnit is BLSMockAVSDeployer { .with_key(defaultBatchId) .checked_write(batchMetadata.hashBatchMetadata()); - EigenDABlobUtils.BlobVerificationProof memory blobVerificationProof; + EigenDARollupUtils.BlobVerificationProof memory blobVerificationProof; blobVerificationProof.batchId = defaultBatchId; blobVerificationProof.batchMetadata = batchMetadata; blobVerificationProof.inclusionProof = abi.encodePacked(keccak256(firstBlobHash)); @@ -245,7 +246,7 @@ contract EigenDABlobUtilsUnit is BLSMockAVSDeployer { blobVerificationProof.quorumThresholdIndexes[i] = bytes1(uint8(batchHeader.quorumNumbers.length - 1 - i)); } - cheats.expectRevert("EigenDABlobUtils.verifyBlob: quorumNumber does not match"); + cheats.expectRevert("EigenDARollupUtils.verifyBlob: quorumNumber does not match"); eigenDABlobUtilsHarness.verifyBlob(blobHeader[1], eigenDAServiceManager, blobVerificationProof); } @@ -280,7 +281,7 @@ contract EigenDABlobUtilsUnit is BLSMockAVSDeployer { .with_key(defaultBatchId) .checked_write(batchMetadata.hashBatchMetadata()); - EigenDABlobUtils.BlobVerificationProof memory blobVerificationProof; + EigenDARollupUtils.BlobVerificationProof memory blobVerificationProof; blobVerificationProof.batchId = defaultBatchId; blobVerificationProof.batchMetadata = batchMetadata; blobVerificationProof.inclusionProof = abi.encodePacked(keccak256(firstBlobHash)); @@ -291,7 +292,7 @@ contract EigenDABlobUtilsUnit is BLSMockAVSDeployer { blobVerificationProof.quorumThresholdIndexes[i] = bytes1(uint8(i)); } - cheats.expectRevert("EigenDABlobUtils.verifyBlob: quorumThresholdPercentage is not met"); + cheats.expectRevert("EigenDARollupUtils.verifyBlob: quorumThresholdPercentage is not met"); eigenDABlobUtilsHarness.verifyBlob(blobHeader[1], eigenDAServiceManager, blobVerificationProof); } @@ -323,7 +324,7 @@ contract EigenDABlobUtilsUnit is BLSMockAVSDeployer { blobHeader.quorumBlobParams[i].adversaryThresholdPercentage = uint8(uint256(keccak256(abi.encodePacked(pseudoRandomNumber, "blobHeader.quorumBlobParams[i].adversaryThresholdPercentage", j)))) % 100; j++; } - blobHeader.quorumBlobParams[i].quantizationParameter = uint8(uint256(keccak256(abi.encodePacked(pseudoRandomNumber, "blobHeader.quorumBlobParams[i].quantizationParameter", i)))); + blobHeader.quorumBlobParams[i].chunkLength = uint32(uint256(keccak256(abi.encodePacked(pseudoRandomNumber, "blobHeader.quorumBlobParams[i].chunkLength", i)))); blobHeader.quorumBlobParams[i].quorumThresholdPercentage = blobHeader.quorumBlobParams[i].adversaryThresholdPercentage + 1; } // mark all quorum numbers as unused diff --git a/contracts/test/unit/EigenDAServiceManagerUnit.t.sol b/contracts/test/unit/EigenDAServiceManagerUnit.t.sol index b98b35f89b..26d48c9cdc 100644 --- a/contracts/test/unit/EigenDAServiceManagerUnit.t.sol +++ b/contracts/test/unit/EigenDAServiceManagerUnit.t.sol @@ -6,7 +6,9 @@ import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.so import "../../lib/eigenlayer-middleware/test/utils/BLSMockAVSDeployer.sol"; import {EigenDAServiceManager} from "../../src/core/EigenDAServiceManager.sol"; import {EigenDAHasher} from "../../src/libraries/EigenDAHasher.sol"; -import {EigenDAServiceManager, IEigenDAServiceManager} from "../../src/core/EigenDAServiceManager.sol"; +import {EigenDAServiceManager} from "../../src/core/EigenDAServiceManager.sol"; +import {IEigenDAServiceManager} from "../../src/interfaces/IEigenDAServiceManager.sol"; + contract EigenDAServiceManagerUnit is BLSMockAVSDeployer { using BN254 for BN254.G1Point; @@ -22,7 +24,7 @@ contract EigenDAServiceManagerUnit is BLSMockAVSDeployer { uint256 feePerBytePerTime = 0; - event BatchConfirmed(bytes32 indexed batchHeaderHash, uint32 batchId, uint96 fee); + event BatchConfirmed(bytes32 indexed batchHeaderHash, uint32 batchId); event FeePerBytePerTimeSet(uint256 previousValue, uint256 newValue); event FeeSetterChanged(address previousAddress, address newAddress); @@ -30,10 +32,9 @@ contract EigenDAServiceManagerUnit is BLSMockAVSDeployer { _setUpBLSMockAVSDeployer(); eigenDAServiceManagerImplementation = new EigenDAServiceManager( + avsDirectory, registryCoordinator, - strategyManagerMock, - delegationMock, - slasher + stakeRegistry ); // Third, upgrade the proxy contracts to use the correct implementation contracts and initialize them. @@ -45,7 +46,9 @@ contract EigenDAServiceManagerUnit is BLSMockAVSDeployer { abi.encodeWithSelector( EigenDAServiceManager.initialize.selector, pauserRegistry, - serviceManagerOwner + 0, + registryCoordinatorOwner, + confirmer ) ) ) @@ -61,7 +64,7 @@ contract EigenDAServiceManagerUnit is BLSMockAVSDeployer { cheats.prank(confirmer, confirmer); cheats.expectEmit(true, true, true, true, address(eigenDAServiceManager)); - emit BatchConfirmed(batchHeaderHash, batchIdToConfirm, 0); + emit BatchConfirmed(batchHeaderHash, batchIdToConfirm); uint256 gasBefore = gasleft(); eigenDAServiceManager.confirmBatch( batchHeader, @@ -85,6 +88,18 @@ contract EigenDAServiceManagerUnit is BLSMockAVSDeployer { ); } + function testConfirmBatch_Revert_NotConfirmer(uint256 pseudoRandomNumber) public { + (IEigenDAServiceManager.BatchHeader memory batchHeader, BLSSignatureChecker.NonSignerStakesAndSignature memory nonSignerStakesAndSignature) + = _getHeaderandNonSigners(0, pseudoRandomNumber, 100); + + cheats.expectRevert(bytes("onlyBatchConfirmer: not from batch confirmer")); + cheats.prank(notConfirmer, notConfirmer); + eigenDAServiceManager.confirmBatch( + batchHeader, + nonSignerStakesAndSignature + ); + } + function testConfirmBatch_Revert_FutureBlocknumber(uint256 pseudoRandomNumber) public { uint256 quorumBitmap = 1; @@ -141,7 +156,7 @@ contract EigenDAServiceManagerUnit is BLSMockAVSDeployer { cheats.prank(confirmer, confirmer); cheats.expectEmit(true, true, true, true, address(eigenDAServiceManager)); - emit BatchConfirmed(batchHeaderHash, batchIdToConfirm, 0); + emit BatchConfirmed(batchHeaderHash, batchIdToConfirm); uint256 gasBefore = gasleft(); eigenDAServiceManager.confirmBatch( batchHeader, @@ -153,10 +168,6 @@ contract EigenDAServiceManagerUnit is BLSMockAVSDeployer { assertEq(eigenDAServiceManager.batchId(), batchIdToConfirm + 1); } - function testFreezeOperator_Revert() public { - cheats.expectRevert(bytes("EigenDAServiceManager.freezeOperator: not implemented")); - eigenDAServiceManager.freezeOperator(address(0)); - } function _getHeaderandNonSigners(uint256 _nonSigners, uint256 _pseudoRandomNumber, uint8 _threshold) internal returns (IEigenDAServiceManager.BatchHeader memory, BLSSignatureChecker.NonSignerStakesAndSignature memory) { diff --git a/contracts/test/MockRollup.t.sol b/contracts/test/unit/MockRollup.t.sol similarity index 88% rename from contracts/test/MockRollup.t.sol rename to contracts/test/unit/MockRollup.t.sol index 9ebc7fda10..ac6f65d77f 100644 --- a/contracts/test/MockRollup.t.sol +++ b/contracts/test/unit/MockRollup.t.sol @@ -4,12 +4,13 @@ pragma solidity ^0.8.9; import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; -import {BLSMockAVSDeployer} from "../lib/eigenlayer-middleware/test/utils/BLSMockAVSDeployer.sol"; -import {MockRollup, BN254} from "./mocks/MockRollup.sol"; -import {EigenDAHasher} from "../src/libraries/EigenDAHasher.sol"; -import {EigenDAServiceManager, IEigenDAServiceManager} from "../src/core/EigenDAServiceManager.sol"; -import {EigenDABlobUtils} from "../src/libraries/EigenDABlobUtils.sol"; -//import {BN254} from "../lib/eigenlayer-middleware/src/libraries/BN254.sol"; +import {BLSMockAVSDeployer} from "../../lib/eigenlayer-middleware/test/utils/BLSMockAVSDeployer.sol"; +import {MockRollup} from "../../src/rollup/MockRollup.sol"; +import {EigenDAHasher} from "../../src/libraries/EigenDAHasher.sol"; +import {EigenDAServiceManager} from "../../src/core/EigenDAServiceManager.sol"; +import {IEigenDAServiceManager} from "../../src/interfaces/IEigenDAServiceManager.sol"; +import {EigenDARollupUtils} from "../../src/libraries/EigenDARollupUtils.sol"; +import {BN254} from "eigenlayer-middleware/libraries/BN254.sol"; import "forge-std/StdStorage.sol"; @@ -53,10 +54,9 @@ contract MockRollupTest is BLSMockAVSDeployer { _setUpBLSMockAVSDeployer(); eigenDAServiceManagerImplementation = new EigenDAServiceManager( + avsDirectory, registryCoordinator, - strategyManagerMock, - delegationMock, - slasher + stakeRegistry ); eigenDAServiceManager = EigenDAServiceManager( @@ -67,9 +67,9 @@ contract MockRollupTest is BLSMockAVSDeployer { abi.encodeWithSelector( EigenDAServiceManager.initialize.selector, pauserRegistry, - serviceManagerOwner, - feePerBytePerTime, - serviceManagerOwner + 0, + registryCoordinatorOwner, + registryCoordinatorOwner ) ) ) @@ -92,7 +92,7 @@ contract MockRollupTest is BLSMockAVSDeployer { mockRollup.registerValidator{value: 1 ether}(); //get commitment with illegal value - (IEigenDAServiceManager.BlobHeader memory blobHeader, EigenDABlobUtils.BlobVerificationProof memory blobVerificationProof) = _getCommitment(pseudoRandomNumber); + (IEigenDAServiceManager.BlobHeader memory blobHeader, EigenDARollupUtils.BlobVerificationProof memory blobVerificationProof) = _getCommitment(pseudoRandomNumber); //post commitment vm.prank(alice); @@ -112,7 +112,7 @@ contract MockRollupTest is BLSMockAVSDeployer { illegalCommitment = s0.scalar_mul(1).plus(s1.scalar_mul(1)).plus(s2.scalar_mul(1)).plus(s3.scalar_mul(1)).plus(s4.scalar_mul(1)); } - function _getCommitment(uint256 pseudoRandomNumber) internal returns (IEigenDAServiceManager.BlobHeader memory, EigenDABlobUtils.BlobVerificationProof memory){ + function _getCommitment(uint256 pseudoRandomNumber) internal returns (IEigenDAServiceManager.BlobHeader memory, EigenDARollupUtils.BlobVerificationProof memory){ uint256 numQuorumBlobParams = 2; IEigenDAServiceManager.BlobHeader[] memory blobHeader = new IEigenDAServiceManager.BlobHeader[](2); blobHeader[0] = _generateBlobHeader(pseudoRandomNumber, numQuorumBlobParams, defaultCodingRatioPercentage); @@ -143,7 +143,7 @@ contract MockRollupTest is BLSMockAVSDeployer { .with_key(defaultBatchId) .checked_write(batchMetadata.hashBatchMetadata()); - EigenDABlobUtils.BlobVerificationProof memory blobVerificationProof; + EigenDARollupUtils.BlobVerificationProof memory blobVerificationProof; blobVerificationProof.batchId = defaultBatchId; blobVerificationProof.batchMetadata = batchMetadata; blobVerificationProof.inclusionProof = abi.encodePacked(keccak256(firstBlobHash)); @@ -181,7 +181,7 @@ contract MockRollupTest is BLSMockAVSDeployer { blobHeader.quorumBlobParams[i].adversaryThresholdPercentage = uint8(uint256(keccak256(abi.encodePacked(pseudoRandomNumber, "blobHeader.quorumBlobParams[i].adversaryThresholdPercentage", j)))) % 100; j++; } - blobHeader.quorumBlobParams[i].quantizationParameter = uint8(uint256(keccak256(abi.encodePacked(pseudoRandomNumber, "blobHeader.quorumBlobParams[i].quantizationParameter", i)))); + blobHeader.quorumBlobParams[i].chunkLength = uint32(uint256(keccak256(abi.encodePacked(pseudoRandomNumber, "blobHeader.quorumBlobParams[i].chunkLength", i)))); blobHeader.quorumBlobParams[i].quorumThresholdPercentage = blobHeader.quorumBlobParams[i].adversaryThresholdPercentage + 1; } // mark all quorum numbers as unused diff --git a/core/assignment.go b/core/assignment.go index 3b71ace2b0..e64df17c3a 100644 --- a/core/assignment.go +++ b/core/assignment.go @@ -174,7 +174,9 @@ func (c *StdAssignmentCoordinator) ValidateChunkLength(state *OperatorState, blo totalStake := state.Totals[info.QuorumID].Stake if info.ChunkLength != MinChunkLength { - + if totalStake.Cmp(big.NewInt(0)) == 0 { + return false, fmt.Errorf("total stake in quorum %d must be greater than 0", info.QuorumID) + } num := new(big.Int).Mul(big.NewInt(2*int64(blobLength*percentMultiplier)), minStake) denom := new(big.Int).Mul(big.NewInt(int64(info.QuorumThreshold-info.AdversaryThreshold)), totalStake) maxChunkLength := uint(roundUpDivideBig(num, denom).Uint64()) diff --git a/core/attestation.go b/core/attestation.go index 669a9023ec..58a0e2c586 100644 --- a/core/attestation.go +++ b/core/attestation.go @@ -6,6 +6,7 @@ import ( bn254utils "github.com/Layr-Labs/eigenda/core/bn254" "github.com/consensys/gnark-crypto/ecc/bn254" + "github.com/consensys/gnark-crypto/ecc/bn254/fp" "github.com/consensys/gnark-crypto/ecc/bn254/fr" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/math" @@ -16,6 +17,21 @@ type G1Point struct { *bn254.G1Affine } +func newFpElement(x *big.Int) fp.Element { + var p fp.Element + p.SetBigInt(x) + return p +} + +func NewG1Point(x, y *big.Int) *G1Point { + return &G1Point{ + &bn254.G1Affine{ + X: newFpElement(x), + Y: newFpElement(y), + }, + } +} + // Add another G1 point to this one func (p *G1Point) Add(p2 *G1Point) { p.G1Affine.Add(p.G1Affine, p2.G1Affine) @@ -129,6 +145,11 @@ func (k *KeyPair) SignMessage(message [32]byte) *Signature { return &Signature{&G1Point{sig}} } +func (k *KeyPair) SignHashedToCurveMessage(g1HashedMsg *G1Point) *Signature { + sig := new(bn254.G1Affine).ScalarMultiplication(g1HashedMsg.G1Affine, k.PrivKey.BigInt(new(big.Int))) + return &Signature{&G1Point{sig}} +} + func (k *KeyPair) GetPubKeyG2() *G2Point { return &G2Point{bn254utils.MulByGeneratorG2(k.PrivKey)} } @@ -141,7 +162,7 @@ func (k *KeyPair) GetPubKeyG1() *G1Point { // The values returned constitute a proof that the operator knows the secret key corresponding to the public key, and prevents the operator // from attacking the signature protocol by registering a public key that is derived from other public keys. // (e.g., see https://medium.com/@coolcottontail/rogue-key-attack-in-bls-signature-and-harmony-security-eac1ea2370ee) -func (k *KeyPair) MakePubkeyRegistrationData(operatorAddress common.Address, compendiumAddress common.Address, chainId *big.Int) *G1Point { - return &G1Point{bn254utils.MakePubkeyRegistrationData(k.PrivKey, operatorAddress, compendiumAddress, chainId)} +func (k *KeyPair) MakePubkeyRegistrationData(operatorAddress common.Address) *G1Point { + return &G1Point{bn254utils.MakePubkeyRegistrationData(k.PrivKey, operatorAddress)} } diff --git a/core/bn254/attestation.go b/core/bn254/attestation.go index 2bc875b4a6..d9f263f550 100644 --- a/core/bn254/attestation.go +++ b/core/bn254/attestation.go @@ -143,13 +143,10 @@ func DeserializeG2(b []byte) *bn254.G2Affine { return p } -func MakePubkeyRegistrationData(privKey *fr.Element, operatorAddress common.Address, compendiumAddress common.Address, chainId *big.Int) *bn254.G1Affine { +func MakePubkeyRegistrationData(privKey *fr.Element, operatorAddress common.Address) *bn254.G1Affine { toHash := make([]byte, 0) + toHash = append(toHash, crypto.Keccak256([]byte("BN254PubkeyRegistration(address operator)"))...) toHash = append(toHash, operatorAddress.Bytes()...) - toHash = append(toHash, compendiumAddress.Bytes()...) - // make sure chainId is 32 bytes - toHash = append(toHash, common.LeftPadBytes(chainId.Bytes(), 32)...) - toHash = append(toHash, []byte("EigenLayer_BN254_Pubkey_Registration")...) msgHash := crypto.Keccak256(toHash) // convert to [32]byte diff --git a/core/data.go b/core/data.go index c8847e051d..ca0e124950 100644 --- a/core/data.go +++ b/core/data.go @@ -28,6 +28,13 @@ type SecurityParam struct { QuorumRate common.RateParam `json:"quorum_rate"` } +const ( + // We use uint8 to count the number of quorums, so we can have at most 255 quorums, + // which means the max ID can not be larger than 254 (from 0 to 254, there are 255 + // different IDs). + MaxQuorumID = 254 +) + func (s *SecurityParam) String() string { return fmt.Sprintf("QuorumID: %d, AdversaryThreshold: %d, QuorumThreshold: %d", s.QuorumID, s.AdversaryThreshold, s.QuorumThreshold) } @@ -121,9 +128,10 @@ func (b *BlobHeader) EncodedSizeAllQuorums() int64 { // BlomCommitments contains the blob's commitment, degree proof, and the actual degree. type BlobCommitments struct { - Commitment *Commitment `json:"commitment"` - LengthProof *Commitment `json:"length_proof"` - Length uint `json:"length"` + Commitment *G1Commitment `json:"commitment"` + LengthCommitment *G2Commitment `json:"length_commitment"` + LengthProof *LengthProof `json:"length_proof"` + Length uint `json:"length"` } // Batch @@ -200,7 +208,7 @@ func (cb Bundles) Size() int64 { // Sample is a chunk with associated metadata used by the Universal Batch Verifier type Sample struct { - Commitment *Commitment + Commitment *G1Commitment Chunk *Chunk AssignmentIndex ChunkNumber BlobIndex int diff --git a/core/encoding.go b/core/encoding.go index faa4f4da38..79dc4d636f 100644 --- a/core/encoding.go +++ b/core/encoding.go @@ -10,9 +10,13 @@ import ( // Commitments // Commitment is a polynomial commitment (e.g. a kzg commitment) -type Commitment struct { - *bn254.G1Point -} +type G1Commitment bn254.G1Point + +// Commitment is a polynomial commitment (e.g. a kzg commitment) +type G2Commitment bn254.G2Point + +// LengthProof is a polynomial commitment on G2 (e.g. a kzg commitment) used for low degree proof +type LengthProof = G2Commitment // The proof used to open a commitment. In the case of Kzg, this is also a kzg commitment, and is different from a Commitment only semantically. type Proof = bn254.G1Point @@ -44,6 +48,9 @@ type Encoder interface { // VerifyBlobLength takes in the commitments and returns an error if the blob length is invalid. VerifyBlobLength(commitments BlobCommitments) error + // VerifyCommitEquivalence takes in a list of commitments and returns an error if the commitment of G1 and G2 are inconsistent + VerifyCommitEquivalenceBatch(commitments []BlobCommitments) error + // Decode takes in the chunks, indices, and encoding parameters and returns the decoded blob Decode(chunks []*Chunk, indices []ChunkNumber, params EncodingParams, inputSize uint64) ([]byte, error) } diff --git a/core/encoding/cli.go b/core/encoding/cli.go index a3f7260a55..3df33493fd 100644 --- a/core/encoding/cli.go +++ b/core/encoding/cli.go @@ -17,6 +17,7 @@ const ( VerboseFlagName = "kzg.verbose" PreloadEncoderFlagName = "kzg.preload-encoder" CacheEncodedBlobsFlagName = "cache-encoded-blobs" + SRSLoadingNumberFlagName = "kzg.srs-load" ) func CLIFlags(envPrefix string) []cli.Flag { @@ -45,6 +46,12 @@ func CLIFlags(envPrefix string) []cli.Flag { Required: true, EnvVar: common.PrefixEnvVar(envPrefix, "SRS_ORDER"), }, + cli.Uint64Flag{ + Name: SRSLoadingNumberFlagName, + Usage: "Number of SRS points to load into memory", + Required: true, + EnvVar: common.PrefixEnvVar(envPrefix, "SRS_LOAD"), + }, cli.Uint64Flag{ Name: NumWorkerFlagName, Usage: "Number of workers for multithreading", @@ -79,6 +86,7 @@ func ReadCLIConfig(ctx *cli.Context) EncoderConfig { cfg.G2Path = ctx.GlobalString(G2PathFlagName) cfg.CacheDir = ctx.GlobalString(CachePathFlagName) cfg.SRSOrder = ctx.GlobalUint64(SRSOrderFlagName) + cfg.SRSNumberToLoad = ctx.GlobalUint64(SRSLoadingNumberFlagName) cfg.NumWorker = ctx.GlobalUint64(NumWorkerFlagName) cfg.Verbose = ctx.GlobalBool(VerboseFlagName) cfg.PreloadEncoder = ctx.GlobalBool(PreloadEncoderFlagName) diff --git a/core/encoding/encoder.go b/core/encoding/encoder.go index c2fad7ac8a..8b2917e92b 100644 --- a/core/encoding/encoder.go +++ b/core/encoding/encoder.go @@ -6,6 +6,7 @@ import ( "github.com/Layr-Labs/eigenda/core" "github.com/Layr-Labs/eigenda/pkg/encoding/encoder" "github.com/Layr-Labs/eigenda/pkg/encoding/kzgEncoder" + "github.com/Layr-Labs/eigenda/pkg/kzg/bn254" lru "github.com/hashicorp/golang-lru/v2" ) @@ -26,8 +27,8 @@ type Encoder struct { var _ core.Encoder = &Encoder{} -func NewEncoder(config EncoderConfig) (*Encoder, error) { - kzgEncoderGroup, err := kzgEncoder.NewKzgEncoderGroup(&config.KzgConfig) +func NewEncoder(config EncoderConfig, loadG2Points bool) (*Encoder, error) { + kzgEncoderGroup, err := kzgEncoder.NewKzgEncoderGroup(&config.KzgConfig, loadG2Points) if err != nil { return nil, err } @@ -66,7 +67,7 @@ func (e *Encoder) Encode(data []byte, params core.EncodingParams) (core.BlobComm return core.BlobCommitments{}, nil, err } - commit, lowDegreeProof, kzgFrames, _, err := enc.EncodeBytes(data) + commit, lowDegreeCommit, lowDegreeProof, kzgFrames, _, err := enc.EncodeBytes(data) if err != nil { return core.BlobCommitments{}, nil, err } @@ -82,9 +83,10 @@ func (e *Encoder) Encode(data []byte, params core.EncodingParams) (core.BlobComm length := uint(len(encoder.ToFrArray(data))) commitments := core.BlobCommitments{ - Commitment: &core.Commitment{G1Point: commit}, - LengthProof: &core.Commitment{G1Point: lowDegreeProof}, - Length: length, + Commitment: (*core.G1Commitment)(commit), + LengthCommitment: (*core.G2Commitment)(lowDegreeCommit), + LengthProof: (*core.G2Commitment)(lowDegreeProof), + Length: length, } if e.Config.CacheEncodedBlobs { @@ -98,8 +100,7 @@ func (e *Encoder) Encode(data []byte, params core.EncodingParams) (core.BlobComm } func (e *Encoder) VerifyBlobLength(commitments core.BlobCommitments) error { - - return e.EncoderGroup.VerifyCommit(commitments.Commitment.G1Point, commitments.LengthProof.G1Point, uint64(commitments.Length-1)) + return e.EncoderGroup.VerifyCommit((*bn254.G2Point)(commitments.LengthCommitment), (*bn254.G2Point)(commitments.LengthProof), uint64(commitments.Length)) } @@ -114,7 +115,7 @@ func (e *Encoder) VerifyChunks(chunks []*core.Chunk, indices []core.ChunkNumber, for ind := range chunks { err = verifier.VerifyFrame( - commitments.Commitment.G1Point, + (*bn254.G1Point)(commitments.Commitment), &kzgEncoder.Frame{ Proof: chunks[ind].Proof, Coeffs: chunks[ind].Coeffs, @@ -131,6 +132,18 @@ func (e *Encoder) VerifyChunks(chunks []*core.Chunk, indices []core.ChunkNumber, } +func (e *Encoder) VerifyCommitEquivalenceBatch(commitments []core.BlobCommitments) error { + commitmentsPair := make([]kzgEncoder.CommitmentPair, len(commitments)) + + for i, c := range commitments { + commitmentsPair[i] = kzgEncoder.CommitmentPair{ + Commitment: (bn254.G1Point)(*c.Commitment), + LengthCommitment: (bn254.G2Point)(*c.LengthCommitment), + } + } + return e.EncoderGroup.BatchVerifyCommitEquivalence(commitmentsPair) +} + // convert struct understandable by the crypto library func (e *Encoder) UniversalVerifySubBatch(params core.EncodingParams, samplesCore []core.Sample, numBlobs int) error { encParams := toEncParams(params) @@ -146,7 +159,7 @@ func (e *Encoder) UniversalVerifySubBatch(params core.EncodingParams, samplesCor } sample := kzgEncoder.Sample{ - Commitment: *sc.Commitment.G1Point, + Commitment: (bn254.G1Point)(*sc.Commitment), Proof: sc.Chunk.Proof, RowIndex: sc.BlobIndex, Coeffs: sc.Chunk.Coeffs, diff --git a/core/encoding/encoder_test.go b/core/encoding/encoder_test.go index 75017e8536..ee4d7cb4bb 100644 --- a/core/encoding/encoder_test.go +++ b/core/encoding/encoder_test.go @@ -29,14 +29,15 @@ func init() { // makeTestEncoder makes an encoder currently using the only supported backend. func makeTestEncoder() (core.Encoder, error) { config := kzgEncoder.KzgConfig{ - G1Path: "../../inabox/resources/kzg/g1.point.300000", - G2Path: "../../inabox/resources/kzg/g2.point.300000", - CacheDir: "../../inabox/resources/kzg/SRSTables", - SRSOrder: 300000, - NumWorker: uint64(runtime.GOMAXPROCS(0)), + G1Path: "../../inabox/resources/kzg/g1.point.300000", + G2Path: "../../inabox/resources/kzg/g2.point.300000", + CacheDir: "../../inabox/resources/kzg/SRSTables", + SRSOrder: 300000, + SRSNumberToLoad: 300000, + NumWorker: uint64(runtime.GOMAXPROCS(0)), } - return encoding.NewEncoder(encoding.EncoderConfig{KzgConfig: config}) + return encoding.NewEncoder(encoding.EncoderConfig{KzgConfig: config}, true) } func TestEncoder(t *testing.T) { diff --git a/core/encoding/mock_encoder.go b/core/encoding/mock_encoder.go index 77273b4fd4..172ac8c8b5 100644 --- a/core/encoding/mock_encoder.go +++ b/core/encoding/mock_encoder.go @@ -32,6 +32,11 @@ func (e *MockEncoder) UniversalVerifySubBatch(params core.EncodingParams, sample time.Sleep(e.Delay) return args.Error(0) } +func (e *MockEncoder) VerifyCommitEquivalenceBatch(commitments []core.BlobCommitments) error { + args := e.Called(commitments) + time.Sleep(e.Delay) + return args.Error(0) +} func (e *MockEncoder) VerifyBlobLength(commitments core.BlobCommitments) error { diff --git a/core/eth/tx.go b/core/eth/tx.go index 693461c8e2..d1367527ca 100644 --- a/core/eth/tx.go +++ b/core/eth/tx.go @@ -2,6 +2,7 @@ package eth import ( "context" + "crypto/ecdsa" "encoding/json" "math/big" "slices" @@ -10,12 +11,13 @@ import ( "github.com/Layr-Labs/eigenda/common" "github.com/Layr-Labs/eigenda/core" - opstateretriever "github.com/Layr-Labs/eigenda/contracts/bindings/BLSOperatorStateRetriever" - blspubkeyreg "github.com/Layr-Labs/eigenda/contracts/bindings/BLSPubkeyRegistry" - blspubkeycompendium "github.com/Layr-Labs/eigenda/contracts/bindings/BLSPublicKeyCompendium" - regcoordinator "github.com/Layr-Labs/eigenda/contracts/bindings/BLSRegistryCoordinatorWithIndices" + avsdir "github.com/Layr-Labs/eigenda/contracts/bindings/AVSDirectory" + blsapkreg "github.com/Layr-Labs/eigenda/contracts/bindings/BLSApkRegistry" + delegationmgr "github.com/Layr-Labs/eigenda/contracts/bindings/DelegationManager" eigendasrvmg "github.com/Layr-Labs/eigenda/contracts/bindings/EigenDAServiceManager" indexreg "github.com/Layr-Labs/eigenda/contracts/bindings/IIndexRegistry" + opstateretriever "github.com/Layr-Labs/eigenda/contracts/bindings/OperatorStateRetriever" + regcoordinator "github.com/Layr-Labs/eigenda/contracts/bindings/RegistryCoordinator" stakereg "github.com/Layr-Labs/eigenda/contracts/bindings/StakeRegistry" "github.com/ethereum/go-ethereum/accounts/abi/bind" @@ -37,14 +39,16 @@ type Transactor struct { var _ core.Transactor = (*Transactor)(nil) type ContractBindings struct { - RegCoordinatorAddr gethcommon.Address - BLSOpStateRetriever *opstateretriever.ContractBLSOperatorStateRetriever - BLSPubkeyRegistry *blspubkeyreg.ContractBLSPubkeyRegistry - IndexRegistry *indexreg.ContractIIndexRegistry - BLSRegCoordWithIndices *regcoordinator.ContractBLSRegistryCoordinatorWithIndices - StakeRegistry *stakereg.ContractStakeRegistry - EigenDAServiceManager *eigendasrvmg.ContractEigenDAServiceManager - PubkeyCompendium *blspubkeycompendium.ContractBLSPublicKeyCompendium + RegCoordinatorAddr gethcommon.Address + ServiceManagerAddr gethcommon.Address + DelegationManager *delegationmgr.ContractDelegationManager + OpStateRetriever *opstateretriever.ContractOperatorStateRetriever + BLSApkRegistry *blsapkreg.ContractBLSApkRegistry + IndexRegistry *indexreg.ContractIIndexRegistry + RegistryCoordinator *regcoordinator.ContractRegistryCoordinator + StakeRegistry *stakereg.ContractStakeRegistry + EigenDAServiceManager *eigendasrvmg.ContractEigenDAServiceManager + AVSDirectory *avsdir.ContractAVSDirectory } type BN254G1Point struct { @@ -75,85 +79,12 @@ func NewTransactor( return e, err } -func (t *Transactor) RegisterBLSPublicKey(ctx context.Context, keypair *core.KeyPair) error { - // first register the public key with the compendium - - operatorAddress := t.EthClient.GetAccountAddress() - - pkh, err := t.Bindings.PubkeyCompendium.OperatorToPubkeyHash(&bind.CallOpts{ - Context: ctx, - }, operatorAddress) - if err != nil { - t.Logger.Error("Failed to retrieve bls pubkey registered status from chain") - return err - } - - // if no pubkey registered already, then register - if pkh == [32]byte{} { - t.Logger.Info("Registering BLS public key with compendium") - - chainId, err := t.EthClient.ChainID(context.Background()) - if err != nil { - t.Logger.Error("Failed to retrieve chain id") - return err - } - - compendiumAddress, err := t.Bindings.BLSPubkeyRegistry.PubkeyCompendium(&bind.CallOpts{ - Context: ctx, - }) - if err != nil { - t.Logger.Errorf("Failed to retrieve compendium address", "error", err) - return err - } - - signedMessageHash := keypair.MakePubkeyRegistrationData(operatorAddress, compendiumAddress, chainId) - - signedMessageHashParam_ := pubKeyG1ToBN254G1Point(signedMessageHash) - signedMessageHashParam := blspubkeycompendium.BN254G1Point{ - X: signedMessageHashParam_.X, - Y: signedMessageHashParam_.Y, - } - pubkeyG1Param_ := pubKeyG1ToBN254G1Point(keypair.GetPubKeyG1()) - pubkeyG1Param := blspubkeycompendium.BN254G1Point{ - X: pubkeyG1Param_.X, - Y: pubkeyG1Param_.Y, - } - pubkeyG2Param_ := pubKeyG2ToBN254G2Point(keypair.GetPubKeyG2()) - pubkeyG2Param := blspubkeycompendium.BN254G2Point{ - X: pubkeyG2Param_.X, - Y: pubkeyG2Param_.Y, - } - - // assemble tx - opts, err := t.EthClient.GetNoSendTransactOpts() - if err != nil { - t.Logger.Error("Failed to generate transact opts", "err", err) - return err - } - tx, err := t.Bindings.PubkeyCompendium.RegisterBLSPublicKey(opts, signedMessageHashParam, pubkeyG1Param, pubkeyG2Param) - if err != nil { - t.Logger.Error("Error assembling RegisterBLSPublicKey tx") - return err - } - // estimate gas and send tx - - _, err = t.EthClient.EstimateGasPriceAndLimitAndSendTx(context.Background(), tx, "RegisterBLSPubkey", nil) - if err != nil { - t.Logger.Error("Failed to estimate gas price and limit", "err", err) - return err - } - - } - - return nil -} - // GetRegisteredQuorumIdsForOperator returns the quorum ids that the operator is registered in with the given public key. func (t *Transactor) GetRegisteredQuorumIdsForOperator(ctx context.Context, operator core.OperatorID) ([]core.QuorumID, error) { // TODO: Properly handle the case where the operator is not registered in any quorum. The current behavior of the smart contracts is to revert instead of returning an empty bitmap. // We should probably change this. emptyBitmapErr := "execution reverted: BLSRegistryCoordinator.getCurrentQuorumBitmapByOperatorId: no quorum bitmap history for operatorId" - quorumBitmap, err := t.Bindings.BLSRegCoordWithIndices.GetCurrentQuorumBitmapByOperatorId(&bind.CallOpts{ + quorumBitmap, err := t.Bindings.RegistryCoordinator.GetCurrentQuorumBitmap(&bind.CallOpts{ Context: ctx, }, operator) if err != nil { @@ -170,22 +101,101 @@ func (t *Transactor) GetRegisteredQuorumIdsForOperator(ctx context.Context, oper return quorumIds, nil } +func (t *Transactor) getRegistrationParams( + ctx context.Context, + keypair *core.KeyPair, + operatorEcdsaPrivateKey *ecdsa.PrivateKey, + operatorToAvsRegistrationSigSalt [32]byte, + operatorToAvsRegistrationSigExpiry *big.Int, +) (*regcoordinator.IBLSApkRegistryPubkeyRegistrationParams, *regcoordinator.ISignatureUtilsSignatureWithSaltAndExpiry, error) { + + operatorAddress := t.EthClient.GetAccountAddress() + + msgToSignG1_, err := t.Bindings.RegistryCoordinator.PubkeyRegistrationMessageHash(&bind.CallOpts{ + Context: ctx, + }, operatorAddress) + if err != nil { + return nil, nil, err + } + + msgToSignG1 := core.NewG1Point(msgToSignG1_.X, msgToSignG1_.Y) + signature := keypair.SignHashedToCurveMessage(msgToSignG1) + + signedMessageHashParam := regcoordinator.BN254G1Point{ + X: signature.X.BigInt(big.NewInt(0)), + Y: signature.Y.BigInt(big.NewInt(0)), + } + + g1Point_ := pubKeyG1ToBN254G1Point(keypair.GetPubKeyG1()) + g1Point := regcoordinator.BN254G1Point{ + X: g1Point_.X, + Y: g1Point_.Y, + } + g2Point_ := pubKeyG2ToBN254G2Point(keypair.GetPubKeyG2()) + g2Point := regcoordinator.BN254G2Point{ + X: g2Point_.X, + Y: g2Point_.Y, + } + + params := regcoordinator.IBLSApkRegistryPubkeyRegistrationParams{ + PubkeyRegistrationSignature: signedMessageHashParam, + PubkeyG1: g1Point, + PubkeyG2: g2Point, + } + + // params to register operator in delegation manager's operator-avs mapping + msgToSign, err := t.Bindings.AVSDirectory.CalculateOperatorAVSRegistrationDigestHash( + &bind.CallOpts{ + Context: ctx, + }, operatorAddress, t.Bindings.ServiceManagerAddr, operatorToAvsRegistrationSigSalt, operatorToAvsRegistrationSigExpiry) + if err != nil { + return nil, nil, err + } + operatorSignature, err := crypto.Sign(msgToSign[:], operatorEcdsaPrivateKey) + if err != nil { + return nil, nil, err + } + // this is annoying, and not sure why its needed, but seems like some historical baggage + // see https://github.com/ethereum/go-ethereum/issues/28757#issuecomment-1874525854 + // and https://twitter.com/pcaversaccio/status/1671488928262529031 + operatorSignature[64] += 27 + operatorSignatureWithSaltAndExpiry := regcoordinator.ISignatureUtilsSignatureWithSaltAndExpiry{ + Signature: operatorSignature, + Salt: operatorToAvsRegistrationSigSalt, + Expiry: operatorToAvsRegistrationSigExpiry, + } + + return ¶ms, &operatorSignatureWithSaltAndExpiry, nil + +} + // RegisterOperator registers a new operator with the given public key and socket with the provided quorum ids. // If the operator is already registered with a given quorum id, the transaction will fail (noop) and an error // will be returned. -func (t *Transactor) RegisterOperator(ctx context.Context, pubkeyG1 *core.G1Point, socket string, quorumIds []core.QuorumID) error { - pubkey := pubKeyG1ToBN254G1Point(pubkeyG1) - g1Point := regcoordinator.BN254G1Point{ - X: pubkey.X, - Y: pubkey.Y, +func (t *Transactor) RegisterOperator( + ctx context.Context, + keypair *core.KeyPair, + socket string, + quorumIds []core.QuorumID, + operatorEcdsaPrivateKey *ecdsa.PrivateKey, + operatorToAvsRegistrationSigSalt [32]byte, + operatorToAvsRegistrationSigExpiry *big.Int, +) error { + + params, operatorSignature, err := t.getRegistrationParams(ctx, keypair, operatorEcdsaPrivateKey, operatorToAvsRegistrationSigSalt, operatorToAvsRegistrationSigExpiry) + if err != nil { + t.Logger.Error("Failed to get registration params", "err", err) + return err } + quorumNumbers := quorumIDsToQuorumNumbers(quorumIds) opts, err := t.EthClient.GetNoSendTransactOpts() if err != nil { t.Logger.Error("Failed to generate transact opts", "err", err) return err } - tx, err := t.Bindings.BLSRegCoordWithIndices.RegisterOperatorWithCoordinator1(opts, quorumNumbers, g1Point, socket) + + tx, err := t.Bindings.RegistryCoordinator.RegisterOperator(opts, quorumNumbers, socket, *params, *operatorSignature) if err != nil { t.Logger.Error("Failed to register operator", "err", err) @@ -202,31 +212,36 @@ func (t *Transactor) RegisterOperator(ctx context.Context, pubkeyG1 *core.G1Poin // RegisterOperatorWithChurn registers a new operator with the given public key and socket with the provided quorum ids // with the provided signature from the churner -func (t *Transactor) RegisterOperatorWithChurn(ctx context.Context, pubkeyG1 *core.G1Point, socket string, quorumIds []core.QuorumID, churnReply *churner.ChurnReply) error { - pubkeyTmp := pubKeyG1ToBN254G1Point(pubkeyG1) - operatorToRegisterPubkey := regcoordinator.BN254G1Point{ - X: pubkeyTmp.X, - Y: pubkeyTmp.Y, +func (t *Transactor) RegisterOperatorWithChurn( + ctx context.Context, + keypair *core.KeyPair, + socket string, + quorumIds []core.QuorumID, + operatorEcdsaPrivateKey *ecdsa.PrivateKey, + operatorToAvsRegistrationSigSalt [32]byte, + operatorToAvsRegistrationSigExpiry *big.Int, + churnReply *churner.ChurnReply, +) error { + + params, operatorSignature, err := t.getRegistrationParams(ctx, keypair, operatorEcdsaPrivateKey, operatorToAvsRegistrationSigSalt, operatorToAvsRegistrationSigExpiry) + if err != nil { + t.Logger.Error("Failed to get registration params", "err", err) + return err } + quorumNumbers := quorumIDsToQuorumNumbers(quorumIds) - operatorsToChurn := make([]regcoordinator.IBLSRegistryCoordinatorWithIndicesOperatorKickParam, len(churnReply.OperatorsToChurn)) + operatorsToChurn := make([]regcoordinator.IRegistryCoordinatorOperatorKickParam, len(churnReply.OperatorsToChurn)) for i := range churnReply.OperatorsToChurn { - operatorToChurnPubkeyTmp := pubKeyG1ToBN254G1Point(new(core.G1Point).Deserialize(churnReply.OperatorsToChurn[i].Pubkey)) - operatorToChurnPubkey := regcoordinator.BN254G1Point{ - X: operatorToChurnPubkeyTmp.X, - Y: operatorToChurnPubkeyTmp.Y, - } - operatorsToChurn[i] = regcoordinator.IBLSRegistryCoordinatorWithIndicesOperatorKickParam{ + operatorsToChurn[i] = regcoordinator.IRegistryCoordinatorOperatorKickParam{ QuorumNumber: uint8(churnReply.OperatorsToChurn[i].QuorumId), Operator: gethcommon.BytesToAddress(churnReply.OperatorsToChurn[i].Operator), - Pubkey: operatorToChurnPubkey, } } var salt [32]byte copy(salt[:], churnReply.SignatureWithSaltAndExpiry.Salt[:]) - signatureWithSaltAndExpiry := regcoordinator.ISignatureUtilsSignatureWithSaltAndExpiry{ + churnApproverSignature := regcoordinator.ISignatureUtilsSignatureWithSaltAndExpiry{ Signature: churnReply.SignatureWithSaltAndExpiry.Signature, Salt: salt, Expiry: new(big.Int).SetInt64(churnReply.SignatureWithSaltAndExpiry.Expiry), @@ -237,13 +252,15 @@ func (t *Transactor) RegisterOperatorWithChurn(ctx context.Context, pubkeyG1 *co t.Logger.Error("Failed to generate transact opts", "err", err) return err } - tx, err := t.Bindings.BLSRegCoordWithIndices.RegisterOperatorWithCoordinator( + + tx, err := t.Bindings.RegistryCoordinator.RegisterOperatorWithChurn( opts, quorumNumbers, - operatorToRegisterPubkey, socket, + *params, operatorsToChurn, - signatureWithSaltAndExpiry, + churnApproverSignature, + *operatorSignature, ) if err != nil { @@ -264,7 +281,7 @@ func (t *Transactor) RegisterOperatorWithChurn(ctx context.Context, pubkeyG1 *co // with the current block number. func (t *Transactor) DeregisterOperator(ctx context.Context, pubkeyG1 *core.G1Point, blockNumber uint32) error { operatorId := HashPubKeyG1(pubkeyG1) - quorumBitmap, opStates, err := t.Bindings.BLSOpStateRetriever.GetOperatorState0(&bind.CallOpts{ + quorumBitmap, opStates, err := t.Bindings.OpStateRetriever.GetOperatorState0(&bind.CallOpts{ Context: ctx, }, t.Bindings.RegCoordinatorAddr, operatorId, blockNumber) if err != nil { @@ -280,21 +297,14 @@ func (t *Transactor) DeregisterOperator(ctx context.Context, pubkeyG1 *core.G1Po quorumNumbers := bitmapToBytesArray(quorumBitmap) - pubkey := pubKeyG1ToBN254G1Point(pubkeyG1) - g1Point := regcoordinator.BN254G1Point{ - X: pubkey.X, - Y: pubkey.Y, - } - opts, err := t.EthClient.GetNoSendTransactOpts() if err != nil { t.Logger.Error("Failed to generate transact opts", "err", err) return err } - tx, err := t.Bindings.BLSRegCoordWithIndices.DeregisterOperatorWithCoordinator( + tx, err := t.Bindings.RegistryCoordinator.DeregisterOperator( opts, quorumNumbers, - g1Point, ) if err != nil { t.Logger.Error("Failed to deregister operator", "err", err) @@ -316,7 +326,7 @@ func (t *Transactor) UpdateOperatorSocket(ctx context.Context, socket string) er t.Logger.Error("Failed to generate transact opts", "err", err) return err } - tx, err := t.Bindings.BLSRegCoordWithIndices.UpdateSocket(opts, socket) + tx, err := t.Bindings.RegistryCoordinator.UpdateSocket(opts, socket) if err != nil { t.Logger.Error("Failed to update operator socket", "err", err) return err @@ -334,7 +344,7 @@ func (t *Transactor) UpdateOperatorSocket(ctx context.Context, socket string) er // is registered with. The returned stakes are for the block number supplied. The indices of the operators within each quorum // are also returned. func (t *Transactor) GetOperatorStakes(ctx context.Context, operator core.OperatorID, blockNumber uint32) (core.OperatorStakes, []core.QuorumID, error) { - quorumBitmap, state_, err := t.Bindings.BLSOpStateRetriever.GetOperatorState0(&bind.CallOpts{ + quorumBitmap, state_, err := t.Bindings.OpStateRetriever.GetOperatorState0(&bind.CallOpts{ Context: ctx, }, t.Bindings.RegCoordinatorAddr, operator, blockNumber) if err != nil { @@ -391,7 +401,7 @@ func (t *Transactor) GetOperatorStakesForQuorums(ctx context.Context, quorums [] } // state_ is a [][]*opstateretriever.OperatorStake with the same length and order as quorumBytes, and then indexed by operator index - state_, err := t.Bindings.BLSOpStateRetriever.GetOperatorState(&bind.CallOpts{ + state_, err := t.Bindings.OpStateRetriever.GetOperatorState(&bind.CallOpts{ Context: ctx, }, t.Bindings.RegCoordinatorAddr, quorumBytes, blockNumber) if err != nil { @@ -434,7 +444,7 @@ func (t *Transactor) BuildConfirmBatchTxn(ctx context.Context, batchHeader *core for _, ns := range nonSignerOperatorIds { t.Logger.Trace("[GetCheckSignaturesIndices]", "nonSignerOperatorId", gethcommon.Bytes2Hex(ns[:])) } - checkSignaturesIndices, err := t.Bindings.BLSOpStateRetriever.GetCheckSignaturesIndices( + checkSignaturesIndices, err := t.Bindings.OpStateRetriever.GetCheckSignaturesIndices( &bind.CallOpts{ Context: ctx, }, @@ -514,26 +524,26 @@ func (t *Transactor) ConfirmBatch(ctx context.Context, batchHeader *core.BatchHe } func (t *Transactor) StakeRegistry(ctx context.Context) (gethcommon.Address, error) { - return t.Bindings.BLSRegCoordWithIndices.StakeRegistry(&bind.CallOpts{ + return t.Bindings.RegistryCoordinator.StakeRegistry(&bind.CallOpts{ Context: ctx, }) } func (t *Transactor) OperatorIDToAddress(ctx context.Context, operatorId core.OperatorID) (gethcommon.Address, error) { - return t.Bindings.PubkeyCompendium.PubkeyHashToOperator(&bind.CallOpts{ + return t.Bindings.BLSApkRegistry.PubkeyHashToOperator(&bind.CallOpts{ Context: ctx, }, operatorId) } func (t *Transactor) GetCurrentQuorumBitmapByOperatorId(ctx context.Context, operatorId core.OperatorID) (*big.Int, error) { - return t.Bindings.BLSRegCoordWithIndices.GetCurrentQuorumBitmapByOperatorId(&bind.CallOpts{ + return t.Bindings.RegistryCoordinator.GetCurrentQuorumBitmap(&bind.CallOpts{ Context: ctx, }, operatorId) } func (t *Transactor) GetOperatorSetParams(ctx context.Context, quorumID core.QuorumID) (*core.OperatorSetParam, error) { - operatorSetParams, err := t.Bindings.BLSRegCoordWithIndices.GetOperatorSetParams(&bind.CallOpts{ + operatorSetParams, err := t.Bindings.RegistryCoordinator.GetOperatorSetParams(&bind.CallOpts{ Context: ctx, }, quorumID) if err != nil { @@ -563,78 +573,101 @@ func (t *Transactor) WeightOfOperatorForQuorum(ctx context.Context, quorumID cor func (t *Transactor) CalculateOperatorChurnApprovalDigestHash( ctx context.Context, + operatorAddress gethcommon.Address, operatorId core.OperatorID, operatorsToChurn []core.OperatorToChurn, salt [32]byte, expiry *big.Int, ) ([32]byte, error) { - opKickParams := make([]regcoordinator.IBLSRegistryCoordinatorWithIndicesOperatorKickParam, len(operatorsToChurn)) + opKickParams := make([]regcoordinator.IRegistryCoordinatorOperatorKickParam, len(operatorsToChurn)) for i := range operatorsToChurn { - pubkey := operatorsToChurn[i].Pubkey - opKickParams[i] = regcoordinator.IBLSRegistryCoordinatorWithIndicesOperatorKickParam{ + opKickParams[i] = regcoordinator.IRegistryCoordinatorOperatorKickParam{ QuorumNumber: operatorsToChurn[i].QuorumId, Operator: operatorsToChurn[i].Operator, - Pubkey: regcoordinator.BN254G1Point{ - X: pubkey.X.BigInt(new(big.Int)), - Y: pubkey.Y.BigInt(new(big.Int)), - }, } } - return t.Bindings.BLSRegCoordWithIndices.CalculateOperatorChurnApprovalDigestHash(&bind.CallOpts{ + return t.Bindings.RegistryCoordinator.CalculateOperatorChurnApprovalDigestHash(&bind.CallOpts{ Context: ctx, - }, operatorId, opKickParams, salt, expiry) + }, operatorAddress, operatorId, opKickParams, salt, expiry) } func (t *Transactor) GetCurrentBlockNumber(ctx context.Context) (uint32, error) { return t.EthClient.GetCurrentBlockNumber(ctx) } -func (t *Transactor) GetQuorumCount(ctx context.Context, blockNumber uint32) (uint16, error) { - return t.Bindings.StakeRegistry.QuorumCount(&bind.CallOpts{ +func (t *Transactor) GetQuorumCount(ctx context.Context, blockNumber uint32) (uint8, error) { + return t.Bindings.RegistryCoordinator.QuorumCount(&bind.CallOpts{ Context: ctx, BlockNumber: big.NewInt(int64(blockNumber)), }) } func (t *Transactor) updateContractBindings(blsOperatorStateRetrieverAddr, eigenDAServiceManagerAddr gethcommon.Address) error { + contractEigenDAServiceManager, err := eigendasrvmg.NewContractEigenDAServiceManager(eigenDAServiceManagerAddr, t.EthClient) if err != nil { t.Logger.Error("Failed to fetch IEigenDAServiceManager contract", "err", err) return err } + delegationManagerAddr, err := contractEigenDAServiceManager.Delegation(&bind.CallOpts{}) + if err != nil { + t.Logger.Error("Failed to fetch DelegationManager address", "err", err) + return err + } + + avsDirectoryAddr, err := contractEigenDAServiceManager.AvsDirectory(&bind.CallOpts{}) + if err != nil { + t.Logger.Error("Failed to fetch AVSDirectory address", "err", err) + return err + } + + contractAVSDirectory, err := avsdir.NewContractAVSDirectory(avsDirectoryAddr, t.EthClient) + if err != nil { + t.Logger.Error("Failed to fetch AVSDirectory contract", "err", err) + return err + } + + contractDelegationManager, err := delegationmgr.NewContractDelegationManager(delegationManagerAddr, t.EthClient) + if err != nil { + t.Logger.Error("Failed to fetch DelegationManager contract", "err", err) + return err + } + registryCoordinatorAddr, err := contractEigenDAServiceManager.RegistryCoordinator(&bind.CallOpts{}) if err != nil { t.Logger.Error("Failed to fetch RegistryCoordinator address", "err", err) return err } - contractIBLSRegCoordWithIndices, err := regcoordinator.NewContractBLSRegistryCoordinatorWithIndices(registryCoordinatorAddr, t.EthClient) + contractIRegistryCoordinator, err := regcoordinator.NewContractRegistryCoordinator(registryCoordinatorAddr, t.EthClient) if err != nil { t.Logger.Error("Failed to fetch IBLSRegistryCoordinatorWithIndices contract", "err", err) return err } - contractBLSOpStateRetr, err := opstateretriever.NewContractBLSOperatorStateRetriever(blsOperatorStateRetrieverAddr, t.EthClient) + contractBLSOpStateRetr, err := opstateretriever.NewContractOperatorStateRetriever(blsOperatorStateRetrieverAddr, t.EthClient) if err != nil { t.Logger.Error("Failed to fetch BLSOperatorStateRetriever contract", "err", err) return err } - blsPubkeyRegistryAddr, err := contractIBLSRegCoordWithIndices.BlsPubkeyRegistry(&bind.CallOpts{}) + blsPubkeyRegistryAddr, err := contractIRegistryCoordinator.BlsApkRegistry(&bind.CallOpts{}) if err != nil { t.Logger.Error("Failed to fetch BlsPubkeyRegistry address", "err", err) return err } - contractBLSPubkeyReg, err := blspubkeyreg.NewContractBLSPubkeyRegistry(blsPubkeyRegistryAddr, t.EthClient) + t.Logger.Debug("Addresses", "blsOperatorStateRetrieverAddr", blsOperatorStateRetrieverAddr.Hex(), "eigenDAServiceManagerAddr", eigenDAServiceManagerAddr.Hex(), "registryCoordinatorAddr", registryCoordinatorAddr.Hex(), "blsPubkeyRegistryAddr", blsPubkeyRegistryAddr.Hex()) + + contractBLSPubkeyReg, err := blsapkreg.NewContractBLSApkRegistry(blsPubkeyRegistryAddr, t.EthClient) if err != nil { - t.Logger.Error("Failed to fetch IBLSPubkeyRegistry contract", "err", err) + t.Logger.Error("Failed to fetch IBLSApkRegistry contract", "err", err) return err } - indexRegistryAddr, err := contractIBLSRegCoordWithIndices.IndexRegistry(&bind.CallOpts{}) + indexRegistryAddr, err := contractIRegistryCoordinator.IndexRegistry(&bind.CallOpts{}) if err != nil { t.Logger.Error("Failed to fetch IndexRegistry address", "err", err) return err @@ -646,7 +679,7 @@ func (t *Transactor) updateContractBindings(blsOperatorStateRetrieverAddr, eigen return err } - stakeRegistryAddr, err := contractIBLSRegCoordWithIndices.StakeRegistry(&bind.CallOpts{}) + stakeRegistryAddr, err := contractIRegistryCoordinator.StakeRegistry(&bind.CallOpts{}) if err != nil { t.Logger.Error("Failed to fetch StakeRegistry address", "err", err) return err @@ -658,27 +691,17 @@ func (t *Transactor) updateContractBindings(blsOperatorStateRetrieverAddr, eigen return err } - pubkeyCompendiumAddr, err := contractBLSPubkeyReg.PubkeyCompendium(&bind.CallOpts{}) - if err != nil { - t.Logger.Error("Failed to fetch PubkeyCompendium address", "err", err) - return err - } - - contractPubkeyCompendium, err := blspubkeycompendium.NewContractBLSPublicKeyCompendium(pubkeyCompendiumAddr, t.EthClient) - if err != nil { - t.Logger.Error("Failed to fetch IBLSPublicKeyCompendium contract", "err", err) - return err - } - t.Bindings = &ContractBindings{ - RegCoordinatorAddr: registryCoordinatorAddr, - BLSOpStateRetriever: contractBLSOpStateRetr, - BLSPubkeyRegistry: contractBLSPubkeyReg, - IndexRegistry: contractIIndexReg, - BLSRegCoordWithIndices: contractIBLSRegCoordWithIndices, - StakeRegistry: contractStakeRegistry, - EigenDAServiceManager: contractEigenDAServiceManager, - PubkeyCompendium: contractPubkeyCompendium, + ServiceManagerAddr: eigenDAServiceManagerAddr, + RegCoordinatorAddr: registryCoordinatorAddr, + AVSDirectory: contractAVSDirectory, + OpStateRetriever: contractBLSOpStateRetr, + BLSApkRegistry: contractBLSPubkeyReg, + IndexRegistry: contractIIndexReg, + RegistryCoordinator: contractIRegistryCoordinator, + StakeRegistry: contractStakeRegistry, + EigenDAServiceManager: contractEigenDAServiceManager, + DelegationManager: contractDelegationManager, } return nil } diff --git a/core/indexer/operator_pubkeys_filterer.go b/core/indexer/operator_pubkeys_filterer.go index 8099919667..b97502d08d 100644 --- a/core/indexer/operator_pubkeys_filterer.go +++ b/core/indexer/operator_pubkeys_filterer.go @@ -6,8 +6,7 @@ import ( "sort" "github.com/Layr-Labs/eigenda/common" - blspubkeyreg "github.com/Layr-Labs/eigenda/contracts/bindings/BLSPubkeyRegistry" - blspubkeycompendium "github.com/Layr-Labs/eigenda/contracts/bindings/BLSPublicKeyCompendium" + blsapkreg "github.com/Layr-Labs/eigenda/contracts/bindings/BLSApkRegistry" eigendasrvmg "github.com/Layr-Labs/eigenda/contracts/bindings/EigenDAServiceManager" "github.com/Layr-Labs/eigenda/indexer" @@ -18,8 +17,8 @@ import ( ) type PubKeyAddedEvent struct { - AddedEvent *blspubkeyreg.ContractBLSPubkeyRegistryOperatorAddedToQuorums - RegEvent *blspubkeycompendium.ContractBLSPublicKeyCompendiumNewPubkeyRegistration + AddedEvent *blsapkreg.ContractBLSApkRegistryOperatorAddedToQuorums + RegEvent *blsapkreg.ContractBLSApkRegistryNewPubkeyRegistration } type operatorPubKeysEvent struct { @@ -32,7 +31,7 @@ type operatorPubKeysEvent struct { } type operatorPubKeysEventFilterer struct { - f *blspubkeyreg.ContractBLSPubkeyRegistryFilterer + f *blsapkreg.ContractBLSApkRegistryFilterer cf *pubkeyRegistrationEventFilterer } @@ -41,7 +40,7 @@ func newOperatorPubKeysEventFilterer( filterer bind.ContractFilterer, regFilterer *pubkeyRegistrationEventFilterer, ) (*operatorPubKeysEventFilterer, error) { - f, err := blspubkeyreg.NewContractBLSPubkeyRegistryFilterer(addr, filterer) + f, err := blsapkreg.NewContractBLSApkRegistryFilterer(addr, filterer) if err != nil { return nil, err } @@ -83,7 +82,7 @@ func (f operatorPubKeysEventFilterer) filterPubKeyAddedToQuorums( } events, err := f.filterEvents(headers, it, func(it any) operatorPubKeysEvent { - event := it.(*blspubkeyreg.ContractBLSPubkeyRegistryOperatorAddedToQuorumsIterator).Event + event := it.(*blsapkreg.ContractBLSApkRegistryOperatorAddedToQuorumsIterator).Event return operatorPubKeysEvent{ BlockHash: event.Raw.BlockHash, BlockNumber: event.Raw.BlockNumber, @@ -115,7 +114,7 @@ func (f operatorPubKeysEventFilterer) filterPubKeyRemovedFromQuorums( return nil, err } return f.filterEvents(headers, it, func(it any) operatorPubKeysEvent { - event := it.(*blspubkeyreg.ContractBLSPubkeyRegistryOperatorRemovedFromQuorumsIterator).Event + event := it.(*blsapkreg.ContractBLSApkRegistryOperatorRemovedFromQuorumsIterator).Event return operatorPubKeysEvent{ BlockHash: event.Raw.BlockHash, BlockNumber: event.Raw.BlockNumber, @@ -157,7 +156,7 @@ func (f operatorPubKeysEventFilterer) filterEvents( type pubkeyRegistrationEventFilterer struct { addr gethcommon.Address - f *blspubkeycompendium.ContractBLSPublicKeyCompendiumFilterer + f *blsapkreg.ContractBLSApkRegistryFilterer filterer bind.ContractFilterer } @@ -165,7 +164,7 @@ func newPubkeyRegistrationEventFilterer( addr gethcommon.Address, filterer bind.ContractFilterer, ) (*pubkeyRegistrationEventFilterer, error) { - f, err := blspubkeycompendium.NewContractBLSPublicKeyCompendiumFilterer(addr, filterer) + f, err := blsapkreg.NewContractBLSApkRegistryFilterer(addr, filterer) if err != nil { return nil, err } @@ -215,7 +214,7 @@ func (f pubkeyRegistrationEventFilterer) addPubkeyRegistration(events []operator return nil, errors.New("no pubkey registration events found") } - eventMap := make(map[gethcommon.Address]*blspubkeycompendium.ContractBLSPublicKeyCompendiumNewPubkeyRegistration, len(vLogs)) + eventMap := make(map[gethcommon.Address]*blsapkreg.ContractBLSApkRegistryNewPubkeyRegistration, len(vLogs)) for _, vLog := range vLogs { event, err := f.f.ParseNewPubkeyRegistration(vLog) if err != nil { @@ -238,10 +237,9 @@ func (f pubkeyRegistrationEventFilterer) addPubkeyRegistration(events []operator } type OperatorPubKeysFilterer struct { - Logger common.Logger - Filterer bind.ContractFilterer - BlsRegAddress gethcommon.Address - PubKeyCompendiumAddress gethcommon.Address + Logger common.Logger + Filterer bind.ContractFilterer + BlsRegAddress gethcommon.Address FastMode bool } @@ -253,25 +251,14 @@ func NewOperatorPubKeysFilterer(eigenDAServiceManagerAddr gethcommon.Address, cl return nil, err } - blsRegAddress, err := contractEigenDAServiceManager.BlsPubkeyRegistry(&bind.CallOpts{}) - if err != nil { - return nil, err - } - - blsRegistry, err := blspubkeyreg.NewContractBLSPubkeyRegistry(blsRegAddress, client) - if err != nil { - return nil, err - } - - pubkeyCompendiumAddress, err := blsRegistry.PubkeyCompendium(&bind.CallOpts{}) + blsRegAddress, err := contractEigenDAServiceManager.BlsApkRegistry(&bind.CallOpts{}) if err != nil { return nil, err } return &OperatorPubKeysFilterer{ - Filterer: client, - BlsRegAddress: blsRegAddress, - PubKeyCompendiumAddress: pubkeyCompendiumAddress, + Filterer: client, + BlsRegAddress: blsRegAddress, }, nil } @@ -282,7 +269,7 @@ func (f *OperatorPubKeysFilterer) FilterHeaders(headers indexer.Headers) ([]inde return nil, err } - regFilterer, err := newPubkeyRegistrationEventFilterer(f.PubKeyCompendiumAddress, f.Filterer) + regFilterer, err := newPubkeyRegistrationEventFilterer(f.BlsRegAddress, f.Filterer) if err != nil { return nil, err } diff --git a/core/indexer/operator_sockets.go b/core/indexer/operator_sockets.go index 0bc3eab77b..94121f8b8c 100644 --- a/core/indexer/operator_sockets.go +++ b/core/indexer/operator_sockets.go @@ -5,7 +5,7 @@ import ( "encoding/gob" "github.com/Layr-Labs/eigenda/common" - blsregcoord "github.com/Layr-Labs/eigenda/contracts/bindings/BLSRegistryCoordinatorWithIndices" + regcoord "github.com/Layr-Labs/eigenda/contracts/bindings/RegistryCoordinator" "github.com/Layr-Labs/eigenda/core" "github.com/Layr-Labs/eigenda/indexer" ) @@ -40,7 +40,7 @@ func (a *OperatorSocketsAccumulator) UpdateObject(object indexer.AccumulatorObje return object, ErrIncorrectEvent } - payload, ok := event.Payload.(*blsregcoord.ContractBLSRegistryCoordinatorWithIndicesOperatorSocketUpdate) + payload, ok := event.Payload.(*regcoord.ContractRegistryCoordinatorOperatorSocketUpdate) if !ok { return object, ErrIncorrectEvent } diff --git a/core/indexer/operator_sockets_filterer.go b/core/indexer/operator_sockets_filterer.go index d1809bc3b7..05d8df46e8 100644 --- a/core/indexer/operator_sockets_filterer.go +++ b/core/indexer/operator_sockets_filterer.go @@ -4,8 +4,8 @@ import ( "context" "github.com/Layr-Labs/eigenda/common" - blsregcoord "github.com/Layr-Labs/eigenda/contracts/bindings/BLSRegistryCoordinatorWithIndices" eigendasrvmg "github.com/Layr-Labs/eigenda/contracts/bindings/EigenDAServiceManager" + regcoord "github.com/Layr-Labs/eigenda/contracts/bindings/RegistryCoordinator" "github.com/Layr-Labs/eigenda/core" "github.com/Layr-Labs/eigenda/indexer" "github.com/ethereum/go-ethereum/accounts/abi/bind" @@ -51,7 +51,7 @@ func (f *operatorSocketsFilterer) FilterHeaders(headers indexer.Headers) ([]inde return nil, err } - filterer, err := blsregcoord.NewContractBLSRegistryCoordinatorWithIndicesFilterer(f.Address, f.Filterer) + filterer, err := regcoord.NewContractRegistryCoordinatorFilterer(f.Address, f.Filterer) if err != nil { return nil, err } @@ -108,12 +108,12 @@ func (f *operatorSocketsFilterer) FilterFastMode(headers indexer.Headers) (*inde } func (f *operatorSocketsFilterer) WatchOperatorSocketUpdate(ctx context.Context, operatorId core.OperatorID) (chan string, error) { - filterer, err := blsregcoord.NewContractBLSRegistryCoordinatorWithIndicesFilterer(f.Address, f.Filterer) + filterer, err := regcoord.NewContractRegistryCoordinatorFilterer(f.Address, f.Filterer) if err != nil { return nil, err } - sink := make(chan *blsregcoord.ContractBLSRegistryCoordinatorWithIndicesOperatorSocketUpdate) + sink := make(chan *regcoord.ContractRegistryCoordinatorOperatorSocketUpdate) operatorID := [][32]byte{operatorId} _, err = filterer.WatchOperatorSocketUpdate(&bind.WatchOpts{Context: ctx}, sink, operatorID) if err != nil { diff --git a/core/indexer/state_test.go b/core/indexer/state_test.go index 139c8400ea..b836d05e53 100644 --- a/core/indexer/state_test.go +++ b/core/indexer/state_test.go @@ -2,8 +2,10 @@ package indexer_test import ( "context" + "crypto/rand" "flag" "fmt" + "math/big" "os" "path/filepath" "time" @@ -24,6 +26,7 @@ import ( . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" + "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/rpc" ) @@ -49,12 +52,17 @@ func mustRegisterOperators(env *deploy.Config, logger common.Logger) { keyPair, err := core.MakeKeyPairFromString(op.NODE_TEST_PRIVATE_BLS) Expect(err).To(BeNil()) - err = tx.RegisterBLSPublicKey(context.Background(), keyPair) + socket := fmt.Sprintf("%v:%v", op.NODE_HOSTNAME, op.NODE_DISPERSAL_PORT) + + salt := [32]byte{} + _, err = rand.Read(salt[:]) Expect(err).To(BeNil()) - socket := fmt.Sprintf("%v:%v", op.NODE_HOSTNAME, op.NODE_DISPERSAL_PORT) + expiry := big.NewInt((time.Now().Add(10 * time.Minute)).Unix()) + privKey, err := crypto.HexToECDSA(op.NODE_PRIVATE_KEY) + Expect(err).To(BeNil()) - err = tx.RegisterOperator(context.Background(), keyPair.GetPubKeyG1(), socket, quorums) + err = tx.RegisterOperator(context.Background(), keyPair, socket, quorums, privKey, salt, expiry) Expect(err).To(BeNil()) } } diff --git a/core/mock/tx.go b/core/mock/tx.go index 7b234242c5..950f64fc89 100644 --- a/core/mock/tx.go +++ b/core/mock/tx.go @@ -2,6 +2,7 @@ package mock import ( "context" + "crypto/ecdsa" "math/big" "github.com/Layr-Labs/eigenda/api/grpc/churner" @@ -33,17 +34,28 @@ func (t *MockTransactor) GetRegisteredQuorumIdsForOperator(ctx context.Context, return result.([]core.QuorumID), args.Error(1) } -func (t *MockTransactor) RegisterBLSPublicKey(ctx context.Context, keypair *core.KeyPair) error { - args := t.Called() - return args.Error(0) -} - -func (t *MockTransactor) RegisterOperator(ctx context.Context, pubkeyG1 *core.G1Point, socket string, quorumIds []core.QuorumID) error { +func (t *MockTransactor) RegisterOperator( + ctx context.Context, + keypair *core.KeyPair, + socket string, + quorumIds []core.QuorumID, + operatorEcdsaPrivateKey *ecdsa.PrivateKey, + operatorToAvsRegistrationSigSalt [32]byte, + operatorToAvsRegistrationSigExpiry *big.Int, +) error { args := t.Called() return args.Error(0) } -func (t *MockTransactor) RegisterOperatorWithChurn(ctx context.Context, pubkeyG1 *core.G1Point, socket string, quorumIds []core.QuorumID, churnReply *churner.ChurnReply) error { +func (t *MockTransactor) RegisterOperatorWithChurn( + ctx context.Context, + keypair *core.KeyPair, + socket string, + quorumIds []core.QuorumID, + operatorEcdsaPrivateKey *ecdsa.PrivateKey, + operatorToAvsRegistrationSigSalt [32]byte, + operatorToAvsRegistrationSigExpiry *big.Int, + churnReply *churner.ChurnReply) error { args := t.Called() return args.Error(0) } @@ -124,6 +136,7 @@ func (t *MockTransactor) WeightOfOperatorForQuorum(ctx context.Context, quorumID func (t *MockTransactor) CalculateOperatorChurnApprovalDigestHash( ctx context.Context, + operatorAddress gethcommon.Address, operatorId core.OperatorID, operatorsToChurn []core.OperatorToChurn, salt [32]byte, @@ -140,10 +153,10 @@ func (t *MockTransactor) GetCurrentBlockNumber(ctx context.Context) (uint32, err return result.(uint32), args.Error(1) } -func (t *MockTransactor) GetQuorumCount(ctx context.Context, blockNumber uint32) (uint16, error) { +func (t *MockTransactor) GetQuorumCount(ctx context.Context, blockNumber uint32) (uint8, error) { args := t.Called() result := args.Get(0) - return result.(uint16), args.Error(1) + return result.(uint8), args.Error(1) } func (t *MockTransactor) PubkeyHashToOperator(ctx context.Context, operatorId core.OperatorID) (gethcommon.Address, error) { diff --git a/core/serialization.go b/core/serialization.go index 317a9a52c5..eda00a1bd3 100644 --- a/core/serialization.go +++ b/core/serialization.go @@ -12,7 +12,6 @@ import ( "slices" binding "github.com/Layr-Labs/eigenda/contracts/bindings/EigenDAServiceManager" - "github.com/Layr-Labs/eigenda/pkg/kzg/bn254" bn "github.com/consensys/gnark-crypto/ecc/bn254" "github.com/ethereum/go-ethereum/accounts/abi" @@ -201,8 +200,8 @@ func (h *BlobHeader) GetQuorumBlobParamsHash() ([32]byte, error) { Type: "uint8", }, { - Name: "quantizationParameter", - Type: "uint8", + Name: "chunkLength", + Type: "uint32", }, }) @@ -220,7 +219,7 @@ func (h *BlobHeader) GetQuorumBlobParamsHash() ([32]byte, error) { QuorumNumber uint8 AdversaryThresholdPercentage uint8 QuorumThresholdPercentage uint8 - QuantizationParameter uint8 + ChunkLength uint32 } qbp := make([]quorumBlobParams, len(h.QuorumInfos)) @@ -229,7 +228,7 @@ func (h *BlobHeader) GetQuorumBlobParamsHash() ([32]byte, error) { QuorumNumber: uint8(q.QuorumID), AdversaryThresholdPercentage: uint8(q.AdversaryThreshold), QuorumThresholdPercentage: uint8(q.QuorumThreshold), - QuantizationParameter: 0, + ChunkLength: uint32(q.ChunkLength), } } @@ -247,7 +246,7 @@ func (h *BlobHeader) GetQuorumBlobParamsHash() ([32]byte, error) { } func (h *BlobHeader) Encode() ([]byte, error) { - if h.Commitment == nil || h.Commitment.G1Point == nil { + if h.Commitment == nil { return nil, ErrInvalidCommitment } @@ -288,8 +287,8 @@ func (h *BlobHeader) Encode() ([]byte, error) { Type: "uint8", }, { - Name: "quantizationParameter", - Type: "uint8", + Name: "chunkLength", + Type: "uint32", }, }, }, @@ -308,7 +307,7 @@ func (h *BlobHeader) Encode() ([]byte, error) { QuorumNumber uint8 AdversaryThresholdPercentage uint8 QuorumThresholdPercentage uint8 - QuantizationParameter uint8 + ChunkLength uint32 } type commitment struct { @@ -322,7 +321,7 @@ func (h *BlobHeader) Encode() ([]byte, error) { QuorumNumber: uint8(q.QuorumID), AdversaryThresholdPercentage: uint8(q.AdversaryThreshold), QuorumThresholdPercentage: uint8(q.QuorumThreshold), - QuantizationParameter: 0, + ChunkLength: uint32(q.ChunkLength), } } slices.SortStableFunc[[]quorumBlobParams](qbp, func(a, b quorumBlobParams) int { @@ -377,26 +376,43 @@ func (c *Chunk) Deserialize(data []byte) (*Chunk, error) { return c, err } -func (c Commitment) Serialize() ([]byte, error) { +func (c *G1Commitment) Serialize() ([]byte, error) { return encode(c) } -func (c *Commitment) Deserialize(data []byte) (*Commitment, error) { +func (c *G1Commitment) Deserialize(data []byte) (*G1Commitment, error) { err := decode(data, c) return c, err } -func (c *Commitment) UnmarshalJSON(data []byte) error { +func (c *G1Commitment) UnmarshalJSON(data []byte) error { var g1Point bn.G1Affine err := json.Unmarshal(data, &g1Point) if err != nil { return err } - c.G1Point = &bn254.G1Point{ - X: g1Point.X, - Y: g1Point.Y, - } + c.X = g1Point.X + c.Y = g1Point.Y + return nil +} + +func (c *G2Commitment) Serialize() ([]byte, error) { + return encode(c) +} + +func (c *G2Commitment) Deserialize(data []byte) (*G2Commitment, error) { + err := decode(data, c) + return c, err +} +func (c *G2Commitment) UnmarshalJSON(data []byte) error { + var g2Point bn.G2Affine + err := json.Unmarshal(data, &g2Point) + if err != nil { + return err + } + c.X = g2Point.X + c.Y = g2Point.Y return nil } diff --git a/core/serialization_test.go b/core/serialization_test.go index 9dc81e243a..020b5880d5 100644 --- a/core/serialization_test.go +++ b/core/serialization_test.go @@ -20,8 +20,8 @@ const ( encodedBatchHeader = "0x31000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001" reducedBatchHeaderHash = "0x891d0936da4627f445ef193aad63afb173409af9e775e292e4e35aff790a45e2" batchHeaderHash = "0xa48219ff51a67bf779c6f7858e3bf9760ef10a766e5dc5d461318c8e9d5607b6" - encodedBlobHeader = "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000000" - blobHeaderHash = "0x648856d9629063f27823e52fbe94530d2e896ae25a6d2b6ad3059d09574828cf" + encodedBlobHeader = "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000000a" + blobHeaderHash = "0xd14b018fcb05ce94b21782c5d3a9c469cb8fcf66926139fee11ceaf0ab7d7c11" ) func TestBatchHeaderEncoding(t *testing.T) { @@ -53,29 +53,39 @@ func TestBatchHeaderEncoding(t *testing.T) { func TestBlobHeaderEncoding(t *testing.T) { - var commitX, commitY, lengthX, lengthY fp.Element + var commitX, commitY fp.Element commitX = *commitX.SetBigInt(big.NewInt(1)) commitY = *commitY.SetBigInt(big.NewInt(2)) - lengthX = *lengthX.SetBigInt(big.NewInt(1)) - lengthY = *lengthY.SetBigInt(big.NewInt(2)) - commitment := &kzgbn254.G1Point{ + commitment := &core.G1Commitment{ X: commitX, Y: commitY, } - lengthProof := &kzgbn254.G1Point{ - X: lengthX, - Y: lengthY, - } + + var lengthXA0, lengthXA1, lengthYA0, lengthYA1 fp.Element + _, err := lengthXA0.SetString("10857046999023057135944570762232829481370756359578518086990519993285655852781") + assert.NoError(t, err) + _, err = lengthXA1.SetString("11559732032986387107991004021392285783925812861821192530917403151452391805634") + assert.NoError(t, err) + _, err = lengthYA0.SetString("8495653923123431417604973247489272438418190587263600148770280649306958101930") + assert.NoError(t, err) + _, err = lengthYA1.SetString("4082367875863433681332203403145435568316851327593401208105741076214120093531") + assert.NoError(t, err) + + var lengthProof, lengthCommitment kzgbn254.G2Point + lengthProof.X.A0 = lengthXA0 + lengthProof.X.A1 = lengthXA1 + lengthProof.Y.A0 = lengthYA0 + lengthProof.Y.A1 = lengthYA1 + + lengthCommitment = lengthProof + blobHeader := &core.BlobHeader{ BlobCommitments: core.BlobCommitments{ - Commitment: &core.Commitment{ - commitment, - }, - LengthProof: &core.Commitment{ - lengthProof, - }, - Length: 10, + Commitment: commitment, + LengthCommitment: (*core.G2Commitment)(&lengthCommitment), + LengthProof: (*core.G2Commitment)(&lengthProof), + Length: 10, }, QuorumInfos: []*core.BlobQuorumInfo{ { @@ -84,6 +94,7 @@ func TestBlobHeaderEncoding(t *testing.T) { AdversaryThreshold: 80, QuorumThreshold: 100, }, + ChunkLength: 10, }, }, } @@ -135,17 +146,15 @@ func TestCommitmentMarshaling(t *testing.T) { commitX = *commitX.SetBigInt(big.NewInt(1)) commitY = *commitY.SetBigInt(big.NewInt(2)) - commitment := &core.Commitment{ - G1Point: &kzgbn254.G1Point{ - X: commitX, - Y: commitY, - }, + commitment := &core.G1Commitment{ + X: commitX, + Y: commitY, } marshalled, err := json.Marshal(commitment) assert.NoError(t, err) - recovered := new(core.Commitment) + recovered := new(core.G1Commitment) err = json.Unmarshal(marshalled, recovered) assert.NoError(t, err) assert.Equal(t, recovered, commitment) @@ -160,12 +169,13 @@ func TestQuorumParamsHash(t *testing.T) { AdversaryThreshold: 80, QuorumThreshold: 100, }, + ChunkLength: 10, }, }, } hash, err := blobHeader.GetQuorumBlobParamsHash() assert.NoError(t, err) - expected := "36f393792966bd0cf716ae071bd6e5f8d9e5d5d79024e0a6177f98c61fcb7baf" + expected := "89b336cf7ea7dcd13e275b541843175165a1f7dd94ddfa82282be3d7ab402ba2" assert.Equal(t, common.Bytes2Hex(hash[:]), expected) } diff --git a/core/test/core_test.go b/core/test/core_test.go index 4134a5fdb5..380c45633d 100644 --- a/core/test/core_test.go +++ b/core/test/core_test.go @@ -41,14 +41,15 @@ func setup(m *testing.M) { // makeTestEncoder makes an encoder currently using the only supported backend. func makeTestEncoder() (core.Encoder, error) { config := kzgEncoder.KzgConfig{ - G1Path: "../../inabox/resources/kzg/g1.point", - G2Path: "../../inabox/resources/kzg/g2.point", - CacheDir: "../../inabox/resources/kzg/SRSTables", - SRSOrder: 3000, - NumWorker: uint64(runtime.GOMAXPROCS(0)), + G1Path: "../../inabox/resources/kzg/g1.point", + G2Path: "../../inabox/resources/kzg/g2.point", + CacheDir: "../../inabox/resources/kzg/SRSTables", + SRSOrder: 3000, + SRSNumberToLoad: 3000, + NumWorker: uint64(runtime.GOMAXPROCS(0)), } - return encoding.NewEncoder(encoding.EncoderConfig{KzgConfig: config}) + return encoding.NewEncoder(encoding.EncoderConfig{KzgConfig: config}, true) } @@ -124,9 +125,10 @@ func prepareBatch(t *testing.T, cst core.IndexedChainState, blobs []core.Blob, q blobHeader := &core.BlobHeader{ BlobCommitments: core.BlobCommitments{ - Commitment: commitments.Commitment, - LengthProof: commitments.LengthProof, - Length: commitments.Length, + Commitment: commitments.Commitment, + LengthCommitment: commitments.LengthCommitment, + LengthProof: commitments.LengthProof, + Length: commitments.Length, }, QuorumInfos: []*core.BlobQuorumInfo{quorumHeader}, } @@ -181,7 +183,6 @@ func checkBatchByUniversalVerifier(t *testing.T, cst core.IndexedChainState, enc for z, encodedBlob := range encodedBlobs { blobMessages[z] = encodedBlob[id] } - err := val.ValidateBatch(blobMessages, state.OperatorState, pool) assert.NoError(t, err) } diff --git a/core/tx.go b/core/tx.go index 0c6861b19b..be5eadf2ca 100644 --- a/core/tx.go +++ b/core/tx.go @@ -2,6 +2,7 @@ package core import ( "context" + "crypto/ecdsa" "math/big" "github.com/Layr-Labs/eigenda/api/grpc/churner" @@ -30,20 +31,34 @@ type OperatorStakes map[QuorumID]map[OperatorIndex]OperatorStake type Transactor interface { - // RegisterBLSPublicKey registers a new BLS public key with the pubkey compendium smart contract. - RegisterBLSPublicKey(ctx context.Context, keypair *KeyPair) error - // GetRegisteredQuorumIdsForOperator returns the quorum ids that the operator is registered in with the given public key. GetRegisteredQuorumIdsForOperator(ctx context.Context, operatorID OperatorID) ([]QuorumID, error) // RegisterOperator registers a new operator with the given public key and socket with the provided quorum ids. // If the operator is already registered with a given quorum id, the transaction will fail (noop) and an error // will be returned. - RegisterOperator(ctx context.Context, pubkeyG1 *G1Point, socket string, quorumIds []QuorumID) error + RegisterOperator( + ctx context.Context, + keypair *KeyPair, + socket string, + quorumIds []QuorumID, + operatorEcdsaPrivateKey *ecdsa.PrivateKey, + operatorToAvsRegistrationSigSalt [32]byte, + operatorToAvsRegistrationSigExpiry *big.Int, + ) error // RegisterOperatorWithChurn registers a new operator with the given public key and socket with the provided quorum ids // with the provided signature from the churner - RegisterOperatorWithChurn(ctx context.Context, pubkeyG1 *G1Point, socket string, quorumIds []QuorumID, churnReply *churner.ChurnReply) error + RegisterOperatorWithChurn( + ctx context.Context, + keypair *KeyPair, + socket string, + quorumIds []QuorumID, + operatorEcdsaPrivateKey *ecdsa.PrivateKey, + operatorToAvsRegistrationSigSalt [32]byte, + operatorToAvsRegistrationSigExpiry *big.Int, + churnReply *churner.ChurnReply, + ) error // DeregisterOperator deregisters an operator with the given public key from the all the quorums that it is // registered with at the supplied block number. To fully deregister an operator, this function should be called @@ -95,6 +110,7 @@ type Transactor interface { // CalculateOperatorChurnApprovalDigestHash returns calculated operator churn approval digest hash. CalculateOperatorChurnApprovalDigestHash( ctx context.Context, + operatorAddress gethcommon.Address, operatorId OperatorID, operatorsToChurn []OperatorToChurn, salt [32]byte, @@ -105,5 +121,5 @@ type Transactor interface { GetCurrentBlockNumber(ctx context.Context) (uint32, error) // GetQuorumCount returns the number of quorums registered at given block number. - GetQuorumCount(ctx context.Context, blockNumber uint32) (uint16, error) + GetQuorumCount(ctx context.Context, blockNumber uint32) (uint8, error) } diff --git a/core/validator.go b/core/validator.go index 549d320ad3..ab54035eaf 100644 --- a/core/validator.go +++ b/core/validator.go @@ -193,6 +193,11 @@ func (v *chunkValidator) ValidateBatch(blobs []*BlobMessage, operatorState *Oper v.VerifyBlobLengthWorker(blobCommitments, out) }) } + // check if commitments are equivalent + err := v.encoder.VerifyCommitEquivalenceBatch(blobCommitmentList) + if err != nil { + return err + } for i := 0; i < numResult; i++ { err := <-out diff --git a/disperser/api/grpc/encoder/encoder.pb.go b/disperser/api/grpc/encoder/encoder.pb.go index 76b05bc904..ae23088d55 100644 --- a/disperser/api/grpc/encoder/encoder.pb.go +++ b/disperser/api/grpc/encoder/encoder.pb.go @@ -26,9 +26,10 @@ type BlobCommitment struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Commitment []byte `protobuf:"bytes,1,opt,name=commitment,proto3" json:"commitment,omitempty"` - LengthProof []byte `protobuf:"bytes,2,opt,name=length_proof,json=lengthProof,proto3" json:"length_proof,omitempty"` - Length uint32 `protobuf:"varint,3,opt,name=length,proto3" json:"length,omitempty"` + Commitment []byte `protobuf:"bytes,1,opt,name=commitment,proto3" json:"commitment,omitempty"` + LengthCommitment []byte `protobuf:"bytes,2,opt,name=length_commitment,json=lengthCommitment,proto3" json:"length_commitment,omitempty"` + LengthProof []byte `protobuf:"bytes,3,opt,name=length_proof,json=lengthProof,proto3" json:"length_proof,omitempty"` + Length uint32 `protobuf:"varint,4,opt,name=length,proto3" json:"length,omitempty"` } func (x *BlobCommitment) Reset() { @@ -70,6 +71,13 @@ func (x *BlobCommitment) GetCommitment() []byte { return nil } +func (x *BlobCommitment) GetLengthCommitment() []byte { + if x != nil { + return x.LengthCommitment + } + return nil +} + func (x *BlobCommitment) GetLengthProof() []byte { if x != nil { return x.LengthProof @@ -258,40 +266,43 @@ var File_encoder_encoder_proto protoreflect.FileDescriptor var file_encoder_encoder_proto_rawDesc = []byte{ 0x0a, 0x15, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2f, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x07, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, - 0x22, 0x6b, 0x0a, 0x0e, 0x42, 0x6c, 0x6f, 0x62, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, - 0x6e, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, - 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x5f, 0x70, 0x72, 0x6f, - 0x6f, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, - 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x52, 0x0a, - 0x0e, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, - 0x21, 0x0a, 0x0c, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x4c, 0x65, 0x6e, 0x67, - 0x74, 0x68, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x75, 0x6d, 0x5f, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x73, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6e, 0x75, 0x6d, 0x43, 0x68, 0x75, 0x6e, 0x6b, - 0x73, 0x22, 0x69, 0x0a, 0x11, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x42, 0x6c, 0x6f, 0x62, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x40, 0x0a, 0x0f, 0x65, 0x6e, - 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2e, 0x45, 0x6e, - 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x0e, 0x65, 0x6e, - 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x62, 0x0a, 0x0f, - 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, - 0x37, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2e, 0x42, 0x6c, - 0x6f, 0x62, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x63, 0x6f, - 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x68, 0x75, 0x6e, - 0x6b, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x06, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x73, - 0x32, 0x4f, 0x0a, 0x07, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x12, 0x44, 0x0a, 0x0a, 0x45, - 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x42, 0x6c, 0x6f, 0x62, 0x12, 0x1a, 0x2e, 0x65, 0x6e, 0x63, 0x6f, - 0x64, 0x65, 0x72, 0x2e, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2e, - 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, - 0x00, 0x42, 0x2f, 0x5a, 0x2d, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x4c, 0x61, 0x79, 0x72, 0x2d, 0x4c, 0x61, 0x62, 0x73, 0x2f, 0x65, 0x69, 0x67, 0x65, 0x6e, 0x64, - 0x61, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x65, 0x6e, 0x63, 0x6f, 0x64, - 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x22, 0x98, 0x01, 0x0a, 0x0e, 0x42, 0x6c, 0x6f, 0x62, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, + 0x65, 0x6e, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, + 0x65, 0x6e, 0x74, 0x12, 0x2b, 0x0a, 0x11, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x5f, 0x63, 0x6f, + 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x10, + 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, + 0x12, 0x21, 0x0a, 0x0c, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x5f, 0x70, 0x72, 0x6f, 0x6f, 0x66, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x50, 0x72, + 0x6f, 0x6f, 0x66, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x52, 0x0a, 0x0e, 0x45, + 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x21, 0x0a, + 0x0c, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, + 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x75, 0x6d, 0x5f, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6e, 0x75, 0x6d, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x22, + 0x69, 0x0a, 0x11, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x40, 0x0a, 0x0f, 0x65, 0x6e, 0x63, 0x6f, + 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x17, 0x2e, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2e, 0x45, 0x6e, 0x63, 0x6f, + 0x64, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x0e, 0x65, 0x6e, 0x63, 0x6f, + 0x64, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x62, 0x0a, 0x0f, 0x45, 0x6e, + 0x63, 0x6f, 0x64, 0x65, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x37, 0x0a, + 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x17, 0x2e, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2e, 0x42, 0x6c, 0x6f, 0x62, + 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, + 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x06, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x32, 0x4f, + 0x0a, 0x07, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x12, 0x44, 0x0a, 0x0a, 0x45, 0x6e, 0x63, + 0x6f, 0x64, 0x65, 0x42, 0x6c, 0x6f, 0x62, 0x12, 0x1a, 0x2e, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, + 0x72, 0x2e, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2e, 0x45, 0x6e, + 0x63, 0x6f, 0x64, 0x65, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x42, + 0x2f, 0x5a, 0x2d, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4c, 0x61, + 0x79, 0x72, 0x2d, 0x4c, 0x61, 0x62, 0x73, 0x2f, 0x65, 0x69, 0x67, 0x65, 0x6e, 0x64, 0x61, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/disperser/api/proto/encoder/encoder.proto b/disperser/api/proto/encoder/encoder.proto index cabb156bcf..7a67e6a4a4 100644 --- a/disperser/api/proto/encoder/encoder.proto +++ b/disperser/api/proto/encoder/encoder.proto @@ -10,8 +10,9 @@ service Encoder { // BlomCommitments contains the blob's commitment, degree proof, and the actual degree message BlobCommitment { bytes commitment = 1; - bytes length_proof = 2; - uint32 length = 3; + bytes length_commitment = 2; + bytes length_proof = 3; + uint32 length = 4; } // Parameters needed by Encoder for encoding @@ -31,4 +32,4 @@ message EncodeBlobRequest { message EncodeBlobReply { BlobCommitment commitment = 1; repeated bytes chunks = 2; -} \ No newline at end of file +} diff --git a/disperser/apiserver/server.go b/disperser/apiserver/server.go index 5fea8249ce..a66a2a8532 100644 --- a/disperser/apiserver/server.go +++ b/disperser/apiserver/server.go @@ -11,6 +11,7 @@ import ( "sync" "time" + commonpb "github.com/Layr-Labs/eigenda/api/grpc/common" pb "github.com/Layr-Labs/eigenda/api/grpc/disperser" "github.com/Layr-Labs/eigenda/common" healthcheck "github.com/Layr-Labs/eigenda/common/healthcheck" @@ -41,7 +42,7 @@ type DispersalServer struct { blobStore disperser.BlobStore tx core.Transactor - quorumCount uint16 + quorumCount uint8 rateConfig RateConfig ratelimiter common.RateLimiter @@ -191,21 +192,21 @@ func (s *DispersalServer) disperseBlob(ctx context.Context, blob *core.Blob, aut } seenQuorums := make(map[uint8]struct{}) - // The quorum ID must be in range [0, 255]. It'll actually be converted - // to uint8, so it cannot be greater than 255. + // The quorum ID must be in range [0, 254]. It'll actually be converted + // to uint8, so it cannot be greater than 254. for _, param := range securityParams { if _, ok := seenQuorums[param.QuorumID]; ok { return nil, fmt.Errorf("invalid request: security_params must not contain duplicate quorum_id") } seenQuorums[param.QuorumID] = struct{}{} - if uint16(param.QuorumID) >= s.quorumCount { + if param.QuorumID >= s.quorumCount { err := s.updateQuorumCount(ctx) if err != nil { return nil, fmt.Errorf("failed to get onchain quorum count: %w", err) } - if uint16(param.QuorumID) >= s.quorumCount { + if param.QuorumID >= s.quorumCount { return nil, fmt.Errorf("invalid request: the quorum_id must be in range [0, %d], but found %d", s.quorumCount-1, param.QuorumID) } } @@ -449,11 +450,6 @@ func (s *DispersalServer) GetBlobStatus(ctx context.Context, req *pb.BlobStatusR s.logger.Debug("isConfirmed", "metadata", metadata, "isConfirmed", isConfirmed) if isConfirmed { confirmationInfo := metadata.ConfirmationInfo - commit, err := confirmationInfo.BlobCommitment.Commitment.Serialize() - if err != nil { - return nil, err - } - dataLength := uint32(confirmationInfo.BlobCommitment.Length) quorumInfos := confirmationInfo.BlobQuorumInfos slices.SortStableFunc[[]*core.BlobQuorumInfo](quorumInfos, func(a, b *core.BlobQuorumInfo) int { @@ -479,7 +475,10 @@ func (s *DispersalServer) GetBlobStatus(ctx context.Context, req *pb.BlobStatusR Status: getResponseStatus(metadata.BlobStatus), Info: &pb.BlobInfo{ BlobHeader: &pb.BlobHeader{ - Commitment: commit, + Commitment: &commonpb.G1Commitment{ + X: confirmationInfo.BlobCommitment.Commitment.X.Marshal(), + Y: confirmationInfo.BlobCommitment.Commitment.Y.Marshal(), + }, DataLength: dataLength, BlobQuorumParams: blobQuorumParams, }, diff --git a/disperser/apiserver/server_test.go b/disperser/apiserver/server_test.go index d85bce3791..69621acfaa 100644 --- a/disperser/apiserver/server_test.go +++ b/disperser/apiserver/server_test.go @@ -26,7 +26,6 @@ import ( "github.com/Layr-Labs/eigenda/core/mock" "github.com/Layr-Labs/eigenda/disperser" "github.com/Layr-Labs/eigenda/inabox/deploy" - "github.com/Layr-Labs/eigenda/pkg/kzg/bn254" "github.com/consensys/gnark-crypto/ecc/bn254/fp" "github.com/ory/dockertest/v3" "github.com/stretchr/testify/assert" @@ -141,9 +140,10 @@ func TestGetBlobStatus(t *testing.T) { }) assert.NoError(t, err) assert.Equal(t, reply.GetStatus(), pb.BlobStatus_CONFIRMED) - actualCommitment, err := new(core.Commitment).Deserialize(reply.GetInfo().GetBlobHeader().GetCommitment()) - assert.NoError(t, err) - assert.Equal(t, actualCommitment, confirmedMetadata.ConfirmationInfo.BlobCommitment.Commitment) + actualCommitX := reply.GetInfo().GetBlobHeader().GetCommitment().X + actualCommitY := reply.GetInfo().GetBlobHeader().GetCommitment().Y + assert.Equal(t, actualCommitX, confirmedMetadata.ConfirmationInfo.BlobCommitment.Commitment.X.Marshal()) + assert.Equal(t, actualCommitY, confirmedMetadata.ConfirmationInfo.BlobCommitment.Commitment.Y.Marshal()) assert.Equal(t, reply.GetInfo().GetBlobHeader().GetDataLength(), uint32(confirmedMetadata.ConfirmationInfo.BlobCommitment.Length)) actualBlobQuorumParams := make([]*pb.BlobQuorumParam, len(securityParams)) @@ -389,7 +389,7 @@ func newTestServer(m *testing.M) *apiserver.DispersalServer { queue = blobstore.NewSharedStorage(bucketName, s3Client, blobMetadataStore, logger) tx := &mock.MockTransactor{} tx.On("GetCurrentBlockNumber").Return(uint32(100), nil) - tx.On("GetQuorumCount").Return(uint16(2), nil) + tx.On("GetQuorumCount").Return(uint8(2), nil) return apiserver.NewDispersalServer(disperser.ServerConfig{ GrpcPort: "51001", @@ -464,11 +464,9 @@ func simulateBlobConfirmation(t *testing.T, requestID []byte, blobSize uint, sec _, err = commitY.SetString("9207254729396071334325696286939045899948985698134704137261649190717970615186") assert.NoError(t, err) - commitment := &core.Commitment{ - G1Point: &bn254.G1Point{ - X: commitX, - Y: commitY, - }, + commitment := &core.G1Commitment{ + X: commitX, + Y: commitY, } dataLength := 32 batchID := uint32(99) diff --git a/disperser/batcher/batcher.go b/disperser/batcher/batcher.go index ffd2eed7da..39353d6422 100644 --- a/disperser/batcher/batcher.go +++ b/disperser/batcher/batcher.go @@ -486,21 +486,21 @@ func (b *Batcher) parseBatchIDFromReceipt(ctx context.Context, txReceipt *types. if log.Topics[0] == common.BatchConfirmedEventSigHash { smAbi, err := abi.JSON(bytes.NewReader(common.ServiceManagerAbi)) if err != nil { - return 0, err + return 0, fmt.Errorf("failed to parse ServiceManager ABI: %w", err) } eventAbi, err := smAbi.EventByID(common.BatchConfirmedEventSigHash) if err != nil { - return 0, err + return 0, fmt.Errorf("failed to parse BatchConfirmed event ABI: %w", err) } unpackedData, err := eventAbi.Inputs.Unpack(log.Data) if err != nil { - return 0, err + return 0, fmt.Errorf("failed to unpack BatchConfirmed log data: %w", err) } - // There should be exactly two inputs in the data field, batchId and fee. - // ref: https://github.com/Layr-Labs/eigenda/blob/master/contracts/src/interfaces/IEigenDAServiceManager.sol#L20 - if len(unpackedData) != 2 { - return 0, fmt.Errorf("BatchConfirmed log should contain exactly 2 inputs. Found %d", len(unpackedData)) + // There should be exactly one input in the data field, batchId. + // Labs/eigenda/blob/master/contracts/src/interfaces/IEigenDAServiceManager.sol#L17 + if len(unpackedData) != 1 { + return 0, fmt.Errorf("BatchConfirmed log should contain exactly 1 inputs. Found %d", len(unpackedData)) } return unpackedData[0].(uint32), nil } diff --git a/disperser/batcher/batcher_test.go b/disperser/batcher/batcher_test.go index 5d335e94d5..669fc7147e 100644 --- a/disperser/batcher/batcher_test.go +++ b/disperser/batcher/batcher_test.go @@ -43,14 +43,15 @@ type batcherComponents struct { // makeTestEncoder makes an encoder currently using the only supported backend. func makeTestEncoder() (core.Encoder, error) { config := kzgEncoder.KzgConfig{ - G1Path: "../../inabox/resources/kzg/g1.point", - G2Path: "../../inabox/resources/kzg/g2.point", - CacheDir: "../../inabox/resources/kzg/SRSTables", - SRSOrder: 3000, - NumWorker: uint64(runtime.GOMAXPROCS(0)), + G1Path: "../../inabox/resources/kzg/g1.point", + G2Path: "../../inabox/resources/kzg/g2.point", + CacheDir: "../../inabox/resources/kzg/SRSTables", + SRSOrder: 3000, + SRSNumberToLoad: 3000, + NumWorker: uint64(runtime.GOMAXPROCS(0)), } - return encoding.NewEncoder(encoding.EncoderConfig{KzgConfig: config}) + return encoding.NewEncoder(encoding.EncoderConfig{KzgConfig: config}, true) } func makeTestBlob(securityParams []*core.SecurityParam) core.Blob { diff --git a/disperser/batcher/grpc/dispatcher.go b/disperser/batcher/grpc/dispatcher.go index 9da4d8fc2e..883f0be991 100644 --- a/disperser/batcher/grpc/dispatcher.go +++ b/disperser/batcher/grpc/dispatcher.go @@ -4,6 +4,7 @@ import ( "context" "time" + commonpb "github.com/Layr-Labs/eigenda/api/grpc/common" "github.com/Layr-Labs/eigenda/api/grpc/node" "github.com/Layr-Labs/eigenda/common" "github.com/Layr-Labs/eigenda/core" @@ -79,7 +80,7 @@ func (c *dispatcher) sendChunks(ctx context.Context, blobs []*core.BlobMessage, grpc.WithTransportCredentials(insecure.NewCredentials()), ) if err != nil { - c.logger.Error("Disperser cannot connect to operator dispersal socket", "dispersal_socket", core.OperatorSocket(op.Socket).GetDispersalSocket(), "err", err) + c.logger.Warn("Disperser cannot connect to operator dispersal socket", "dispersal_socket", core.OperatorSocket(op.Socket).GetDispersalSocket(), "err", err) return nil, err } defer conn.Close() @@ -127,14 +128,22 @@ func GetStoreChunksRequest(blobMessages []*core.BlobMessage, header *core.BatchH } func getBlobMessage(blob *core.BlobMessage) (*node.Blob, error) { - commitData, err := blob.BlobHeader.Commitment.Serialize() - if err != nil { - return nil, err + commitData := &commonpb.G1Commitment{ + X: blob.BlobHeader.Commitment.X.Marshal(), + Y: blob.BlobHeader.Commitment.Y.Marshal(), } - - lengthProofData, err := blob.BlobHeader.LengthProof.Serialize() - if err != nil { - return nil, err + var lengthCommitData, lengthProofData node.G2Commitment + if blob.BlobHeader.LengthCommitment != nil { + lengthCommitData.XA0 = blob.BlobHeader.LengthCommitment.X.A0.Marshal() + lengthCommitData.XA1 = blob.BlobHeader.LengthCommitment.X.A1.Marshal() + lengthCommitData.YA0 = blob.BlobHeader.LengthCommitment.Y.A0.Marshal() + lengthCommitData.YA1 = blob.BlobHeader.LengthCommitment.Y.A1.Marshal() + } + if blob.BlobHeader.LengthProof != nil { + lengthProofData.XA0 = blob.BlobHeader.LengthProof.X.A0.Marshal() + lengthProofData.XA1 = blob.BlobHeader.LengthProof.X.A1.Marshal() + lengthProofData.YA0 = blob.BlobHeader.LengthProof.Y.A0.Marshal() + lengthProofData.YA1 = blob.BlobHeader.LengthProof.Y.A1.Marshal() } quorumHeaders := make([]*node.BlobQuorumInfo, len(blob.BlobHeader.QuorumInfos)) @@ -164,10 +173,11 @@ func getBlobMessage(blob *core.BlobMessage) (*node.Blob, error) { return &node.Blob{ Header: &node.BlobHeader{ - Commitment: commitData, - LengthProof: lengthProofData, - Length: uint32(blob.BlobHeader.Length), - QuorumHeaders: quorumHeaders, + Commitment: commitData, + LengthCommitment: &lengthCommitData, + LengthProof: &lengthProofData, + Length: uint32(blob.BlobHeader.Length), + QuorumHeaders: quorumHeaders, }, Bundles: bundles, }, nil diff --git a/disperser/cmd/encoder/encoder.go b/disperser/cmd/encoder/encoder.go index 4e8e7cac3d..81fb87e3e3 100644 --- a/disperser/cmd/encoder/encoder.go +++ b/disperser/cmd/encoder/encoder.go @@ -15,7 +15,7 @@ type EncoderGRPCServer struct { func NewEncoderGRPCServer(config Config, logger common.Logger) (*EncoderGRPCServer, error) { - coreEncoder, err := encoding.NewEncoder(config.EncoderConfig) + coreEncoder, err := encoding.NewEncoder(config.EncoderConfig, true) if err != nil { return nil, fmt.Errorf("failed to create encoder: %w", err) } diff --git a/disperser/common/blobstore/blob_metadata_store_test.go b/disperser/common/blobstore/blob_metadata_store_test.go index 5647459411..0b132ab0bb 100644 --- a/disperser/common/blobstore/blob_metadata_store_test.go +++ b/disperser/common/blobstore/blob_metadata_store_test.go @@ -8,7 +8,6 @@ import ( commondynamodb "github.com/Layr-Labs/eigenda/common/aws/dynamodb" "github.com/Layr-Labs/eigenda/core" "github.com/Layr-Labs/eigenda/disperser" - "github.com/Layr-Labs/eigenda/pkg/kzg/bn254" "github.com/aws/aws-sdk-go-v2/service/dynamodb/types" "github.com/consensys/gnark-crypto/ecc/bn254/fp" "github.com/ethereum/go-ethereum/common" @@ -211,11 +210,9 @@ func getConfirmedMetadata(t *testing.T, metadataKey disperser.BlobKey) *disperse assert.NoError(t, err) _, err = commitY.SetString("9207254729396071334325696286939045899948985698134704137261649190717970615186") assert.NoError(t, err) - commitment := &core.Commitment{ - G1Point: &bn254.G1Point{ - X: commitX, - Y: commitY, - }, + commitment := &core.G1Commitment{ + X: commitX, + Y: commitY, } dataLength := 32 batchID := uint32(99) diff --git a/disperser/dataapi/docs/docs.go b/disperser/dataapi/docs/docs.go index 871316a61d..f7d033e6d5 100644 --- a/disperser/dataapi/docs/docs.go +++ b/disperser/dataapi/docs/docs.go @@ -1,4 +1,5 @@ -// Package docs Code generated by swaggo/swag. DO NOT EDIT +// Code generated by swaggo/swag. DO NOT EDIT. + package docs import "github.com/swaggo/swag" diff --git a/disperser/dataapi/server_test.go b/disperser/dataapi/server_test.go index 5145eca97c..a6b1e8b11f 100644 --- a/disperser/dataapi/server_test.go +++ b/disperser/dataapi/server_test.go @@ -20,7 +20,6 @@ import ( prommock "github.com/Layr-Labs/eigenda/disperser/dataapi/prometheus/mock" "github.com/Layr-Labs/eigenda/disperser/dataapi/subgraph" subgraphmock "github.com/Layr-Labs/eigenda/disperser/dataapi/subgraph/mock" - "github.com/Layr-Labs/eigenda/pkg/kzg/bn254" "github.com/consensys/gnark-crypto/ecc/bn254/fp" "github.com/ethereum/go-ethereum/common" "github.com/gin-gonic/gin" @@ -311,11 +310,9 @@ func markBlobConfirmed(t *testing.T, blob *core.Blob, key disperser.BlobKey, bat assert.NoError(t, err) _, err = commitY.SetString("9207254729396071334325696286939045899948985698134704137261649190717970615186") assert.NoError(t, err) - commitment := &core.Commitment{ - G1Point: &bn254.G1Point{ - X: commitX, - Y: commitY, - }, + commitment := &core.G1Commitment{ + X: commitX, + Y: commitY, } confirmationInfo := &disperser.ConfirmationInfo{ diff --git a/disperser/encoder/client.go b/disperser/encoder/client.go index f741db8a8b..964f9617b6 100644 --- a/disperser/encoder/client.go +++ b/disperser/encoder/client.go @@ -47,11 +47,15 @@ func (c client) EncodeBlob(ctx context.Context, data []byte, encodingParams core return nil, nil, err } - commitment, err := new(core.Commitment).Deserialize(reply.GetCommitment().GetCommitment()) + commitment, err := new(core.G1Commitment).Deserialize(reply.GetCommitment().GetCommitment()) if err != nil { return nil, nil, err } - lengthProof, err := new(core.Commitment).Deserialize(reply.GetCommitment().GetLengthProof()) + lengthCommitment, err := new(core.G2Commitment).Deserialize(reply.GetCommitment().GetLengthCommitment()) + if err != nil { + return nil, nil, err + } + lengthProof, err := new(core.LengthProof).Deserialize(reply.GetCommitment().GetLengthProof()) if err != nil { return nil, nil, err } @@ -64,8 +68,9 @@ func (c client) EncodeBlob(ctx context.Context, data []byte, encodingParams core chunks[i] = deserialized } return &core.BlobCommitments{ - Commitment: commitment, - LengthProof: lengthProof, - Length: uint(reply.GetCommitment().GetLength()), + Commitment: commitment, + LengthCommitment: lengthCommitment, + LengthProof: lengthProof, + Length: uint(reply.GetCommitment().GetLength()), }, chunks, nil } diff --git a/disperser/encoder/server.go b/disperser/encoder/server.go index 13b92bd83c..d5bfe60e27 100644 --- a/disperser/encoder/server.go +++ b/disperser/encoder/server.go @@ -94,6 +94,11 @@ func (s *Server) handleEncoding(ctx context.Context, req *pb.EncodeBlobRequest) return nil, err } + lengthCommitData, err := commits.LengthCommitment.Serialize() + if err != nil { + return nil, err + } + lengthProofData, err := commits.LengthProof.Serialize() if err != nil { return nil, err @@ -116,6 +121,7 @@ func (s *Server) handleEncoding(ctx context.Context, req *pb.EncodeBlobRequest) return &pb.EncodeBlobReply{ Commitment: &pb.BlobCommitment{ Commitment: commitData, + LengthCommitment: lengthCommitData, LengthProof: lengthProofData, Length: uint32(commits.Length), }, diff --git a/disperser/encoder/server_test.go b/disperser/encoder/server_test.go index 4550ab7f8f..a74aa80701 100644 --- a/disperser/encoder/server_test.go +++ b/disperser/encoder/server_test.go @@ -29,18 +29,19 @@ var ( var logger = &cmock.Logger{} -func makeTestEncoder() (*encoding.Encoder, ServerConfig) { +func makeTestEncoder(numPoint uint64) (*encoding.Encoder, ServerConfig) { kzgConfig := kzgEncoder.KzgConfig{ - G1Path: "../../inabox/resources/kzg/g1.point", - G2Path: "../../inabox/resources/kzg/g2.point", - CacheDir: "../../inabox/resources/kzg/SRSTables", - SRSOrder: 3000, - NumWorker: uint64(runtime.GOMAXPROCS(0)), + G1Path: "../../inabox/resources/kzg/g1.point", + G2Path: "../../inabox/resources/kzg/g2.point", + CacheDir: "../../inabox/resources/kzg/SRSTables", + SRSOrder: 3000, + SRSNumberToLoad: numPoint, + NumWorker: uint64(runtime.GOMAXPROCS(0)), } encodingConfig := encoding.EncoderConfig{KzgConfig: kzgConfig} - encoder, _ := encoding.NewEncoder(encodingConfig) + encoder, _ := encoding.NewEncoder(encodingConfig, true) encoderServerConfig := ServerConfig{ GrpcPort: "3000", MaxConcurrentRequests: 16, @@ -50,7 +51,7 @@ func makeTestEncoder() (*encoding.Encoder, ServerConfig) { return encoder, encoderServerConfig } -var testEncoder, testServerConfig = makeTestEncoder() +var testEncoder, testServerConfig = makeTestEncoder(3000) func getTestData() (core.Blob, core.EncodingParams) { var quorumID core.QuorumID = 0 @@ -151,27 +152,41 @@ func TestThrottling(t *testing.T) { X1 = *X1.SetBigInt(big.NewInt(1)) Y1 = *Y1.SetBigInt(big.NewInt(2)) + var lengthXA0, lengthXA1, lengthYA0, lengthYA1 fp.Element + _, err := lengthXA0.SetString("10857046999023057135944570762232829481370756359578518086990519993285655852781") + assert.NoError(t, err) + _, err = lengthXA1.SetString("11559732032986387107991004021392285783925812861821192530917403151452391805634") + assert.NoError(t, err) + _, err = lengthYA0.SetString("8495653923123431417604973247489272438418190587263600148770280649306958101930") + assert.NoError(t, err) + _, err = lengthYA1.SetString("4082367875863433681332203403145435568316851327593401208105741076214120093531") + assert.NoError(t, err) + + var lengthProof, lengthCommitment bn254.G2Point + lengthProof.X.A0 = lengthXA0 + lengthProof.X.A1 = lengthXA1 + lengthProof.Y.A0 = lengthYA0 + lengthProof.Y.A1 = lengthYA1 + + lengthCommitment = lengthProof + metrics := NewMetrics("9000", logger) concurrentRequests := 2 requestPoolSize := 4 encoder := &encoding.MockEncoder{ Delay: 500 * time.Millisecond, } + blobCommitment := core.BlobCommitments{ - Commitment: &core.Commitment{ - G1Point: &bn254.G1Point{ - X: X1, - Y: Y1, - }, - }, - LengthProof: &core.Commitment{ - G1Point: &bn254.G1Point{ - X: X1, - Y: Y1, - }, + Commitment: &core.G1Commitment{ + X: X1, + Y: Y1, }, - Length: 10, + LengthCommitment: (*core.G2Commitment)(&lengthCommitment), + LengthProof: (*core.G2Commitment)(&lengthProof), + Length: 10, } + encoder.On("Encode", mock.Anything, mock.Anything).Return(blobCommitment, []*core.Chunk{}, nil) encoderServerConfig := ServerConfig{ GrpcPort: "3000", @@ -226,3 +241,64 @@ func TestThrottling(t *testing.T) { } } } + +func TestEncoderPointsLoading(t *testing.T) { + // encoder 1 only loads 1500 points + encoder1, config1 := makeTestEncoder(1500) + metrics := NewMetrics("9000", logger) + server1 := NewServer(config1, logger, encoder1, metrics) + + testBlobData, testEncodingParams := getTestData() + + testEncodingParamsProto := &pb.EncodingParams{ + ChunkLength: uint32(testEncodingParams.ChunkLength), + NumChunks: uint32(testEncodingParams.NumChunks), + } + + encodeBlobRequestProto := &pb.EncodeBlobRequest{ + Data: []byte(testBlobData.Data), + EncodingParams: testEncodingParamsProto, + } + + reply1, err := server1.EncodeBlob(context.Background(), encodeBlobRequestProto) + assert.NoError(t, err) + assert.NotNil(t, reply1.Chunks) + + // Decode Server Data + var chunksData []*core.Chunk + + for i := range reply1.Chunks { + chunkSerialized, _ := new(core.Chunk).Deserialize(reply1.GetChunks()[i]) + // perform an operation + chunksData = append(chunksData, chunkSerialized) + } + assert.NotNil(t, chunksData) + + // Indices obtained from Encoder_Test + indices := []core.ChunkNumber{ + 0, 1, 2, 3, 4, 5, 6, 7, + } + + maxInputSize := uint64(len(gettysburgAddressBytes)) + 10 + decoded, err := testEncoder.Decode(chunksData, indices, testEncodingParams, maxInputSize) + assert.Nil(t, err) + recovered := bytes.TrimRight(decoded, "\x00") + assert.Equal(t, recovered, gettysburgAddressBytes) + + // encoder 2 only loads 2900 points + encoder2, config2 := makeTestEncoder(2900) + server2 := NewServer(config2, logger, encoder2, metrics) + + reply2, err := server2.EncodeBlob(context.Background(), encodeBlobRequestProto) + assert.NoError(t, err) + assert.NotNil(t, reply2.Chunks) + + for i := range reply2.Chunks { + chunkSerialized, _ := new(core.Chunk).Deserialize(reply2.GetChunks()[i]) + // perform an operation + assert.Equal(t, len(chunkSerialized.Coeffs), len(chunksData[i].Coeffs)) + assert.Equal(t, chunkSerialized.Coeffs, chunksData[i].Coeffs) + assert.Equal(t, chunkSerialized.Proof, chunksData[i].Proof) + } + +} diff --git a/inabox/Makefile b/inabox/Makefile index 9caab4d99a..6374531779 100644 --- a/inabox/Makefile +++ b/inabox/Makefile @@ -19,6 +19,11 @@ new-anvil: mkdir -p "testdata/$(dt)" cp ./templates/testconfig-anvil.yaml "testdata/$(dt)/config.yaml" +new-anvil-nochurner: + mkdir -p "testdata/$(dt)" + cp ./templates/testconfig-anvil-nochurner.yaml "testdata/$(dt)/config.yaml" + + new-docker-anvil: mkdir -p "testdata/$(dt)" cp ./templates/testconfig-anvil-docker.yaml "testdata/$(dt)/config.yaml" diff --git a/inabox/deploy/config.go b/inabox/deploy/config.go index bece714cd1..e2fc9e3371 100644 --- a/inabox/deploy/config.go +++ b/inabox/deploy/config.go @@ -206,6 +206,7 @@ func (env *Config) generateBatcherVars(ind int, key, graphUrl, logPath string) B BATCHER_BLS_OPERATOR_STATE_RETRIVER: env.EigenDA.OperatorStateRetreiver, BATCHER_EIGENDA_SERVICE_MANAGER: env.EigenDA.ServiceManager, BATCHER_SRS_ORDER: "300000", + BATCHER_SRS_LOAD: "300000", BATCHER_CHAIN_RPC: "", BATCHER_PRIVATE_KEY: key[2:], BATCHER_STD_LOG_LEVEL: "debug", @@ -237,6 +238,7 @@ func (env *Config) generateEncoderVars(ind int, grpcPort string) EncoderVars { DISPERSER_ENCODER_G1_PATH: "", DISPERSER_ENCODER_G2_PATH: "", DISPERSER_ENCODER_SRS_ORDER: "", + DISPERSER_ENCODER_SRS_LOAD: "", DISPERSER_ENCODER_CACHE_PATH: "", DISPERSER_ENCODER_VERBOSE: "", DISPERSER_ENCODER_NUM_WORKERS: fmt.Sprint(runtime.GOMAXPROCS(0)), @@ -298,6 +300,7 @@ func (env *Config) generateOperatorVars(ind int, name, key, churnerUrl, logPath, NODE_G2_PATH: "", NODE_CACHE_PATH: "", NODE_SRS_ORDER: "", + NODE_SRS_LOAD: "", NODE_NUM_WORKERS: fmt.Sprint(runtime.GOMAXPROCS(0)), NODE_VERBOSE: "true", NODE_CHAIN_RPC: "", @@ -334,6 +337,7 @@ func (env *Config) generateRetrieverVars(ind int, key string, graphUrl, logPath, RETRIEVER_G2_PATH: "", RETRIEVER_CACHE_PATH: "", RETRIEVER_SRS_ORDER: "", + RETRIEVER_SRS_LOAD: "", RETRIEVER_NUM_WORKERS: fmt.Sprint(runtime.GOMAXPROCS(0)), RETRIEVER_VERBOSE: "true", RETRIEVER_CACHE_ENCODED_BLOBS: "false", diff --git a/inabox/deploy/config_types.go b/inabox/deploy/config_types.go index d6cfb3e636..875a70b803 100644 --- a/inabox/deploy/config_types.go +++ b/inabox/deploy/config_types.go @@ -53,6 +53,7 @@ type EigenDADeployConfig struct { NumStrategies int `json:"numStrategies"` MaxOperatorCount int `json:"maxOperatorCount"` StakerPrivateKeys []string `json:"stakerPrivateKeys"` + ConfirmerPrivateKey string `json:"confirmerPrivateKey"` StakerTokenAmounts [][]string `json:"-"` OperatorPrivateKeys []string `json:"-"` } @@ -79,10 +80,11 @@ func (cfg *EigenDADeployConfig) MarshalJSON() ([]byte, error) { // Marshal the remaining fields remainingFields := map[string]interface{}{ - "useDefaults": cfg.UseDefaults, - "numStrategies": cfg.NumStrategies, - "maxOperatorCount": cfg.MaxOperatorCount, - "stakerPrivateKeys": cfg.StakerPrivateKeys, + "useDefaults": cfg.UseDefaults, + "numStrategies": cfg.NumStrategies, + "maxOperatorCount": cfg.MaxOperatorCount, + "stakerPrivateKeys": cfg.StakerPrivateKeys, + "confirmerPrivateKey": cfg.ConfirmerPrivateKey, } remainingJSON, err := json.Marshal(remainingFields) @@ -96,12 +98,11 @@ func (cfg *EigenDADeployConfig) MarshalJSON() ([]byte, error) { } type EigenDAContract struct { - Deployer string `yaml:"deployer"` - ServiceManager string `json:"eigenDAServiceManager"` - OperatorStateRetreiver string `json:"blsOperatorStateRetriever"` - PubkeyRegistry string `json:"blsPubkeyRegistry"` - PubkeyCompendium string `json:"pubkeyCompendium"` - RegistryCoordinatorWithIndices string `json:"blsRegistryCoordinatorWithIndices"` + Deployer string `yaml:"deployer"` + ServiceManager string `json:"eigenDAServiceManager"` + OperatorStateRetreiver string `json:"operatorStateRetriever"` + BlsApkRegistry string `json:"blsApkRegistry"` + RegistryCoordinator string `json:"registryCoordinator"` } type Stakes struct { diff --git a/inabox/deploy/deploy.go b/inabox/deploy/deploy.go index 3dcd7b7f0a..1ed75d0158 100644 --- a/inabox/deploy/deploy.go +++ b/inabox/deploy/deploy.go @@ -68,6 +68,7 @@ func (env *Config) generateEigenDADeployConfig() EigenDADeployConfig { StakerPrivateKeys: stakers, StakerTokenAmounts: stakes, OperatorPrivateKeys: operators, + ConfirmerPrivateKey: env.getKeyString("batcher0"), } return config diff --git a/inabox/deploy/env_vars.go b/inabox/deploy/env_vars.go index 98813ee001..3076ec550d 100644 --- a/inabox/deploy/env_vars.go +++ b/inabox/deploy/env_vars.go @@ -98,6 +98,8 @@ type BatcherVars struct { BATCHER_SRS_ORDER string + BATCHER_SRS_LOAD string + BATCHER_METRICS_HTTP_PORT string BATCHER_INDEXER_DATA_DIR string @@ -171,6 +173,8 @@ type EncoderVars struct { DISPERSER_ENCODER_SRS_ORDER string + DISPERSER_ENCODER_SRS_LOAD string + DISPERSER_ENCODER_NUM_WORKERS string DISPERSER_ENCODER_VERBOSE string @@ -264,6 +268,8 @@ type OperatorVars struct { NODE_SRS_ORDER string + NODE_SRS_LOAD string + NODE_NUM_WORKERS string NODE_VERBOSE string @@ -323,6 +329,8 @@ type RetrieverVars struct { RETRIEVER_SRS_ORDER string + RETRIEVER_SRS_LOAD string + RETRIEVER_NUM_WORKERS string RETRIEVER_VERBOSE string diff --git a/inabox/deploy/subgraph.go b/inabox/deploy/subgraph.go index 5e89e6fa84..f0b4179603 100644 --- a/inabox/deploy/subgraph.go +++ b/inabox/deploy/subgraph.go @@ -73,35 +73,30 @@ type eigenDAOperatorStateSubgraphUpdater struct { } func (u eigenDAOperatorStateSubgraphUpdater) UpdateSubgraph(s *Subgraph, startBlock int) { - s.DataSources[0].Source.Address = strings.TrimPrefix(u.c.EigenDA.RegistryCoordinatorWithIndices, "0x") + s.DataSources[0].Source.Address = strings.TrimPrefix(u.c.EigenDA.RegistryCoordinator, "0x") s.DataSources[0].Source.StartBlock = startBlock - s.DataSources[1].Source.Address = strings.TrimPrefix(u.c.EigenDA.PubkeyRegistry, "0x") + s.DataSources[1].Source.Address = strings.TrimPrefix(u.c.EigenDA.BlsApkRegistry, "0x") s.DataSources[1].Source.StartBlock = startBlock - s.DataSources[2].Source.Address = strings.TrimPrefix(u.c.EigenDA.PubkeyCompendium, "0x") + s.DataSources[2].Source.Address = strings.TrimPrefix(u.c.EigenDA.BlsApkRegistry, "0x") s.DataSources[2].Source.StartBlock = startBlock - s.DataSources[3].Source.Address = strings.TrimPrefix(u.c.EigenDA.PubkeyCompendium, "0x") + s.DataSources[3].Source.Address = strings.TrimPrefix(u.c.EigenDA.RegistryCoordinator, "0x") s.DataSources[3].Source.StartBlock = startBlock - s.DataSources[4].Source.Address = strings.TrimPrefix(u.c.EigenDA.RegistryCoordinatorWithIndices, "0x") + s.DataSources[4].Source.Address = strings.TrimPrefix(u.c.EigenDA.BlsApkRegistry, "0x") s.DataSources[4].Source.StartBlock = startBlock - s.DataSources[5].Source.Address = strings.TrimPrefix(u.c.EigenDA.PubkeyRegistry, "0x") - s.DataSources[5].Source.StartBlock = startBlock } func (u eigenDAOperatorStateSubgraphUpdater) UpdateNetworks(n Networks, startBlock int) { - n["devnet"]["BLSRegistryCoordinatorWithIndices"]["address"] = u.c.EigenDA.RegistryCoordinatorWithIndices - n["devnet"]["BLSRegistryCoordinatorWithIndices"]["startBlock"] = startBlock - n["devnet"]["BLSRegistryCoordinatorWithIndices_Operator"]["address"] = u.c.EigenDA.RegistryCoordinatorWithIndices - n["devnet"]["BLSRegistryCoordinatorWithIndices_Operator"]["startBlock"] = startBlock - - n["devnet"]["BLSPubkeyRegistry"]["address"] = u.c.EigenDA.PubkeyRegistry - n["devnet"]["BLSPubkeyRegistry"]["startBlock"] = startBlock - n["devnet"]["BLSPubkeyRegistry_QuorumApkUpdates"]["address"] = u.c.EigenDA.PubkeyRegistry - n["devnet"]["BLSPubkeyRegistry_QuorumApkUpdates"]["startBlock"] = startBlock - - n["devnet"]["BLSPubkeyCompendium"]["address"] = u.c.EigenDA.PubkeyCompendium - n["devnet"]["BLSPubkeyCompendium"]["startBlock"] = startBlock - n["devnet"]["BLSPubkeyCompendium_Operator"]["address"] = u.c.EigenDA.PubkeyCompendium - n["devnet"]["BLSPubkeyCompendium_Operator"]["startBlock"] = startBlock + n["devnet"]["RegistryCoordinator"]["address"] = u.c.EigenDA.RegistryCoordinator + n["devnet"]["RegistryCoordinator"]["startBlock"] = startBlock + n["devnet"]["RegistryCoordinator_Operator"]["address"] = u.c.EigenDA.RegistryCoordinator + n["devnet"]["RegistryCoordinator_Operator"]["startBlock"] = startBlock + + n["devnet"]["BLSApkRegistry"]["address"] = u.c.EigenDA.BlsApkRegistry + n["devnet"]["BLSApkRegistry"]["startBlock"] = startBlock + n["devnet"]["BLSApkRegistry_Operator"]["address"] = u.c.EigenDA.BlsApkRegistry + n["devnet"]["BLSApkRegistry_Operator"]["startBlock"] = startBlock + n["devnet"]["BLSApkRegistry_QuorumApkUpdates"]["address"] = u.c.EigenDA.BlsApkRegistry + n["devnet"]["BLSApkRegistry_QuorumApkUpdates"]["startBlock"] = startBlock } type eigenDAUIMonitoringUpdater struct { diff --git a/inabox/resources/kzg/g1.point b/inabox/resources/kzg/g1.point index 047503cd0d..afa9a885fd 100644 Binary files a/inabox/resources/kzg/g1.point and b/inabox/resources/kzg/g1.point differ diff --git a/inabox/resources/kzg/g1.point.300000 b/inabox/resources/kzg/g1.point.300000 index a1a37a811f..aea5818ced 100644 Binary files a/inabox/resources/kzg/g1.point.300000 and b/inabox/resources/kzg/g1.point.300000 differ diff --git a/inabox/resources/kzg/g2.point b/inabox/resources/kzg/g2.point index 47ee85aec4..d6bc8299a0 100644 Binary files a/inabox/resources/kzg/g2.point and b/inabox/resources/kzg/g2.point differ diff --git a/inabox/resources/kzg/g2.point.300000 b/inabox/resources/kzg/g2.point.300000 index 43a055abea..198024d888 100644 Binary files a/inabox/resources/kzg/g2.point.300000 and b/inabox/resources/kzg/g2.point.300000 differ diff --git a/inabox/templates/testconfig-anvil-docker.yaml b/inabox/templates/testconfig-anvil-docker.yaml index f4d5a67ea0..bee44fca45 100644 --- a/inabox/templates/testconfig-anvil-docker.yaml +++ b/inabox/templates/testconfig-anvil-docker.yaml @@ -41,6 +41,7 @@ services: G2_PATH: resources/kzg/g2.point CACHE_PATH: resources/kzg/SRSTables SRS_ORDER: 3000 + SRS_LOAD: 2900 CHALLENGE_ORDER: 3000 STD_LOG_LEVEL: "trace" FILE_LOG_LEVEL: "trace" diff --git a/inabox/templates/testconfig-anvil-nochurner.yaml b/inabox/templates/testconfig-anvil-nochurner.yaml index cc52f9c7d4..65da4fd752 100644 --- a/inabox/templates/testconfig-anvil-nochurner.yaml +++ b/inabox/templates/testconfig-anvil-nochurner.yaml @@ -40,6 +40,7 @@ services: G2_PATH: resources/kzg/g2.point CACHE_PATH: resources/kzg/SRSTables SRS_ORDER: 3000 + SRS_LOAD: 2900 CHALLENGE_ORDER: 3000 STD_LOG_LEVEL: "trace" FILE_LOG_LEVEL: "trace" diff --git a/inabox/templates/testconfig-anvil-nograph.yaml b/inabox/templates/testconfig-anvil-nograph.yaml index 53c8e4e31c..a6581264e2 100644 --- a/inabox/templates/testconfig-anvil-nograph.yaml +++ b/inabox/templates/testconfig-anvil-nograph.yaml @@ -40,6 +40,7 @@ services: G2_PATH: resources/kzg/g2.point CACHE_PATH: resources/kzg/SRSTables SRS_ORDER: 3000 + SRS_LOAD: 2900 CHALLENGE_ORDER: 3000 STD_LOG_LEVEL: "trace" FILE_LOG_LEVEL: "trace" diff --git a/inabox/templates/testconfig-anvil.yaml b/inabox/templates/testconfig-anvil.yaml index 7d4349ab47..5a9cf9163d 100644 --- a/inabox/templates/testconfig-anvil.yaml +++ b/inabox/templates/testconfig-anvil.yaml @@ -41,6 +41,7 @@ services: G2_PATH: resources/kzg/g2.point CACHE_PATH: resources/kzg/SRSTables SRS_ORDER: 3000 + SRS_LOAD: 2900 CHALLENGE_ORDER: 3000 STD_LOG_LEVEL: "trace" FILE_LOG_LEVEL: "trace" diff --git a/inabox/templates/testconfig-docker-anvil.yaml b/inabox/templates/testconfig-docker-anvil.yaml index 6dd21492ee..7d338dcca0 100644 --- a/inabox/templates/testconfig-docker-anvil.yaml +++ b/inabox/templates/testconfig-docker-anvil.yaml @@ -45,6 +45,7 @@ services: G2_PATH: /data/kzg/g2.point CACHE_PATH: /data/kzg/SRSTables SRS_ORDER: 3000 + SRS_LOAD: 2000 CHALLENGE_ORDER: 3000 STD_LOG_LEVEL: "trace" VERBOSE: true diff --git a/inabox/templates/testconfig-geth.yaml b/inabox/templates/testconfig-geth.yaml index bb380e0c63..078a466c2f 100644 --- a/inabox/templates/testconfig-geth.yaml +++ b/inabox/templates/testconfig-geth.yaml @@ -32,6 +32,7 @@ services: G2_PATH: resources/kzg/g2.point CACHE_PATH: resources/kzg/SRSTables SRS_ORDER: 3000 + SRS_LOAD: 3000 CHALLENGE_ORDER: 3000 STD_LOG_LEVEL: "trace" VERBOSE: true diff --git a/inabox/tests/integration_suite_test.go b/inabox/tests/integration_suite_test.go index 01783f6497..a169b39a5b 100644 --- a/inabox/tests/integration_suite_test.go +++ b/inabox/tests/integration_suite_test.go @@ -44,7 +44,7 @@ var ( logger common.Logger ethClient common.EthClient rpcClient common.RPCEthClient - mockRollup *rollupbindings.Contractmockrollup + mockRollup *rollupbindings.ContractMockRollup retrievalClient clients.RetrievalClient numConfirmations int = 3 @@ -124,7 +124,7 @@ var _ = BeforeSuite(func() { Expect(err).To(BeNil()) rpcClient, err = ethrpc.Dial(testConfig.Deployers[0].RPC) Expect(err).To(BeNil()) - mockRollup, err = rollupbindings.NewContractmockrollup(gcommon.HexToAddress(testConfig.MockRollup), ethClient) + mockRollup, err = rollupbindings.NewContractMockRollup(gcommon.HexToAddress(testConfig.MockRollup), ethClient) Expect(err).To(BeNil()) err = setupRetrievalClient(testConfig) Expect(err).To(BeNil()) @@ -158,15 +158,16 @@ func setupRetrievalClient(testConfig *deploy.Config) error { } encoder, err := encoding.NewEncoder(encoding.EncoderConfig{ KzgConfig: kzgEncoder.KzgConfig{ - G1Path: testConfig.Retriever.RETRIEVER_G1_PATH, - G2Path: testConfig.Retriever.RETRIEVER_G2_PATH, - CacheDir: testConfig.Retriever.RETRIEVER_CACHE_PATH, - NumWorker: 1, - SRSOrder: uint64(srsOrder), - Verbose: true, - PreloadEncoder: false, + G1Path: testConfig.Retriever.RETRIEVER_G1_PATH, + G2Path: testConfig.Retriever.RETRIEVER_G2_PATH, + CacheDir: testConfig.Retriever.RETRIEVER_CACHE_PATH, + NumWorker: 1, + SRSOrder: uint64(srsOrder), + SRSNumberToLoad: uint64(srsOrder), + Verbose: true, + PreloadEncoder: false, }, - }) + }, false) if err != nil { return err } diff --git a/inabox/tests/integration_test.go b/inabox/tests/integration_test.go index f617427c68..8531919d47 100644 --- a/inabox/tests/integration_test.go +++ b/inabox/tests/integration_test.go @@ -157,30 +157,26 @@ var _ = Describe("Inabox Integration", func() { }) func blobHeaderFromProto(blobHeader *disperserpb.BlobHeader) rollupbindings.IEigenDAServiceManagerBlobHeader { - commitmentBytes := blobHeader.GetCommitment() - commitment, err := new(core.Commitment).Deserialize(commitmentBytes) - Expect(err).To(BeNil()) quorums := make([]rollupbindings.IEigenDAServiceManagerQuorumBlobParam, len(blobHeader.GetBlobQuorumParams())) for i, quorum := range blobHeader.GetBlobQuorumParams() { quorums[i] = rollupbindings.IEigenDAServiceManagerQuorumBlobParam{ QuorumNumber: uint8(quorum.GetQuorumNumber()), AdversaryThresholdPercentage: uint8(quorum.GetAdversaryThresholdPercentage()), QuorumThresholdPercentage: uint8(quorum.GetQuorumThresholdPercentage()), - QuantizationParameter: 0, + ChunkLength: quorum.ChunkLength, } } - return rollupbindings.IEigenDAServiceManagerBlobHeader{ Commitment: rollupbindings.BN254G1Point{ - X: commitment.X.BigInt(new(big.Int)), - Y: commitment.Y.BigInt(new(big.Int)), + X: new(big.Int).SetBytes(blobHeader.GetCommitment().X), + Y: new(big.Int).SetBytes(blobHeader.GetCommitment().Y), }, DataLength: blobHeader.GetDataLength(), QuorumBlobParams: quorums, } } -func blobVerificationProofFromProto(verificationProof *disperserpb.BlobVerificationProof) rollupbindings.EigenDABlobUtilsBlobVerificationProof { +func blobVerificationProofFromProto(verificationProof *disperserpb.BlobVerificationProof) rollupbindings.EigenDARollupUtilsBlobVerificationProof { batchMetadataProto := verificationProof.GetBatchMetadata() batchHeaderProto := verificationProof.GetBatchMetadata().GetBatchHeader() var batchRoot [32]byte @@ -200,7 +196,7 @@ func blobVerificationProofFromProto(verificationProof *disperserpb.BlobVerificat Fee: fee, ConfirmationBlockNumber: batchMetadataProto.GetConfirmationBlockNumber(), } - return rollupbindings.EigenDABlobUtilsBlobVerificationProof{ + return rollupbindings.EigenDARollupUtilsBlobVerificationProof{ BatchId: verificationProof.GetBatchId(), BlobIndex: uint8(verificationProof.GetBlobIndex()), BatchMetadata: batchMetadata, diff --git a/node/config.go b/node/config.go index 3ce2f0e5b6..2c2d7cb188 100644 --- a/node/config.go +++ b/node/config.go @@ -23,7 +23,7 @@ const ( // Min number of seconds for the ExpirationPollIntervalSecFlag. minExpirationPollIntervalSec = 3 AppName = "da-node" - SemVer = "0.2.3" + SemVer = "0.3.0" GitCommit = "" GitDate = "" ) diff --git a/node/grpc/server.go b/node/grpc/server.go index 1126dd6680..c4b64610da 100644 --- a/node/grpc/server.go +++ b/node/grpc/server.go @@ -173,8 +173,8 @@ func (s *Server) RetrieveChunks(ctx context.Context, in *pb.RetrieveChunksReques })) defer timer.ObserveDuration() - if in.GetQuorumId() > 255 { - return nil, fmt.Errorf("invalid request: quorum ID must be in range [0, 255], but found %d", in.GetQuorumId()) + if in.GetQuorumId() > core.MaxQuorumID { + return nil, fmt.Errorf("invalid request: quorum ID must be in range [0, %d], but found %d", core.MaxQuorumID, in.GetQuorumId()) } var batchHeaderHash [32]byte diff --git a/node/grpc/server_test.go b/node/grpc/server_test.go index 8eddc5e0c9..6af185ff75 100644 --- a/node/grpc/server_test.go +++ b/node/grpc/server_test.go @@ -9,6 +9,7 @@ import ( "testing" "time" + commonpb "github.com/Layr-Labs/eigenda/api/grpc/common" pb "github.com/Layr-Labs/eigenda/api/grpc/node" "github.com/Layr-Labs/eigenda/common/logging" commonmock "github.com/Layr-Labs/eigenda/common/mock" @@ -18,7 +19,6 @@ import ( "github.com/Layr-Labs/eigenda/node" "github.com/Layr-Labs/eigenda/node/grpc" "github.com/Layr-Labs/eigenda/pkg/encoding/kzgEncoder" - "github.com/Layr-Labs/eigenda/pkg/kzg/bn254" "github.com/Layr-Labs/eigensdk-go/metrics" "github.com/consensys/gnark-crypto/ecc/bn254/fp" "github.com/prometheus/client_golang/prometheus" @@ -44,14 +44,15 @@ func TestMain(m *testing.M) { // makeTestEncoder makes an encoder currently using the only supported backend. func makeTestEncoder() (core.Encoder, error) { config := kzgEncoder.KzgConfig{ - G1Path: "../../inabox/resources/kzg/g1.point.300000", - G2Path: "../../inabox/resources/kzg/g2.point.300000", - CacheDir: "../../inabox/resources/kzg/SRSTables", - SRSOrder: 300000, - NumWorker: uint64(runtime.GOMAXPROCS(0)), + G1Path: "../../inabox/resources/kzg/g1.point.300000", + G2Path: "../../inabox/resources/kzg/g2.point.300000", + CacheDir: "../../inabox/resources/kzg/SRSTables", + SRSOrder: 300000, + SRSNumberToLoad: 300000, + NumWorker: uint64(runtime.GOMAXPROCS(0)), } - return encoding.NewEncoder(encoding.EncoderConfig{KzgConfig: config}) + return encoding.NewEncoder(encoding.EncoderConfig{KzgConfig: config}, true) } func newTestServer(t *testing.T, mockValidator bool) *grpc.Server { @@ -126,24 +127,33 @@ func newTestServer(t *testing.T, mockValidator bool) *grpc.Server { } func makeStoreChunksRequest(t *testing.T, quorumThreshold, adversaryThreshold uint8) (*pb.StoreChunksRequest, [32]byte, [32]byte, []*core.BlobHeader, []*pb.BlobHeader) { - var commitX, commitY, lengthX, lengthY fp.Element + var commitX, commitY fp.Element _, err := commitX.SetString("21661178944771197726808973281966770251114553549453983978976194544185382599016") assert.NoError(t, err) _, err = commitY.SetString("9207254729396071334325696286939045899948985698134704137261649190717970615186") assert.NoError(t, err) - _, err = lengthX.SetString("18730744272503541936633286178165146673834730535090946570310418711896464442549") - assert.NoError(t, err) - _, err = lengthY.SetString("15356431458378126778840641829778151778222945686256112821552210070627093656047") - assert.NoError(t, err) - commitment := bn254.G1Point{ + commitment := &core.G1Commitment{ X: commitX, Y: commitY, } - lengthProof := bn254.G1Point{ - X: lengthX, - Y: lengthY, - } + var lengthXA0, lengthXA1, lengthYA0, lengthYA1 fp.Element + _, err = lengthXA0.SetString("10857046999023057135944570762232829481370756359578518086990519993285655852781") + assert.NoError(t, err) + _, err = lengthXA1.SetString("11559732032986387107991004021392285783925812861821192530917403151452391805634") + assert.NoError(t, err) + _, err = lengthYA0.SetString("8495653923123431417604973247489272438418190587263600148770280649306958101930") + assert.NoError(t, err) + _, err = lengthYA1.SetString("4082367875863433681332203403145435568316851327593401208105741076214120093531") + assert.NoError(t, err) + + var lengthProof, lengthCommitment core.G2Commitment + lengthProof.X.A0 = lengthXA0 + lengthProof.X.A1 = lengthXA1 + lengthProof.Y.A0 = lengthYA0 + lengthProof.Y.A1 = lengthYA1 + + lengthCommitment = lengthProof quorumHeader := &core.BlobQuorumInfo{ SecurityParam: core.SecurityParam{ @@ -157,17 +167,19 @@ func makeStoreChunksRequest(t *testing.T, quorumThreshold, adversaryThreshold ui blobHeaders := []*core.BlobHeader{ { BlobCommitments: core.BlobCommitments{ - Commitment: &core.Commitment{G1Point: &commitment}, - LengthProof: &core.Commitment{G1Point: &lengthProof}, - Length: 48, + Commitment: commitment, + LengthCommitment: &lengthCommitment, + LengthProof: &lengthProof, + Length: 48, }, QuorumInfos: []*core.BlobQuorumInfo{quorumHeader}, }, { BlobCommitments: core.BlobCommitments{ - Commitment: &core.Commitment{G1Point: &commitment}, - LengthProof: &core.Commitment{G1Point: &lengthProof}, - Length: 50, + Commitment: commitment, + LengthCommitment: &lengthCommitment, + LengthProof: &lengthProof, + Length: 50, }, QuorumInfos: []*core.BlobQuorumInfo{quorumHeader}, }, @@ -301,10 +313,19 @@ func TestGetBlobHeader(t *testing.T) { } func blobHeaderToProto(t *testing.T, blobHeader *core.BlobHeader) *pb.BlobHeader { - serializedCommitment, err := blobHeader.Commitment.Serialize() - assert.NoError(t, err) - serializedLengthProof, err := blobHeader.LengthProof.Serialize() - assert.NoError(t, err) + var lengthCommitment, lengthProof pb.G2Commitment + if blobHeader.LengthCommitment != nil { + lengthCommitment.XA0 = blobHeader.LengthCommitment.X.A0.Marshal() + lengthCommitment.XA1 = blobHeader.LengthCommitment.X.A1.Marshal() + lengthCommitment.YA0 = blobHeader.LengthCommitment.Y.A0.Marshal() + lengthCommitment.YA1 = blobHeader.LengthCommitment.Y.A1.Marshal() + } + if blobHeader.LengthProof != nil { + lengthProof.XA0 = blobHeader.LengthProof.X.A0.Marshal() + lengthProof.XA1 = blobHeader.LengthProof.X.A1.Marshal() + lengthProof.YA0 = blobHeader.LengthProof.Y.A0.Marshal() + lengthProof.YA1 = blobHeader.LengthProof.Y.A1.Marshal() + } quorumHeader := &pb.BlobQuorumInfo{ QuorumId: uint32(blobHeader.QuorumInfos[0].QuorumID), QuorumThreshold: uint32(blobHeader.QuorumInfos[0].QuorumThreshold), @@ -313,9 +334,13 @@ func blobHeaderToProto(t *testing.T, blobHeader *core.BlobHeader) *pb.BlobHeader } return &pb.BlobHeader{ - Commitment: serializedCommitment, - LengthProof: serializedLengthProof, - Length: uint32(blobHeader.Length), - QuorumHeaders: []*pb.BlobQuorumInfo{quorumHeader}, + Commitment: &commonpb.G1Commitment{ + X: blobHeader.Commitment.X.Marshal(), + Y: blobHeader.Commitment.Y.Marshal(), + }, + LengthCommitment: &lengthCommitment, + LengthProof: &lengthProof, + Length: uint32(blobHeader.Length), + QuorumHeaders: []*pb.BlobQuorumInfo{quorumHeader}, } } diff --git a/node/grpc/utils.go b/node/grpc/utils.go index 4b63614955..8f6bcf7eda 100644 --- a/node/grpc/utils.go +++ b/node/grpc/utils.go @@ -8,6 +8,7 @@ import ( pb "github.com/Layr-Labs/eigenda/api/grpc/node" "github.com/Layr-Labs/eigenda/core" "github.com/Layr-Labs/eigenda/node" + "github.com/consensys/gnark-crypto/ecc/bn254/fp" "github.com/wealdtech/go-merkletree" "github.com/wealdtech/go-merkletree/keccak256" "google.golang.org/protobuf/proto" @@ -57,13 +58,24 @@ func GetBlobMessages(in *pb.StoreChunksRequest) ([]*core.BlobMessage, error) { // Constructs a core.BlobHeader from a proto of pb.BlobHeader. func GetBlobHeaderFromProto(h *pb.BlobHeader) (*core.BlobHeader, error) { - commitment, err := new(core.Commitment).Deserialize(h.GetCommitment()) - if err != nil { - return nil, err + commitX := new(fp.Element).SetBytes(h.GetCommitment().GetX()) + commitY := new(fp.Element).SetBytes(h.GetCommitment().GetY()) + commitment := &core.G1Commitment{ + X: *commitX, + Y: *commitY, } - lenProof, err := new(core.Commitment).Deserialize(h.GetLengthProof()) - if err != nil { - return nil, err + var lengthCommitment, lengthProof core.G2Commitment + if h.GetLengthCommitment() != nil { + lengthCommitment.X.A0 = *new(fp.Element).SetBytes(h.GetLengthCommitment().GetXA0()) + lengthCommitment.X.A1 = *new(fp.Element).SetBytes(h.GetLengthCommitment().GetXA1()) + lengthCommitment.Y.A0 = *new(fp.Element).SetBytes(h.GetLengthCommitment().GetYA0()) + lengthCommitment.Y.A1 = *new(fp.Element).SetBytes(h.GetLengthCommitment().GetYA1()) + } + if h.GetLengthProof() != nil { + lengthProof.X.A0 = *new(fp.Element).SetBytes(h.GetLengthProof().GetXA0()) + lengthProof.X.A1 = *new(fp.Element).SetBytes(h.GetLengthProof().GetXA1()) + lengthProof.Y.A0 = *new(fp.Element).SetBytes(h.GetLengthProof().GetYA0()) + lengthProof.Y.A1 = *new(fp.Element).SetBytes(h.GetLengthProof().GetYA1()) } quorumHeaders := make([]*core.BlobQuorumInfo, len(h.GetQuorumHeaders())) @@ -80,9 +92,14 @@ func GetBlobHeaderFromProto(h *pb.BlobHeader) (*core.BlobHeader, error) { } return &core.BlobHeader{ - BlobCommitments: core.BlobCommitments{Commitment: commitment, LengthProof: lenProof, Length: uint(h.GetLength())}, - QuorumInfos: quorumHeaders, - AccountID: h.AccountId, + BlobCommitments: core.BlobCommitments{ + Commitment: commitment, + LengthCommitment: &lengthCommitment, + LengthProof: &lengthProof, + Length: uint(h.GetLength()), + }, + QuorumInfos: quorumHeaders, + AccountID: h.AccountId, }, nil } diff --git a/node/node.go b/node/node.go index d145fc27d8..3a1f63c5ee 100644 --- a/node/node.go +++ b/node/node.go @@ -12,6 +12,8 @@ import ( "github.com/Layr-Labs/eigenda/common/pubip" gethcommon "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/crypto" + "github.com/prometheus/client_golang/prometheus" "github.com/Layr-Labs/eigenda/api/grpc/node" "github.com/Layr-Labs/eigenda/common" @@ -21,6 +23,7 @@ import ( "github.com/Layr-Labs/eigenda/core/eth" "github.com/Layr-Labs/eigenda/core/indexer" "github.com/Layr-Labs/eigensdk-go/chainio/constructor" + "github.com/Layr-Labs/eigensdk-go/metrics" "github.com/Layr-Labs/eigensdk-go/metrics/collectors/economic" rpccalls "github.com/Layr-Labs/eigensdk-go/metrics/collectors/rpc_calls" "github.com/Layr-Labs/eigensdk-go/nodeapi" @@ -62,12 +65,16 @@ type Node struct { // NewNode creates a new Node with the provided config. func NewNode(config *Config, pubIPProvider pubip.Provider, logger common.Logger) (*Node, error) { // Setup metrics - sdkClients, err := buildSdkClients(config, logger) - if err != nil { - return nil, err - } - metrics := NewMetrics(sdkClients.Metrics, sdkClients.PrometheusRegistry, logger, ":"+config.MetricsPort) - rpcCallsCollector := rpccalls.NewCollector(AppName, sdkClients.PrometheusRegistry) + // sdkClients, err := buildSdkClients(config, logger) + // if err != nil { + // return nil, err + // } + + promReg := prometheus.NewRegistry() + eigenMetrics := metrics.NewEigenMetrics(AppName, ":"+config.MetricsPort, promReg, logger) + + metrics := NewMetrics(eigenMetrics, promReg, logger, ":"+config.MetricsPort) + rpcCallsCollector := rpccalls.NewCollector(AppName, promReg) // Generate BLS keys keyPair, err := core.MakeKeyPairFromString(config.PrivateBls) @@ -106,7 +113,7 @@ func NewNode(config *Config, pubIPProvider pubip.Provider, logger common.Logger) nodeApi := nodeapi.NewNodeApi(AppName, SemVer, ":"+config.NodeApiPort, logger) // Make validator - enc, err := encoding.NewEncoder(config.EncoderConfig) + enc, err := encoding.NewEncoder(config.EncoderConfig, false) if err != nil { return nil, err } @@ -183,14 +190,20 @@ func (n *Node) Start(ctx context.Context) error { n.Config.ID, "hostname", n.Config.Hostname, "dispersalPort", n.Config.DispersalPort, "retrievalPort", n.Config.RetrievalPort, "churnerUrl", n.Config.ChurnerUrl, "quorumIds", n.Config.QuorumIDList) socket := string(core.MakeOperatorSocket(n.Config.Hostname, n.Config.DispersalPort, n.Config.RetrievalPort)) + privateKey, err := crypto.HexToECDSA(n.Config.EthClientConfig.PrivateKeyString) + if err != nil { + return fmt.Errorf("NewClient: cannot parse private key: %w", err) + } operator := &Operator{ + Address: crypto.PubkeyToAddress(privateKey.PublicKey).Hex(), Socket: socket, Timeout: 10 * time.Second, + PrivKey: privateKey, KeyPair: n.KeyPair, OperatorId: n.Config.ID, QuorumIDs: n.Config.QuorumIDList, } - err := RegisterOperator(ctx, operator, n.Transactor, n.Config.ChurnerUrl, n.Config.UseSecureGrpc, n.Logger) + err = RegisterOperator(ctx, operator, n.Transactor, n.Config.ChurnerUrl, n.Config.UseSecureGrpc, n.Logger) if err != nil { return fmt.Errorf("failed to register the operator: %w", err) } @@ -414,6 +427,8 @@ func (n *Node) checkCurrentNodeIp(ctx context.Context) { // we only need to build the sdk clients for eigenmetrics right now, // but we might eventually want to move as much as possible to the sdk +// +//lint:ignore U1000 this function will be used once we move to the sdk func buildSdkClients(config *Config, logger common.Logger) (*constructor.Clients, error) { // we need to make a transactor just so we can get the registryCoordinatorAddr // to pass to the sdk config diff --git a/node/operator.go b/node/operator.go index 8566cd8b83..eb8fd58a73 100644 --- a/node/operator.go +++ b/node/operator.go @@ -2,15 +2,18 @@ package node import ( "context" + "crypto/ecdsa" "crypto/tls" "errors" "fmt" + "math/big" "time" grpcchurner "github.com/Layr-Labs/eigenda/api/grpc/churner" "github.com/Layr-Labs/eigenda/churner" "github.com/Layr-Labs/eigenda/common" "github.com/Layr-Labs/eigenda/core" + gethcommon "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/crypto" "google.golang.org/grpc" "google.golang.org/grpc/credentials" @@ -18,8 +21,10 @@ import ( ) type Operator struct { + Address string Socket string Timeout time.Duration + PrivKey *ecdsa.PrivateKey KeyPair *core.KeyPair OperatorId core.OperatorID QuorumIDs []core.QuorumID @@ -37,12 +42,6 @@ func RegisterOperator(ctx context.Context, operator *Operator, transactor core.T return nil } - // if the operator is not registered, we may need to register the BLSPublicKey - err = transactor.RegisterBLSPublicKey(ctx, operator.KeyPair) - if err != nil { - return fmt.Errorf("failed to register the nodes bls public key: %w", err) - } - logger.Info("Quorums to register for", "quorums", operator.QuorumIDs) if len(operator.QuorumIDs) == 0 { @@ -72,6 +71,15 @@ func RegisterOperator(ctx context.Context, operator *Operator, transactor core.T logger.Info("Should call churner", "shouldCallChurner", shouldCallChurner) + // Generate salt and expiry + + privateKeyBytes := []byte(operator.KeyPair.PrivKey.String()) + salt := [32]byte{} + copy(salt[:], crypto.Keccak256([]byte("churn"), []byte(time.Now().String()), operator.QuorumIDs[:], privateKeyBytes)) + + // Get the current block number + expiry := big.NewInt((time.Now().Add(10 * time.Minute)).Unix()) + // if we should call the churner, call it if shouldCallChurner { churnReply, err := requestChurnApproval(ctx, operator, churnerUrl, useSecureGrpc, logger) @@ -79,10 +87,10 @@ func RegisterOperator(ctx context.Context, operator *Operator, transactor core.T return fmt.Errorf("failed to request churn approval: %w", err) } - return transactor.RegisterOperatorWithChurn(ctx, operator.KeyPair.PubKey, operator.Socket, operator.QuorumIDs, churnReply) + return transactor.RegisterOperatorWithChurn(ctx, operator.KeyPair, operator.Socket, operator.QuorumIDs, operator.PrivKey, salt, expiry, churnReply) } else { // other wise just register normally - return transactor.RegisterOperator(ctx, operator.KeyPair.PubKey, operator.Socket, operator.QuorumIDs) + return transactor.RegisterOperator(ctx, operator.KeyPair, operator.Socket, operator.QuorumIDs, operator.PrivKey, salt, expiry) } } @@ -139,22 +147,27 @@ func requestChurnApproval(ctx context.Context, operator *Operator, churnerUrl st ctx, cancel := context.WithTimeout(ctx, operator.Timeout) defer cancel() - request := newChurnRequest(operator.KeyPair, operator.QuorumIDs) + request := newChurnRequest(operator.Address, operator.KeyPair, operator.QuorumIDs) opt := grpc.MaxCallSendMsgSize(1024 * 1024 * 300) return gc.Churn(ctx, request, opt) } -func newChurnRequest(KeyPair *core.KeyPair, QuorumIDs []core.QuorumID) *grpcchurner.ChurnRequest { +func newChurnRequest(address string, KeyPair *core.KeyPair, QuorumIDs []core.QuorumID) *grpcchurner.ChurnRequest { + + // generate salt + privateKeyBytes := []byte(KeyPair.PrivKey.String()) + salt := crypto.Keccak256([]byte("churn"), []byte(time.Now().String()), QuorumIDs[:], privateKeyBytes) + churnRequest := &churner.ChurnRequest{ + OperatorAddress: gethcommon.HexToAddress(address), OperatorToRegisterPubkeyG1: KeyPair.PubKey, OperatorToRegisterPubkeyG2: KeyPair.GetPubKeyG2(), + OperatorRequestSignature: &core.Signature{}, QuorumIDs: QuorumIDs, } - // generate salt - privateKeyBytes := []byte(KeyPair.PrivKey.String()) - salt := crypto.Keccak256([]byte("churn"), []byte(time.Now().String()), QuorumIDs[:], privateKeyBytes) - copy(churnRequest.Salt[:], salt[:]) + + copy(churnRequest.Salt[:], salt) // sign the request churnRequest.OperatorRequestSignature = KeyPair.SignMessage(churner.CalculateRequestHash(churnRequest)) @@ -163,6 +176,9 @@ func newChurnRequest(KeyPair *core.KeyPair, QuorumIDs []core.QuorumID) *grpcchur churnRequestPb := &grpcchurner.ChurnRequest{ OperatorToRegisterPubkeyG1: churnRequest.OperatorToRegisterPubkeyG1.Serialize(), OperatorToRegisterPubkeyG2: churnRequest.OperatorToRegisterPubkeyG2.Serialize(), + OperatorRequestSignature: churnRequest.OperatorRequestSignature.Serialize(), + Salt: salt[:], + OperatorAddress: address, } churnRequestPb.QuorumIds = make([]uint32, len(QuorumIDs)) @@ -170,8 +186,5 @@ func newChurnRequest(KeyPair *core.KeyPair, QuorumIDs []core.QuorumID) *grpcchur churnRequestPb.QuorumIds[i] = uint32(quorumID) } - churnRequestPb.OperatorRequestSignature = churnRequest.OperatorRequestSignature.Serialize() - churnRequestPb.Salt = churnRequest.Salt[:] - return churnRequestPb } diff --git a/node/plugin/cmd/main.go b/node/plugin/cmd/main.go index 504beacb97..ef16f83506 100644 --- a/node/plugin/cmd/main.go +++ b/node/plugin/cmd/main.go @@ -116,8 +116,10 @@ func pluginOps(ctx *cli.Context) { } operator := &node.Operator{ + Address: sk.Address.Hex(), Socket: socket, Timeout: 10 * time.Second, + PrivKey: sk.PrivateKey, KeyPair: keyPair, OperatorId: keyPair.GetPubKeyG1().GetOperatorID(), QuorumIDs: config.QuorumIDList, diff --git a/node/store_test.go b/node/store_test.go index d2c639d8d8..1802fa881a 100644 --- a/node/store_test.go +++ b/node/store_test.go @@ -6,6 +6,7 @@ import ( "testing" "time" + commonpb "github.com/Layr-Labs/eigenda/api/grpc/common" pb "github.com/Layr-Labs/eigenda/api/grpc/node" "github.com/Layr-Labs/eigenda/common/mock" "github.com/Layr-Labs/eigenda/core" @@ -30,14 +31,28 @@ func CreateBatch(t *testing.T) (*core.BatchHeader, []*core.BlobMessage, []*pb.Bl _, err = lengthY.SetString("15356431458378126778840641829778151778222945686256112821552210070627093656047") assert.NoError(t, err) + var lengthXA0, lengthXA1, lengthYA0, lengthYA1 fp.Element + _, err = lengthXA0.SetString("10857046999023057135944570762232829481370756359578518086990519993285655852781") + assert.NoError(t, err) + _, err = lengthXA1.SetString("11559732032986387107991004021392285783925812861821192530917403151452391805634") + assert.NoError(t, err) + _, err = lengthYA0.SetString("8495653923123431417604973247489272438418190587263600148770280649306958101930") + assert.NoError(t, err) + _, err = lengthYA1.SetString("4082367875863433681332203403145435568316851327593401208105741076214120093531") + assert.NoError(t, err) + + var lengthProof, lengthCommitment bn254.G2Point + lengthProof.X.A0 = lengthXA0 + lengthProof.X.A1 = lengthXA1 + lengthProof.Y.A0 = lengthYA0 + lengthProof.Y.A1 = lengthYA1 + + lengthCommitment = lengthProof + commitment := bn254.G1Point{ X: commitX, Y: commitY, } - lengthProof := bn254.G1Point{ - X: lengthX, - Y: lengthY, - } adversaryThreshold := uint8(90) quorumThreshold := uint8(100) @@ -59,9 +74,10 @@ func CreateBatch(t *testing.T) (*core.BatchHeader, []*core.BlobMessage, []*pb.Bl { BlobHeader: &core.BlobHeader{ BlobCommitments: core.BlobCommitments{ - Commitment: &core.Commitment{G1Point: &commitment}, - LengthProof: &core.Commitment{G1Point: &lengthProof}, - Length: 48, + Commitment: (*core.G1Commitment)(&commitment), + LengthCommitment: (*core.G2Commitment)(&lengthCommitment), + LengthProof: (*core.LengthProof)(&lengthProof), + Length: 48, }, QuorumInfos: []*core.BlobQuorumInfo{quorumHeader}, }, @@ -74,8 +90,10 @@ func CreateBatch(t *testing.T) (*core.BatchHeader, []*core.BlobMessage, []*pb.Bl { BlobHeader: &core.BlobHeader{ BlobCommitments: core.BlobCommitments{ - Commitment: &core.Commitment{G1Point: &commitment}, - Length: 50, + Commitment: (*core.G1Commitment)(&commitment), + LengthCommitment: (*core.G2Commitment)(&lengthCommitment), + LengthProof: (*core.G2Commitment)(&lengthProof), + Length: 50, }, QuorumInfos: []*core.BlobQuorumInfo{quorumHeader}, }, @@ -92,11 +110,6 @@ func CreateBatch(t *testing.T) (*core.BatchHeader, []*core.BlobMessage, []*pb.Bl ReferenceBlockNumber: 0, } - serializedCommitment0, err := core.Commitment{G1Point: &commitment}.Serialize() - assert.NoError(t, err) - serializedLengthProof0, err := core.Commitment{G1Point: &lengthProof}.Serialize() - assert.NoError(t, err) - quorumHeaderProto := &pb.BlobQuorumInfo{ QuorumId: uint32(quorumHeader.QuorumID), AdversaryThreshold: uint32(quorumHeader.AdversaryThreshold), @@ -105,15 +118,43 @@ func CreateBatch(t *testing.T) (*core.BatchHeader, []*core.BlobMessage, []*pb.Bl } blobHeaderProto0 := &pb.BlobHeader{ - Commitment: serializedCommitment0, - LengthProof: serializedLengthProof0, + Commitment: &commonpb.G1Commitment{ + X: commitment.X.Marshal(), + Y: commitment.Y.Marshal(), + }, + LengthCommitment: &pb.G2Commitment{ + XA0: lengthCommitment.X.A0.Marshal(), + XA1: lengthCommitment.X.A1.Marshal(), + YA0: lengthCommitment.Y.A0.Marshal(), + YA1: lengthCommitment.Y.A1.Marshal(), + }, + LengthProof: &pb.G2Commitment{ + XA0: lengthProof.X.A0.Marshal(), + XA1: lengthProof.X.A1.Marshal(), + YA0: lengthProof.Y.A0.Marshal(), + YA1: lengthProof.Y.A1.Marshal(), + }, Length: uint32(48), QuorumHeaders: []*pb.BlobQuorumInfo{quorumHeaderProto}, } blobHeaderProto1 := &pb.BlobHeader{ - Commitment: serializedCommitment0, - LengthProof: serializedLengthProof0, + Commitment: &commonpb.G1Commitment{ + X: commitment.X.Marshal(), + Y: commitment.Y.Marshal(), + }, + LengthCommitment: &pb.G2Commitment{ + XA0: lengthCommitment.X.A0.Marshal(), + XA1: lengthCommitment.X.A1.Marshal(), + YA0: lengthCommitment.Y.A0.Marshal(), + YA1: lengthCommitment.Y.A1.Marshal(), + }, + LengthProof: &pb.G2Commitment{ + XA0: lengthProof.X.A0.Marshal(), + XA1: lengthProof.X.A1.Marshal(), + YA0: lengthProof.Y.A0.Marshal(), + YA1: lengthProof.Y.A1.Marshal(), + }, Length: uint32(50), QuorumHeaders: []*pb.BlobQuorumInfo{quorumHeaderProto}, } diff --git a/pkg/encoding/kzgEncoder/batchCommitEquivalence.go b/pkg/encoding/kzgEncoder/batchCommitEquivalence.go new file mode 100644 index 0000000000..d1fa88316c --- /dev/null +++ b/pkg/encoding/kzgEncoder/batchCommitEquivalence.go @@ -0,0 +1,94 @@ +package kzgEncoder + +import ( + "bytes" + "encoding/gob" + "errors" + + "github.com/Layr-Labs/eigenda/pkg/kzg/bn254" +) + +type CommitmentPair struct { + Commitment bn254.G1Point + LengthCommitment bn254.G2Point +} + +// generate a random value using Fiat Shamir transform +// we can also pseudo randomness generated locally, but we have to ensure no adversary can manipulate it +// Hashing everything takes about 1ms, so Fiat Shamir transform does not incur much cost +func GenRandomFactorForEquivalence(g1commits []bn254.G1Point, g2commits []bn254.G2Point) (bn254.Fr, error) { + var buffer bytes.Buffer + enc := gob.NewEncoder(&buffer) + + for _, commit := range g1commits { + err := enc.Encode(commit) + if err != nil { + return bn254.ZERO, err + } + } + + for _, commit := range g2commits { + err := enc.Encode(commit) + if err != nil { + return bn254.ZERO, err + } + } + + var randomFr bn254.Fr + + err := bn254.HashToSingleField(&randomFr, buffer.Bytes()) + if err != nil { + return bn254.ZERO, err + } + + return randomFr, nil +} + +func CreateRandomnessVector(g1commits []bn254.G1Point, g2commits []bn254.G2Point) ([]bn254.Fr, error) { + r, err := GenRandomFactorForEquivalence(g1commits, g2commits) + if err != nil { + return nil, err + } + n := len(g1commits) + + if len(g1commits) != len(g2commits) { + return nil, errors.New("Inconsistent number of blobs for g1 and g2") + } + + randomsFr := make([]bn254.Fr, n) + bn254.CopyFr(&randomsFr[0], &r) + + // power of r + for j := 0; j < n-1; j++ { + bn254.MulModFr(&randomsFr[j+1], &randomsFr[j], &r) + } + + return randomsFr, nil +} + +func (group *KzgEncoderGroup) BatchVerifyCommitEquivalence(commitmentsPair []CommitmentPair) error { + + g1commits := make([]bn254.G1Point, len(commitmentsPair)) + g2commits := make([]bn254.G2Point, len(commitmentsPair)) + for i := 0; i < len(commitmentsPair); i++ { + g1commits[i] = commitmentsPair[i].Commitment + g2commits[i] = commitmentsPair[i].LengthCommitment + } + + randomsFr, err := CreateRandomnessVector(g1commits, g2commits) + if err != nil { + return err + } + + lhsG1 := bn254.LinCombG1(g1commits, randomsFr) + lhsG2 := &bn254.GenG2 + + rhsG2 := bn254.LinCombG2(g2commits, randomsFr) + rhsG1 := &bn254.GenG1 + + if bn254.PairingsVerify(lhsG1, lhsG2, rhsG1, rhsG2) { + return nil + } else { + return errors.New("Universal Verify Incorrect paring") + } +} diff --git a/pkg/encoding/kzgEncoder/batchCommitEquivalence_test.go b/pkg/encoding/kzgEncoder/batchCommitEquivalence_test.go new file mode 100644 index 0000000000..3f8834f649 --- /dev/null +++ b/pkg/encoding/kzgEncoder/batchCommitEquivalence_test.go @@ -0,0 +1,58 @@ +package kzgEncoder_test + +import ( + "testing" + + rs "github.com/Layr-Labs/eigenda/pkg/encoding/encoder" + kzgRs "github.com/Layr-Labs/eigenda/pkg/encoding/kzgEncoder" + "github.com/Layr-Labs/eigenda/pkg/kzg/bn254" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestBatchEquivalence(t *testing.T) { + teardownSuite := setupSuite(t) + defer teardownSuite(t) + + group, _ := kzgRs.NewKzgEncoderGroup(kzgConfig, true) + params := rs.GetEncodingParams(numSys, numPar, uint64(len(GETTYSBURG_ADDRESS_BYTES))) + enc, err := group.NewKzgEncoder(params) + require.Nil(t, err) + + inputFr := rs.ToFrArray(GETTYSBURG_ADDRESS_BYTES) + commit, g2commit, _, _, _, err := enc.Encode(inputFr) + require.Nil(t, err) + + numBlob := 5 + commitPairs := make([]kzgRs.CommitmentPair, numBlob) + for z := 0; z < numBlob; z++ { + commitPairs[z] = kzgRs.CommitmentPair{ + Commitment: *commit, + LengthCommitment: *g2commit, + } + } + + assert.NoError(t, group.BatchVerifyCommitEquivalence(commitPairs), "batch equivalence negative test failed\n") + + var modifiedCommit bn254.G1Point + bn254.AddG1(&modifiedCommit, commit, commit) + for z := 0; z < numBlob; z++ { + commitPairs[z] = kzgRs.CommitmentPair{ + Commitment: modifiedCommit, + LengthCommitment: *g2commit, + } + } + + assert.Error(t, group.BatchVerifyCommitEquivalence(commitPairs), "batch equivalence negative test failed\n") + + for z := 0; z < numBlob; z++ { + commitPairs[z] = kzgRs.CommitmentPair{ + Commitment: *commit, + LengthCommitment: *g2commit, + } + } + + bn254.AddG1(&commitPairs[numBlob/2].Commitment, &commitPairs[numBlob/2].Commitment, &commitPairs[numBlob/2].Commitment) + + assert.Error(t, group.BatchVerifyCommitEquivalence(commitPairs), "batch equivalence negative test failed in outer loop\n") +} diff --git a/pkg/encoding/kzgEncoder/degree_test.go b/pkg/encoding/kzgEncoder/degree_test.go new file mode 100644 index 0000000000..6454a821d1 --- /dev/null +++ b/pkg/encoding/kzgEncoder/degree_test.go @@ -0,0 +1,36 @@ +package kzgEncoder_test + +import ( + "testing" + + rs "github.com/Layr-Labs/eigenda/pkg/encoding/encoder" + kzgRs "github.com/Layr-Labs/eigenda/pkg/encoding/kzgEncoder" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestLengthProof(t *testing.T) { + teardownSuite := setupSuite(t) + defer teardownSuite(t) + + group, _ := kzgRs.NewKzgEncoderGroup(kzgConfig, true) + params := rs.GetEncodingParams(numSys, numPar, uint64(len(GETTYSBURG_ADDRESS_BYTES))) + enc, err := group.NewKzgEncoder(params) + require.Nil(t, err) + + numBlob := 5 + for z := 0; z < numBlob; z++ { + extra := make([]byte, z*31*2) + inputBytes := append(GETTYSBURG_ADDRESS_BYTES, extra...) + inputFr := rs.ToFrArray(inputBytes) + + _, lowDegreeCommitment, lowDegreeProof, _, _, err := enc.Encode(inputFr) + require.Nil(t, err) + + length := len(inputFr) + assert.NoError(t, group.VerifyCommit(lowDegreeCommitment, lowDegreeProof, uint64(length)), "low degree verification failed\n") + + length = len(inputFr) - 10 + assert.Error(t, group.VerifyCommit(lowDegreeCommitment, lowDegreeProof, uint64(length)), "low degree verification failed\n") + } +} diff --git a/pkg/encoding/kzgEncoder/encoder.go b/pkg/encoding/kzgEncoder/encoder.go index 1e5fdf6f76..5b728d5480 100644 --- a/pkg/encoding/kzgEncoder/encoder.go +++ b/pkg/encoding/kzgEncoder/encoder.go @@ -1,6 +1,7 @@ package kzgEncoder import ( + "errors" "fmt" "log" "math" @@ -20,19 +21,22 @@ import ( ) type KzgConfig struct { - G1Path string - G2Path string - CacheDir string - NumWorker uint64 - SRSOrder uint64 // Order is the total size of SRS - Verbose bool - PreloadEncoder bool + G1Path string + G2Path string + CacheDir string + NumWorker uint64 + SRSOrder uint64 // Order is the total size of SRS + SRSNumberToLoad uint64 // Number of points to be loaded from the begining + Verbose bool + PreloadEncoder bool } type KzgEncoderGroup struct { *KzgConfig - Srs *kzg.SRS - mu sync.Mutex + Srs *kzg.SRS + G2Trailing []bls.G2Point + mu sync.Mutex + LoadG2Points bool Encoders map[rs.EncodingParams]*KzgEncoder Verifiers map[rs.EncodingParams]*KzgVerifier @@ -42,7 +46,8 @@ type KzgEncoder struct { *rs.Encoder *KzgConfig - Srs *kzg.SRS + Srs *kzg.SRS + G2Trailing []bls.G2Point Fs *kzg.FFTSettings Ks *kzg.KZGSettings @@ -51,17 +56,39 @@ type KzgEncoder struct { FFTPointsT [][]bls.G1Point // transpose of FFTPoints } -func NewKzgEncoderGroup(config *KzgConfig) (*KzgEncoderGroup, error) { +func NewKzgEncoderGroup(config *KzgConfig, loadG2Points bool) (*KzgEncoderGroup, error) { + + if config.SRSNumberToLoad > config.SRSOrder { + return nil, errors.New("SRSOrder is less than srsNumberToLoad") + } + // read the whole order, and treat it as entire SRS for low degree proof - s1, err := utils.ReadG1Points(config.G1Path, config.SRSOrder, config.NumWorker) + s1, err := utils.ReadG1Points(config.G1Path, config.SRSNumberToLoad, config.NumWorker) if err != nil { log.Println("failed to read G1 points", err) return nil, err } - s2, err := utils.ReadG2Points(config.G2Path, config.SRSOrder, config.NumWorker) - if err != nil { - log.Println("failed to read G2 points", err) - return nil, err + + s2 := make([]bls.G2Point, 0) + g2Trailing := make([]bls.G2Point, 0) + + // PreloadEncoder is by default not used by operator node, PreloadEncoder + if loadG2Points { + s2, err = utils.ReadG2Points(config.G2Path, config.SRSNumberToLoad, config.NumWorker) + if err != nil { + log.Println("failed to read G2 points", err) + return nil, err + } + + g2Trailing, err = utils.ReadG2PointSection( + config.G2Path, + config.SRSOrder-config.SRSNumberToLoad, + config.SRSOrder, // last exclusive + config.NumWorker, + ) + if err != nil { + return nil, err + } } srs, err := kzg.NewSrs(s1, s2) @@ -73,10 +100,12 @@ func NewKzgEncoderGroup(config *KzgConfig) (*KzgEncoderGroup, error) { fmt.Println("numthread", runtime.GOMAXPROCS(0)) encoderGroup := &KzgEncoderGroup{ - KzgConfig: config, - Srs: srs, - Encoders: make(map[rs.EncodingParams]*KzgEncoder), - Verifiers: make(map[rs.EncodingParams]*KzgVerifier), + KzgConfig: config, + Srs: srs, + G2Trailing: g2Trailing, + Encoders: make(map[rs.EncodingParams]*KzgEncoder), + Verifiers: make(map[rs.EncodingParams]*KzgVerifier), + LoadG2Points: loadG2Points, } if config.PreloadEncoder { @@ -97,6 +126,33 @@ func NewKzgEncoderGroup(config *KzgConfig) (*KzgEncoderGroup, error) { } +// Read the n-th G1 point from SRS. +func ReadG1Point(n uint64, g *KzgConfig) (bls.G1Point, error) { + if n > g.SRSOrder { + return bls.G1Point{}, fmt.Errorf("requested power %v is larger than SRSOrder %v", n, g.SRSOrder) + } + + g1point, err := utils.ReadG1PointSection(g.G1Path, n, n+1, 1) + if err != nil { + return bls.G1Point{}, err + } + + return g1point[0], nil +} + +// Read the n-th G2 point from SRS. +func ReadG2Point(n uint64, g *KzgConfig) (bls.G2Point, error) { + if n > g.SRSOrder { + return bls.G2Point{}, fmt.Errorf("requested power %v is larger than SRSOrder %v", n, g.SRSOrder) + } + + g2point, err := utils.ReadG2PointSection(g.G2Path, n, n+1, 1) + if err != nil { + return bls.G2Point{}, err + } + return g2point[0], nil +} + func (g *KzgEncoderGroup) PreloadAllEncoders() error { paramsAll, err := GetAllPrecomputedSrsMap(g.CacheDir) if err != nil { @@ -196,6 +252,7 @@ func (g *KzgEncoderGroup) newKzgEncoder(params rs.EncodingParams) (*KzgEncoder, Encoder: encoder, KzgConfig: g.KzgConfig, Srs: g.Srs, + G2Trailing: g.G2Trailing, Fs: fs, Ks: ks, SFs: sfs, @@ -205,21 +262,26 @@ func (g *KzgEncoderGroup) newKzgEncoder(params rs.EncodingParams) (*KzgEncoder, } // just a wrapper to take bytes not Fr Element -func (g *KzgEncoder) EncodeBytes(inputBytes []byte) (*bls.G1Point, *bls.G1Point, []Frame, []uint32, error) { +func (g *KzgEncoder) EncodeBytes(inputBytes []byte) (*bls.G1Point, *bls.G2Point, *bls.G2Point, []Frame, []uint32, error) { inputFr := rs.ToFrArray(inputBytes) return g.Encode(inputFr) } -func (g *KzgEncoder) Encode(inputFr []bls.Fr) (*bls.G1Point, *bls.G1Point, []Frame, []uint32, error) { +func (g *KzgEncoder) Encode(inputFr []bls.Fr) (*bls.G1Point, *bls.G2Point, *bls.G2Point, []Frame, []uint32, error) { startTime := time.Now() poly, frames, indices, err := g.Encoder.Encode(inputFr) if err != nil { - return nil, nil, nil, nil, err + return nil, nil, nil, nil, nil, err + } + + if len(poly.Coeffs) > int(g.KzgConfig.SRSNumberToLoad) { + return nil, nil, nil, nil, nil, fmt.Errorf("poly Coeff length %v is greater than Loaded SRS points %v", len(poly.Coeffs), int(g.KzgConfig.SRSNumberToLoad)) } // compute commit for the full poly commit := g.Commit(poly.Coeffs) + lowDegreeCommitment := bls.LinCombG2(g.Srs.G2[:len(poly.Coeffs)], poly.Coeffs) intermediate := time.Now() @@ -234,10 +296,11 @@ func (g *KzgEncoder) Encode(inputFr []bls.Fr) (*bls.G1Point, *bls.G1Point, []Fra log.Println("low degree verification info") } - shiftedSecret := g.Srs.G1[g.SRSOrder-polyDegreePlus1:] + shiftedSecret := g.G2Trailing[g.KzgConfig.SRSNumberToLoad-polyDegreePlus1:] //The proof of low degree is commitment of the polynomial shifted to the largest srs degree - lowDegreeProof := bls.LinCombG1(shiftedSecret, poly.Coeffs[:polyDegreePlus1]) + lowDegreeProof := bls.LinCombG2(shiftedSecret, poly.Coeffs[:polyDegreePlus1]) + //fmt.Println("kzgFFT lowDegreeProof", lowDegreeProof, "poly len ", len(fullCoeffsPoly), "order", len(g.Ks.SecretG2) ) //ok := VerifyLowDegreeProof(&commit, lowDegreeProof, polyDegreePlus1-1, g.SRSOrder, g.Srs.G2) //if !ok { @@ -258,7 +321,7 @@ func (g *KzgEncoder) Encode(inputFr []bls.Fr) (*bls.G1Point, *bls.G1Point, []Fra proofs, err := g.ProveAllCosetThreads(paddedCoeffs, g.NumChunks, g.ChunkLen, g.NumWorker) if err != nil { - return nil, nil, nil, nil, fmt.Errorf("could not generate proofs: %v", err) + return nil, nil, nil, nil, nil, fmt.Errorf("could not generate proofs: %v", err) } if g.Verbose { @@ -276,7 +339,7 @@ func (g *KzgEncoder) Encode(inputFr []bls.Fr) (*bls.G1Point, *bls.G1Point, []Fra if g.Verbose { log.Printf("Total encoding took %v\n", time.Since(startTime)) } - return &commit, lowDegreeProof, kzgFrames, indices, nil + return &commit, lowDegreeCommitment, lowDegreeProof, kzgFrames, indices, nil } func (g *KzgEncoder) Commit(polyFr []bls.Fr) bls.G1Point { @@ -290,8 +353,8 @@ func (g *KzgEncoder) Commit(polyFr []bls.Fr) bls.G1Point { // proof = commit(shiftedPoly) on G1 // so we can verify by checking // e( commit_1, [x^shift]_2) = e( proof_1, G_2 ) -func VerifyLowDegreeProof(poly, proof *bls.G1Point, claimedDegree, SRSOrder uint64, srsG2 []bls.G2Point) bool { - return bls.PairingsVerify(poly, &srsG2[SRSOrder-1-claimedDegree], proof, &bls.GenG2) +func VerifyLowDegreeProof(lengthCommit *bls.G2Point, proof *bls.G2Point, g1Challenge *bls.G1Point) bool { + return bls.PairingsVerify(g1Challenge, lengthCommit, &bls.GenG1, proof) } // get Fiat-Shamir challenge diff --git a/pkg/encoding/kzgEncoder/encoder_fuzz_test.go b/pkg/encoding/kzgEncoder/encoder_fuzz_test.go index fd1454620e..9551b0c526 100644 --- a/pkg/encoding/kzgEncoder/encoder_fuzz_test.go +++ b/pkg/encoding/kzgEncoder/encoder_fuzz_test.go @@ -13,7 +13,7 @@ func FuzzOnlySystematic(f *testing.F) { f.Add(GETTYSBURG_ADDRESS_BYTES) f.Fuzz(func(t *testing.T, input []byte) { - group, _ := kzgRs.NewKzgEncoderGroup(kzgConfig) + group, _ := kzgRs.NewKzgEncoderGroup(kzgConfig, true) params := rs.GetEncodingParams(10, 3, uint64(len(input))) enc, err := group.NewKzgEncoder(params) @@ -22,7 +22,7 @@ func FuzzOnlySystematic(f *testing.F) { } //encode the data - _, _, frames, _, err := enc.EncodeBytes(input) + _, _, _, frames, _, err := enc.EncodeBytes(input) for _, frame := range frames { assert.NotEqual(t, len(frame.Coeffs), 0) diff --git a/pkg/encoding/kzgEncoder/encoder_suite_test.go b/pkg/encoding/kzgEncoder/encoder_suite_test.go index 91325e5fc0..3ab6c60a9f 100644 --- a/pkg/encoding/kzgEncoder/encoder_suite_test.go +++ b/pkg/encoding/kzgEncoder/encoder_suite_test.go @@ -30,6 +30,7 @@ func setupSuite(t *testing.T) func(t *testing.T) { G2Path: "../../../inabox/resources/kzg/g2.point", CacheDir: "../../../inabox/resources/kzg/SRSTables", SRSOrder: 3000, + SRSNumberToLoad: 2900, NumWorker: uint64(runtime.GOMAXPROCS(0)), } diff --git a/pkg/encoding/kzgEncoder/frame.go b/pkg/encoding/kzgEncoder/frame.go index e5e716d56a..ef5fe5bc10 100644 --- a/pkg/encoding/kzgEncoder/frame.go +++ b/pkg/encoding/kzgEncoder/frame.go @@ -37,7 +37,7 @@ func Decode(b []byte) (Frame, error) { } // Verify function assumes the Data stored is coefficients of coset's interpolating poly -func (f *Frame) Verify(ks *kzg.KZGSettings, commitment *bls.G1Point, x *bls.Fr) bool { +func (f *Frame) Verify(ks *kzg.KZGSettings, commitment *bls.G1Point, x *bls.Fr, g2Atn *bls.G2Point) bool { var xPow bls.Fr bls.CopyFr(&xPow, &bls.ONE) @@ -53,10 +53,12 @@ func (f *Frame) Verify(ks *kzg.KZGSettings, commitment *bls.G1Point, x *bls.Fr) // [s^n - x^n]_2 var xnMinusYn bls.G2Point - bls.SubG2(&xnMinusYn, &ks.Srs.G2[len(f.Coeffs)], &xn2) + + bls.SubG2(&xnMinusYn, g2Atn, &xn2) // [interpolation_polynomial(s)]_1 is1 := bls.LinCombG1(ks.Srs.G1[:len(f.Coeffs)], f.Coeffs) + // [commitment - interpolation_polynomial(s)]_1 = [commit]_1 - [interpolation_polynomial(s)]_1 var commitMinusInterpolation bls.G1Point bls.SubG1(&commitMinusInterpolation, commitment, is1) diff --git a/pkg/encoding/kzgEncoder/frame_test.go b/pkg/encoding/kzgEncoder/frame_test.go index 614b348a55..8934c680ea 100644 --- a/pkg/encoding/kzgEncoder/frame_test.go +++ b/pkg/encoding/kzgEncoder/frame_test.go @@ -16,7 +16,7 @@ func TestEncodeDecodeFrame_AreInverses(t *testing.T) { teardownSuite := setupSuite(t) defer teardownSuite(t) - group, _ := kzgRs.NewKzgEncoderGroup(kzgConfig) + group, _ := kzgRs.NewKzgEncoderGroup(kzgConfig, true) params := rs.GetEncodingParams(numSys, numPar, uint64(len(GETTYSBURG_ADDRESS_BYTES))) @@ -25,7 +25,7 @@ func TestEncodeDecodeFrame_AreInverses(t *testing.T) { require.Nil(t, err) require.NotNil(t, enc) - _, _, frames, _, err := enc.EncodeBytes(GETTYSBURG_ADDRESS_BYTES) + _, _, _, frames, _, err := enc.EncodeBytes(GETTYSBURG_ADDRESS_BYTES) require.Nil(t, err) require.NotNil(t, frames, err) @@ -44,7 +44,7 @@ func TestVerify(t *testing.T) { teardownSuite := setupSuite(t) defer teardownSuite(t) - group, _ := kzgRs.NewKzgEncoderGroup(kzgConfig) + group, _ := kzgRs.NewKzgEncoderGroup(kzgConfig, true) params := rs.GetEncodingParams(numSys, numPar, uint64(len(GETTYSBURG_ADDRESS_BYTES))) @@ -52,7 +52,7 @@ func TestVerify(t *testing.T) { require.Nil(t, err) require.NotNil(t, enc) - commit, _, frames, _, err := enc.EncodeBytes(GETTYSBURG_ADDRESS_BYTES) + commit, _, _, frames, _, err := enc.EncodeBytes(GETTYSBURG_ADDRESS_BYTES) require.Nil(t, err) require.NotNil(t, commit) require.NotNil(t, frames) @@ -64,5 +64,7 @@ func TestVerify(t *testing.T) { lc := enc.Fs.ExpandedRootsOfUnity[uint64(0)] require.NotNil(t, lc) - assert.True(t, frames[0].Verify(enc.Ks, commit, &lc)) + g2Atn, err := kzgRs.ReadG2Point(uint64(len(frames[0].Coeffs)), kzgConfig) + require.Nil(t, err) + assert.True(t, frames[0].Verify(enc.Ks, commit, &lc, &g2Atn)) } diff --git a/pkg/encoding/kzgEncoder/multiframe.go b/pkg/encoding/kzgEncoder/multiframe.go index ce5783ac0d..e566c1e9fd 100644 --- a/pkg/encoding/kzgEncoder/multiframe.go +++ b/pkg/encoding/kzgEncoder/multiframe.go @@ -176,6 +176,10 @@ func (group *KzgEncoderGroup) UniversalVerify(params rs.EncodingParams, samples D := params.ChunkLen + if D > group.SRSNumberToLoad { + return fmt.Errorf("requested chunkLen %v is larger than Loaded SRS points %v.", D, group.SRSNumberToLoad) + } + n := len(samples) fmt.Printf("Batch verify %v frames of %v symbols out of %v blobs \n", n, params.ChunkLen, m) @@ -195,7 +199,11 @@ func (group *KzgEncoderGroup) UniversalVerify(params rs.EncodingParams, samples lhsG1 := bls.LinCombG1(proofs, randomsFr) // lhs g2 - lhsG2 := &ks.Srs.G2[D] + G2atD, err := ReadG2Point(D, group.KzgConfig) + if err != nil { + return err + } + lhsG2 := &G2atD // rhs g2 rhsG2 := &bls.GenG2 diff --git a/pkg/encoding/kzgEncoder/multiframe_test.go b/pkg/encoding/kzgEncoder/multiframe_test.go index 7d9c814711..3f72bab728 100644 --- a/pkg/encoding/kzgEncoder/multiframe_test.go +++ b/pkg/encoding/kzgEncoder/multiframe_test.go @@ -13,7 +13,7 @@ func TestUniversalVerify(t *testing.T) { teardownSuite := setupSuite(t) defer teardownSuite(t) - group, _ := kzgRs.NewKzgEncoderGroup(kzgConfig) + group, _ := kzgRs.NewKzgEncoderGroup(kzgConfig, true) params := rs.GetEncodingParams(numSys, numPar, uint64(len(GETTYSBURG_ADDRESS_BYTES))) enc, err := group.NewKzgEncoder(params) require.Nil(t, err) @@ -23,7 +23,7 @@ func TestUniversalVerify(t *testing.T) { for z := 0; z < numBlob; z++ { inputFr := rs.ToFrArray(GETTYSBURG_ADDRESS_BYTES) - commit, _, frames, fIndices, err := enc.Encode(inputFr) + commit, _, _, frames, fIndices, err := enc.Encode(inputFr) require.Nil(t, err) // create samples diff --git a/pkg/encoding/kzgEncoder/multiprover_test.go b/pkg/encoding/kzgEncoder/multiprover_test.go index 843150d1ac..11b6eefd7f 100644 --- a/pkg/encoding/kzgEncoder/multiprover_test.go +++ b/pkg/encoding/kzgEncoder/multiprover_test.go @@ -14,7 +14,7 @@ func TestProveAllCosetThreads(t *testing.T) { teardownSuite := setupSuite(t) defer teardownSuite(t) - group, _ := kzgRs.NewKzgEncoderGroup(kzgConfig) + group, _ := kzgRs.NewKzgEncoderGroup(kzgConfig, true) params := rs.GetEncodingParams(numSys, numPar, uint64(len(GETTYSBURG_ADDRESS_BYTES))) enc, err := group.NewKzgEncoder(params) @@ -22,7 +22,7 @@ func TestProveAllCosetThreads(t *testing.T) { inputFr := rs.ToFrArray(GETTYSBURG_ADDRESS_BYTES) - commit, _, frames, fIndices, err := enc.Encode(inputFr) + commit, _, _, frames, fIndices, err := enc.Encode(inputFr) require.Nil(t, err) for i := 0; i < len(frames); i++ { @@ -37,6 +37,8 @@ func TestProveAllCosetThreads(t *testing.T) { fmt.Printf("frame %v leading coset %v\n", i, j) lc := enc.Fs.ExpandedRootsOfUnity[uint64(j)] - assert.True(t, f.Verify(enc.Ks, commit, &lc), "Proof %v failed\n", i) + g2Atn, err := kzgRs.ReadG2Point(uint64(len(f.Coeffs)), kzgConfig) + require.Nil(t, err) + assert.True(t, f.Verify(enc.Ks, commit, &lc, &g2Atn), "Proof %v failed\n", i) } } diff --git a/pkg/encoding/kzgEncoder/precomputeSRS.go b/pkg/encoding/kzgEncoder/precomputeSRS.go index cedffbd002..0d83054264 100644 --- a/pkg/encoding/kzgEncoder/precomputeSRS.go +++ b/pkg/encoding/kzgEncoder/precomputeSRS.go @@ -13,6 +13,7 @@ import ( "sync" "time" + "github.com/Layr-Labs/eigenda/pkg/encoding/utils" kzg "github.com/Layr-Labs/eigenda/pkg/kzg" bls "github.com/Layr-Labs/eigenda/pkg/kzg/bn254" ) @@ -226,7 +227,7 @@ func (p *SRSTable) TableReaderThreads(filePath string, dimE, l uint64, numWorker }() // 2 due to circular FFT mul - subTableSize := dimE * 2 * 64 + subTableSize := dimE * 2 * utils.G1PointBytes totalSubTableSize := subTableSize * l if numWorker > l { @@ -236,7 +237,7 @@ func (p *SRSTable) TableReaderThreads(filePath string, dimE, l uint64, numWorker reader := bufio.NewReaderSize(g1f, int(totalSubTableSize+l)) buf := make([]byte, totalSubTableSize+l) if _, err := io.ReadFull(reader, buf); err != nil { - log.Println("TableReaderThreads.ERR.1", err) + log.Println("TableReaderThreads.ERR.1", err, "file path:", filePath) return nil, err } @@ -280,7 +281,7 @@ func (p *SRSTable) readWorker( for b := range jobChan { slicePoints := make([]bls.G1Point, dimE*2) for i := uint64(0); i < dimE*2; i++ { - g1 := buf[b.start+i*64 : b.start+(i+1)*64] + g1 := buf[b.start+i*utils.G1PointBytes : b.start+(i+1)*utils.G1PointBytes] err := slicePoints[i].UnmarshalText(g1[:]) if err != nil { log.Printf("Error. From %v to %v. %v", b.start, b.end, err) diff --git a/pkg/encoding/kzgEncoder/verifier.go b/pkg/encoding/kzgEncoder/verifier.go index 97bd4e41f3..6897b13d65 100644 --- a/pkg/encoding/kzgEncoder/verifier.go +++ b/pkg/encoding/kzgEncoder/verifier.go @@ -71,9 +71,14 @@ func (g *KzgEncoderGroup) newKzgVerifier(params rs.EncodingParams) (*KzgVerifier // VerifyCommit verifies the low degree proof; since it doesn't depend on the encoding parameters // we leave it as a method of the KzgEncoderGroup -func (v *KzgEncoderGroup) VerifyCommit(commit, lowDegreeProof *wbls.G1Point, degree uint64) error { +func (v *KzgEncoderGroup) VerifyCommit(lengthCommit *wbls.G2Point, lowDegreeProof *wbls.G2Point, length uint64) error { - if !VerifyLowDegreeProof(commit, lowDegreeProof, degree, v.SRSOrder, v.Srs.G2) { + g1Challenge, err := ReadG1Point(v.SRSOrder-length, v.KzgConfig) + if err != nil { + return err + } + + if !VerifyLowDegreeProof(lengthCommit, lowDegreeProof, &g1Challenge) { return errors.New("low degree proof fails") } return nil @@ -90,7 +95,11 @@ func (v *KzgVerifier) VerifyFrame(commit *wbls.G1Point, f *Frame, index uint64) return err } - if !f.Verify(v.Ks, commit, &v.Ks.ExpandedRootsOfUnity[j]) { + g2Atn, err := ReadG2Point(uint64(len(f.Coeffs)), v.KzgConfig) + if err != nil { + return err + } + if !f.Verify(v.Ks, commit, &v.Ks.ExpandedRootsOfUnity[j], &g2Atn) { return errors.New("multireveal proof fails") } diff --git a/pkg/encoding/kzgEncoder/zero_padding_test.go b/pkg/encoding/kzgEncoder/zero_padding_test.go index 3c69ca95c1..af450e2fe9 100644 --- a/pkg/encoding/kzgEncoder/zero_padding_test.go +++ b/pkg/encoding/kzgEncoder/zero_padding_test.go @@ -13,7 +13,7 @@ func TestProveZeroPadding(t *testing.T) { teardownSuite := setupSuite(t) defer teardownSuite(t) - group, _ := kzgRs.NewKzgEncoderGroup(kzgConfig) + group, _ := kzgRs.NewKzgEncoderGroup(kzgConfig, true) params := rs.GetEncodingParams(numSys, numPar, uint64(len(GETTYSBURG_ADDRESS_BYTES))) enc, err := group.NewKzgEncoder(params) @@ -21,7 +21,7 @@ func TestProveZeroPadding(t *testing.T) { inputFr := rs.ToFrArray(GETTYSBURG_ADDRESS_BYTES) - _, _, _, _, err = enc.Encode(inputFr) + _, _, _, _, _, err = enc.Encode(inputFr) require.Nil(t, err) assert.True(t, true, "Proof %v failed\n") diff --git a/pkg/encoding/main.go b/pkg/encoding/main.go index 7e3ca026f2..fe32838d39 100644 --- a/pkg/encoding/main.go +++ b/pkg/encoding/main.go @@ -11,15 +11,36 @@ import ( rs "github.com/Layr-Labs/eigenda/pkg/encoding/encoder" kzgRs "github.com/Layr-Labs/eigenda/pkg/encoding/kzgEncoder" - kzg "github.com/Layr-Labs/eigenda/pkg/kzg" bls "github.com/Layr-Labs/eigenda/pkg/kzg/bn254" ) func main() { // TestKzgRs() - err := kzg.WriteGeneratorPoints(30000) - if err != nil { - log.Println("WriteGeneratorPoints failed:", err) + //err := kzg.WriteGeneratorPoints(30000) + //if err != nil { + // log.Println("WriteGeneratorPoints failed:", err) + //} + readpoints() +} + +func readpoints() { + kzgConfig := &kzgRs.KzgConfig{ + G1Path: "../../inabox/resources/kzg/g1.point", + G2Path: "../../inabox/resources/kzg/g2.point", + CacheDir: "SRSTables", + SRSOrder: 3000, + SRSNumberToLoad: 3000, + NumWorker: uint64(runtime.GOMAXPROCS(0)), + } + + // create encoding object + kzgGroup, _ := kzgRs.NewKzgEncoderGroup(kzgConfig, true) + fmt.Println("there are ", len(kzgGroup.Srs.G1), "points") + for i := 0; i < len(kzgGroup.Srs.G1); i++ { + fmt.Printf("%v %v\n", i, string(kzgGroup.Srs.G1[i].MarshalText())) + } + if kzgGroup.Srs.G1[0].X == bls.GenG1.X && kzgGroup.Srs.G1[0].Y == bls.GenG1.Y { + fmt.Println("start with gen") } } @@ -36,15 +57,16 @@ func TestKzgRs() { //fmt.Printf(" Data size(byte): %v\n", len(inputBytes)) kzgConfig := &kzgRs.KzgConfig{ - G1Path: "g1.point", - G2Path: "g2.point", - CacheDir: "SRSTables", - SRSOrder: 3000, - NumWorker: uint64(runtime.GOMAXPROCS(0)), + G1Path: "g1.point", + G2Path: "g2.point", + CacheDir: "SRSTables", + SRSOrder: 3000, + SRSNumberToLoad: 3000, + NumWorker: uint64(runtime.GOMAXPROCS(0)), } // create encoding object - kzgGroup, _ := kzgRs.NewKzgEncoderGroup(kzgConfig) + kzgGroup, _ := kzgRs.NewKzgEncoderGroup(kzgConfig, true) params := rs.EncodingParams{NumChunks: 200, ChunkLen: 180} enc, _ := kzgGroup.NewKzgEncoder(params) @@ -60,8 +82,9 @@ func TestKzgRs() { printFr(inputFr) //inputSize := uint64(len(inputFr)) - commit, lowDegreeProof, frames, fIndices, err := enc.Encode(inputFr) + commit, lowDegreeCommit, lowDegreeProof, frames, fIndices, err := enc.Encode(inputFr) _ = lowDegreeProof + _ = lowDegreeCommit if err != nil { log.Fatal(err) } @@ -84,7 +107,12 @@ func TestKzgRs() { fmt.Printf("frame %v leading coset %v\n", i, j) lc := enc.Fs.ExpandedRootsOfUnity[uint64(j)] - ok := f.Verify(enc.Ks, commit, &lc) + + g2Atn, err := kzgRs.ReadG2Point(uint64(len(f.Coeffs)), kzgConfig) + if err != nil { + log.Fatalf("Load g2 %v failed\n", err) + } + ok := f.Verify(enc.Ks, commit, &lc, &g2Atn) if !ok { log.Fatalf("Proof %v failed\n", i) } diff --git a/pkg/encoding/utils/pointsIO.go b/pkg/encoding/utils/pointsIO.go index 854974c9ba..53cdf279ec 100644 --- a/pkg/encoding/utils/pointsIO.go +++ b/pkg/encoding/utils/pointsIO.go @@ -2,19 +2,40 @@ package utils import ( "bufio" + "fmt" + "io" "log" "os" - "sync" "time" bls "github.com/Layr-Labs/eigenda/pkg/kzg/bn254" ) +const ( + // Num of bytes per G1 point in serialized format in file. + G1PointBytes = 32 + // Num of bytes per G2 point in serialized format in file. + G2PointBytes = 64 +) + type EncodeParams struct { NumNodeE uint64 ChunkLenE uint64 } +// ReadDesiredBytes reads exactly numBytesToRead bytes from the reader and returns +// the result. +func ReadDesiredBytes(reader *bufio.Reader, numBytesToRead uint64) ([]byte, error) { + buf := make([]byte, numBytesToRead) + _, err := io.ReadFull(reader, buf) + // Note that ReadFull() guarantees the bytes read is len(buf) IFF err is nil. + // See https://pkg.go.dev/io#ReadFull. + if err != nil { + return nil, err + } + return buf, nil +} + func ReadG1Points(filepath string, n uint64, numWorker uint64) ([]bls.G1Point, error) { g1f, err := os.Open(filepath) if err != nil { @@ -22,47 +43,38 @@ func ReadG1Points(filepath string, n uint64, numWorker uint64) ([]bls.G1Point, e return nil, err } - //todo: resolve panic defer func() { if err := g1f.Close(); err != nil { - panic(err) + log.Printf("G1 close error %v\n", err) } }() startTimer := time.Now() - g1r := bufio.NewReaderSize(g1f, int(n*64)) + g1r := bufio.NewReaderSize(g1f, int(n*G1PointBytes)) if n < numWorker { numWorker = n } - buf, _, err := g1r.ReadLine() + buf, err := ReadDesiredBytes(g1r, n*G1PointBytes) if err != nil { return nil, err } - if uint64(len(buf)) < 64*n { - log.Printf("Error. Insufficient G1 points. Only contains %v. Requesting %v\n", len(buf)/64, n) - log.Println() - log.Println("ReadG1Points.ERR.1", err) - return nil, err - } - // measure reading time t := time.Now() elapsed := t.Sub(startTimer) - log.Printf(" Reading G1 points (%v bytes) takes %v\n", (n * 64), elapsed) + log.Printf(" Reading G1 points (%v bytes) takes %v\n", (n * G1PointBytes), elapsed) startTimer = time.Now() s1Outs := make([]bls.G1Point, n) - var wg sync.WaitGroup - wg.Add(int(numWorker)) - start := uint64(0) end := uint64(0) size := n / numWorker + results := make(chan error, numWorker) + for i := uint64(0); i < numWorker; i++ { start = i * size @@ -72,10 +84,16 @@ func ReadG1Points(filepath string, n uint64, numWorker uint64) ([]bls.G1Point, e end = (i + 1) * size } //fmt.Printf("worker %v start %v end %v. size %v\n", i, start, end, end - start) - //todo: handle error? - go readG1Worker(buf, s1Outs, start, end, 64, &wg) + + go readG1Worker(buf, s1Outs, start, end, G1PointBytes, results) + } + + for w := uint64(0); w < numWorker; w++ { + err := <-results + if err != nil { + return nil, err + } } - wg.Wait() // measure parsing time t = time.Now() @@ -84,26 +102,29 @@ func ReadG1Points(filepath string, n uint64, numWorker uint64) ([]bls.G1Point, e return s1Outs, nil } +// from is inclusive, to is exclusive func ReadG1PointSection(filepath string, from, to uint64, numWorker uint64) ([]bls.G1Point, error) { + if to <= from { + return nil, fmt.Errorf("The range to read is invalid, from: %v, to: %v", from, to) + } g1f, err := os.Open(filepath) if err != nil { log.Println("ReadG1PointSection.ERR.0", err) return nil, err } - //todo: how to handle? defer func() { if err := g1f.Close(); err != nil { - panic(err) + log.Printf("g1 close error %v\n", err) } }() n := to - from startTimer := time.Now() - g1r := bufio.NewReaderSize(g1f, int(to*64)) + g1r := bufio.NewReaderSize(g1f, int(to*G1PointBytes)) - _, err = g1f.Seek(int64(from*64), 0) + _, err = g1f.Seek(int64(from)*G1PointBytes, 0) if err != nil { return nil, err } @@ -112,33 +133,25 @@ func ReadG1PointSection(filepath string, from, to uint64, numWorker uint64) ([]b numWorker = n } - buf, _, err := g1r.ReadLine() + buf, err := ReadDesiredBytes(g1r, n*G1PointBytes) if err != nil { return nil, err } - if uint64(len(buf)) < 64*n { - log.Printf("Error. Insufficient G1 points. Only contains %v. Requesting %v\n", len(buf)/64, n) - log.Println() - log.Println("ReadG1PointSection.ERR.1", err) - return nil, err - } - // measure reading time t := time.Now() elapsed := t.Sub(startTimer) - log.Printf(" Reading G1 points (%v bytes) takes %v\n", (n * 64), elapsed) + log.Printf(" Reading G1 points (%v bytes) takes %v\n", (n * G1PointBytes), elapsed) startTimer = time.Now() s1Outs := make([]bls.G1Point, n) - var wg sync.WaitGroup - wg.Add(int(numWorker)) - start := uint64(0) end := uint64(0) size := n / numWorker + results := make(chan error, numWorker) + for i := uint64(0); i < numWorker; i++ { start = i * size @@ -147,10 +160,16 @@ func ReadG1PointSection(filepath string, from, to uint64, numWorker uint64) ([]b } else { end = (i + 1) * size } - //todo: handle error? - go readG1Worker(buf, s1Outs, start, end, 64, &wg) + + go readG1Worker(buf, s1Outs, start, end, G1PointBytes, results) + } + + for w := uint64(0); w < numWorker; w++ { + err := <-results + if err != nil { + return nil, err + } } - wg.Wait() // measure parsing time t = time.Now() @@ -165,16 +184,17 @@ func readG1Worker( start uint64, // in element, not in byte end uint64, step uint64, - wg *sync.WaitGroup, + results chan<- error, ) { for i := start; i < end; i++ { g1 := buf[i*step : (i+1)*step] err := outs[i].UnmarshalText(g1[:]) if err != nil { + results <- err panic(err) } } - wg.Done() + results <- nil } func readG2Worker( @@ -183,16 +203,18 @@ func readG2Worker( start uint64, // in element, not in byte end uint64, step uint64, - wg *sync.WaitGroup, + results chan<- error, ) { for i := start; i < end; i++ { g1 := buf[i*step : (i+1)*step] err := outs[i].UnmarshalText(g1[:]) if err != nil { + results <- err log.Println("Unmarshalling error:", err) + panic(err) } } - wg.Done() + results <- nil } func ReadG2Points(filepath string, n uint64, numWorker uint64) ([]bls.G2Point, error) { @@ -202,47 +224,115 @@ func ReadG2Points(filepath string, n uint64, numWorker uint64) ([]bls.G2Point, e log.Println("ReadG2Points.ERR.0", err) return nil, err } - //todo: resolve panic + defer func() { if err := g1f.Close(); err != nil { - panic(err) + log.Printf("g2 close error %v\n", err) } }() startTimer := time.Now() - g1r := bufio.NewReaderSize(g1f, int(n*128)) + g1r := bufio.NewReaderSize(g1f, int(n*G2PointBytes)) if n < numWorker { numWorker = n } - buf, _, err := g1r.ReadLine() + buf, err := ReadDesiredBytes(g1r, n*G2PointBytes) + if err != nil { + return nil, err + } + + // measure reading time + t := time.Now() + elapsed := t.Sub(startTimer) + log.Printf(" Reading G2 points (%v bytes) takes %v\n", (n * G2PointBytes), elapsed) + + startTimer = time.Now() + + s2Outs := make([]bls.G2Point, n) + + results := make(chan error, numWorker) + + start := uint64(0) + end := uint64(0) + size := n / numWorker + for i := uint64(0); i < numWorker; i++ { + start = i * size + + if i == numWorker-1 { + end = n + } else { + end = (i + 1) * size + } + + go readG2Worker(buf, s2Outs, start, end, G2PointBytes, results) + } + + for w := uint64(0); w < numWorker; w++ { + err := <-results + if err != nil { + return nil, err + } + } + + // measure parsing time + t = time.Now() + elapsed = t.Sub(startTimer) + log.Println(" Parsing takes", elapsed) + return s2Outs, nil +} + +// from is inclusive, to is exclusive +func ReadG2PointSection(filepath string, from, to uint64, numWorker uint64) ([]bls.G2Point, error) { + if to <= from { + return nil, fmt.Errorf("The range to read is invalid, from: %v, to: %v", from, to) + } + g2f, err := os.Open(filepath) + if err != nil { + log.Println("ReadG2PointSection.ERR.0", err) + return nil, err + } + + defer func() { + if err := g2f.Close(); err != nil { + log.Printf("error %v\n", err) + } + }() + + n := to - from + + startTimer := time.Now() + g2r := bufio.NewReaderSize(g2f, int(to*G2PointBytes)) + + _, err = g2f.Seek(int64(from*G2PointBytes), 0) if err != nil { return nil, err } - if uint64(len(buf)) < 128*n { - log.Printf("Error. Insufficient G1 points. Only contains %v. Requesting %v\n", len(buf)/128, n) - log.Println() - log.Println("ReadG2Points.ERR.1", err) + if n < numWorker { + numWorker = n + } + + buf, err := ReadDesiredBytes(g2r, n*G2PointBytes) + if err != nil { return nil, err } // measure reading time t := time.Now() elapsed := t.Sub(startTimer) - log.Printf(" Reading G2 points (%v bytes) takes %v\n", (n * 128), elapsed) - + log.Printf(" Reading G2 points (%v bytes) takes %v\n", (n * G2PointBytes), elapsed) startTimer = time.Now() s2Outs := make([]bls.G2Point, n) - var wg sync.WaitGroup - wg.Add(int(numWorker)) + results := make(chan error, numWorker) start := uint64(0) end := uint64(0) size := n / numWorker + for i := uint64(0); i < numWorker; i++ { start = i * size @@ -252,9 +342,14 @@ func ReadG2Points(filepath string, n uint64, numWorker uint64) ([]bls.G2Point, e end = (i + 1) * size } //todo: handle error? - go readG2Worker(buf, s2Outs, start, end, 128, &wg) + go readG2Worker(buf, s2Outs, start, end, G2PointBytes, results) + } + for w := uint64(0); w < numWorker; w++ { + err := <-results + if err != nil { + return nil, err + } } - wg.Wait() // measure parsing time t = time.Now() diff --git a/pkg/kzg/bn254/bn254_all.go b/pkg/kzg/bn254/bn254_all.go index be126790e6..347070085e 100644 --- a/pkg/kzg/bn254/bn254_all.go +++ b/pkg/kzg/bn254/bn254_all.go @@ -25,12 +25,11 @@ package bn254 import ( - "encoding/hex" "errors" ) func (p *G1Point) MarshalText() []byte { - return []byte(hex.EncodeToString(ToCompressedG1(p))) + return ToCompressedG1(p) } // UnmarshalText decodes hex formatted text (no 0x prefix) into a G1Point @@ -38,11 +37,7 @@ func (p *G1Point) UnmarshalText(text []byte) error { if p == nil { return errors.New("cannot decode into nil G1Point") } - data, err := hex.DecodeString(string(text)) - if err != nil { - return err - } - d, err := FromCompressedG1(data) + d, err := FromCompressedG1(text) if err != nil { return err } @@ -52,7 +47,7 @@ func (p *G1Point) UnmarshalText(text []byte) error { // MarshalText encodes G2Point into hex formatted text (no 0x prefix) func (p *G2Point) MarshalText() []byte { - return []byte(hex.EncodeToString(ToCompressedG2(p))) + return ToCompressedG2(p) } // UnmarshalText decodes hex formatted text (no 0x prefix) into a G2Point @@ -60,11 +55,7 @@ func (p *G2Point) UnmarshalText(text []byte) error { if p == nil { return errors.New("cannot decode into nil G2Point") } - data, err := hex.DecodeString(string(text)) - if err != nil { - return err - } - d, err := FromCompressedG2(data) + d, err := FromCompressedG2(text) if err != nil { return err } diff --git a/pkg/kzg/bn254/bn254_all_test.go b/pkg/kzg/bn254/bn254_all_test.go index ecf81c865a..9978f81171 100644 --- a/pkg/kzg/bn254/bn254_all_test.go +++ b/pkg/kzg/bn254/bn254_all_test.go @@ -38,6 +38,9 @@ func TestPointG1Marshalling(t *testing.T) { bytes := point.MarshalText() + // The point is serialized to raw bytes and it should be 32 bytes. + assert.Equal(t, len(bytes), 32) + var anotherPoint G1Point err := anotherPoint.UnmarshalText(bytes) require.Nil(t, err) @@ -52,10 +55,10 @@ func TestPointG1Marshalling_InvalidG1(t *testing.T) { g1 = new(G1Point) err = g1.UnmarshalText([]byte("G")) - assert.EqualError(t, err, "encoding/hex: invalid byte: U+0047 'G'") + assert.EqualError(t, err, "short buffer") err = g1.UnmarshalText([]byte("8000000000000000000000000000000000000000000000000000000000000099")) - assert.EqualError(t, err, "invalid compressed coordinate: square root doesn't exist") + assert.EqualError(t, err, "invalid fp.Element encoding") } func TestPointG2Marshalling(t *testing.T) { @@ -65,6 +68,8 @@ func TestPointG2Marshalling(t *testing.T) { MulG2(&point, &GenG2, &x) bytes := point.MarshalText() + // The point is serialized to raw bytes and it should be 64 bytes (2x the G1). + assert.Equal(t, len(bytes), 64) var anotherPoint G2Point err := anotherPoint.UnmarshalText(bytes) @@ -80,12 +85,12 @@ func TestPointG2Marshalling_InvalidG2(t *testing.T) { g2 = new(G2Point) err = g2.UnmarshalText([]byte("G")) - assert.EqualError(t, err, "encoding/hex: invalid byte: U+0047 'G'") + assert.EqualError(t, err, "short buffer") err = g2.UnmarshalText([]byte("898e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed")) - assert.EqualError(t, err, "invalid point: subgroup check failed") + assert.EqualError(t, err, "invalid fp.Element encoding") err = g2.UnmarshalText([]byte("998e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992ffff")) - assert.EqualError(t, err, "invalid compressed coordinate: square root doesn't exist") + assert.EqualError(t, err, "invalid fp.Element encoding") } diff --git a/pkg/kzg/srs.go b/pkg/kzg/srs.go index 7a3bb5882a..e63610346d 100644 --- a/pkg/kzg/srs.go +++ b/pkg/kzg/srs.go @@ -24,11 +24,7 @@ package kzg -import ( - "errors" - - bls "github.com/Layr-Labs/eigenda/pkg/kzg/bn254" -) +import bls "github.com/Layr-Labs/eigenda/pkg/kzg/bn254" type SRS struct { @@ -40,9 +36,6 @@ type SRS struct { func NewSrs(G1 []bls.G1Point, G2 []bls.G2Point) (*SRS, error) { - if len(G1) != len(G2) { - return nil, errors.New("secret list lengths don't match") - } return &SRS{ G1: G1, G2: G2, diff --git a/retriever/cmd/main.go b/retriever/cmd/main.go index c7fbfd3fd5..5318816296 100644 --- a/retriever/cmd/main.go +++ b/retriever/cmd/main.go @@ -75,7 +75,7 @@ func RetrieverMain(ctx *cli.Context) error { } nodeClient := clients.NewNodeClient(config.Timeout) - encoder, err := encoding.NewEncoder(config.EncoderConfig) + encoder, err := encoding.NewEncoder(config.EncoderConfig, false) if err != nil { log.Fatalln("could not start tcp listener", err) } diff --git a/retriever/server_test.go b/retriever/server_test.go index d0c7f2b72d..2c0c25ab36 100644 --- a/retriever/server_test.go +++ b/retriever/server_test.go @@ -32,14 +32,15 @@ var ( func makeTestEncoder() (core.Encoder, error) { config := &kzgEncoder.KzgConfig{ - G1Path: "../inabox/resources/kzg/g1.point", - G2Path: "../inabox/resources/kzg/g2.point", - CacheDir: "../inabox/resources/kzg/SRSTables", - SRSOrder: 3000, - NumWorker: uint64(runtime.GOMAXPROCS(0)), + G1Path: "../inabox/resources/kzg/g1.point", + G2Path: "../inabox/resources/kzg/g2.point", + CacheDir: "../inabox/resources/kzg/SRSTables", + SRSOrder: 3000, + SRSNumberToLoad: 3000, + NumWorker: uint64(runtime.GOMAXPROCS(0)), } - kzgEncoderGroup, err := kzgEncoder.NewKzgEncoderGroup(config) + kzgEncoderGroup, err := kzgEncoder.NewKzgEncoderGroup(config, false) if err != nil { return nil, err } diff --git a/subgraphs/eigenda-batch-metadata/abis/EigenDAServiceManager.json b/subgraphs/eigenda-batch-metadata/abis/EigenDAServiceManager.json index ef5e86299e..35008da34c 100644 --- a/subgraphs/eigenda-batch-metadata/abis/EigenDAServiceManager.json +++ b/subgraphs/eigenda-batch-metadata/abis/EigenDAServiceManager.json @@ -1,1030 +1,963 @@ [ { - "inputs": [ - { - "internalType": "contract IBLSRegistryCoordinatorWithIndices", - "name": "_registryCoordinator", - "type": "address" - }, - { - "internalType": "contract IStrategyManager", - "name": "_strategyManager", - "type": "address" - }, - { - "internalType": "contract IDelegationManager", - "name": "_delegationMananger", - "type": "address" - }, - { - "internalType": "contract ISlasher", - "name": "_slasher", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "batchHeaderHash", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "batchId", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint96", - "name": "fee", - "type": "uint96" - } - ], - "name": "BatchConfirmed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "previousValue", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newValue", - "type": "uint256" - } - ], - "name": "FeePerBytePerTimeSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previousAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAddress", - "type": "address" - } - ], - "name": "FeeSetterChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newPausedStatus", - "type": "uint256" - } - ], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "contract IPauserRegistry", - "name": "pauserRegistry", - "type": "address" - }, - { - "indexed": false, - "internalType": "contract IPauserRegistry", - "name": "newPauserRegistry", - "type": "address" - } - ], - "name": "PauserRegistrySet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previousAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAddress", - "type": "address" - } - ], - "name": "PaymentManagerSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newPausedStatus", - "type": "uint256" - } - ], - "name": "Unpaused", - "type": "event" + "type": "constructor", + "inputs": [ + { + "name": "__delegationMananger", + "type": "address", + "internalType": "contract IDelegationManager" + }, + { + "name": "__registryCoordinator", + "type": "address", + "internalType": "contract IRegistryCoordinator" + }, + { + "name": "__stakeRegistry", + "type": "address", + "internalType": "contract IStakeRegistry" + } + ], + "stateMutability": "nonpayable" }, { - "inputs": [], - "name": "BLOCK_STALE_MEASURE", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" + "type": "function", + "name": "BLOCK_STALE_MEASURE", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint32", + "internalType": "uint32" + } + ], + "stateMutability": "view" }, { - "inputs": [], - "name": "STORE_DURATION_BLOCKS", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" + "type": "function", + "name": "STORE_DURATION_BLOCKS", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint32", + "internalType": "uint32" + } + ], + "stateMutability": "view" }, { - "inputs": [], - "name": "THRESHOLD_DENOMINATOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" + "type": "function", + "name": "THRESHOLD_DENOMINATOR", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" }, { - "inputs": [], - "name": "batchId", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" + "type": "function", + "name": "batchConfirmer", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" }, { - "inputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "name": "batchIdToBatchMetadataHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" + "type": "function", + "name": "batchId", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint32", + "internalType": "uint32" + } + ], + "stateMutability": "view" }, { - "inputs": [], - "name": "blsPubkeyRegistry", - "outputs": [ - { - "internalType": "contract IBLSPubkeyRegistry", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" + "type": "function", + "name": "batchIdToBatchMetadataHash", + "inputs": [ + { + "name": "", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" }, { - "inputs": [ - { - "internalType": "uint256", - "name": "totalBytes", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feePerBytePerTime", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "storePeriodLength", - "type": "uint32" - } - ], - "name": "calculateFee", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" + "type": "function", + "name": "blsApkRegistry", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IBLSApkRegistry" + } + ], + "stateMutability": "view" }, { - "inputs": [ - { - "internalType": "bytes32", - "name": "msgHash", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "quorumNumbers", - "type": "bytes" - }, - { - "internalType": "uint32", - "name": "referenceBlockNumber", - "type": "uint32" - }, - { - "components": [ - { - "internalType": "uint32[]", - "name": "nonSignerQuorumBitmapIndices", - "type": "uint32[]" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "X", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "Y", - "type": "uint256" - } - ], - "internalType": "struct BN254.G1Point[]", - "name": "nonSignerPubkeys", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "X", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "Y", - "type": "uint256" - } - ], - "internalType": "struct BN254.G1Point[]", - "name": "quorumApks", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "uint256[2]", - "name": "X", - "type": "uint256[2]" - }, - { - "internalType": "uint256[2]", - "name": "Y", - "type": "uint256[2]" - } - ], - "internalType": "struct BN254.G2Point", - "name": "apkG2", - "type": "tuple" - }, + "type": "function", + "name": "checkSignatures", + "inputs": [ { - "components": [ - { - "internalType": "uint256", - "name": "X", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "Y", - "type": "uint256" - } - ], - "internalType": "struct BN254.G1Point", - "name": "sigma", - "type": "tuple" + "name": "msgHash", + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "uint32[]", - "name": "quorumApkIndices", - "type": "uint32[]" + "name": "quorumNumbers", + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "uint32[]", - "name": "totalStakeIndices", - "type": "uint32[]" + "name": "referenceBlockNumber", + "type": "uint32", + "internalType": "uint32" }, { - "internalType": "uint32[][]", - "name": "nonSignerStakeIndices", - "type": "uint32[][]" + "name": "params", + "type": "tuple", + "internalType": "struct IBLSSignatureChecker.NonSignerStakesAndSignature", + "components": [ + { + "name": "nonSignerQuorumBitmapIndices", + "type": "uint32[]", + "internalType": "uint32[]" + }, + { + "name": "nonSignerPubkeys", + "type": "tuple[]", + "internalType": "struct BN254.G1Point[]", + "components": [ + { + "name": "X", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "Y", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "quorumApks", + "type": "tuple[]", + "internalType": "struct BN254.G1Point[]", + "components": [ + { + "name": "X", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "Y", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "apkG2", + "type": "tuple", + "internalType": "struct BN254.G2Point", + "components": [ + { + "name": "X", + "type": "uint256[2]", + "internalType": "uint256[2]" + }, + { + "name": "Y", + "type": "uint256[2]", + "internalType": "uint256[2]" + } + ] + }, + { + "name": "sigma", + "type": "tuple", + "internalType": "struct BN254.G1Point", + "components": [ + { + "name": "X", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "Y", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "quorumApkIndices", + "type": "uint32[]", + "internalType": "uint32[]" + }, + { + "name": "totalStakeIndices", + "type": "uint32[]", + "internalType": "uint32[]" + }, + { + "name": "nonSignerStakeIndices", + "type": "uint32[][]", + "internalType": "uint32[][]" + } + ] } - ], - "internalType": "struct IBLSSignatureChecker.NonSignerStakesAndSignature", - "name": "nonSignerStakesAndSignature", - "type": "tuple" - } - ], - "name": "checkSignatures", - "outputs": [ - { - "components": [ - { - "internalType": "uint96[]", - "name": "signedStakeForQuorum", - "type": "uint96[]" + ], + "outputs": [ + { + "name": "", + "type": "tuple", + "internalType": "struct IBLSSignatureChecker.QuorumStakeTotals", + "components": [ + { + "name": "signedStakeForQuorum", + "type": "uint96[]", + "internalType": "uint96[]" + }, + { + "name": "totalStakeForQuorum", + "type": "uint96[]", + "internalType": "uint96[]" + } + ] }, { - "internalType": "uint96[]", - "name": "totalStakeForQuorum", - "type": "uint96[]" + "name": "", + "type": "bytes32", + "internalType": "bytes32" } - ], - "internalType": "struct IBLSSignatureChecker.QuorumStakeTotals", - "name": "", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" + ], + "stateMutability": "view" }, { - "inputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "blobHeadersRoot", - "type": "bytes32" - }, + "type": "function", + "name": "confirmBatch", + "inputs": [ { - "internalType": "bytes", - "name": "quorumNumbers", - "type": "bytes" + "name": "batchHeader", + "type": "tuple", + "internalType": "struct IEigenDAServiceManager.BatchHeader", + "components": [ + { + "name": "blobHeadersRoot", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "quorumNumbers", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "quorumThresholdPercentages", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "referenceBlockNumber", + "type": "uint32", + "internalType": "uint32" + } + ] }, { - "internalType": "bytes", - "name": "quorumThresholdPercentages", - "type": "bytes" - }, + "name": "nonSignerStakesAndSignature", + "type": "tuple", + "internalType": "struct IBLSSignatureChecker.NonSignerStakesAndSignature", + "components": [ + { + "name": "nonSignerQuorumBitmapIndices", + "type": "uint32[]", + "internalType": "uint32[]" + }, + { + "name": "nonSignerPubkeys", + "type": "tuple[]", + "internalType": "struct BN254.G1Point[]", + "components": [ + { + "name": "X", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "Y", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "quorumApks", + "type": "tuple[]", + "internalType": "struct BN254.G1Point[]", + "components": [ + { + "name": "X", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "Y", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "apkG2", + "type": "tuple", + "internalType": "struct BN254.G2Point", + "components": [ + { + "name": "X", + "type": "uint256[2]", + "internalType": "uint256[2]" + }, + { + "name": "Y", + "type": "uint256[2]", + "internalType": "uint256[2]" + } + ] + }, + { + "name": "sigma", + "type": "tuple", + "internalType": "struct BN254.G1Point", + "components": [ + { + "name": "X", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "Y", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "quorumApkIndices", + "type": "uint32[]", + "internalType": "uint32[]" + }, + { + "name": "totalStakeIndices", + "type": "uint32[]", + "internalType": "uint32[]" + }, + { + "name": "nonSignerStakeIndices", + "type": "uint32[][]", + "internalType": "uint32[][]" + } + ] + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "delegation", + "inputs": [], + "outputs": [ { - "internalType": "uint32", - "name": "referenceBlockNumber", - "type": "uint32" + "name": "", + "type": "address", + "internalType": "contract IDelegationManager" } - ], - "internalType": "struct IEigenDAServiceManager.BatchHeader", - "name": "batchHeader", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint32[]", - "name": "nonSignerQuorumBitmapIndices", - "type": "uint32[]" - }, + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "deregisterOperatorFromAVS", + "inputs": [ { - "components": [ - { - "internalType": "uint256", - "name": "X", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "Y", - "type": "uint256" - } - ], - "internalType": "struct BN254.G1Point[]", - "name": "nonSignerPubkeys", - "type": "tuple[]" - }, + "name": "operator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "getOperatorRestakedStrategies", + "inputs": [ { - "components": [ - { - "internalType": "uint256", - "name": "X", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "Y", - "type": "uint256" - } - ], - "internalType": "struct BN254.G1Point[]", - "name": "quorumApks", - "type": "tuple[]" - }, + "name": "operator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ { - "components": [ - { - "internalType": "uint256[2]", - "name": "X", - "type": "uint256[2]" - }, - { - "internalType": "uint256[2]", - "name": "Y", - "type": "uint256[2]" - } - ], - "internalType": "struct BN254.G2Point", - "name": "apkG2", - "type": "tuple" - }, + "name": "", + "type": "address[]", + "internalType": "address[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getRestakeableStrategies", + "inputs": [], + "outputs": [ { - "components": [ - { - "internalType": "uint256", - "name": "X", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "Y", - "type": "uint256" - } - ], - "internalType": "struct BN254.G1Point", - "name": "sigma", - "type": "tuple" - }, + "name": "", + "type": "address[]", + "internalType": "address[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "initialize", + "inputs": [ { - "internalType": "uint32[]", - "name": "quorumApkIndices", - "type": "uint32[]" + "name": "_pauserRegistry", + "type": "address", + "internalType": "contract IPauserRegistry" }, { - "internalType": "uint32[]", - "name": "totalStakeIndices", - "type": "uint32[]" + "name": "_initialOwner", + "type": "address", + "internalType": "address" }, { - "internalType": "uint32[][]", - "name": "nonSignerStakeIndices", - "type": "uint32[][]" + "name": "_batchConfirmer", + "type": "address", + "internalType": "address" } - ], - "internalType": "struct IBLSSignatureChecker.NonSignerStakesAndSignature", - "name": "nonSignerStakesAndSignature", - "type": "tuple" - } - ], - "name": "confirmBatch", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + ], + "outputs": [], + "stateMutability": "nonpayable" }, { - "inputs": [], - "name": "delegationManager", - "outputs": [ - { - "internalType": "contract IDelegationManager", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" + "type": "function", + "name": "initialize", + "inputs": [ + { + "name": "initialOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" }, { - "inputs": [], - "name": "feePerBytePerTime", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" + "type": "function", + "name": "latestServeUntilBlock", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint32", + "internalType": "uint32" + } + ], + "stateMutability": "view" }, { - "inputs": [], - "name": "feeSetter", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" + "type": "function", + "name": "owner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" }, { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "freezeOperator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "type": "function", + "name": "pause", + "inputs": [ + { + "name": "newPausedStatus", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" }, { - "inputs": [ - { - "internalType": "contract IPauserRegistry", - "name": "_pauserRegistry", - "type": "address" - }, - { - "internalType": "address", - "name": "initialOwner", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_feePerBytePerTime", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_feeSetter", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "type": "function", + "name": "pauseAll", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" }, { - "inputs": [], - "name": "latestServeUntilBlock", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" + "type": "function", + "name": "paused", + "inputs": [ + { + "name": "index", + "type": "uint8", + "internalType": "uint8" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" }, { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" + "type": "function", + "name": "paused", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" }, { - "inputs": [ - { - "internalType": "uint256", - "name": "newPausedStatus", - "type": "uint256" - } - ], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "type": "function", + "name": "pauserRegistry", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IPauserRegistry" + } + ], + "stateMutability": "view" }, { - "inputs": [], - "name": "pauseAll", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "type": "function", + "name": "registerOperatorToAVS", + "inputs": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + }, + { + "name": "operatorSignature", + "type": "tuple", + "internalType": "struct ISignatureUtils.SignatureWithSaltAndExpiry", + "components": [ + { + "name": "signature", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "salt", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "expiry", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "outputs": [], + "stateMutability": "nonpayable" }, { - "inputs": [ - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" + "type": "function", + "name": "registryCoordinator", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IRegistryCoordinator" + } + ], + "stateMutability": "view" }, { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" + "type": "function", + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" }, { - "inputs": [], - "name": "pauserRegistry", - "outputs": [ - { - "internalType": "contract IPauserRegistry", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" + "type": "function", + "name": "setBatchConfirmer", + "inputs": [ + { + "name": "_batchConfirmer", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" }, { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "uint32", - "name": "serveUntilBlock", - "type": "uint32" - } - ], - "name": "recordFirstStakeUpdate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "type": "function", + "name": "setMetadataURI", + "inputs": [ + { + "name": "_metadataURI", + "type": "string", + "internalType": "string" + } + ], + "outputs": [], + "stateMutability": "nonpayable" }, { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "uint32", - "name": "serveUntilBlock", - "type": "uint32" - } - ], - "name": "recordLastStakeUpdateAndRevokeSlashingAbility", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "type": "function", + "name": "setPauserRegistry", + "inputs": [ + { + "name": "newPauserRegistry", + "type": "address", + "internalType": "contract IPauserRegistry" + } + ], + "outputs": [], + "stateMutability": "nonpayable" }, { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "uint32", - "name": "updateBlock", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "serveUntilBlock", - "type": "uint32" - }, - { - "internalType": "uint256", - "name": "prevElement", - "type": "uint256" - } - ], - "name": "recordStakeUpdate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "type": "function", + "name": "setStaleStakesForbidden", + "inputs": [ + { + "name": "value", + "type": "bool", + "internalType": "bool" + } + ], + "outputs": [], + "stateMutability": "nonpayable" }, { - "inputs": [], - "name": "registryCoordinator", - "outputs": [ - { - "internalType": "contract IRegistryCoordinator", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" + "type": "function", + "name": "stakeRegistry", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IStakeRegistry" + } + ], + "stateMutability": "view" }, { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "type": "function", + "name": "staleStakesForbidden", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" }, { - "inputs": [ - { - "internalType": "uint256", - "name": "_feePerBytePerTime", - "type": "uint256" - } - ], - "name": "setFeePerBytePerTime", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "type": "function", + "name": "taskNumber", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint32", + "internalType": "uint32" + } + ], + "stateMutability": "view" }, { - "inputs": [ - { - "internalType": "address", - "name": "_feeSetter", - "type": "address" - } - ], - "name": "setFeeSetter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "type": "function", + "name": "transferOwnership", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" }, { - "inputs": [ - { - "internalType": "contract IPauserRegistry", - "name": "newPauserRegistry", - "type": "address" - } - ], - "name": "setPauserRegistry", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "type": "function", + "name": "trySignatureAndApkVerification", + "inputs": [ + { + "name": "msgHash", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "apk", + "type": "tuple", + "internalType": "struct BN254.G1Point", + "components": [ + { + "name": "X", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "Y", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "apkG2", + "type": "tuple", + "internalType": "struct BN254.G2Point", + "components": [ + { + "name": "X", + "type": "uint256[2]", + "internalType": "uint256[2]" + }, + { + "name": "Y", + "type": "uint256[2]", + "internalType": "uint256[2]" + } + ] + }, + { + "name": "sigma", + "type": "tuple", + "internalType": "struct BN254.G1Point", + "components": [ + { + "name": "X", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "Y", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "outputs": [ + { + "name": "pairingSuccessful", + "type": "bool", + "internalType": "bool" + }, + { + "name": "siganatureIsValid", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" }, { - "inputs": [], - "name": "slasher", - "outputs": [ - { - "internalType": "contract ISlasher", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" + "type": "function", + "name": "unpause", + "inputs": [ + { + "name": "newPausedStatus", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" }, { - "inputs": [], - "name": "stakeRegistry", - "outputs": [ - { - "internalType": "contract IStakeRegistry", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" + "type": "event", + "name": "BatchConfirmed", + "inputs": [ + { + "name": "batchHeaderHash", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + }, + { + "name": "batchId", + "type": "uint32", + "indexed": false, + "internalType": "uint32" + } + ], + "anonymous": false }, { - "inputs": [], - "name": "strategyManager", - "outputs": [ - { - "internalType": "contract IStrategyManager", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" + "type": "event", + "name": "BatchConfirmerChanged", + "inputs": [ + { + "name": "previousAddress", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "newAddress", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false }, { - "inputs": [], - "name": "taskNumber", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint8", + "indexed": false, + "internalType": "uint8" + } + ], + "anonymous": false }, { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false }, { - "inputs": [ - { - "internalType": "bytes32", - "name": "msgHash", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "X", - "type": "uint256" + "type": "event", + "name": "Paused", + "inputs": [ + { + "name": "account", + "type": "address", + "indexed": true, + "internalType": "address" }, { - "internalType": "uint256", - "name": "Y", - "type": "uint256" + "name": "newPausedStatus", + "type": "uint256", + "indexed": false, + "internalType": "uint256" } - ], - "internalType": "struct BN254.G1Point", - "name": "apk", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256[2]", - "name": "X", - "type": "uint256[2]" + ], + "anonymous": false + }, + { + "type": "event", + "name": "PauserRegistrySet", + "inputs": [ + { + "name": "pauserRegistry", + "type": "address", + "indexed": false, + "internalType": "contract IPauserRegistry" }, { - "internalType": "uint256[2]", - "name": "Y", - "type": "uint256[2]" + "name": "newPauserRegistry", + "type": "address", + "indexed": false, + "internalType": "contract IPauserRegistry" } - ], - "internalType": "struct BN254.G2Point", - "name": "apkG2", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "X", - "type": "uint256" - }, + ], + "anonymous": false + }, + { + "type": "event", + "name": "StaleStakesForbiddenUpdate", + "inputs": [ { - "internalType": "uint256", - "name": "Y", - "type": "uint256" + "name": "value", + "type": "bool", + "indexed": false, + "internalType": "bool" } - ], - "internalType": "struct BN254.G1Point", - "name": "sigma", - "type": "tuple" - } - ], - "name": "trySignatureAndApkVerification", - "outputs": [ - { - "internalType": "bool", - "name": "pairingSuccessful", - "type": "bool" - }, - { - "internalType": "bool", - "name": "siganatureIsValid", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" + ], + "anonymous": false }, { - "inputs": [ - { - "internalType": "uint256", - "name": "newPausedStatus", - "type": "uint256" - } - ], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "type": "event", + "name": "Unpaused", + "inputs": [ + { + "name": "account", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newPausedStatus", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false } ] \ No newline at end of file diff --git a/subgraphs/eigenda-batch-metadata/networks.json b/subgraphs/eigenda-batch-metadata/networks.json index 62763e24e2..74b4bb5ac9 100644 --- a/subgraphs/eigenda-batch-metadata/networks.json +++ b/subgraphs/eigenda-batch-metadata/networks.json @@ -13,8 +13,8 @@ }, "preprod-goerli": { "EigenDAServiceManager": { - "address": "0x25425d315Ae31897a8e7F47B1077Bf5ED3894Ca1", - "startBlock": 10015410 + "address": "0x5f2b48682F0854b7F33e44124D92AC77768143b5", + "startBlock": 10470500 } }, "goerli": { diff --git a/subgraphs/eigenda-batch-metadata/subgraph.yaml b/subgraphs/eigenda-batch-metadata/subgraph.yaml index ac7fa399dd..a92d01831a 100644 --- a/subgraphs/eigenda-batch-metadata/subgraph.yaml +++ b/subgraphs/eigenda-batch-metadata/subgraph.yaml @@ -22,7 +22,7 @@ dataSources: - function: confirmBatch((bytes32,bytes,bytes,uint32),(uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][])) handler: handleConfirmBatchCall eventHandlers: - - event: BatchConfirmed(indexed bytes32,uint32,uint96) + - event: BatchConfirmed(indexed bytes32,uint32) handler: handleBatchConfirmed receipt: true file: ./src/edasm.ts diff --git a/subgraphs/eigenda-batch-metadata/tests/edasm-utils.ts b/subgraphs/eigenda-batch-metadata/tests/edasm-utils.ts index 92e15907bd..835043db45 100644 --- a/subgraphs/eigenda-batch-metadata/tests/edasm-utils.ts +++ b/subgraphs/eigenda-batch-metadata/tests/edasm-utils.ts @@ -80,9 +80,6 @@ export function createNewBatchConfirmedEvent( batchConfirmedEvent.parameters.push( new ethereum.EventParam("batchId", ethereum.Value.fromUnsignedBigInt(batchId)) ) - batchConfirmedEvent.parameters.push( - new ethereum.EventParam("fee", ethereum.Value.fromUnsignedBigInt(fee)) - ) return batchConfirmedEvent } diff --git a/subgraphs/eigenda-batch-metadata/tests/edasm.test.ts b/subgraphs/eigenda-batch-metadata/tests/edasm.test.ts index e1d82f4292..b42f418943 100644 --- a/subgraphs/eigenda-batch-metadata/tests/edasm.test.ts +++ b/subgraphs/eigenda-batch-metadata/tests/edasm.test.ts @@ -97,12 +97,6 @@ describe("EigenDASM", () => { BATCH_PREFIX_BYTES.concat(confirmBatchCall.transaction.hash).toHexString() ) - assert.fieldEquals( - "NonSigning", - nonSigningEntityId.toHexString(), - "batch", - confirmBatchCall.transaction.hash.toHexString() - ) assert.fieldEquals( "NonSigning", diff --git a/subgraphs/eigenda-operator-state/abis/BLSApkRegistry.json b/subgraphs/eigenda-operator-state/abis/BLSApkRegistry.json new file mode 100644 index 0000000000..3fde73d639 --- /dev/null +++ b/subgraphs/eigenda-operator-state/abis/BLSApkRegistry.json @@ -0,0 +1,607 @@ +[ + { + "type": "constructor", + "inputs": [ + { + "name": "_registryCoordinator", + "type": "address", + "internalType": "contract IRegistryCoordinator" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "apkHistory", + "inputs": [ + { + "name": "", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "apkHash", + "type": "bytes24", + "internalType": "bytes24" + }, + { + "name": "updateBlockNumber", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "nextUpdateBlockNumber", + "type": "uint32", + "internalType": "uint32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "currentApk", + "inputs": [ + { + "name": "", + "type": "uint8", + "internalType": "uint8" + } + ], + "outputs": [ + { + "name": "X", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "Y", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "deregisterOperator", + "inputs": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + }, + { + "name": "quorumNumbers", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "getApk", + "inputs": [ + { + "name": "quorumNumber", + "type": "uint8", + "internalType": "uint8" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple", + "internalType": "struct BN254.G1Point", + "components": [ + { + "name": "X", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "Y", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getApkHashAtBlockNumberAndIndex", + "inputs": [ + { + "name": "quorumNumber", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "blockNumber", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "index", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes24", + "internalType": "bytes24" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getApkHistoryLength", + "inputs": [ + { + "name": "quorumNumber", + "type": "uint8", + "internalType": "uint8" + } + ], + "outputs": [ + { + "name": "", + "type": "uint32", + "internalType": "uint32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getApkIndicesAtBlockNumber", + "inputs": [ + { + "name": "quorumNumbers", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "blockNumber", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint32[]", + "internalType": "uint32[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getApkUpdateAtIndex", + "inputs": [ + { + "name": "quorumNumber", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "index", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple", + "internalType": "struct IBLSApkRegistry.ApkUpdate", + "components": [ + { + "name": "apkHash", + "type": "bytes24", + "internalType": "bytes24" + }, + { + "name": "updateBlockNumber", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "nextUpdateBlockNumber", + "type": "uint32", + "internalType": "uint32" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getOperatorFromPubkeyHash", + "inputs": [ + { + "name": "pubkeyHash", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getOperatorId", + "inputs": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getRegisteredPubkey", + "inputs": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple", + "internalType": "struct BN254.G1Point", + "components": [ + { + "name": "X", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "Y", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "initializeQuorum", + "inputs": [ + { + "name": "quorumNumber", + "type": "uint8", + "internalType": "uint8" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "operatorToPubkey", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "X", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "Y", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "operatorToPubkeyHash", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "pubkeyHashToOperator", + "inputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "registerBLSPublicKey", + "inputs": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + }, + { + "name": "params", + "type": "tuple", + "internalType": "struct IBLSApkRegistry.PubkeyRegistrationParams", + "components": [ + { + "name": "pubkeyRegistrationSignature", + "type": "tuple", + "internalType": "struct BN254.G1Point", + "components": [ + { + "name": "X", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "Y", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "pubkeyG1", + "type": "tuple", + "internalType": "struct BN254.G1Point", + "components": [ + { + "name": "X", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "Y", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "pubkeyG2", + "type": "tuple", + "internalType": "struct BN254.G2Point", + "components": [ + { + "name": "X", + "type": "uint256[2]", + "internalType": "uint256[2]" + }, + { + "name": "Y", + "type": "uint256[2]", + "internalType": "uint256[2]" + } + ] + } + ] + }, + { + "name": "pubkeyRegistrationMessageHash", + "type": "tuple", + "internalType": "struct BN254.G1Point", + "components": [ + { + "name": "X", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "Y", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "outputs": [ + { + "name": "operatorId", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "registerOperator", + "inputs": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + }, + { + "name": "quorumNumbers", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "registryCoordinator", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint8", + "indexed": false, + "internalType": "uint8" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewPubkeyRegistration", + "inputs": [ + { + "name": "operator", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "pubkeyG1", + "type": "tuple", + "indexed": false, + "internalType": "struct BN254.G1Point", + "components": [ + { + "name": "X", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "Y", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "pubkeyG2", + "type": "tuple", + "indexed": false, + "internalType": "struct BN254.G2Point", + "components": [ + { + "name": "X", + "type": "uint256[2]", + "internalType": "uint256[2]" + }, + { + "name": "Y", + "type": "uint256[2]", + "internalType": "uint256[2]" + } + ] + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OperatorAddedToQuorums", + "inputs": [ + { + "name": "operator", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "quorumNumbers", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OperatorRemovedFromQuorums", + "inputs": [ + { + "name": "operator", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "quorumNumbers", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + } + ], + "anonymous": false + } +] \ No newline at end of file diff --git a/subgraphs/eigenda-operator-state/abis/BLSPubkeyCompendium.json b/subgraphs/eigenda-operator-state/abis/BLSPubkeyCompendium.json deleted file mode 100644 index 76df111819..0000000000 --- a/subgraphs/eigenda-operator-state/abis/BLSPubkeyCompendium.json +++ /dev/null @@ -1,84 +0,0 @@ -[ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "components": [ - { "internalType": "uint256", "name": "X", "type": "uint256" }, - { "internalType": "uint256", "name": "Y", "type": "uint256" } - ], - "indexed": false, - "internalType": "struct BN254.G1Point", - "name": "pubkeyG1", - "type": "tuple" - }, - { - "components": [ - { "internalType": "uint256[2]", "name": "X", "type": "uint256[2]" }, - { "internalType": "uint256[2]", "name": "Y", "type": "uint256[2]" } - ], - "indexed": false, - "internalType": "struct BN254.G2Point", - "name": "pubkeyG2", - "type": "tuple" - } - ], - "name": "NewPubkeyRegistration", - "type": "event" - }, - { - "inputs": [{ "internalType": "address", "name": "", "type": "address" }], - "name": "operatorToPubkeyHash", - "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], - "name": "pubkeyHashToOperator", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { "internalType": "uint256", "name": "X", "type": "uint256" }, - { "internalType": "uint256", "name": "Y", "type": "uint256" } - ], - "internalType": "struct BN254.G1Point", - "name": "signedMessageHash", - "type": "tuple" - }, - { - "components": [ - { "internalType": "uint256", "name": "X", "type": "uint256" }, - { "internalType": "uint256", "name": "Y", "type": "uint256" } - ], - "internalType": "struct BN254.G1Point", - "name": "pubkeyG1", - "type": "tuple" - }, - { - "components": [ - { "internalType": "uint256[2]", "name": "X", "type": "uint256[2]" }, - { "internalType": "uint256[2]", "name": "Y", "type": "uint256[2]" } - ], - "internalType": "struct BN254.G2Point", - "name": "pubkeyG2", - "type": "tuple" - } - ], - "name": "registerBLSPublicKey", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } -] diff --git a/subgraphs/eigenda-operator-state/abis/BLSPubkeyRegistry.json b/subgraphs/eigenda-operator-state/abis/BLSPubkeyRegistry.json deleted file mode 100644 index ddb8d5cdfd..0000000000 --- a/subgraphs/eigenda-operator-state/abis/BLSPubkeyRegistry.json +++ /dev/null @@ -1,220 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "contract IRegistryCoordinator", - "name": "_registryCoordinator", - "type": "address" - }, - { - "internalType": "contract IBLSPublicKeyCompendium", - "name": "_pubkeyCompendium", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "quorumNumbers", - "type": "bytes" - } - ], - "name": "OperatorAddedToQuorums", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "quorumNumbers", - "type": "bytes" - } - ], - "name": "OperatorRemovedFromQuorums", - "type": "event" - }, - { - "inputs": [ - { "internalType": "address", "name": "operator", "type": "address" }, - { "internalType": "bytes", "name": "quorumNumbers", "type": "bytes" }, - { - "components": [ - { "internalType": "uint256", "name": "X", "type": "uint256" }, - { "internalType": "uint256", "name": "Y", "type": "uint256" } - ], - "internalType": "struct BN254.G1Point", - "name": "pubkey", - "type": "tuple" - } - ], - "name": "deregisterOperator", - "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint8", "name": "quorumNumber", "type": "uint8" } - ], - "name": "getApkForQuorum", - "outputs": [ - { - "components": [ - { "internalType": "uint256", "name": "X", "type": "uint256" }, - { "internalType": "uint256", "name": "Y", "type": "uint256" } - ], - "internalType": "struct BN254.G1Point", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint8", "name": "quorumNumber", "type": "uint8" }, - { "internalType": "uint32", "name": "blockNumber", "type": "uint32" }, - { "internalType": "uint256", "name": "index", "type": "uint256" } - ], - "name": "getApkHashForQuorumAtBlockNumberFromIndex", - "outputs": [{ "internalType": "bytes24", "name": "", "type": "bytes24" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "bytes", "name": "quorumNumbers", "type": "bytes" }, - { "internalType": "uint256", "name": "blockNumber", "type": "uint256" } - ], - "name": "getApkIndicesForQuorumsAtBlockNumber", - "outputs": [{ "internalType": "uint32[]", "name": "", "type": "uint32[]" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint8", "name": "quorumNumber", "type": "uint8" }, - { "internalType": "uint256", "name": "index", "type": "uint256" } - ], - "name": "getApkUpdateForQuorumByIndex", - "outputs": [ - { - "components": [ - { "internalType": "bytes24", "name": "apkHash", "type": "bytes24" }, - { - "internalType": "uint32", - "name": "updateBlockNumber", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "nextUpdateBlockNumber", - "type": "uint32" - } - ], - "internalType": "struct IBLSPubkeyRegistry.ApkUpdate", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint8", "name": "quorumNumber", "type": "uint8" } - ], - "name": "getQuorumApkHistoryLength", - "outputs": [{ "internalType": "uint32", "name": "", "type": "uint32" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pubkeyCompendium", - "outputs": [ - { - "internalType": "contract IBLSPublicKeyCompendium", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint8", "name": "", "type": "uint8" }, - { "internalType": "uint256", "name": "", "type": "uint256" } - ], - "name": "quorumApkUpdates", - "outputs": [ - { "internalType": "bytes24", "name": "apkHash", "type": "bytes24" }, - { - "internalType": "uint32", - "name": "updateBlockNumber", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "nextUpdateBlockNumber", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "operator", "type": "address" }, - { "internalType": "bytes", "name": "quorumNumbers", "type": "bytes" }, - { - "components": [ - { "internalType": "uint256", "name": "X", "type": "uint256" }, - { "internalType": "uint256", "name": "Y", "type": "uint256" } - ], - "internalType": "struct BN254.G1Point", - "name": "pubkey", - "type": "tuple" - } - ], - "name": "registerOperator", - "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "registryCoordinator", - "outputs": [ - { - "internalType": "contract IRegistryCoordinator", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/subgraphs/eigenda-operator-state/abis/BLSRegistryCoordinatorWithIndices.json b/subgraphs/eigenda-operator-state/abis/BLSRegistryCoordinatorWithIndices.json deleted file mode 100644 index db1cbca6ae..0000000000 --- a/subgraphs/eigenda-operator-state/abis/BLSRegistryCoordinatorWithIndices.json +++ /dev/null @@ -1,1482 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "contract ISlasher", - "name": "_slasher", - "type": "address" - }, - { - "internalType": "contract IServiceManager", - "name": "_serviceManager", - "type": "address" - }, - { - "internalType": "contract IStakeRegistry", - "name": "_stakeRegistry", - "type": "address" - }, - { - "internalType": "contract IBLSPubkeyRegistry", - "name": "_blsPubkeyRegistry", - "type": "address" - }, - { - "internalType": "contract IIndexRegistry", - "name": "_indexRegistry", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "prevChurnApprover", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newChurnApprover", - "type": "address" - } - ], - "name": "ChurnApproverUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "prevEjector", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newEjector", - "type": "address" - } - ], - "name": "EjectorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "operatorId", - "type": "bytes32" - } - ], - "name": "OperatorDeregistered", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "operatorId", - "type": "bytes32" - } - ], - "name": "OperatorRegistered", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint8", - "name": "quorumNumber", - "type": "uint8" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "maxOperatorCount", - "type": "uint32" - }, - { - "internalType": "uint16", - "name": "kickBIPsOfOperatorStake", - "type": "uint16" - }, - { - "internalType": "uint16", - "name": "kickBIPsOfTotalStake", - "type": "uint16" - } - ], - "indexed": false, - "internalType": "struct IBLSRegistryCoordinatorWithIndices.OperatorSetParam", - "name": "operatorSetParams", - "type": "tuple" - } - ], - "name": "OperatorSetParamsUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "operatorId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "string", - "name": "socket", - "type": "string" - } - ], - "name": "OperatorSocketUpdate", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "", - "type": "string" - } - ], - "name": "log", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "log_address", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256[]", - "name": "val", - "type": "uint256[]" - } - ], - "name": "log_array", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "int256[]", - "name": "val", - "type": "int256[]" - } - ], - "name": "log_array", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address[]", - "name": "val", - "type": "address[]" - } - ], - "name": "log_array", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "name": "log_bytes", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "log_bytes32", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "int256", - "name": "", - "type": "int256" - } - ], - "name": "log_int", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "key", - "type": "string" - }, - { - "indexed": false, - "internalType": "address", - "name": "val", - "type": "address" - } - ], - "name": "log_named_address", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "key", - "type": "string" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "val", - "type": "uint256[]" - } - ], - "name": "log_named_array", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "key", - "type": "string" - }, - { - "indexed": false, - "internalType": "int256[]", - "name": "val", - "type": "int256[]" - } - ], - "name": "log_named_array", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "key", - "type": "string" - }, - { - "indexed": false, - "internalType": "address[]", - "name": "val", - "type": "address[]" - } - ], - "name": "log_named_array", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "key", - "type": "string" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "val", - "type": "bytes" - } - ], - "name": "log_named_bytes", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "key", - "type": "string" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "val", - "type": "bytes32" - } - ], - "name": "log_named_bytes32", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "key", - "type": "string" - }, - { - "indexed": false, - "internalType": "int256", - "name": "val", - "type": "int256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "decimals", - "type": "uint256" - } - ], - "name": "log_named_decimal_int", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "key", - "type": "string" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "val", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "decimals", - "type": "uint256" - } - ], - "name": "log_named_decimal_uint", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "key", - "type": "string" - }, - { - "indexed": false, - "internalType": "int256", - "name": "val", - "type": "int256" - } - ], - "name": "log_named_int", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "key", - "type": "string" - }, - { - "indexed": false, - "internalType": "string", - "name": "val", - "type": "string" - } - ], - "name": "log_named_string", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "key", - "type": "string" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "val", - "type": "uint256" - } - ], - "name": "log_named_uint", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "", - "type": "string" - } - ], - "name": "log_string", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "log_uint", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "name": "logs", - "type": "event" - }, - { - "inputs": [], - "name": "IS_TEST", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "OPERATOR_CHURN_APPROVAL_TYPEHASH", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "blsPubkeyRegistry", - "outputs": [ - { - "internalType": "contract IBLSPubkeyRegistry", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "registeringOperatorId", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "uint8", - "name": "quorumNumber", - "type": "uint8" - }, - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "X", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "Y", - "type": "uint256" - } - ], - "internalType": "struct BN254.G1Point", - "name": "pubkey", - "type": "tuple" - } - ], - "internalType": "struct IBLSRegistryCoordinatorWithIndices.OperatorKickParam[]", - "name": "operatorKickParams", - "type": "tuple[]" - }, - { - "internalType": "bytes32", - "name": "salt", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "expiry", - "type": "uint256" - } - ], - "name": "calculateOperatorChurnApprovalDigestHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "churnApprover", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "quorumNumbers", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "deregistrationData", - "type": "bytes" - } - ], - "name": "deregisterOperatorWithCoordinator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "quorumNumbers", - "type": "bytes" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "X", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "Y", - "type": "uint256" - } - ], - "internalType": "struct BN254.G1Point", - "name": "pubkey", - "type": "tuple" - }, - { - "internalType": "bytes32[]", - "name": "operatorIdsToSwap", - "type": "bytes32[]" - } - ], - "name": "deregisterOperatorWithCoordinator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "bytes", - "name": "quorumNumbers", - "type": "bytes" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "X", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "Y", - "type": "uint256" - } - ], - "internalType": "struct BN254.G1Point", - "name": "pubkey", - "type": "tuple" - }, - { - "internalType": "bytes32[]", - "name": "operatorIdsToSwap", - "type": "bytes32[]" - } - ], - "name": "ejectOperatorFromCoordinator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "ejector", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "excludeArtifacts", - "outputs": [ - { - "internalType": "string[]", - "name": "excludedArtifacts_", - "type": "string[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "excludeContracts", - "outputs": [ - { - "internalType": "address[]", - "name": "excludedContracts_", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "excludeSenders", - "outputs": [ - { - "internalType": "address[]", - "name": "excludedSenders_", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "failed", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "operatorId", - "type": "bytes32" - } - ], - "name": "getCurrentQuorumBitmapByOperatorId", - "outputs": [ - { - "internalType": "uint192", - "name": "", - "type": "uint192" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "getOperator", - "outputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "operatorId", - "type": "bytes32" - }, - { - "internalType": "enum IRegistryCoordinator.OperatorStatus", - "name": "status", - "type": "uint8" - } - ], - "internalType": "struct IRegistryCoordinator.Operator", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "getOperatorId", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "quorumNumber", - "type": "uint8" - } - ], - "name": "getOperatorSetParams", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "maxOperatorCount", - "type": "uint32" - }, - { - "internalType": "uint16", - "name": "kickBIPsOfOperatorStake", - "type": "uint16" - }, - { - "internalType": "uint16", - "name": "kickBIPsOfTotalStake", - "type": "uint16" - } - ], - "internalType": "struct IBLSRegistryCoordinatorWithIndices.OperatorSetParam", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "operatorId", - "type": "bytes32" - }, - { - "internalType": "uint32", - "name": "blockNumber", - "type": "uint32" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "getQuorumBitmapByOperatorIdAtBlockNumberByIndex", - "outputs": [ - { - "internalType": "uint192", - "name": "", - "type": "uint192" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "blockNumber", - "type": "uint32" - }, - { - "internalType": "bytes32[]", - "name": "operatorIds", - "type": "bytes32[]" - } - ], - "name": "getQuorumBitmapIndicesByOperatorIdsAtBlockNumber", - "outputs": [ - { - "internalType": "uint32[]", - "name": "", - "type": "uint32[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "operatorId", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "getQuorumBitmapUpdateByOperatorIdByIndex", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "updateBlockNumber", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "nextUpdateBlockNumber", - "type": "uint32" - }, - { - "internalType": "uint192", - "name": "quorumBitmap", - "type": "uint192" - } - ], - "internalType": "struct IRegistryCoordinator.QuorumBitmapUpdate", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "operatorId", - "type": "bytes32" - } - ], - "name": "getQuorumBitmapUpdateByOperatorIdLength", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "indexRegistry", - "outputs": [ - { - "internalType": "contract IIndexRegistry", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_churnApprover", - "type": "address" - }, - { - "internalType": "address", - "name": "_ejector", - "type": "address" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "maxOperatorCount", - "type": "uint32" - }, - { - "internalType": "uint16", - "name": "kickBIPsOfOperatorStake", - "type": "uint16" - }, - { - "internalType": "uint16", - "name": "kickBIPsOfTotalStake", - "type": "uint16" - } - ], - "internalType": "struct IBLSRegistryCoordinatorWithIndices.OperatorSetParam[]", - "name": "_operatorSetParams", - "type": "tuple[]" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "isChurnApproverSaltUsed", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "numRegistries", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "quorumNumbers", - "type": "bytes" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "X", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "Y", - "type": "uint256" - } - ], - "internalType": "struct BN254.G1Point", - "name": "pubkey", - "type": "tuple" - }, - { - "internalType": "string", - "name": "socket", - "type": "string" - }, - { - "components": [ - { - "internalType": "uint8", - "name": "quorumNumber", - "type": "uint8" - }, - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "X", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "Y", - "type": "uint256" - } - ], - "internalType": "struct BN254.G1Point", - "name": "pubkey", - "type": "tuple" - } - ], - "internalType": "struct IBLSRegistryCoordinatorWithIndices.OperatorKickParam[]", - "name": "operatorKickParams", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - }, - { - "internalType": "bytes32", - "name": "salt", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "expiry", - "type": "uint256" - } - ], - "internalType": "struct ISignatureUtils.SignatureWithSaltAndExpiry", - "name": "signatureWithSaltAndExpiry", - "type": "tuple" - } - ], - "name": "registerOperatorWithCoordinator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "quorumNumbers", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "registrationData", - "type": "bytes" - } - ], - "name": "registerOperatorWithCoordinator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "quorumNumbers", - "type": "bytes" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "X", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "Y", - "type": "uint256" - } - ], - "internalType": "struct BN254.G1Point", - "name": "pubkey", - "type": "tuple" - }, - { - "internalType": "string", - "name": "socket", - "type": "string" - } - ], - "name": "registerOperatorWithCoordinator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "registries", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "serviceManager", - "outputs": [ - { - "internalType": "contract IServiceManager", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_churnApprover", - "type": "address" - } - ], - "name": "setChurnApprover", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_ejector", - "type": "address" - } - ], - "name": "setEjector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "quorumNumber", - "type": "uint8" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "maxOperatorCount", - "type": "uint32" - }, - { - "internalType": "uint16", - "name": "kickBIPsOfOperatorStake", - "type": "uint16" - }, - { - "internalType": "uint16", - "name": "kickBIPsOfTotalStake", - "type": "uint16" - } - ], - "internalType": "struct IBLSRegistryCoordinatorWithIndices.OperatorSetParam", - "name": "operatorSetParam", - "type": "tuple" - } - ], - "name": "setOperatorSetParams", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "slasher", - "outputs": [ - { - "internalType": "contract ISlasher", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "stakeRegistry", - "outputs": [ - { - "internalType": "contract IStakeRegistry", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "targetArtifactSelectors", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - }, - { - "internalType": "bytes4[]", - "name": "selectors", - "type": "bytes4[]" - } - ], - "internalType": "struct StdInvariant.FuzzSelector[]", - "name": "targetedArtifactSelectors_", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "targetArtifacts", - "outputs": [ - { - "internalType": "string[]", - "name": "targetedArtifacts_", - "type": "string[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "targetContracts", - "outputs": [ - { - "internalType": "address[]", - "name": "targetedContracts_", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "targetSelectors", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - }, - { - "internalType": "bytes4[]", - "name": "selectors", - "type": "bytes4[]" - } - ], - "internalType": "struct StdInvariant.FuzzSelector[]", - "name": "targetedSelectors_", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "targetSenders", - "outputs": [ - { - "internalType": "address[]", - "name": "targetedSenders_", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "socket", - "type": "string" - } - ], - "name": "updateSocket", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } -] diff --git a/subgraphs/eigenda-operator-state/abis/RegistryCoordinator.json b/subgraphs/eigenda-operator-state/abis/RegistryCoordinator.json new file mode 100644 index 0000000000..959a445e47 --- /dev/null +++ b/subgraphs/eigenda-operator-state/abis/RegistryCoordinator.json @@ -0,0 +1,1411 @@ +[ + { + "type": "constructor", + "inputs": [ + { + "name": "_serviceManager", + "type": "address", + "internalType": "contract IServiceManager" + }, + { + "name": "_stakeRegistry", + "type": "address", + "internalType": "contract IStakeRegistry" + }, + { + "name": "_blsApkRegistry", + "type": "address", + "internalType": "contract IBLSApkRegistry" + }, + { + "name": "_indexRegistry", + "type": "address", + "internalType": "contract IIndexRegistry" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "OPERATOR_CHURN_APPROVAL_TYPEHASH", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "PUBKEY_REGISTRATION_TYPEHASH", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "blsApkRegistry", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IBLSApkRegistry" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "calculateOperatorChurnApprovalDigestHash", + "inputs": [ + { + "name": "registeringOperatorId", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "operatorKickParams", + "type": "tuple[]", + "internalType": "struct IRegistryCoordinator.OperatorKickParam[]", + "components": [ + { + "name": "quorumNumber", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "operator", + "type": "address", + "internalType": "address" + } + ] + }, + { + "name": "salt", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "expiry", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "churnApprover", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "createQuorum", + "inputs": [ + { + "name": "operatorSetParams", + "type": "tuple", + "internalType": "struct IRegistryCoordinator.OperatorSetParam", + "components": [ + { + "name": "maxOperatorCount", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "kickBIPsOfOperatorStake", + "type": "uint16", + "internalType": "uint16" + }, + { + "name": "kickBIPsOfTotalStake", + "type": "uint16", + "internalType": "uint16" + } + ] + }, + { + "name": "minimumStake", + "type": "uint96", + "internalType": "uint96" + }, + { + "name": "strategyParams", + "type": "tuple[]", + "internalType": "struct IStakeRegistry.StrategyParams[]", + "components": [ + { + "name": "strategy", + "type": "address", + "internalType": "contract IStrategy" + }, + { + "name": "multiplier", + "type": "uint96", + "internalType": "uint96" + } + ] + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "deregisterOperator", + "inputs": [ + { + "name": "quorumNumbers", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "ejectOperator", + "inputs": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + }, + { + "name": "quorumNumbers", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "ejector", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getCurrentQuorumBitmap", + "inputs": [ + { + "name": "operatorId", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "", + "type": "uint192", + "internalType": "uint192" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getOperator", + "inputs": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple", + "internalType": "struct IRegistryCoordinator.OperatorInfo", + "components": [ + { + "name": "operatorId", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "status", + "type": "uint8", + "internalType": "enum IRegistryCoordinator.OperatorStatus" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getOperatorFromId", + "inputs": [ + { + "name": "operatorId", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getOperatorId", + "inputs": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getOperatorSetParams", + "inputs": [ + { + "name": "quorumNumber", + "type": "uint8", + "internalType": "uint8" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple", + "internalType": "struct IRegistryCoordinator.OperatorSetParam", + "components": [ + { + "name": "maxOperatorCount", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "kickBIPsOfOperatorStake", + "type": "uint16", + "internalType": "uint16" + }, + { + "name": "kickBIPsOfTotalStake", + "type": "uint16", + "internalType": "uint16" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getOperatorStatus", + "inputs": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint8", + "internalType": "enum IRegistryCoordinator.OperatorStatus" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getQuorumBitmapAtBlockNumberByIndex", + "inputs": [ + { + "name": "operatorId", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "blockNumber", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "index", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint192", + "internalType": "uint192" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getQuorumBitmapHistoryLength", + "inputs": [ + { + "name": "operatorId", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getQuorumBitmapIndicesAtBlockNumber", + "inputs": [ + { + "name": "blockNumber", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "operatorIds", + "type": "bytes32[]", + "internalType": "bytes32[]" + } + ], + "outputs": [ + { + "name": "", + "type": "uint32[]", + "internalType": "uint32[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getQuorumBitmapUpdateByIndex", + "inputs": [ + { + "name": "operatorId", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "index", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple", + "internalType": "struct IRegistryCoordinator.QuorumBitmapUpdate", + "components": [ + { + "name": "updateBlockNumber", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "nextUpdateBlockNumber", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "quorumBitmap", + "type": "uint192", + "internalType": "uint192" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "indexRegistry", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IIndexRegistry" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "initialize", + "inputs": [ + { + "name": "_initialOwner", + "type": "address", + "internalType": "address" + }, + { + "name": "_churnApprover", + "type": "address", + "internalType": "address" + }, + { + "name": "_ejector", + "type": "address", + "internalType": "address" + }, + { + "name": "_pauserRegistry", + "type": "address", + "internalType": "contract IPauserRegistry" + }, + { + "name": "_initialPausedStatus", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "_operatorSetParams", + "type": "tuple[]", + "internalType": "struct IRegistryCoordinator.OperatorSetParam[]", + "components": [ + { + "name": "maxOperatorCount", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "kickBIPsOfOperatorStake", + "type": "uint16", + "internalType": "uint16" + }, + { + "name": "kickBIPsOfTotalStake", + "type": "uint16", + "internalType": "uint16" + } + ] + }, + { + "name": "_minimumStakes", + "type": "uint96[]", + "internalType": "uint96[]" + }, + { + "name": "_strategyParams", + "type": "tuple[][]", + "internalType": "struct IStakeRegistry.StrategyParams[][]", + "components": [ + { + "name": "strategy", + "type": "address", + "internalType": "contract IStrategy" + }, + { + "name": "multiplier", + "type": "uint96", + "internalType": "uint96" + } + ] + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "isChurnApproverSaltUsed", + "inputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "numRegistries", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "owner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "pause", + "inputs": [ + { + "name": "newPausedStatus", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "pauseAll", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "paused", + "inputs": [ + { + "name": "index", + "type": "uint8", + "internalType": "uint8" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "paused", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "pauserRegistry", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IPauserRegistry" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "pubkeyRegistrationMessageHash", + "inputs": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple", + "internalType": "struct BN254.G1Point", + "components": [ + { + "name": "X", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "Y", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "quorumCount", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint8", + "internalType": "uint8" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "quorumUpdateBlockNumber", + "inputs": [ + { + "name": "", + "type": "uint8", + "internalType": "uint8" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "registerOperator", + "inputs": [ + { + "name": "quorumNumbers", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "socket", + "type": "string", + "internalType": "string" + }, + { + "name": "params", + "type": "tuple", + "internalType": "struct IBLSApkRegistry.PubkeyRegistrationParams", + "components": [ + { + "name": "pubkeyRegistrationSignature", + "type": "tuple", + "internalType": "struct BN254.G1Point", + "components": [ + { + "name": "X", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "Y", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "pubkeyG1", + "type": "tuple", + "internalType": "struct BN254.G1Point", + "components": [ + { + "name": "X", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "Y", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "pubkeyG2", + "type": "tuple", + "internalType": "struct BN254.G2Point", + "components": [ + { + "name": "X", + "type": "uint256[2]", + "internalType": "uint256[2]" + }, + { + "name": "Y", + "type": "uint256[2]", + "internalType": "uint256[2]" + } + ] + } + ] + }, + { + "name": "operatorSignature", + "type": "tuple", + "internalType": "struct ISignatureUtils.SignatureWithSaltAndExpiry", + "components": [ + { + "name": "signature", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "salt", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "expiry", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "registerOperatorWithChurn", + "inputs": [ + { + "name": "quorumNumbers", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "socket", + "type": "string", + "internalType": "string" + }, + { + "name": "params", + "type": "tuple", + "internalType": "struct IBLSApkRegistry.PubkeyRegistrationParams", + "components": [ + { + "name": "pubkeyRegistrationSignature", + "type": "tuple", + "internalType": "struct BN254.G1Point", + "components": [ + { + "name": "X", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "Y", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "pubkeyG1", + "type": "tuple", + "internalType": "struct BN254.G1Point", + "components": [ + { + "name": "X", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "Y", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "pubkeyG2", + "type": "tuple", + "internalType": "struct BN254.G2Point", + "components": [ + { + "name": "X", + "type": "uint256[2]", + "internalType": "uint256[2]" + }, + { + "name": "Y", + "type": "uint256[2]", + "internalType": "uint256[2]" + } + ] + } + ] + }, + { + "name": "operatorKickParams", + "type": "tuple[]", + "internalType": "struct IRegistryCoordinator.OperatorKickParam[]", + "components": [ + { + "name": "quorumNumber", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "operator", + "type": "address", + "internalType": "address" + } + ] + }, + { + "name": "churnApproverSignature", + "type": "tuple", + "internalType": "struct ISignatureUtils.SignatureWithSaltAndExpiry", + "components": [ + { + "name": "signature", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "salt", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "expiry", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "operatorSignature", + "type": "tuple", + "internalType": "struct ISignatureUtils.SignatureWithSaltAndExpiry", + "components": [ + { + "name": "signature", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "salt", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "expiry", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "registries", + "inputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "serviceManager", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IServiceManager" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "setChurnApprover", + "inputs": [ + { + "name": "_churnApprover", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setEjector", + "inputs": [ + { + "name": "_ejector", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setOperatorSetParams", + "inputs": [ + { + "name": "quorumNumber", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "operatorSetParams", + "type": "tuple", + "internalType": "struct IRegistryCoordinator.OperatorSetParam", + "components": [ + { + "name": "maxOperatorCount", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "kickBIPsOfOperatorStake", + "type": "uint16", + "internalType": "uint16" + }, + { + "name": "kickBIPsOfTotalStake", + "type": "uint16", + "internalType": "uint16" + } + ] + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setPauserRegistry", + "inputs": [ + { + "name": "newPauserRegistry", + "type": "address", + "internalType": "contract IPauserRegistry" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "stakeRegistry", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IStakeRegistry" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "transferOwnership", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "unpause", + "inputs": [ + { + "name": "newPausedStatus", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "updateOperators", + "inputs": [ + { + "name": "operators", + "type": "address[]", + "internalType": "address[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "updateOperatorsForQuorum", + "inputs": [ + { + "name": "operatorsPerQuorum", + "type": "address[][]", + "internalType": "address[][]" + }, + { + "name": "quorumNumbers", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "updateSocket", + "inputs": [ + { + "name": "socket", + "type": "string", + "internalType": "string" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "ChurnApproverUpdated", + "inputs": [ + { + "name": "prevChurnApprover", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "newChurnApprover", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "EjectorUpdated", + "inputs": [ + { + "name": "prevEjector", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "newEjector", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint8", + "indexed": false, + "internalType": "uint8" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OperatorDeregistered", + "inputs": [ + { + "name": "operator", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "operatorId", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OperatorRegistered", + "inputs": [ + { + "name": "operator", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "operatorId", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OperatorSetParamsUpdated", + "inputs": [ + { + "name": "quorumNumber", + "type": "uint8", + "indexed": true, + "internalType": "uint8" + }, + { + "name": "operatorSetParams", + "type": "tuple", + "indexed": false, + "internalType": "struct IRegistryCoordinator.OperatorSetParam", + "components": [ + { + "name": "maxOperatorCount", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "kickBIPsOfOperatorStake", + "type": "uint16", + "internalType": "uint16" + }, + { + "name": "kickBIPsOfTotalStake", + "type": "uint16", + "internalType": "uint16" + } + ] + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OperatorSocketUpdate", + "inputs": [ + { + "name": "operatorId", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + }, + { + "name": "socket", + "type": "string", + "indexed": false, + "internalType": "string" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Paused", + "inputs": [ + { + "name": "account", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newPausedStatus", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "PauserRegistrySet", + "inputs": [ + { + "name": "pauserRegistry", + "type": "address", + "indexed": false, + "internalType": "contract IPauserRegistry" + }, + { + "name": "newPauserRegistry", + "type": "address", + "indexed": false, + "internalType": "contract IPauserRegistry" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "QuorumBlockNumberUpdated", + "inputs": [ + { + "name": "quorumNumber", + "type": "uint8", + "indexed": true, + "internalType": "uint8" + }, + { + "name": "blocknumber", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Unpaused", + "inputs": [ + { + "name": "account", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newPausedStatus", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + } +] \ No newline at end of file diff --git a/subgraphs/eigenda-operator-state/networks.json b/subgraphs/eigenda-operator-state/networks.json index bc6c69305c..278f55557f 100644 --- a/subgraphs/eigenda-operator-state/networks.json +++ b/subgraphs/eigenda-operator-state/networks.json @@ -1,104 +1,88 @@ { "devnet": { - "BLSRegistryCoordinatorWithIndices": { + "RegistryCoordinator": { "address": "0x0000000000000000000000000000000000000000", "startBlock": 0 }, - "BLSPubkeyRegistry": { + "BLSApkRegistry": { "address": "0x0000000000000000000000000000000000000000", "startBlock": 0 }, - "BLSPubkeyCompendium": { + "BLSApkRegistry_Operator": { "address": "0x0000000000000000000000000000000000000000", "startBlock": 0 }, - "BLSPubkeyCompendium_Operator": { + "RegistryCoordinator_Operator": { "address": "0x0000000000000000000000000000000000000000", "startBlock": 0 }, - "BLSRegistryCoordinatorWithIndices_Operator": { - "address": "0x0000000000000000000000000000000000000000", - "startBlock": 0 - }, - "BLSPubkeyRegistry_QuorumApkUpdates": { + "BLSApkRegistry_QuorumApkUpdates": { "address": "0x0000000000000000000000000000000000000000", "startBlock": 0 } }, "anvil": { - "BLSRegistryCoordinatorWithIndices": { - "address": "0xE6E340D132b5f46d1e472DebcD681B2aBc16e57E", - "startBlock": 0 - }, - "BLSPubkeyRegistry": { - "address": "0xc3e53F4d16Ae77Db1c982e75a937B9f60FE63690", + "RegistryCoordinator": { + "address": "0x0000000000000000000000000000000000000000", "startBlock": 0 }, - "BLSPubkeyCompendium": { - "address": "0x67d269191c92Caf3cD7723F116c85e6E9bf55933", + "BLSApkRegistry": { + "address": "0x0000000000000000000000000000000000000000", "startBlock": 0 }, - "BLSPubkeyCompendium_Operator": { - "address": "0x67d269191c92Caf3cD7723F116c85e6E9bf55933", + "BLSApkRegistry_Operator": { + "address": "0x0000000000000000000000000000000000000000", "startBlock": 0 }, - "BLSRegistryCoordinatorWithIndices_Operator": { - "address": "0xE6E340D132b5f46d1e472DebcD681B2aBc16e57E", + "RegistryCoordinator_Operator": { + "address": "0x0000000000000000000000000000000000000000", "startBlock": 0 }, - "BLSPubkeyRegistry_QuorumApkUpdates": { - "address": "0xc3e53F4d16Ae77Db1c982e75a937B9f60FE63690", + "BLSApkRegistry_QuorumApkUpdates": { + "address": "0x0000000000000000000000000000000000000000", "startBlock": 0 } }, "preprod-goerli": { - "BLSRegistryCoordinatorWithIndices": { - "address": "0x376B46C69bf1eD9e6EF32115c644650517F1265B", - "startBlock": 10015410 - }, - "BLSPubkeyRegistry": { - "address": "0xB64F362EA5216c17cffE5964710c7C9E824af8aD", - "startBlock": 10015410 + "RegistryCoordinator": { + "address": "0x5d1d838C2952cbc7da3ee76E836312e889CabFB9", + "startBlock": 10470500 }, - "BLSPubkeyCompendium": { - "address": "0xE0de168E81C8f31A3b91cDC1C8eE033f6f1cC012", - "startBlock": 10015410 + "BLSApkRegistry": { + "address": "0xe47b025ed3C54D391c4E0738c6EF050D40dd79b5", + "startBlock": 10470500 }, - "BLSPubkeyCompendium_Operator": { - "address": "0xE0de168E81C8f31A3b91cDC1C8eE033f6f1cC012", - "startBlock": 10015410 + "BLSApkRegistry_Operator": { + "address": "0xe47b025ed3C54D391c4E0738c6EF050D40dd79b5", + "startBlock": 10470500 }, - "BLSRegistryCoordinatorWithIndices_Operator": { - "address": "0x376B46C69bf1eD9e6EF32115c644650517F1265B", - "startBlock": 10015410 + "RegistryCoordinator_Operator": { + "address": "0x5d1d838C2952cbc7da3ee76E836312e889CabFB9", + "startBlock": 10470500 }, - "BLSPubkeyRegistry_QuorumApkUpdates": { - "address": "0xB64F362EA5216c17cffE5964710c7C9E824af8aD", - "startBlock": 10015410 + "BLSApkRegistry_QuorumApkUpdates": { + "address": "0xe47b025ed3C54D391c4E0738c6EF050D40dd79b5", + "startBlock": 10470500 } }, "goerli": { - "BLSRegistryCoordinatorWithIndices": { + "RegistryCoordinator": { "address": "0x0b30a3427765f136754368a4500bAca8d2a54C0B", "startBlock": 10043972 }, - "BLSPubkeyRegistry": { + "BLSApkRegistry": { "address": "0xD8fCD5c9103962DE37E375EF9dB62cCf39D5BEcA", "startBlock": 10043972 }, - "BLSPubkeyCompendium": { - "address": "0xc81d3963087Fe09316cd1E032457989C7aC91b19", - "startBlock": 10043972 - }, - "BLSPubkeyCompendium_Operator": { + "BLSApkRegistry_Operator": { "address": "0xc81d3963087Fe09316cd1E032457989C7aC91b19", "startBlock": 10043972 }, - "BLSRegistryCoordinatorWithIndices_Operator": { + "RegistryCoordinator_Operator": { "address": "0x0b30a3427765f136754368a4500bAca8d2a54C0B", "startBlock": 10043972 }, - "BLSPubkeyRegistry_QuorumApkUpdates": { + "BLSApkRegistry_QuorumApkUpdates": { "address": "0xD8fCD5c9103962DE37E375EF9dB62cCf39D5BEcA", "startBlock": 10043972 } diff --git a/subgraphs/eigenda-operator-state/src/bls-pubkey-registry.ts b/subgraphs/eigenda-operator-state/src/bls-apk-registry.ts similarity index 58% rename from subgraphs/eigenda-operator-state/src/bls-pubkey-registry.ts rename to subgraphs/eigenda-operator-state/src/bls-apk-registry.ts index 004790dc01..a856745c6e 100644 --- a/subgraphs/eigenda-operator-state/src/bls-pubkey-registry.ts +++ b/subgraphs/eigenda-operator-state/src/bls-apk-registry.ts @@ -1,12 +1,18 @@ import { OperatorAddedToQuorums as OperatorAddedToQuorumsEvent, OperatorRemovedFromQuorums as OperatorRemovedFromQuorumsEvent -} from "../generated/BLSPubkeyRegistry/BLSPubkeyRegistry" +} from "../generated/BLSApkRegistry/BLSApkRegistry" import { OperatorAddedToQuorum, OperatorRemovedFromQuorum } from "../generated/schema" +import { NewPubkeyRegistration as NewPubkeyRegistrationEvent } from "../generated/BLSApkRegistry/BLSApkRegistry" +import { NewPubkeyRegistration } from "../generated/schema" + + + + export function handleOperatorAddedToQuorums( event: OperatorAddedToQuorumsEvent ): void { @@ -38,3 +44,22 @@ export function handleOperatorRemovedFromQuorums( entity.save() } + +export function handleNewPubkeyRegistration( + event: NewPubkeyRegistrationEvent +): void { + let entity = new NewPubkeyRegistration( + event.transaction.hash.concatI32(event.logIndex.toI32()) + ) + entity.operator = event.params.operator + entity.pubkeyG1_X = event.params.pubkeyG1.X + entity.pubkeyG1_Y = event.params.pubkeyG1.Y + entity.pubkeyG2_X = event.params.pubkeyG2.X + entity.pubkeyG2_Y = event.params.pubkeyG2.Y + + entity.blockNumber = event.block.number + entity.blockTimestamp = event.block.timestamp + entity.transactionHash = event.transaction.hash + + entity.save() +} \ No newline at end of file diff --git a/subgraphs/eigenda-operator-state/src/bls-pubkey-compendium.ts b/subgraphs/eigenda-operator-state/src/bls-pubkey-compendium.ts deleted file mode 100644 index 4a640fdfb3..0000000000 --- a/subgraphs/eigenda-operator-state/src/bls-pubkey-compendium.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { NewPubkeyRegistration as NewPubkeyRegistrationEvent } from "../generated/BLSPubkeyCompendium/BLSPubkeyCompendium" -import { NewPubkeyRegistration } from "../generated/schema" - -export function handleNewPubkeyRegistration( - event: NewPubkeyRegistrationEvent -): void { - let entity = new NewPubkeyRegistration( - event.transaction.hash.concatI32(event.logIndex.toI32()) - ) - entity.operator = event.params.operator - entity.pubkeyG1_X = event.params.pubkeyG1.X - entity.pubkeyG1_Y = event.params.pubkeyG1.Y - entity.pubkeyG2_X = event.params.pubkeyG2.X - entity.pubkeyG2_Y = event.params.pubkeyG2.Y - - entity.blockNumber = event.block.number - entity.blockTimestamp = event.block.timestamp - entity.transactionHash = event.transaction.hash - - entity.save() -} diff --git a/subgraphs/eigenda-operator-state/src/operator-creation.ts b/subgraphs/eigenda-operator-state/src/operator-creation.ts index fb70808a87..bdbc5ae0c7 100644 --- a/subgraphs/eigenda-operator-state/src/operator-creation.ts +++ b/subgraphs/eigenda-operator-state/src/operator-creation.ts @@ -1,15 +1,15 @@ import { BigInt, Bytes, log } from "@graphprotocol/graph-ts" -import { NewPubkeyRegistration as NewPubkeyRegistrationEvent } from "../generated/BLSPubkeyCompendium_Operator/BLSPubkeyCompendium" +import { NewPubkeyRegistration as NewPubkeyRegistrationEvent } from "../generated/BLSApkRegistry_Operator/BLSApkRegistry" import { Operator } from "../generated/schema" -import { BLSPubkeyCompendium } from "../generated/BLSPubkeyCompendium/BLSPubkeyCompendium" +import { BLSApkRegistry } from "../generated/BLSApkRegistry/BLSApkRegistry" export function handleNewPubkeyRegistration( event: NewPubkeyRegistrationEvent ): void { - let pubkeyCompendium = BLSPubkeyCompendium.bind(event.address) + let apkRegistry = BLSApkRegistry.bind(event.address) let entity = new Operator( - pubkeyCompendium.operatorToPubkeyHash(event.params.operator) // this is the operator id + apkRegistry.operatorToPubkeyHash(event.params.operator) // this is the operator id ) entity.operator = event.params.operator diff --git a/subgraphs/eigenda-operator-state/src/operator-registration-status.ts b/subgraphs/eigenda-operator-state/src/operator-registration-status.ts index 057595a166..0a69f8a5c5 100644 --- a/subgraphs/eigenda-operator-state/src/operator-registration-status.ts +++ b/subgraphs/eigenda-operator-state/src/operator-registration-status.ts @@ -2,10 +2,10 @@ import { BigInt, Bytes, log } from "@graphprotocol/graph-ts" import { OperatorRegistered as OperatorRegisteredEvent, OperatorDeregistered as OperatorDeregisteredEvent -} from "../generated/BLSRegistryCoordinatorWithIndices_Operator/BLSRegistryCoordinatorWithIndices" -import { NewPubkeyRegistration as NewPubkeyRegistrationEvent } from "../generated/BLSPubkeyCompendium/BLSPubkeyCompendium" +} from "../generated/RegistryCoordinator_Operator/RegistryCoordinator" +import { NewPubkeyRegistration as NewPubkeyRegistrationEvent } from "../generated/BLSApkRegistry/BLSApkRegistry" import { Operator } from "../generated/schema" -import { BLSPubkeyCompendium } from "../generated/BLSPubkeyCompendium/BLSPubkeyCompendium" +import { BLSApkRegistry } from "../generated/BLSApkRegistry/BLSApkRegistry" export function handleOperatorDeregistered(event: OperatorDeregisteredEvent) : void { let entity = Operator.load(event.params.operatorId) diff --git a/subgraphs/eigenda-operator-state/src/quorum-apk-updates.ts b/subgraphs/eigenda-operator-state/src/quorum-apk-updates.ts index 2e7aec25ea..8c46ef9aa5 100644 --- a/subgraphs/eigenda-operator-state/src/quorum-apk-updates.ts +++ b/subgraphs/eigenda-operator-state/src/quorum-apk-updates.ts @@ -1,9 +1,9 @@ import { Address, BigInt, Bytes } from "@graphprotocol/graph-ts" import { - BLSPubkeyRegistry, + BLSApkRegistry, OperatorAddedToQuorums as OperatorAddedToQuorumsEvent, OperatorRemovedFromQuorums as OperatorRemovedFromQuorumsEvent - } from "../generated/BLSPubkeyRegistry_QuorumApkUpdates/BLSPubkeyRegistry" + } from "../generated/BLSApkRegistry_QuorumApkUpdates/BLSApkRegistry" import { QuorumApk } from "../generated/schema" @@ -20,9 +20,9 @@ export function handleOperatorRemovedFromQuorums( updateApks(event.address, event.transaction.hash.concatI32(event.logIndex.toI32()), event.params.quorumNumbers, event.block.number, event.block.timestamp); } -function updateApks(blsPubkeyRegistryAddress: Address, quorumApkIdPrefix: Bytes, quorumNumbers: Bytes, blockNumber: BigInt, blockTimestamp: BigInt): void { +function updateApks(blsApkRegistryAddress: Address, quorumApkIdPrefix: Bytes, quorumNumbers: Bytes, blockNumber: BigInt, blockTimestamp: BigInt): void { // create a binding for blspubkeyregistry - let blsPubkeyRegistry = BLSPubkeyRegistry.bind(blsPubkeyRegistryAddress) + let blsApkRegistry = BLSApkRegistry.bind(blsApkRegistryAddress) // for each quorum, get the apk from the contract and store it as an entity for (let i = 0; i < quorumNumbers.length; i++) { let quorumNumber = quorumNumbers[i] @@ -31,7 +31,7 @@ function updateApks(blsPubkeyRegistryAddress: Address, quorumApkIdPrefix: Bytes, ) quorumApk.quorumNumber = quorumNumber // get the apk from the contract - let apk = blsPubkeyRegistry.getApkForQuorum(quorumNumber) + let apk = blsApkRegistry.getApk(quorumNumber) quorumApk.apk_X = apk.X quorumApk.apk_Y = apk.Y diff --git a/subgraphs/eigenda-operator-state/src/bls-registry-coordinator-with-indices.ts b/subgraphs/eigenda-operator-state/src/registry-coordinator.ts similarity index 97% rename from subgraphs/eigenda-operator-state/src/bls-registry-coordinator-with-indices.ts rename to subgraphs/eigenda-operator-state/src/registry-coordinator.ts index d5cdf2385c..2ada053524 100644 --- a/subgraphs/eigenda-operator-state/src/bls-registry-coordinator-with-indices.ts +++ b/subgraphs/eigenda-operator-state/src/registry-coordinator.ts @@ -5,7 +5,7 @@ import { OperatorRegistered as OperatorRegisteredEvent, OperatorSetParamsUpdated as OperatorSetParamsUpdatedEvent, OperatorSocketUpdate as OperatorSocketUpdateEvent -} from "../generated/BLSRegistryCoordinatorWithIndices/BLSRegistryCoordinatorWithIndices" +} from "../generated/RegistryCoordinator/RegistryCoordinator" import { ChurnApproverUpdated, OperatorDeregistered, diff --git a/subgraphs/eigenda-operator-state/subgraph.yaml b/subgraphs/eigenda-operator-state/subgraph.yaml index 89160186fd..6717a30d00 100644 --- a/subgraphs/eigenda-operator-state/subgraph.yaml +++ b/subgraphs/eigenda-operator-state/subgraph.yaml @@ -3,11 +3,11 @@ schema: file: ./schema.graphql dataSources: - kind: ethereum - name: BLSRegistryCoordinatorWithIndices + name: RegistryCoordinator network: devnet source: address: "0x0000000000000000000000000000000000000000" - abi: BLSRegistryCoordinatorWithIndices + abi: RegistryCoordinator startBlock: 0 mapping: kind: ethereum/events @@ -21,8 +21,8 @@ dataSources: - OperatorSetParamsUpdated - OperatorSocketUpdate abis: - - name: BLSRegistryCoordinatorWithIndices - file: ./abis/BLSRegistryCoordinatorWithIndices.json + - name: RegistryCoordinator + file: ./abis/RegistryCoordinator.json eventHandlers: - event: ChurnApproverUpdated(address,address) handler: handleChurnApproverUpdated @@ -34,13 +34,13 @@ dataSources: handler: handleOperatorSetParamsUpdated - event: OperatorSocketUpdate(indexed bytes32,string) handler: handleOperatorSocketUpdate - file: ./src/bls-registry-coordinator-with-indices.ts + file: ./src/registry-coordinator.ts - kind: ethereum - name: BLSPubkeyRegistry + name: BLSApkRegistry network: devnet source: address: "0x0000000000000000000000000000000000000000" - abi: BLSPubkeyRegistry + abi: BLSApkRegistry startBlock: 0 mapping: kind: ethereum/events @@ -50,40 +50,22 @@ dataSources: - OperatorAddedToQuorums - OperatorRemovedFromQuorums abis: - - name: BLSPubkeyRegistry - file: ./abis/BLSPubkeyRegistry.json + - name: BLSApkRegistry + file: ./abis/BLSApkRegistry.json eventHandlers: - event: OperatorAddedToQuorums(address,bytes) handler: handleOperatorAddedToQuorums - event: OperatorRemovedFromQuorums(address,bytes) handler: handleOperatorRemovedFromQuorums - file: ./src/bls-pubkey-registry.ts - - kind: ethereum - name: BLSPubkeyCompendium - network: devnet - source: - address: "0x0000000000000000000000000000000000000000" - abi: BLSPubkeyCompendium - startBlock: 0 - mapping: - kind: ethereum/events - apiVersion: 0.0.7 - language: wasm/assemblyscript - entities: - - NewPubkeyRegistration - abis: - - name: BLSPubkeyCompendium - file: ./abis/BLSPubkeyCompendium.json - eventHandlers: - event: NewPubkeyRegistration(indexed address,(uint256,uint256),(uint256[2],uint256[2])) handler: handleNewPubkeyRegistration - file: ./src/bls-pubkey-compendium.ts + file: ./src/bls-apk-registry.ts - kind: ethereum - name: BLSPubkeyCompendium_Operator + name: BLSApkRegistry_Operator network: devnet source: address: "0x0000000000000000000000000000000000000000" - abi: BLSPubkeyCompendium + abi: BLSApkRegistry startBlock: 0 mapping: kind: ethereum/events @@ -92,18 +74,18 @@ dataSources: entities: - Operator abis: - - name: BLSPubkeyCompendium - file: ./abis/BLSPubkeyCompendium.json + - name: BLSApkRegistry + file: ./abis/BLSApkRegistry.json eventHandlers: - event: NewPubkeyRegistration(indexed address,(uint256,uint256),(uint256[2],uint256[2])) handler: handleNewPubkeyRegistration file: ./src/operator-creation.ts - kind: ethereum - name: BLSRegistryCoordinatorWithIndices_Operator + name: RegistryCoordinator_Operator network: devnet source: address: "0x0000000000000000000000000000000000000000" - abi: BLSRegistryCoordinatorWithIndices + abi: RegistryCoordinator startBlock: 0 mapping: kind: ethereum/events @@ -113,8 +95,8 @@ dataSources: - OperatorDeregistered - OperatorRegistered abis: - - name: BLSRegistryCoordinatorWithIndices - file: ./abis/BLSRegistryCoordinatorWithIndices.json + - name: RegistryCoordinator + file: ./abis/RegistryCoordinator.json eventHandlers: - event: OperatorDeregistered(indexed address,indexed bytes32) handler: handleOperatorDeregistered @@ -122,11 +104,11 @@ dataSources: handler: handleOperatorRegistered file: ./src/operator-registration-status.ts - kind: ethereum - name: BLSPubkeyRegistry_QuorumApkUpdates + name: BLSApkRegistry_QuorumApkUpdates network: devnet source: address: "0x0000000000000000000000000000000000000000" - abi: BLSPubkeyRegistry + abi: BLSApkRegistry startBlock: 0 mapping: kind: ethereum/events @@ -136,8 +118,8 @@ dataSources: - OperatorAddedToQuorums - OperatorRemovedFromQuorums abis: - - name: BLSPubkeyRegistry - file: ./abis/BLSPubkeyRegistry.json + - name: BLSApkRegistry + file: ./abis/BLSApkRegistry.json eventHandlers: - event: OperatorAddedToQuorums(address,bytes) handler: handleOperatorAddedToQuorums diff --git a/subgraphs/eigenda-operator-state/tests/operator-state-utils.ts b/subgraphs/eigenda-operator-state/tests/operator-state-utils.ts index 526a71cda5..e53d7cb8d4 100644 --- a/subgraphs/eigenda-operator-state/tests/operator-state-utils.ts +++ b/subgraphs/eigenda-operator-state/tests/operator-state-utils.ts @@ -1,8 +1,8 @@ import { newMockEvent } from "matchstick-as" import { ethereum, BigInt, Bytes, Address } from "@graphprotocol/graph-ts" -import { NewPubkeyRegistration as NewPubkeyRegistrationEvent, NewPubkeyRegistrationPubkeyG1Struct, NewPubkeyRegistrationPubkeyG2Struct } from "../generated/BLSPubkeyCompendium_Operator/BLSPubkeyCompendium" -import { OperatorRegistered as OperatorRegisteredEvent, OperatorDeregistered as OperatorDeregisteredEvent } from "../generated/BLSRegistryCoordinatorWithIndices_Operator/BLSRegistryCoordinatorWithIndices" -import { OperatorSocketUpdate as OperatorSocketUpdateEvent } from "../generated/BLSRegistryCoordinatorWithIndices/BLSRegistryCoordinatorWithIndices" +import { NewPubkeyRegistration as NewPubkeyRegistrationEvent, NewPubkeyRegistrationPubkeyG1Struct, NewPubkeyRegistrationPubkeyG2Struct } from "../generated/BLSApkRegistry_Operator/BLSApkRegistry" +import { OperatorRegistered as OperatorRegisteredEvent, OperatorDeregistered as OperatorDeregisteredEvent } from "../generated/RegistryCoordinator_Operator/RegistryCoordinator" +import { OperatorSocketUpdate as OperatorSocketUpdateEvent } from "../generated/RegistryCoordinator/RegistryCoordinator" export function createNewPubkeyRegistrationEvent( operator: Address, diff --git a/subgraphs/eigenda-operator-state/tests/operator-state.test.ts b/subgraphs/eigenda-operator-state/tests/operator-state.test.ts index 9e8c7cb03e..c30cb35536 100644 --- a/subgraphs/eigenda-operator-state/tests/operator-state.test.ts +++ b/subgraphs/eigenda-operator-state/tests/operator-state.test.ts @@ -12,7 +12,7 @@ import { import { createNewOperatorDeregisteredEvent, createNewOperatorRegisteredEvent, createNewOperatorSocketUpdateEvent, createNewPubkeyRegistrationEvent } from "./operator-state-utils" import { handleNewPubkeyRegistration } from "../src/operator-creation" import { handleOperatorDeregistered, handleOperatorRegistered } from "../src/operator-registration-status" - import { handleOperatorSocketUpdate } from "../src/bls-registry-coordinator-with-indices" + import { handleOperatorSocketUpdate } from "../src/registry-coordinator" let operator: Address = Address.fromBytes(Bytes.fromHexString("0xa16081f360e3847006db660bae1c6d1b2e17ec2a")) diff --git a/subgraphs/eigenda-operator-state/tests/quorum-apk-utils.ts b/subgraphs/eigenda-operator-state/tests/quorum-apk-utils.ts index b4e2b2ef91..7b6ed71f59 100644 --- a/subgraphs/eigenda-operator-state/tests/quorum-apk-utils.ts +++ b/subgraphs/eigenda-operator-state/tests/quorum-apk-utils.ts @@ -1,6 +1,6 @@ import { newMockEvent } from "matchstick-as" import { ethereum, BigInt, Bytes, Address } from "@graphprotocol/graph-ts" -import { OperatorAddedToQuorums as OperatorAddedToQuorumsEvent, OperatorRemovedFromQuorums as OperatorRemovedFromQuorumsEvent } from "../generated/BLSPubkeyRegistry_QuorumApkUpdates/BLSPubkeyRegistry" +import { OperatorAddedToQuorums as OperatorAddedToQuorumsEvent, OperatorRemovedFromQuorums as OperatorRemovedFromQuorumsEvent } from "../generated/BLSApkRegistry_QuorumApkUpdates/BLSApkRegistry" export function createNewOperatorAddedToQuorumsEvent( operator: Address, diff --git a/subgraphs/eigenda-operator-state/tests/quorum-apk.test.ts b/subgraphs/eigenda-operator-state/tests/quorum-apk.test.ts index 965443becd..98ec790a6c 100644 --- a/subgraphs/eigenda-operator-state/tests/quorum-apk.test.ts +++ b/subgraphs/eigenda-operator-state/tests/quorum-apk.test.ts @@ -9,7 +9,7 @@ import { createMockedFunction } from "matchstick-as/assembly/index" import { Address, BigInt, Bytes, ethereum, log } from "@graphprotocol/graph-ts" - import { BLSPubkeyRegistry, BLSPubkeyRegistry__getApkForQuorumResultValue0Struct } from "../generated/BLSPubkeyRegistry_QuorumApkUpdates/BLSPubkeyRegistry" + import { BLSApkRegistry, BLSApkRegistry__getApkResultValue0Struct } from "../generated/BLSApkRegistry_QuorumApkUpdates/BLSApkRegistry" import { createNewOperatorAddedToQuorumsEvent, createNewOperatorRemovedFromQuorumsEvent } from "./quorum-apk-utils" import { handleOperatorAddedToQuorums, handleOperatorRemovedFromQuorums } from "../src/quorum-apk-updates" @@ -21,7 +21,7 @@ import { let pubkeyG1_X = BigInt.fromString(seed) let pubkeyG1_Y = BigInt.fromString(seed + "1") - let apk = new BLSPubkeyRegistry__getApkForQuorumResultValue0Struct(2); + let apk = new BLSApkRegistry__getApkResultValue0Struct(2); apk[0] = ethereum.Value.fromUnsignedBigInt(pubkeyG1_X) apk[1] = ethereum.Value.fromUnsignedBigInt(pubkeyG1_Y) @@ -59,11 +59,11 @@ import { quorumNumbers1 ) - // for each quroum in quorumNumbers, mock the call to getApkForQuorum + // for each quroum in quorumNumbers, mock the call to getApk for(let i = 0; i < quorumNumbers1.length; i++) { let quorumNumber = quorumNumbers1[i] let quorumNumberBigInt = BigInt.fromI32(quorumNumber) - createMockedFunction(newOperatorAddedToQuorumsEvent1.address, 'getApkForQuorum', 'getApkForQuorum(uint8):((uint256,uint256))') + createMockedFunction(newOperatorAddedToQuorumsEvent1.address, 'getApk', 'getApk(uint8):((uint256,uint256))') .withArgs([ethereum.Value.fromUnsignedBigInt(quorumNumberBigInt)]) .returns([ethereum.Value.fromTuple(quorumApks1[i])]) } @@ -78,11 +78,11 @@ import { let newOperatorRemovedFromQuorumsEvent2 = createNewOperatorRemovedFromQuorumsEvent(operator, quorumNumbers2) newOperatorRemovedFromQuorumsEvent2.logIndex = newOperatorAddedToQuorumsEvent1.logIndex.plus(BigInt.fromI32(1)) - // for each quroum in quorumNumbers, mock the call to getApkForQuorum + // for each quroum in quorumNumbers, mock the call to getApk for(let i = 0; i < quorumNumbers2.length; i++) { let quorumNumber = quorumNumbers2[i] let quorumNumberBigInt = BigInt.fromI32(quorumNumber) - createMockedFunction(newOperatorRemovedFromQuorumsEvent2.address, 'getApkForQuorum', 'getApkForQuorum(uint8):((uint256,uint256))') + createMockedFunction(newOperatorRemovedFromQuorumsEvent2.address, 'getApk', 'getApk(uint8):((uint256,uint256))') .withArgs([ethereum.Value.fromUnsignedBigInt(quorumNumberBigInt)]) .returns([ethereum.Value.fromTuple(quorumApks2[i])]) } diff --git a/test/integration_test.go b/test/integration_test.go index 2d75c10ec6..5c1f3cc3fa 100644 --- a/test/integration_test.go +++ b/test/integration_test.go @@ -16,6 +16,7 @@ import ( "time" "github.com/Layr-Labs/eigenda/common/pubip" + "github.com/consensys/gnark-crypto/ecc/bn254/fp" clientsmock "github.com/Layr-Labs/eigenda/clients/mock" "github.com/Layr-Labs/eigenda/disperser/apiserver" @@ -76,15 +77,17 @@ func init() { // makeTestEncoder makes an encoder currently using the only supported backend. func mustMakeTestEncoder() core.Encoder { config := kzgEncoder.KzgConfig{ - G1Path: "../inabox/resources/kzg/g1.point", - G2Path: "../inabox/resources/kzg/g2.point", - CacheDir: "../inabox/resources/kzg/SRSTables", - SRSOrder: 3000, - NumWorker: uint64(runtime.GOMAXPROCS(0)), + G1Path: "../inabox/resources/kzg/g1.point", + G2Path: "../inabox/resources/kzg/g2.point", + CacheDir: "../inabox/resources/kzg/SRSTables", + SRSOrder: 3000, + SRSNumberToLoad: 3000, + NumWorker: uint64(runtime.GOMAXPROCS(0)), } encoder, err := encoding.NewEncoder( encoding.EncoderConfig{KzgConfig: config}, + true, ) if err != nil { log.Fatalln("failed to initialize new encoder") @@ -499,12 +502,23 @@ func TestDispersalAndRetrieval(t *testing.T) { QuorumId: uint32(0), }) assert.NoError(t, err) - actualCommitment, err := new(core.Commitment).Deserialize(headerReply.GetBlobHeader().GetCommitment()) - assert.NoError(t, err) - actualLengthProof, err := new(core.Commitment).Deserialize(headerReply.GetBlobHeader().GetLengthProof()) - assert.NoError(t, err) + actualCommitment := &core.G1Commitment{ + X: *new(fp.Element).SetBytes(headerReply.GetBlobHeader().GetCommitment().GetX()), + Y: *new(fp.Element).SetBytes(headerReply.GetBlobHeader().GetCommitment().GetY()), + } + var actualLengthCommitment, actualLengthProof core.G2Commitment + actualLengthCommitment.X.A0.SetBytes(headerReply.GetBlobHeader().GetLengthCommitment().GetXA0()) + actualLengthCommitment.X.A1.SetBytes(headerReply.GetBlobHeader().GetLengthCommitment().GetXA1()) + actualLengthCommitment.Y.A0.SetBytes(headerReply.GetBlobHeader().GetLengthCommitment().GetYA0()) + actualLengthCommitment.Y.A1.SetBytes(headerReply.GetBlobHeader().GetLengthCommitment().GetYA1()) + actualLengthProof.X.A0.SetBytes(headerReply.GetBlobHeader().GetLengthProof().GetXA0()) + actualLengthProof.X.A1.SetBytes(headerReply.GetBlobHeader().GetLengthProof().GetXA1()) + actualLengthProof.Y.A0.SetBytes(headerReply.GetBlobHeader().GetLengthProof().GetYA0()) + actualLengthProof.Y.A1.SetBytes(headerReply.GetBlobHeader().GetLengthProof().GetYA1()) + assert.Equal(t, metadata.ConfirmationInfo.BlobCommitment.Commitment, actualCommitment) - assert.Equal(t, metadata.ConfirmationInfo.BlobCommitment.LengthProof, actualLengthProof) + assert.Equal(t, metadata.ConfirmationInfo.BlobCommitment.LengthCommitment, &actualLengthCommitment) + assert.Equal(t, metadata.ConfirmationInfo.BlobCommitment.LengthProof, &actualLengthProof) assert.Equal(t, uint32(metadata.ConfirmationInfo.BlobCommitment.Length), headerReply.GetBlobHeader().GetLength()) assert.Len(t, headerReply.GetBlobHeader().GetQuorumHeaders(), 1) assert.Equal(t, uint32(0), headerReply.GetBlobHeader().GetQuorumHeaders()[0].GetQuorumId()) diff --git a/test/synthetic-test/synthetic_client_test.go b/test/synthetic-test/synthetic_client_test.go index b18618f857..a6581aae3f 100644 --- a/test/synthetic-test/synthetic_client_test.go +++ b/test/synthetic-test/synthetic_client_test.go @@ -235,8 +235,11 @@ func setupRetrievalClient(ethClient common.EthClient, retrievalClientConfig *Ret return err } - retrievalClient = clients.NewRetrievalClient(logger, indexedChainStateClient, agn, nodeClient, encoder, 10) - return indexer.Index(context.Background()) + retrievalClient, err = clients.NewRetrievalClient(logger, indexedChainStateClient, agn, nodeClient, encoder, 10) + if err != nil { + return err + } + return indexedChainStateClient.Start(context.Background()) } // TODO: This file contains some code that can be refactored and shared across some other tests ex:Integration Test. @@ -490,19 +493,13 @@ func blobHeaderFromProto(blobHeader *disperser_rpc.BlobHeader) rollupbindings.IE logger.Printf("failed to deserialize commitment: %s", err) return rollupbindings.IEigenDAServiceManagerBlobHeader{} } - type IEigenDAServiceManagerQuorumBlobParam struct { - QuorumNumber uint8 - AdversaryThresholdPercentage uint8 - QuorumThresholdPercentage uint8 - QuantizationParameter uint8 - } quorums := make([]rollupbindings.IEigenDAServiceManagerQuorumBlobParam, len(blobHeader.GetBlobQuorumParams())) for i, quorum := range blobHeader.GetBlobQuorumParams() { quorums[i] = rollupbindings.IEigenDAServiceManagerQuorumBlobParam{ QuorumNumber: uint8(quorum.GetQuorumNumber()), AdversaryThresholdPercentage: uint8(quorum.GetAdversaryThresholdPercentage()), QuorumThresholdPercentage: uint8(quorum.GetQuorumThresholdPercentage()), - QuantizationParameter: uint8(quorum.GetQuantizationParam()), + ChunkLength: quorum.GetChunkLength(), } } @@ -582,11 +579,12 @@ func TestEncodeBlob(t *testing.T) { // Test Assumes below params set for Encoder kzgConfig := kzgEncoder.KzgConfig{ - G1Path: "/data/kzg/g1.point", - G2Path: "/data/kzg/g2.point", - CacheDir: "/data/kzg/SRSTables", - SRSOrder: 300000, - NumWorker: uint64(runtime.GOMAXPROCS(0)), + G1Path: "/data/kzg/g1.point", + G2Path: "/data/kzg/g2.point", + CacheDir: "/data/kzg/SRSTables", + SRSOrder: 300000, + SRSNumberToLoad: 300000, + NumWorker: uint64(runtime.GOMAXPROCS(0)), } encodingConfig := encoding.EncoderConfig{KzgConfig: kzgConfig} @@ -601,7 +599,6 @@ func TestEncodeBlob(t *testing.T) { func encodeBlob(data []byte) (*encoder_rpc.EncodeBlobReply, *core.EncodingParams, error) { logger := testSuite.Logger - var quantizationFactor uint = 2 var adversaryThreshold uint8 = 80 var quorumThreshold uint8 = 90 @@ -611,45 +608,44 @@ func encodeBlob(data []byte) (*encoder_rpc.EncodeBlobReply, *core.EncodingParams var quorumID core.QuorumID = 0 - securityParams := []*core.SecurityParam{ - { - QuorumID: quorumID, - AdversaryThreshold: adversaryThreshold, - }, + param := &core.SecurityParam{ + QuorumID: quorumID, + QuorumThreshold: quorumThreshold, + AdversaryThreshold: adversaryThreshold, } testBlob := core.Blob{ RequestHeader: core.BlobRequestHeader{ - SecurityParams: securityParams, + SecurityParams: []*core.SecurityParam{param}, }, Data: data, } // TODO: Refactor this code using indexed chain state by using retrieval client // Issue: https://github.com/Layr-Labs/eigenda-internal/issues/220 - indexedChainState, _ := coremock.NewChainDataMock(core.OperatorIndex(10)) + indexedChainState, _ := coremock.MakeChainDataMock(core.OperatorIndex(10)) operatorState, err := indexedChainState.GetOperatorState(context.Background(), uint(0), []core.QuorumID{quorumID}) if err != nil { logger.Printf("failed to get operator state: %s", err) } coordinator := &core.StdAssignmentCoordinator{} - _, info, err := coordinator.GetAssignments(operatorState, quorumID, quantizationFactor) - if err != nil { - logger.Printf("failed to get assignments: %s", err) - } - - testBlob = core.Blob{ - RequestHeader: core.BlobRequestHeader{ - SecurityParams: securityParams, - }, - Data: data, - } blobSize := uint(len(testBlob.Data)) - blobLength := core.GetBlobLength(uint(blobSize)) - chunkLength, _ := coordinator.GetMinimumChunkLength(4, blobLength, 1, quorumThreshold, adversaryThreshold) + chunkLength, err := coordinator.CalculateChunkLength(operatorState, blobLength, 0, param) + if err != nil { + logger.Printf("failed to calculate chunk length: %s", err) + } + + quorumInfo := &core.BlobQuorumInfo{ + SecurityParam: *param, + ChunkLength: chunkLength, + } + _, info, err := coordinator.GetAssignments(operatorState, blobLength, quorumInfo) + if err != nil { + logger.Printf("failed to get assignments: %s", err) + } testEncodingParams, _ := core.GetEncodingParams(chunkLength, info.TotalChunks) testEncodingParamsProto := &encoder_rpc.EncodingParams{