From 33fd163c3aaa699af11900a5cc85503be4b5b894 Mon Sep 17 00:00:00 2001 From: Alok Date: Sat, 16 Mar 2024 04:47:38 +0530 Subject: [PATCH 01/12] feat: blob inclusion list --- gen/go/rpc/bidderapi/v1/bidderapi.pb.go | 304 ++++++----- gen/go/rpc/providerapi/v1/providerapi.pb.go | 481 ++++++++++++++---- .../rpc/providerapi/v1/providerapi.pb.gw.go | 121 +++++ .../rpc/providerapi/v1/providerapi_grpc.pb.go | 53 +- .../rpc/bidderapi/v1/bidderapi.swagger.yaml | 8 + .../providerapi/v1/providerapi.swagger.yaml | 52 ++ pkg/blobinclusion/blobinclusion.go | 284 +++++++++++ pkg/debugapi/debugapi.go | 8 + pkg/node/node.go | 20 +- pkg/p2p/p2p.go | 9 + pkg/p2p/testing/p2p.go | 23 +- pkg/preconfirmation/preconfirmation.go | 117 ++++- pkg/preconfirmation/preconfirmation_test.go | 99 +++- pkg/rpc/bidder/service.go | 14 +- pkg/rpc/bidder/service_test.go | 7 +- pkg/rpc/provider/service.go | 54 ++ pkg/rpc/provider/service_test.go | 1 + pkg/signer/preconfsigner/signer.go | 6 +- pkg/topology/topology.go | 41 +- rpc/bidderapi/v1/bidderapi.proto | 6 + rpc/providerapi/v1/providerapi.proto | 56 ++ 21 files changed, 1493 insertions(+), 271 deletions(-) create mode 100644 pkg/blobinclusion/blobinclusion.go diff --git a/gen/go/rpc/bidderapi/v1/bidderapi.pb.go b/gen/go/rpc/bidderapi/v1/bidderapi.pb.go index 7787806b..ed5b7fd1 100644 --- a/gen/go/rpc/bidderapi/v1/bidderapi.pb.go +++ b/gen/go/rpc/bidderapi/v1/bidderapi.pb.go @@ -163,6 +163,7 @@ type Bid struct { TxHashes []string `protobuf:"bytes,1,rep,name=tx_hashes,json=txHashes,proto3" json:"tx_hashes,omitempty"` Amount string `protobuf:"bytes,2,opt,name=amount,proto3" json:"amount,omitempty"` BlockNumber int64 `protobuf:"varint,3,opt,name=block_number,json=blockNumber,proto3" json:"block_number,omitempty"` + IsBlob bool `protobuf:"varint,4,opt,name=is_blob,json=isBlob,proto3" json:"is_blob,omitempty"` } func (x *Bid) Reset() { @@ -218,6 +219,13 @@ func (x *Bid) GetBlockNumber() int64 { return 0 } +func (x *Bid) GetIsBlob() bool { + if x != nil { + return x.IsBlob + } + return false +} + type Commitment struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -231,6 +239,7 @@ type Commitment struct { CommitmentDigest string `protobuf:"bytes,6,opt,name=commitment_digest,json=commitmentDigest,proto3" json:"commitment_digest,omitempty"` CommitmentSignature string `protobuf:"bytes,7,opt,name=commitment_signature,json=commitmentSignature,proto3" json:"commitment_signature,omitempty"` ProviderAddress string `protobuf:"bytes,8,opt,name=provider_address,json=providerAddress,proto3" json:"provider_address,omitempty"` + BlobCommitters []string `protobuf:"bytes,9,rep,name=blob_committers,json=blobCommitters,proto3" json:"blob_committers,omitempty"` } func (x *Commitment) Reset() { @@ -321,6 +330,13 @@ func (x *Commitment) GetProviderAddress() string { return "" } +func (x *Commitment) GetBlobCommitters() []string { + if x != nil { + return x.BlobCommitters + } + return nil +} + var File_rpc_bidderapi_v1_bidderapi_proto protoreflect.FileDescriptor var file_rpc_bidderapi_v1_bidderapi_proto_rawDesc = []byte{ @@ -364,7 +380,7 @@ var file_rpc_bidderapi_v1_bidderapi_proto_rawDesc = []byte{ 0x79, 0x2e, 0x32, 0x22, 0x7b, 0x22, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x3a, 0x20, 0x22, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x22, 0x20, 0x7d, 0x22, 0x0e, 0x0a, 0x0c, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xa2, 0x08, 0x0a, 0x03, 0x42, 0x69, 0x64, 0x12, 0xa3, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xf4, 0x08, 0x0a, 0x03, 0x42, 0x69, 0x64, 0x12, 0xa3, 0x02, 0x0a, 0x09, 0x74, 0x78, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x42, 0x85, 0x02, 0x92, 0x41, 0x78, 0x32, 0x64, 0x48, 0x65, 0x78, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x66, @@ -410,145 +426,159 @@ var file_rpc_bidderapi_v1_bidderapi_proto_rawDesc = []byte{ 0x62, 0x65, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x2e, 0x1a, 0x0e, 0x75, 0x69, 0x6e, 0x74, 0x28, 0x74, 0x68, 0x69, 0x73, 0x29, 0x20, 0x3e, 0x20, 0x30, 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, - 0x3a, 0xc8, 0x02, 0x92, 0x41, 0xc4, 0x02, 0x0a, 0x71, 0x2a, 0x0b, 0x42, 0x69, 0x64, 0x20, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x32, 0x40, 0x55, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, - 0x20, 0x62, 0x69, 0x64, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x72, 0x6f, - 0x6d, 0x20, 0x62, 0x69, 0x64, 0x64, 0x65, 0x72, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x62, 0x69, 0x64, 0x64, 0x65, 0x72, 0x20, 0x6d, 0x65, 0x76, 0x2d, 0x63, 0x6f, 0x6d, 0x6d, - 0x69, 0x74, 0x20, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0xd2, 0x01, 0x08, 0x74, 0x78, 0x48, 0x61, 0x73, - 0x68, 0x65, 0x73, 0xd2, 0x01, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0xd2, 0x01, 0x0b, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x32, 0xce, 0x01, 0x7b, 0x22, 0x74, - 0x78, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x5b, 0x22, 0x66, 0x65, 0x34, 0x63, - 0x62, 0x34, 0x37, 0x64, 0x62, 0x33, 0x36, 0x33, 0x30, 0x35, 0x35, 0x31, 0x62, 0x65, 0x65, 0x64, - 0x66, 0x62, 0x64, 0x30, 0x32, 0x61, 0x37, 0x31, 0x65, 0x63, 0x63, 0x36, 0x39, 0x66, 0x64, 0x35, - 0x39, 0x37, 0x35, 0x38, 0x65, 0x32, 0x62, 0x61, 0x36, 0x39, 0x39, 0x36, 0x30, 0x36, 0x65, 0x32, - 0x64, 0x35, 0x63, 0x37, 0x34, 0x32, 0x38, 0x34, 0x66, 0x66, 0x61, 0x37, 0x22, 0x2c, 0x20, 0x22, - 0x37, 0x31, 0x63, 0x31, 0x33, 0x34, 0x38, 0x66, 0x32, 0x64, 0x37, 0x66, 0x66, 0x37, 0x65, 0x38, - 0x31, 0x34, 0x66, 0x39, 0x63, 0x33, 0x36, 0x31, 0x37, 0x39, 0x38, 0x33, 0x37, 0x30, 0x33, 0x34, - 0x33, 0x35, 0x65, 0x61, 0x37, 0x34, 0x34, 0x36, 0x64, 0x65, 0x34, 0x32, 0x30, 0x61, 0x65, 0x61, - 0x63, 0x34, 0x38, 0x38, 0x62, 0x66, 0x31, 0x64, 0x65, 0x33, 0x35, 0x37, 0x33, 0x37, 0x65, 0x38, - 0x22, 0x5d, 0x2c, 0x20, 0x22, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x3a, 0x20, 0x22, 0x31, - 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, - 0x30, 0x30, 0x22, 0x2c, 0x20, 0x22, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x4e, 0x75, 0x6d, 0x62, 0x65, - 0x72, 0x22, 0x3a, 0x20, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x7d, 0x22, 0xb1, 0x08, 0x0a, 0x0a, - 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x95, 0x01, 0x0a, 0x09, 0x74, - 0x78, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x42, 0x78, - 0x92, 0x41, 0x75, 0x32, 0x61, 0x48, 0x65, 0x78, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, - 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x68, 0x61, 0x73, 0x68, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x62, 0x69, 0x64, 0x64, 0x65, 0x72, 0x20, 0x77, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x74, 0x6f, - 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x8a, 0x01, 0x0f, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, - 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x36, 0x34, 0x7d, 0x52, 0x08, 0x74, 0x78, 0x48, 0x61, 0x73, 0x68, - 0x65, 0x73, 0x12, 0x8f, 0x01, 0x0a, 0x0a, 0x62, 0x69, 0x64, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x42, 0x70, 0x92, 0x41, 0x6d, 0x32, 0x6b, 0x41, 0x6d, - 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x45, 0x54, 0x48, 0x20, 0x74, 0x68, 0x61, 0x74, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x69, 0x64, 0x64, 0x65, 0x72, 0x20, 0x68, 0x61, 0x73, 0x20, - 0x61, 0x67, 0x72, 0x65, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x61, 0x79, 0x20, 0x74, 0x6f, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x20, 0x66, 0x6f, - 0x72, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x52, 0x09, 0x62, 0x69, 0x64, 0x41, 0x6d, - 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x6d, 0x0a, 0x0c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x6e, 0x75, - 0x6d, 0x62, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x42, 0x4a, 0x92, 0x41, 0x47, 0x32, - 0x45, 0x4d, 0x61, 0x78, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, - 0x72, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x69, 0x64, 0x64, 0x65, - 0x72, 0x20, 0x77, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, - 0x64, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x2e, 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x4e, 0x75, 0x6d, - 0x62, 0x65, 0x72, 0x12, 0x7b, 0x0a, 0x13, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x5f, - 0x62, 0x69, 0x64, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x4b, 0x92, 0x41, 0x48, 0x32, 0x46, 0x48, 0x65, 0x78, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x66, 0x20, 0x64, 0x69, - 0x67, 0x65, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x69, 0x64, 0x20, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x62, - 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x69, 0x64, 0x64, 0x65, 0x72, 0x2e, 0x52, 0x11, 0x72, - 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x42, 0x69, 0x64, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, - 0x12, 0x7d, 0x0a, 0x16, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x5f, 0x62, 0x69, 0x64, - 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x47, 0x92, 0x41, 0x44, 0x32, 0x42, 0x48, 0x65, 0x78, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x66, 0x20, 0x73, 0x69, - 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, - 0x69, 0x64, 0x64, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x73, 0x65, 0x6e, 0x74, 0x20, - 0x74, 0x68, 0x69, 0x73, 0x20, 0x62, 0x69, 0x64, 0x2e, 0x52, 0x14, 0x72, 0x65, 0x63, 0x65, 0x69, - 0x76, 0x65, 0x64, 0x42, 0x69, 0x64, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, - 0x62, 0x0a, 0x11, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x64, 0x69, - 0x67, 0x65, 0x73, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x42, 0x35, 0x92, 0x41, 0x32, 0x32, - 0x30, 0x48, 0x65, 0x78, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x65, 0x6e, 0x63, 0x6f, - 0x64, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x66, 0x20, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, - 0x2e, 0x52, 0x10, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x44, 0x69, 0x67, - 0x65, 0x73, 0x74, 0x12, 0x9e, 0x01, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, - 0x6e, 0x74, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x6b, 0x92, 0x41, 0x68, 0x32, 0x66, 0x48, 0x65, 0x78, 0x20, 0x73, 0x74, 0x72, + 0x12, 0x50, 0x0a, 0x07, 0x69, 0x73, 0x5f, 0x62, 0x6c, 0x6f, 0x62, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x08, 0x42, 0x37, 0x92, 0x41, 0x34, 0x32, 0x32, 0x42, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x20, + 0x66, 0x6c, 0x61, 0x67, 0x20, 0x74, 0x6f, 0x20, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, + 0x20, 0x69, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x69, 0x64, 0x20, 0x69, 0x73, 0x20, 0x66, + 0x6f, 0x72, 0x20, 0x61, 0x20, 0x62, 0x6c, 0x6f, 0x62, 0x2e, 0x52, 0x06, 0x69, 0x73, 0x42, 0x6c, + 0x6f, 0x62, 0x3a, 0xc8, 0x02, 0x92, 0x41, 0xc4, 0x02, 0x0a, 0x71, 0x2a, 0x0b, 0x42, 0x69, 0x64, + 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x32, 0x40, 0x55, 0x6e, 0x73, 0x69, 0x67, 0x6e, + 0x65, 0x64, 0x20, 0x62, 0x69, 0x64, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, + 0x72, 0x6f, 0x6d, 0x20, 0x62, 0x69, 0x64, 0x64, 0x65, 0x72, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x62, 0x69, 0x64, 0x64, 0x65, 0x72, 0x20, 0x6d, 0x65, 0x76, 0x2d, 0x63, 0x6f, + 0x6d, 0x6d, 0x69, 0x74, 0x20, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0xd2, 0x01, 0x08, 0x74, 0x78, 0x48, + 0x61, 0x73, 0x68, 0x65, 0x73, 0xd2, 0x01, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0xd2, 0x01, + 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x32, 0xce, 0x01, 0x7b, + 0x22, 0x74, 0x78, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x22, 0x3a, 0x20, 0x5b, 0x22, 0x66, 0x65, + 0x34, 0x63, 0x62, 0x34, 0x37, 0x64, 0x62, 0x33, 0x36, 0x33, 0x30, 0x35, 0x35, 0x31, 0x62, 0x65, + 0x65, 0x64, 0x66, 0x62, 0x64, 0x30, 0x32, 0x61, 0x37, 0x31, 0x65, 0x63, 0x63, 0x36, 0x39, 0x66, + 0x64, 0x35, 0x39, 0x37, 0x35, 0x38, 0x65, 0x32, 0x62, 0x61, 0x36, 0x39, 0x39, 0x36, 0x30, 0x36, + 0x65, 0x32, 0x64, 0x35, 0x63, 0x37, 0x34, 0x32, 0x38, 0x34, 0x66, 0x66, 0x61, 0x37, 0x22, 0x2c, + 0x20, 0x22, 0x37, 0x31, 0x63, 0x31, 0x33, 0x34, 0x38, 0x66, 0x32, 0x64, 0x37, 0x66, 0x66, 0x37, + 0x65, 0x38, 0x31, 0x34, 0x66, 0x39, 0x63, 0x33, 0x36, 0x31, 0x37, 0x39, 0x38, 0x33, 0x37, 0x30, + 0x33, 0x34, 0x33, 0x35, 0x65, 0x61, 0x37, 0x34, 0x34, 0x36, 0x64, 0x65, 0x34, 0x32, 0x30, 0x61, + 0x65, 0x61, 0x63, 0x34, 0x38, 0x38, 0x62, 0x66, 0x31, 0x64, 0x65, 0x33, 0x35, 0x37, 0x33, 0x37, + 0x65, 0x38, 0x22, 0x5d, 0x2c, 0x20, 0x22, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x3a, 0x20, + 0x22, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x22, 0x2c, 0x20, 0x22, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x4e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x22, 0x3a, 0x20, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x7d, 0x22, 0xbe, 0x09, + 0x0a, 0x0a, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x95, 0x01, 0x0a, + 0x09, 0x74, 0x78, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, + 0x42, 0x78, 0x92, 0x41, 0x75, 0x32, 0x61, 0x48, 0x65, 0x78, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, + 0x65, 0x20, 0x68, 0x61, 0x73, 0x68, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x62, 0x69, 0x64, 0x64, 0x65, 0x72, 0x20, 0x77, 0x61, 0x6e, 0x74, 0x73, 0x20, + 0x74, 0x6f, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, + 0x65, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x8a, 0x01, 0x0f, 0x5b, 0x61, 0x2d, 0x66, 0x41, + 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x36, 0x34, 0x7d, 0x52, 0x08, 0x74, 0x78, 0x48, 0x61, + 0x73, 0x68, 0x65, 0x73, 0x12, 0x8f, 0x01, 0x0a, 0x0a, 0x62, 0x69, 0x64, 0x5f, 0x61, 0x6d, 0x6f, + 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x42, 0x70, 0x92, 0x41, 0x6d, 0x32, 0x6b, + 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x45, 0x54, 0x48, 0x20, 0x74, 0x68, + 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x69, 0x64, 0x64, 0x65, 0x72, 0x20, 0x68, 0x61, + 0x73, 0x20, 0x61, 0x67, 0x72, 0x65, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x61, 0x79, 0x20, + 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x20, + 0x66, 0x6f, 0x72, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, + 0x65, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x6e, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x52, 0x09, 0x62, 0x69, 0x64, + 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x6d, 0x0a, 0x0c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x42, 0x4a, 0x92, 0x41, + 0x47, 0x32, 0x45, 0x4d, 0x61, 0x78, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x6e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x69, 0x64, + 0x64, 0x65, 0x72, 0x20, 0x77, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x69, 0x6e, 0x63, + 0x6c, 0x75, 0x64, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x2e, 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x4e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x7b, 0x0a, 0x13, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, + 0x64, 0x5f, 0x62, 0x69, 0x64, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x4b, 0x92, 0x41, 0x48, 0x32, 0x46, 0x48, 0x65, 0x78, 0x20, 0x73, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x66, 0x20, + 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x69, + 0x64, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, + 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x69, 0x64, 0x64, 0x65, 0x72, 0x2e, 0x52, + 0x11, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x42, 0x69, 0x64, 0x44, 0x69, 0x67, 0x65, + 0x73, 0x74, 0x12, 0x7d, 0x0a, 0x16, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x5f, 0x62, + 0x69, 0x64, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x47, 0x92, 0x41, 0x44, 0x32, 0x42, 0x48, 0x65, 0x78, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x66, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x73, 0x69, 0x67, 0x6e, - 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x72, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, - 0x69, 0x73, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, - 0x13, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x12, 0x88, 0x01, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, - 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x5d, 0x92, 0x41, 0x5a, 0x32, 0x58, 0x48, 0x65, 0x78, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, - 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x73, 0x69, - 0x67, 0x6e, 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, - 0x65, 0x6e, 0x74, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x52, 0x0f, - 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x32, - 0xce, 0x03, 0x0a, 0x06, 0x42, 0x69, 0x64, 0x64, 0x65, 0x72, 0x12, 0x5b, 0x0a, 0x07, 0x53, 0x65, - 0x6e, 0x64, 0x42, 0x69, 0x64, 0x12, 0x15, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x62, 0x69, 0x64, 0x64, - 0x65, 0x72, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x69, 0x64, 0x1a, 0x1c, 0x2e, 0x72, - 0x70, 0x63, 0x2e, 0x62, 0x69, 0x64, 0x64, 0x65, 0x72, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x13, 0x3a, 0x01, 0x2a, 0x22, 0x0e, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x69, 0x64, 0x64, 0x65, - 0x72, 0x2f, 0x62, 0x69, 0x64, 0x30, 0x01, 0x12, 0x78, 0x0a, 0x0f, 0x50, 0x72, 0x65, 0x70, 0x61, - 0x79, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x1f, 0x2e, 0x72, 0x70, 0x63, + 0x20, 0x62, 0x69, 0x64, 0x64, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x73, 0x65, 0x6e, + 0x74, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x62, 0x69, 0x64, 0x2e, 0x52, 0x14, 0x72, 0x65, 0x63, + 0x65, 0x69, 0x76, 0x65, 0x64, 0x42, 0x69, 0x64, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x12, 0x62, 0x0a, 0x11, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x5f, + 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x42, 0x35, 0x92, 0x41, + 0x32, 0x32, 0x30, 0x48, 0x65, 0x78, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x65, 0x6e, + 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x66, 0x20, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, + 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, + 0x6e, 0x74, 0x2e, 0x52, 0x10, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x44, + 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x9e, 0x01, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x6b, 0x92, 0x41, 0x68, 0x32, 0x66, 0x48, 0x65, 0x78, 0x20, 0x73, + 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x6f, + 0x66, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x73, 0x69, + 0x67, 0x6e, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, + 0x69, 0x64, 0x65, 0x72, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x20, + 0x74, 0x68, 0x69, 0x73, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x52, 0x13, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, + 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x88, 0x01, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x5d, 0x92, 0x41, 0x5a, 0x32, 0x58, 0x48, 0x65, 0x78, 0x20, 0x73, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x66, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, + 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, + 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, + 0x52, 0x0f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x12, 0x8a, 0x01, 0x0a, 0x0f, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x74, 0x65, 0x72, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x42, 0x61, 0x92, 0x41, 0x5e, + 0x32, 0x5c, 0x48, 0x65, 0x78, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x65, 0x6e, 0x63, + 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, + 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x69, 0x6d, + 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x6c, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x6c, + 0x6f, 0x62, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x52, 0x0e, + 0x62, 0x6c, 0x6f, 0x62, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72, 0x73, 0x32, 0xce, + 0x03, 0x0a, 0x06, 0x42, 0x69, 0x64, 0x64, 0x65, 0x72, 0x12, 0x5b, 0x0a, 0x07, 0x53, 0x65, 0x6e, + 0x64, 0x42, 0x69, 0x64, 0x12, 0x15, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x62, 0x69, 0x64, 0x64, 0x65, + 0x72, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x69, 0x64, 0x1a, 0x1c, 0x2e, 0x72, 0x70, + 0x63, 0x2e, 0x62, 0x69, 0x64, 0x64, 0x65, 0x72, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, + 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x13, 0x3a, 0x01, 0x2a, 0x22, 0x0e, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x69, 0x64, 0x64, 0x65, 0x72, + 0x2f, 0x62, 0x69, 0x64, 0x30, 0x01, 0x12, 0x78, 0x0a, 0x0f, 0x50, 0x72, 0x65, 0x70, 0x61, 0x79, + 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x1f, 0x2e, 0x72, 0x70, 0x63, 0x2e, + 0x62, 0x69, 0x64, 0x64, 0x65, 0x72, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x65, + 0x70, 0x61, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x62, 0x69, 0x64, 0x64, 0x65, 0x72, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, - 0x65, 0x70, 0x61, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x72, 0x70, - 0x63, 0x2e, 0x62, 0x69, 0x64, 0x64, 0x65, 0x72, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, - 0x72, 0x65, 0x70, 0x61, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x22, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x22, 0x1a, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x69, 0x64, 0x64, 0x65, - 0x72, 0x2f, 0x70, 0x72, 0x65, 0x70, 0x61, 0x79, 0x2f, 0x7b, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, - 0x7d, 0x12, 0x72, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x61, 0x6e, 0x63, - 0x65, 0x12, 0x1e, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x62, 0x69, 0x64, 0x64, 0x65, 0x72, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x1a, 0x20, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x62, 0x69, 0x64, 0x64, 0x65, 0x72, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x65, 0x70, 0x61, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x12, 0x18, 0x2f, 0x76, 0x31, - 0x2f, 0x62, 0x69, 0x64, 0x64, 0x65, 0x72, 0x2f, 0x67, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, - 0x77, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x79, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x4d, 0x69, 0x6e, 0x41, - 0x6c, 0x6c, 0x6f, 0x77, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x1e, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x62, - 0x69, 0x64, 0x64, 0x65, 0x72, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x20, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x62, - 0x69, 0x64, 0x64, 0x65, 0x72, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x65, 0x70, - 0x61, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x1e, 0x12, 0x1c, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x69, 0x64, 0x64, 0x65, 0x72, 0x2f, 0x67, - 0x65, 0x74, 0x5f, 0x6d, 0x69, 0x6e, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x61, 0x6e, 0x63, 0x65, - 0x42, 0xcc, 0x02, 0x92, 0x41, 0x7a, 0x12, 0x78, 0x0a, 0x0a, 0x42, 0x69, 0x64, 0x64, 0x65, 0x72, - 0x20, 0x41, 0x50, 0x49, 0x2a, 0x5d, 0x0a, 0x1b, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, - 0x20, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, - 0x31, 0x2e, 0x31, 0x12, 0x3e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x72, 0x69, 0x6d, 0x65, 0x76, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x6d, 0x65, 0x76, 0x2d, 0x63, 0x6f, 0x6d, 0x6d, 0x69, - 0x74, 0x2f, 0x62, 0x6c, 0x6f, 0x62, 0x2f, 0x6d, 0x61, 0x69, 0x6e, 0x2f, 0x4c, 0x49, 0x43, 0x45, - 0x4e, 0x53, 0x45, 0x32, 0x0b, 0x31, 0x2e, 0x30, 0x2e, 0x30, 0x2d, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x62, 0x69, 0x64, 0x64, 0x65, 0x72, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x42, 0x0e, 0x42, 0x69, 0x64, 0x64, 0x65, 0x72, 0x61, 0x70, - 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x45, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x72, 0x69, 0x6d, 0x65, 0x76, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6c, 0x2f, 0x6d, 0x65, 0x76, 0x2d, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x2f, 0x67, - 0x65, 0x6e, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x62, 0x69, 0x64, 0x64, 0x65, 0x72, 0x61, 0x70, 0x69, - 0x2f, 0x76, 0x31, 0x3b, 0x62, 0x69, 0x64, 0x64, 0x65, 0x72, 0x61, 0x70, 0x69, 0x76, 0x31, 0xa2, - 0x02, 0x03, 0x52, 0x42, 0x58, 0xaa, 0x02, 0x10, 0x52, 0x70, 0x63, 0x2e, 0x42, 0x69, 0x64, 0x64, - 0x65, 0x72, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x10, 0x52, 0x70, 0x63, 0x5c, 0x42, - 0x69, 0x64, 0x64, 0x65, 0x72, 0x61, 0x70, 0x69, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x1c, 0x52, 0x70, - 0x63, 0x5c, 0x42, 0x69, 0x64, 0x64, 0x65, 0x72, 0x61, 0x70, 0x69, 0x5c, 0x56, 0x31, 0x5c, 0x47, - 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x12, 0x52, 0x70, 0x63, - 0x3a, 0x3a, 0x42, 0x69, 0x64, 0x64, 0x65, 0x72, 0x61, 0x70, 0x69, 0x3a, 0x3a, 0x56, 0x31, 0x62, - 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x70, 0x61, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x22, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x1c, 0x22, 0x1a, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x69, 0x64, 0x64, 0x65, 0x72, + 0x2f, 0x70, 0x72, 0x65, 0x70, 0x61, 0x79, 0x2f, 0x7b, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x7d, + 0x12, 0x72, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x61, 0x6e, 0x63, 0x65, + 0x12, 0x1e, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x62, 0x69, 0x64, 0x64, 0x65, 0x72, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x1a, 0x20, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x62, 0x69, 0x64, 0x64, 0x65, 0x72, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x65, 0x70, 0x61, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x12, 0x18, 0x2f, 0x76, 0x31, 0x2f, + 0x62, 0x69, 0x64, 0x64, 0x65, 0x72, 0x2f, 0x67, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, + 0x61, 0x6e, 0x63, 0x65, 0x12, 0x79, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x4d, 0x69, 0x6e, 0x41, 0x6c, + 0x6c, 0x6f, 0x77, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x1e, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x62, 0x69, + 0x64, 0x64, 0x65, 0x72, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x20, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x62, 0x69, + 0x64, 0x64, 0x65, 0x72, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x65, 0x70, 0x61, + 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x1e, 0x12, 0x1c, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x69, 0x64, 0x64, 0x65, 0x72, 0x2f, 0x67, 0x65, + 0x74, 0x5f, 0x6d, 0x69, 0x6e, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x61, 0x6e, 0x63, 0x65, 0x42, + 0xcc, 0x02, 0x92, 0x41, 0x7a, 0x12, 0x78, 0x0a, 0x0a, 0x42, 0x69, 0x64, 0x64, 0x65, 0x72, 0x20, + 0x41, 0x50, 0x49, 0x2a, 0x5d, 0x0a, 0x1b, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x20, + 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x31, + 0x2e, 0x31, 0x12, 0x3e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x72, 0x69, 0x6d, 0x65, 0x76, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x6d, 0x65, 0x76, 0x2d, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x2f, 0x62, 0x6c, 0x6f, 0x62, 0x2f, 0x6d, 0x61, 0x69, 0x6e, 0x2f, 0x4c, 0x49, 0x43, 0x45, 0x4e, + 0x53, 0x45, 0x32, 0x0b, 0x31, 0x2e, 0x30, 0x2e, 0x30, 0x2d, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x0a, + 0x14, 0x63, 0x6f, 0x6d, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x62, 0x69, 0x64, 0x64, 0x65, 0x72, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x42, 0x0e, 0x42, 0x69, 0x64, 0x64, 0x65, 0x72, 0x61, 0x70, 0x69, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x45, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x72, 0x69, 0x6d, 0x65, 0x76, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, + 0x6f, 0x6c, 0x2f, 0x6d, 0x65, 0x76, 0x2d, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x2f, 0x67, 0x65, + 0x6e, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x62, 0x69, 0x64, 0x64, 0x65, 0x72, 0x61, 0x70, 0x69, 0x2f, + 0x76, 0x31, 0x3b, 0x62, 0x69, 0x64, 0x64, 0x65, 0x72, 0x61, 0x70, 0x69, 0x76, 0x31, 0xa2, 0x02, + 0x03, 0x52, 0x42, 0x58, 0xaa, 0x02, 0x10, 0x52, 0x70, 0x63, 0x2e, 0x42, 0x69, 0x64, 0x64, 0x65, + 0x72, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x10, 0x52, 0x70, 0x63, 0x5c, 0x42, 0x69, + 0x64, 0x64, 0x65, 0x72, 0x61, 0x70, 0x69, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x1c, 0x52, 0x70, 0x63, + 0x5c, 0x42, 0x69, 0x64, 0x64, 0x65, 0x72, 0x61, 0x70, 0x69, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, + 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x12, 0x52, 0x70, 0x63, 0x3a, + 0x3a, 0x42, 0x69, 0x64, 0x64, 0x65, 0x72, 0x61, 0x70, 0x69, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/gen/go/rpc/providerapi/v1/providerapi.pb.go b/gen/go/rpc/providerapi/v1/providerapi.pb.go index 0d4edc52..fbc885cb 100644 --- a/gen/go/rpc/providerapi/v1/providerapi.pb.go +++ b/gen/go/rpc/providerapi/v1/providerapi.pb.go @@ -534,6 +534,163 @@ func (x *CancelResponse) GetTxHash() string { return "" } +type InclusionListReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + BlockNumber int64 `protobuf:"varint,1,opt,name=block_number,json=blockNumber,proto3" json:"block_number,omitempty"` + RelayAddress string `protobuf:"bytes,2,opt,name=relay_address,json=relayAddress,proto3" json:"relay_address,omitempty"` +} + +func (x *InclusionListReq) Reset() { + *x = InclusionListReq{} + if protoimpl.UnsafeEnabled { + mi := &file_rpc_providerapi_v1_providerapi_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *InclusionListReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*InclusionListReq) ProtoMessage() {} + +func (x *InclusionListReq) ProtoReflect() protoreflect.Message { + mi := &file_rpc_providerapi_v1_providerapi_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 InclusionListReq.ProtoReflect.Descriptor instead. +func (*InclusionListReq) Descriptor() ([]byte, []int) { + return file_rpc_providerapi_v1_providerapi_proto_rawDescGZIP(), []int{9} +} + +func (x *InclusionListReq) GetBlockNumber() int64 { + if x != nil { + return x.BlockNumber + } + return 0 +} + +func (x *InclusionListReq) GetRelayAddress() string { + if x != nil { + return x.RelayAddress + } + return "" +} + +type InclusionListResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + RelayList []*RelayInclusionList `protobuf:"bytes,1,rep,name=relay_list,json=relayList,proto3" json:"relay_list,omitempty"` +} + +func (x *InclusionListResp) Reset() { + *x = InclusionListResp{} + if protoimpl.UnsafeEnabled { + mi := &file_rpc_providerapi_v1_providerapi_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *InclusionListResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*InclusionListResp) ProtoMessage() {} + +func (x *InclusionListResp) ProtoReflect() protoreflect.Message { + mi := &file_rpc_providerapi_v1_providerapi_proto_msgTypes[10] + 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 InclusionListResp.ProtoReflect.Descriptor instead. +func (*InclusionListResp) Descriptor() ([]byte, []int) { + return file_rpc_providerapi_v1_providerapi_proto_rawDescGZIP(), []int{10} +} + +func (x *InclusionListResp) GetRelayList() []*RelayInclusionList { + if x != nil { + return x.RelayList + } + return nil +} + +type RelayInclusionList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + RelayAddress string `protobuf:"bytes,1,opt,name=relay_address,json=relayAddress,proto3" json:"relay_address,omitempty"` + TxHashes []string `protobuf:"bytes,2,rep,name=tx_hashes,json=txHashes,proto3" json:"tx_hashes,omitempty"` +} + +func (x *RelayInclusionList) Reset() { + *x = RelayInclusionList{} + if protoimpl.UnsafeEnabled { + mi := &file_rpc_providerapi_v1_providerapi_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RelayInclusionList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RelayInclusionList) ProtoMessage() {} + +func (x *RelayInclusionList) ProtoReflect() protoreflect.Message { + mi := &file_rpc_providerapi_v1_providerapi_proto_msgTypes[11] + 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 RelayInclusionList.ProtoReflect.Descriptor instead. +func (*RelayInclusionList) Descriptor() ([]byte, []int) { + return file_rpc_providerapi_v1_providerapi_proto_rawDescGZIP(), []int{11} +} + +func (x *RelayInclusionList) GetRelayAddress() string { + if x != nil { + return x.RelayAddress + } + return "" +} + +func (x *RelayInclusionList) GetTxHashes() []string { + if x != nil { + return x.TxHashes + } + return nil +} + var File_rpc_providerapi_v1_providerapi_proto protoreflect.FileDescriptor var file_rpc_providerapi_v1_providerapi_proto_rawDesc = []byte{ @@ -776,86 +933,174 @@ var file_rpc_providerapi_v1_providerapi_proto_rawDesc = []byte{ 0x38, 0x66, 0x32, 0x64, 0x37, 0x66, 0x66, 0x37, 0x65, 0x38, 0x31, 0x34, 0x66, 0x39, 0x63, 0x33, 0x36, 0x31, 0x37, 0x39, 0x38, 0x33, 0x37, 0x30, 0x33, 0x34, 0x33, 0x35, 0x65, 0x61, 0x37, 0x34, 0x34, 0x36, 0x64, 0x65, 0x34, 0x32, 0x30, 0x61, 0x65, 0x61, 0x63, 0x34, 0x38, 0x38, 0x62, 0x66, - 0x31, 0x64, 0x65, 0x33, 0x35, 0x37, 0x33, 0x37, 0x65, 0x38, 0x22, 0x7d, 0x32, 0x80, 0x07, 0x0a, - 0x08, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x6d, 0x0a, 0x0b, 0x52, 0x65, 0x63, - 0x65, 0x69, 0x76, 0x65, 0x42, 0x69, 0x64, 0x73, 0x12, 0x20, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x70, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x17, 0x2e, 0x72, 0x70, 0x63, + 0x31, 0x64, 0x65, 0x33, 0x35, 0x37, 0x33, 0x37, 0x65, 0x38, 0x22, 0x7d, 0x22, 0xbc, 0x03, 0x0a, + 0x10, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, + 0x71, 0x12, 0x73, 0x0a, 0x0c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x42, 0x50, 0x92, 0x41, 0x46, 0x32, 0x44, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x77, + 0x68, 0x69, 0x63, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x72, 0x20, 0x77, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x67, 0x65, 0x74, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6c, 0x69, 0x73, + 0x74, 0x2e, 0xba, 0x48, 0x04, 0x22, 0x02, 0x20, 0x00, 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x65, 0x0a, 0x0d, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x5f, + 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x40, 0x92, + 0x41, 0x3d, 0x32, 0x29, 0x48, 0x65, 0x78, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, + 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, + 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x2e, 0x8a, 0x01, 0x0f, + 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x34, 0x30, 0x7d, 0x52, + 0x0c, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x3a, 0xcb, 0x01, + 0x92, 0x41, 0xc7, 0x01, 0x0a, 0x70, 0x2a, 0x16, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, + 0x6e, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x32, 0x48, + 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x72, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, + 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, + 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x65, 0x76, 0x2d, 0x63, 0x6f, 0x6d, 0x6d, + 0x69, 0x74, 0x20, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0xd2, 0x01, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x32, 0x53, 0x7b, 0x22, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x4e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, 0x3a, 0x20, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x2c, 0x20, + 0x22, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x3a, 0x20, + 0x22, 0x39, 0x31, 0x61, 0x38, 0x39, 0x42, 0x36, 0x33, 0x33, 0x31, 0x39, 0x34, 0x63, 0x30, 0x44, + 0x38, 0x36, 0x43, 0x35, 0x33, 0x39, 0x41, 0x31, 0x41, 0x35, 0x42, 0x31, 0x34, 0x44, 0x43, 0x43, + 0x61, 0x63, 0x66, 0x44, 0x34, 0x37, 0x30, 0x39, 0x34, 0x22, 0x7d, 0x22, 0x9d, 0x02, 0x0a, 0x11, + 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x12, 0x9c, 0x01, 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x6c, 0x69, 0x73, 0x74, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x70, 0x72, 0x6f, + 0x76, 0x69, 0x64, 0x65, 0x72, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6c, 0x61, + 0x79, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x55, + 0x92, 0x41, 0x52, 0x32, 0x50, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6c, + 0x69, 0x73, 0x74, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x65, + 0x76, 0x2d, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x20, 0x6e, 0x6f, 0x64, 0x65, 0x20, 0x66, 0x6f, + 0x72, 0x20, 0x61, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x75, 0x6c, 0x61, 0x72, 0x20, 0x72, + 0x65, 0x6c, 0x61, 0x79, 0x2e, 0x52, 0x09, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x4c, 0x69, 0x73, 0x74, + 0x3a, 0x69, 0x92, 0x41, 0x66, 0x0a, 0x64, 0x2a, 0x17, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, + 0x6f, 0x6e, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x32, 0x49, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6c, 0x69, 0x73, 0x74, + 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x65, 0x76, 0x2d, 0x63, + 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x20, 0x6e, 0x6f, 0x64, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, + 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, 0x22, 0xf8, 0x03, 0x0a, 0x12, + 0x52, 0x65, 0x6c, 0x61, 0x79, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, + 0x73, 0x74, 0x12, 0x65, 0x0a, 0x0d, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x61, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x40, 0x92, 0x41, 0x3d, 0x32, 0x29, + 0x48, 0x65, 0x78, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x66, 0x20, + 0x74, 0x68, 0x65, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x2e, 0x8a, 0x01, 0x0f, 0x5b, 0x61, 0x2d, 0x66, + 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x34, 0x30, 0x7d, 0x52, 0x0c, 0x72, 0x65, 0x6c, + 0x61, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x8b, 0x02, 0x0a, 0x09, 0x74, 0x78, + 0x5f, 0x68, 0x61, 0x73, 0x68, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x42, 0xed, 0x01, + 0x92, 0x41, 0x60, 0x32, 0x4c, 0x48, 0x65, 0x78, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, + 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, + 0x68, 0x61, 0x73, 0x68, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, + 0x64, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x2e, 0x8a, 0x01, 0x0f, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, + 0x36, 0x34, 0x7d, 0xba, 0x48, 0x86, 0x01, 0xba, 0x01, 0x82, 0x01, 0x0a, 0x09, 0x74, 0x78, 0x5f, + 0x68, 0x61, 0x73, 0x68, 0x65, 0x73, 0x12, 0x36, 0x74, 0x78, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x65, + 0x73, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, + 0x64, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x68, 0x61, 0x73, 0x68, 0x65, 0x73, 0x2e, 0x1a, 0x3d, + 0x74, 0x68, 0x69, 0x73, 0x2e, 0x61, 0x6c, 0x6c, 0x28, 0x72, 0x2c, 0x20, 0x72, 0x2e, 0x6d, 0x61, + 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, + 0x2d, 0x39, 0x5d, 0x7b, 0x36, 0x34, 0x7d, 0x24, 0x27, 0x29, 0x29, 0x20, 0x26, 0x26, 0x20, 0x73, + 0x69, 0x7a, 0x65, 0x28, 0x74, 0x68, 0x69, 0x73, 0x29, 0x20, 0x3e, 0x20, 0x30, 0x52, 0x08, 0x74, + 0x78, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x3a, 0x6d, 0x92, 0x41, 0x6a, 0x0a, 0x68, 0x2a, 0x14, + 0x52, 0x65, 0x6c, 0x61, 0x79, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x20, + 0x6c, 0x69, 0x73, 0x74, 0x32, 0x50, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x20, + 0x6c, 0x69, 0x73, 0x74, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, + 0x65, 0x76, 0x2d, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x20, 0x6e, 0x6f, 0x64, 0x65, 0x20, 0x66, + 0x6f, 0x72, 0x20, 0x61, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x75, 0x6c, 0x61, 0x72, 0x20, + 0x72, 0x65, 0x6c, 0x61, 0x79, 0x2e, 0x32, 0xa5, 0x08, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x12, 0x6d, 0x0a, 0x0b, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x42, 0x69, + 0x64, 0x73, 0x12, 0x20, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x72, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x1a, 0x17, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x69, 0x64, 0x22, 0x21, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x12, 0x19, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x2f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x5f, 0x62, 0x69, 0x64, 0x73, + 0x30, 0x01, 0x12, 0x85, 0x01, 0x0a, 0x11, 0x53, 0x65, 0x6e, 0x64, 0x50, 0x72, 0x6f, 0x63, 0x65, + 0x73, 0x73, 0x65, 0x64, 0x42, 0x69, 0x64, 0x73, 0x12, 0x1f, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x70, + 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x69, + 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0x20, 0x2e, 0x72, 0x70, 0x63, 0x2e, + 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x2b, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x25, 0x3a, 0x01, 0x2a, 0x22, 0x20, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x76, + 0x69, 0x64, 0x65, 0x72, 0x2f, 0x73, 0x65, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, + 0x73, 0x65, 0x64, 0x5f, 0x62, 0x69, 0x64, 0x73, 0x28, 0x01, 0x12, 0xa2, 0x01, 0x0a, 0x15, 0x47, + 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, + 0x4c, 0x69, 0x73, 0x74, 0x12, 0x24, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x73, + 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x25, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x42, 0x69, 0x64, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x12, 0x19, 0x2f, 0x76, 0x31, - 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, - 0x65, 0x5f, 0x62, 0x69, 0x64, 0x73, 0x30, 0x01, 0x12, 0x85, 0x01, 0x0a, 0x11, 0x53, 0x65, 0x6e, - 0x64, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x42, 0x69, 0x64, 0x73, 0x12, 0x1f, - 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x69, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, - 0x20, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x3a, 0x01, 0x2a, 0x22, 0x20, 0x2f, 0x76, - 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2f, 0x73, 0x65, 0x6e, 0x64, 0x5f, - 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x5f, 0x62, 0x69, 0x64, 0x73, 0x28, 0x01, - 0x12, 0x82, 0x01, 0x0a, 0x0d, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x53, 0x74, 0x61, - 0x6b, 0x65, 0x12, 0x20, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, - 0x72, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x72, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x26, 0x22, - 0x24, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2f, 0x72, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2f, 0x7b, 0x61, 0x6d, - 0x6f, 0x75, 0x6e, 0x74, 0x7d, 0x12, 0x6f, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x6b, + 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x22, 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x36, 0x12, 0x34, 0x2f, 0x76, 0x31, 0x2f, 0x70, + 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2f, 0x67, 0x65, 0x74, 0x5f, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x5f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x69, 0x73, 0x74, + 0x2f, 0x7b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x12, + 0x82, 0x01, 0x0a, 0x0d, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x12, 0x20, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x1a, 0x21, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, 0x16, - 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2f, 0x67, 0x65, 0x74, - 0x5f, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x12, 0x76, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4d, 0x69, 0x6e, - 0x53, 0x74, 0x61, 0x6b, 0x65, 0x12, 0x20, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x76, - 0x69, 0x64, 0x65, 0x72, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x21, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x70, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, - 0x6b, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x1c, 0x12, 0x1a, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, - 0x2f, 0x67, 0x65, 0x74, 0x5f, 0x6d, 0x69, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x12, 0x82, - 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x54, 0x78, 0x6e, - 0x73, 0x12, 0x20, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x1a, 0x27, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x72, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, - 0x54, 0x78, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x1f, 0x12, 0x1d, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x72, 0x2f, 0x67, 0x65, 0x74, 0x5f, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x74, - 0x78, 0x6e, 0x73, 0x12, 0x89, 0x01, 0x0a, 0x11, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x2e, 0x72, 0x70, 0x63, 0x2e, - 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, - 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x1a, 0x22, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x70, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x26, 0x22, 0x24, + 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2f, 0x72, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2f, 0x7b, 0x61, 0x6d, 0x6f, + 0x75, 0x6e, 0x74, 0x7d, 0x12, 0x6f, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x6b, 0x65, + 0x12, 0x20, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x1a, 0x21, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x72, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, 0x16, 0x2f, + 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2f, 0x67, 0x65, 0x74, 0x5f, + 0x73, 0x74, 0x61, 0x6b, 0x65, 0x12, 0x76, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4d, 0x69, 0x6e, 0x53, + 0x74, 0x61, 0x6b, 0x65, 0x12, 0x20, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x21, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x70, 0x72, 0x6f, + 0x76, 0x69, 0x64, 0x65, 0x72, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x6b, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x1c, 0x12, 0x1a, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2f, + 0x67, 0x65, 0x74, 0x5f, 0x6d, 0x69, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x12, 0x82, 0x01, + 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x54, 0x78, 0x6e, 0x73, + 0x12, 0x20, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x1a, 0x27, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x72, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x54, + 0x78, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x1f, 0x12, 0x1d, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x72, 0x2f, 0x67, 0x65, 0x74, 0x5f, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x78, + 0x6e, 0x73, 0x12, 0x89, 0x01, 0x0a, 0x11, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, - 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x31, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x2b, 0x22, 0x29, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x72, 0x2f, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x7b, 0x74, 0x78, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x7d, 0x42, - 0xde, 0x02, 0x92, 0x41, 0x7c, 0x12, 0x7a, 0x0a, 0x0c, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, - 0x72, 0x20, 0x41, 0x50, 0x49, 0x2a, 0x5d, 0x0a, 0x1b, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, - 0x73, 0x20, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, - 0x20, 0x31, 0x2e, 0x31, 0x12, 0x3e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, + 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x1a, 0x22, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x70, 0x72, + 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x6e, + 0x63, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x31, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x2b, 0x22, 0x29, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x72, 0x2f, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x7b, 0x74, 0x78, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x7d, 0x42, 0xde, + 0x02, 0x92, 0x41, 0x7c, 0x12, 0x7a, 0x0a, 0x0c, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, + 0x20, 0x41, 0x50, 0x49, 0x2a, 0x5d, 0x0a, 0x1b, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, + 0x20, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, + 0x31, 0x2e, 0x31, 0x12, 0x3e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x72, 0x69, 0x6d, 0x65, 0x76, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x6d, 0x65, 0x76, 0x2d, 0x63, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x2f, 0x62, 0x6c, 0x6f, 0x62, 0x2f, 0x6d, 0x61, 0x69, 0x6e, 0x2f, 0x4c, 0x49, 0x43, 0x45, + 0x4e, 0x53, 0x45, 0x32, 0x0b, 0x31, 0x2e, 0x30, 0x2e, 0x30, 0x2d, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x0a, 0x16, 0x63, 0x6f, 0x6d, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, + 0x65, 0x72, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x42, 0x10, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, + 0x65, 0x72, 0x61, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x49, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x72, 0x69, 0x6d, 0x65, 0x76, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x6d, 0x65, 0x76, 0x2d, 0x63, 0x6f, 0x6d, 0x6d, - 0x69, 0x74, 0x2f, 0x62, 0x6c, 0x6f, 0x62, 0x2f, 0x6d, 0x61, 0x69, 0x6e, 0x2f, 0x4c, 0x49, 0x43, - 0x45, 0x4e, 0x53, 0x45, 0x32, 0x0b, 0x31, 0x2e, 0x30, 0x2e, 0x30, 0x2d, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x0a, 0x16, 0x63, 0x6f, 0x6d, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x72, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x42, 0x10, 0x50, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x72, 0x61, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x49, 0x67, - 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x72, 0x69, 0x6d, 0x65, 0x76, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x6d, 0x65, 0x76, 0x2d, 0x63, 0x6f, 0x6d, - 0x6d, 0x69, 0x74, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x72, 0x6f, 0x76, - 0x69, 0x64, 0x65, 0x72, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x3b, 0x70, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x72, 0x61, 0x70, 0x69, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x52, 0x50, 0x58, 0xaa, 0x02, - 0x12, 0x52, 0x70, 0x63, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x61, 0x70, 0x69, - 0x2e, 0x56, 0x31, 0xca, 0x02, 0x12, 0x52, 0x70, 0x63, 0x5c, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x72, 0x61, 0x70, 0x69, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x1e, 0x52, 0x70, 0x63, 0x5c, 0x50, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x61, 0x70, 0x69, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, - 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x14, 0x52, 0x70, 0x63, 0x3a, - 0x3a, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x61, 0x70, 0x69, 0x3a, 0x3a, 0x56, 0x31, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x69, 0x74, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x3b, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, + 0x65, 0x72, 0x61, 0x70, 0x69, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x52, 0x50, 0x58, 0xaa, 0x02, 0x12, + 0x52, 0x70, 0x63, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x61, 0x70, 0x69, 0x2e, + 0x56, 0x31, 0xca, 0x02, 0x12, 0x52, 0x70, 0x63, 0x5c, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x72, 0x61, 0x70, 0x69, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x1e, 0x52, 0x70, 0x63, 0x5c, 0x50, 0x72, + 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x61, 0x70, 0x69, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x14, 0x52, 0x70, 0x63, 0x3a, 0x3a, + 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x61, 0x70, 0x69, 0x3a, 0x3a, 0x56, 0x31, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -871,7 +1116,7 @@ func file_rpc_providerapi_v1_providerapi_proto_rawDescGZIP() []byte { } var file_rpc_providerapi_v1_providerapi_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_rpc_providerapi_v1_providerapi_proto_msgTypes = make([]protoimpl.MessageInfo, 9) +var file_rpc_providerapi_v1_providerapi_proto_msgTypes = make([]protoimpl.MessageInfo, 12) var file_rpc_providerapi_v1_providerapi_proto_goTypes = []interface{}{ (BidResponse_Status)(0), // 0: rpc.providerapi.v1.BidResponse.Status (*StakeRequest)(nil), // 1: rpc.providerapi.v1.StakeRequest @@ -883,29 +1128,35 @@ var file_rpc_providerapi_v1_providerapi_proto_goTypes = []interface{}{ (*TransactionInfo)(nil), // 7: rpc.providerapi.v1.TransactionInfo (*CancelReq)(nil), // 8: rpc.providerapi.v1.CancelReq (*CancelResponse)(nil), // 9: rpc.providerapi.v1.CancelResponse + (*InclusionListReq)(nil), // 10: rpc.providerapi.v1.InclusionListReq + (*InclusionListResp)(nil), // 11: rpc.providerapi.v1.InclusionListResp + (*RelayInclusionList)(nil), // 12: rpc.providerapi.v1.RelayInclusionList } var file_rpc_providerapi_v1_providerapi_proto_depIdxs = []int32{ - 0, // 0: rpc.providerapi.v1.BidResponse.status:type_name -> rpc.providerapi.v1.BidResponse.Status - 7, // 1: rpc.providerapi.v1.PendingTxnsResponse.pending_txns:type_name -> rpc.providerapi.v1.TransactionInfo - 3, // 2: rpc.providerapi.v1.Provider.ReceiveBids:input_type -> rpc.providerapi.v1.EmptyMessage - 5, // 3: rpc.providerapi.v1.Provider.SendProcessedBids:input_type -> rpc.providerapi.v1.BidResponse - 1, // 4: rpc.providerapi.v1.Provider.RegisterStake:input_type -> rpc.providerapi.v1.StakeRequest - 3, // 5: rpc.providerapi.v1.Provider.GetStake:input_type -> rpc.providerapi.v1.EmptyMessage - 3, // 6: rpc.providerapi.v1.Provider.GetMinStake:input_type -> rpc.providerapi.v1.EmptyMessage - 3, // 7: rpc.providerapi.v1.Provider.GetPendingTxns:input_type -> rpc.providerapi.v1.EmptyMessage - 8, // 8: rpc.providerapi.v1.Provider.CancelTransaction:input_type -> rpc.providerapi.v1.CancelReq - 4, // 9: rpc.providerapi.v1.Provider.ReceiveBids:output_type -> rpc.providerapi.v1.Bid - 3, // 10: rpc.providerapi.v1.Provider.SendProcessedBids:output_type -> rpc.providerapi.v1.EmptyMessage - 2, // 11: rpc.providerapi.v1.Provider.RegisterStake:output_type -> rpc.providerapi.v1.StakeResponse - 2, // 12: rpc.providerapi.v1.Provider.GetStake:output_type -> rpc.providerapi.v1.StakeResponse - 2, // 13: rpc.providerapi.v1.Provider.GetMinStake:output_type -> rpc.providerapi.v1.StakeResponse - 6, // 14: rpc.providerapi.v1.Provider.GetPendingTxns:output_type -> rpc.providerapi.v1.PendingTxnsResponse - 9, // 15: rpc.providerapi.v1.Provider.CancelTransaction:output_type -> rpc.providerapi.v1.CancelResponse - 9, // [9:16] is the sub-list for method output_type - 2, // [2:9] is the sub-list for method input_type - 2, // [2:2] is the sub-list for extension type_name - 2, // [2:2] is the sub-list for extension extendee - 0, // [0:2] is the sub-list for field type_name + 0, // 0: rpc.providerapi.v1.BidResponse.status:type_name -> rpc.providerapi.v1.BidResponse.Status + 7, // 1: rpc.providerapi.v1.PendingTxnsResponse.pending_txns:type_name -> rpc.providerapi.v1.TransactionInfo + 12, // 2: rpc.providerapi.v1.InclusionListResp.relay_list:type_name -> rpc.providerapi.v1.RelayInclusionList + 3, // 3: rpc.providerapi.v1.Provider.ReceiveBids:input_type -> rpc.providerapi.v1.EmptyMessage + 5, // 4: rpc.providerapi.v1.Provider.SendProcessedBids:input_type -> rpc.providerapi.v1.BidResponse + 10, // 5: rpc.providerapi.v1.Provider.GetBlockInclusionList:input_type -> rpc.providerapi.v1.InclusionListReq + 1, // 6: rpc.providerapi.v1.Provider.RegisterStake:input_type -> rpc.providerapi.v1.StakeRequest + 3, // 7: rpc.providerapi.v1.Provider.GetStake:input_type -> rpc.providerapi.v1.EmptyMessage + 3, // 8: rpc.providerapi.v1.Provider.GetMinStake:input_type -> rpc.providerapi.v1.EmptyMessage + 3, // 9: rpc.providerapi.v1.Provider.GetPendingTxns:input_type -> rpc.providerapi.v1.EmptyMessage + 8, // 10: rpc.providerapi.v1.Provider.CancelTransaction:input_type -> rpc.providerapi.v1.CancelReq + 4, // 11: rpc.providerapi.v1.Provider.ReceiveBids:output_type -> rpc.providerapi.v1.Bid + 3, // 12: rpc.providerapi.v1.Provider.SendProcessedBids:output_type -> rpc.providerapi.v1.EmptyMessage + 11, // 13: rpc.providerapi.v1.Provider.GetBlockInclusionList:output_type -> rpc.providerapi.v1.InclusionListResp + 2, // 14: rpc.providerapi.v1.Provider.RegisterStake:output_type -> rpc.providerapi.v1.StakeResponse + 2, // 15: rpc.providerapi.v1.Provider.GetStake:output_type -> rpc.providerapi.v1.StakeResponse + 2, // 16: rpc.providerapi.v1.Provider.GetMinStake:output_type -> rpc.providerapi.v1.StakeResponse + 6, // 17: rpc.providerapi.v1.Provider.GetPendingTxns:output_type -> rpc.providerapi.v1.PendingTxnsResponse + 9, // 18: rpc.providerapi.v1.Provider.CancelTransaction:output_type -> rpc.providerapi.v1.CancelResponse + 11, // [11:19] is the sub-list for method output_type + 3, // [3:11] is the sub-list for method input_type + 3, // [3:3] is the sub-list for extension type_name + 3, // [3:3] is the sub-list for extension extendee + 0, // [0:3] is the sub-list for field type_name } func init() { file_rpc_providerapi_v1_providerapi_proto_init() } @@ -1022,6 +1273,42 @@ func file_rpc_providerapi_v1_providerapi_proto_init() { return nil } } + file_rpc_providerapi_v1_providerapi_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*InclusionListReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rpc_providerapi_v1_providerapi_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*InclusionListResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rpc_providerapi_v1_providerapi_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RelayInclusionList); 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{ @@ -1029,7 +1316,7 @@ func file_rpc_providerapi_v1_providerapi_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_rpc_providerapi_v1_providerapi_proto_rawDesc, NumEnums: 1, - NumMessages: 9, + NumMessages: 12, NumExtensions: 0, NumServices: 1, }, diff --git a/gen/go/rpc/providerapi/v1/providerapi.pb.gw.go b/gen/go/rpc/providerapi/v1/providerapi.pb.gw.go index 83269b22..f000a85d 100644 --- a/gen/go/rpc/providerapi/v1/providerapi.pb.gw.go +++ b/gen/go/rpc/providerapi/v1/providerapi.pb.gw.go @@ -92,6 +92,76 @@ func request_Provider_SendProcessedBids_0(ctx context.Context, marshaler runtime } +var ( + filter_Provider_GetBlockInclusionList_0 = &utilities.DoubleArray{Encoding: map[string]int{"block_number": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + +func request_Provider_GetBlockInclusionList_0(ctx context.Context, marshaler runtime.Marshaler, client ProviderClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq InclusionListReq + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["block_number"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "block_number") + } + + protoReq.BlockNumber, err = runtime.Int64(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "block_number", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Provider_GetBlockInclusionList_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.GetBlockInclusionList(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Provider_GetBlockInclusionList_0(ctx context.Context, marshaler runtime.Marshaler, server ProviderServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq InclusionListReq + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["block_number"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "block_number") + } + + protoReq.BlockNumber, err = runtime.Int64(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "block_number", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Provider_GetBlockInclusionList_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.GetBlockInclusionList(ctx, &protoReq) + return msg, metadata, err + +} + func request_Provider_RegisterStake_0(ctx context.Context, marshaler runtime.Marshaler, client ProviderClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq StakeRequest var metadata runtime.ServerMetadata @@ -270,6 +340,31 @@ func RegisterProviderHandlerServer(ctx context.Context, mux *runtime.ServeMux, s return }) + mux.Handle("GET", pattern_Provider_GetBlockInclusionList_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/rpc.providerapi.v1.Provider/GetBlockInclusionList", runtime.WithHTTPPathPattern("/v1/provider/get_block_inclusion_list/{block_number}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Provider_GetBlockInclusionList_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_Provider_GetBlockInclusionList_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("POST", pattern_Provider_RegisterStake_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -480,6 +575,28 @@ func RegisterProviderHandlerClient(ctx context.Context, mux *runtime.ServeMux, c }) + mux.Handle("GET", pattern_Provider_GetBlockInclusionList_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/rpc.providerapi.v1.Provider/GetBlockInclusionList", runtime.WithHTTPPathPattern("/v1/provider/get_block_inclusion_list/{block_number}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Provider_GetBlockInclusionList_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_Provider_GetBlockInclusionList_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("POST", pattern_Provider_RegisterStake_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -598,6 +715,8 @@ var ( pattern_Provider_SendProcessedBids_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "provider", "send_processed_bids"}, "")) + pattern_Provider_GetBlockInclusionList_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "provider", "get_block_inclusion_list", "block_number"}, "")) + pattern_Provider_RegisterStake_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "provider", "register_stake", "amount"}, "")) pattern_Provider_GetStake_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "provider", "get_stake"}, "")) @@ -614,6 +733,8 @@ var ( forward_Provider_SendProcessedBids_0 = runtime.ForwardResponseMessage + forward_Provider_GetBlockInclusionList_0 = runtime.ForwardResponseMessage + forward_Provider_RegisterStake_0 = runtime.ForwardResponseMessage forward_Provider_GetStake_0 = runtime.ForwardResponseMessage diff --git a/gen/go/rpc/providerapi/v1/providerapi_grpc.pb.go b/gen/go/rpc/providerapi/v1/providerapi_grpc.pb.go index 78673677..57e6a5fb 100644 --- a/gen/go/rpc/providerapi/v1/providerapi_grpc.pb.go +++ b/gen/go/rpc/providerapi/v1/providerapi_grpc.pb.go @@ -19,13 +19,14 @@ import ( const _ = grpc.SupportPackageIsVersion7 const ( - Provider_ReceiveBids_FullMethodName = "/rpc.providerapi.v1.Provider/ReceiveBids" - Provider_SendProcessedBids_FullMethodName = "/rpc.providerapi.v1.Provider/SendProcessedBids" - Provider_RegisterStake_FullMethodName = "/rpc.providerapi.v1.Provider/RegisterStake" - Provider_GetStake_FullMethodName = "/rpc.providerapi.v1.Provider/GetStake" - Provider_GetMinStake_FullMethodName = "/rpc.providerapi.v1.Provider/GetMinStake" - Provider_GetPendingTxns_FullMethodName = "/rpc.providerapi.v1.Provider/GetPendingTxns" - Provider_CancelTransaction_FullMethodName = "/rpc.providerapi.v1.Provider/CancelTransaction" + Provider_ReceiveBids_FullMethodName = "/rpc.providerapi.v1.Provider/ReceiveBids" + Provider_SendProcessedBids_FullMethodName = "/rpc.providerapi.v1.Provider/SendProcessedBids" + Provider_GetBlockInclusionList_FullMethodName = "/rpc.providerapi.v1.Provider/GetBlockInclusionList" + Provider_RegisterStake_FullMethodName = "/rpc.providerapi.v1.Provider/RegisterStake" + Provider_GetStake_FullMethodName = "/rpc.providerapi.v1.Provider/GetStake" + Provider_GetMinStake_FullMethodName = "/rpc.providerapi.v1.Provider/GetMinStake" + Provider_GetPendingTxns_FullMethodName = "/rpc.providerapi.v1.Provider/GetPendingTxns" + Provider_CancelTransaction_FullMethodName = "/rpc.providerapi.v1.Provider/CancelTransaction" ) // ProviderClient is the client API for Provider service. @@ -42,6 +43,8 @@ type ProviderClient interface { // SendProcessedBids is called by the provider to send processed bids to the mev-commit node. // The provider will stream processed bids to the mev-commit node. SendProcessedBids(ctx context.Context, opts ...grpc.CallOption) (Provider_SendProcessedBidsClient, error) + // GetBlockInclusionList + GetBlockInclusionList(ctx context.Context, in *InclusionListReq, opts ...grpc.CallOption) (*InclusionListResp, error) // RegisterStake // // RegisterStake is called by the provider to register its stake in the provider registry. @@ -138,6 +141,15 @@ func (x *providerSendProcessedBidsClient) CloseAndRecv() (*EmptyMessage, error) return m, nil } +func (c *providerClient) GetBlockInclusionList(ctx context.Context, in *InclusionListReq, opts ...grpc.CallOption) (*InclusionListResp, error) { + out := new(InclusionListResp) + err := c.cc.Invoke(ctx, Provider_GetBlockInclusionList_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *providerClient) RegisterStake(ctx context.Context, in *StakeRequest, opts ...grpc.CallOption) (*StakeResponse, error) { out := new(StakeResponse) err := c.cc.Invoke(ctx, Provider_RegisterStake_FullMethodName, in, out, opts...) @@ -197,6 +209,8 @@ type ProviderServer interface { // SendProcessedBids is called by the provider to send processed bids to the mev-commit node. // The provider will stream processed bids to the mev-commit node. SendProcessedBids(Provider_SendProcessedBidsServer) error + // GetBlockInclusionList + GetBlockInclusionList(context.Context, *InclusionListReq) (*InclusionListResp, error) // RegisterStake // // RegisterStake is called by the provider to register its stake in the provider registry. @@ -230,6 +244,9 @@ func (UnimplementedProviderServer) ReceiveBids(*EmptyMessage, Provider_ReceiveBi func (UnimplementedProviderServer) SendProcessedBids(Provider_SendProcessedBidsServer) error { return status.Errorf(codes.Unimplemented, "method SendProcessedBids not implemented") } +func (UnimplementedProviderServer) GetBlockInclusionList(context.Context, *InclusionListReq) (*InclusionListResp, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetBlockInclusionList not implemented") +} func (UnimplementedProviderServer) RegisterStake(context.Context, *StakeRequest) (*StakeResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method RegisterStake not implemented") } @@ -305,6 +322,24 @@ func (x *providerSendProcessedBidsServer) Recv() (*BidResponse, error) { return m, nil } +func _Provider_GetBlockInclusionList_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(InclusionListReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ProviderServer).GetBlockInclusionList(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Provider_GetBlockInclusionList_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ProviderServer).GetBlockInclusionList(ctx, req.(*InclusionListReq)) + } + return interceptor(ctx, in, info, handler) +} + func _Provider_RegisterStake_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(StakeRequest) if err := dec(in); err != nil { @@ -402,6 +437,10 @@ var Provider_ServiceDesc = grpc.ServiceDesc{ ServiceName: "rpc.providerapi.v1.Provider", HandlerType: (*ProviderServer)(nil), Methods: []grpc.MethodDesc{ + { + MethodName: "GetBlockInclusionList", + Handler: _Provider_GetBlockInclusionList_Handler, + }, { MethodName: "RegisterStake", Handler: _Provider_RegisterStake_Handler, diff --git a/gen/openapi/rpc/bidderapi/v1/bidderapi.swagger.yaml b/gen/openapi/rpc/bidderapi/v1/bidderapi.swagger.yaml index ef69767c..762bf27a 100644 --- a/gen/openapi/rpc/bidderapi/v1/bidderapi.swagger.yaml +++ b/gen/openapi/rpc/bidderapi/v1/bidderapi.swagger.yaml @@ -128,6 +128,9 @@ definitions: type: string format: int64 description: Max block number that the bidder wants to include the transaction in. + isBlob: + type: boolean + description: Boolean flag to indicate if the bid is for a blob. description: Unsigned bid message from bidders to the bidder mev-commit node. title: Bid message required: @@ -166,6 +169,11 @@ definitions: providerAddress: type: string description: Hex string encoding of the address of the provider that signed the commitment signature. + blobCommitters: + type: array + items: + type: string + description: Hex string encoding of the addresses of the committers that immediately the blob commitment. v1PrepayResponse: type: object example: diff --git a/gen/openapi/rpc/providerapi/v1/providerapi.swagger.yaml b/gen/openapi/rpc/providerapi/v1/providerapi.swagger.yaml index c6769d8a..191ce194 100644 --- a/gen/openapi/rpc/providerapi/v1/providerapi.swagger.yaml +++ b/gen/openapi/rpc/providerapi/v1/providerapi.swagger.yaml @@ -30,6 +30,32 @@ paths: in: path required: true type: string + /v1/provider/get_block_inclusion_list/{blockNumber}: + get: + summary: GetBlockInclusionList + operationId: Provider_GetBlockInclusionList + responses: + "200": + description: A successful response. + schema: + $ref: '#/definitions/v1InclusionListResp' + default: + description: An unexpected error response. + schema: + $ref: '#/definitions/googlerpcStatus' + parameters: + - name: blockNumber + description: Block number for which the provider wants to get the inclusion list. + in: path + required: true + type: string + format: int64 + - name: relayAddress + description: Hex encoding of the address of the relay. + in: query + required: false + type: string + pattern: '[a-fA-F0-9]{40}' /v1/provider/get_min_stake: get: summary: GetMinStake @@ -230,6 +256,17 @@ definitions: title: Cancel response required: - txHash + v1InclusionListResp: + type: object + properties: + relayList: + type: array + items: + type: object + $ref: '#/definitions/v1RelayInclusionList' + description: Inclusion list response message from the mev-commit node for a particular relay. + description: Inclusion list response message from the mev-commit node to the provider. + title: Inclusion list response v1PendingTxnsResponse: type: object properties: @@ -243,6 +280,21 @@ definitions: title: Pending transactions list required: - pendingTxns + v1RelayInclusionList: + type: object + properties: + relayAddress: + type: string + description: Hex encoding of the address of the relay. + pattern: '[a-fA-F0-9]{40}' + txHashes: + type: array + items: + type: string + pattern: '[a-fA-F0-9]{64}' + description: Hex string encoding of the hashes of the transactions included in the block. + description: Inclusion list response message from the mev-commit node for a particular relay. + title: Relay inclusion list v1StakeResponse: type: object example: diff --git a/pkg/blobinclusion/blobinclusion.go b/pkg/blobinclusion/blobinclusion.go new file mode 100644 index 00000000..70cccdae --- /dev/null +++ b/pkg/blobinclusion/blobinclusion.go @@ -0,0 +1,284 @@ +package blobinclusion + +import ( + "context" + "errors" + "fmt" + "io" + "log/slog" + "math/big" + "slices" + "strings" + "sync" + + lru "github.com/hashicorp/golang-lru/v2" + "github.com/primevprotocol/mev-commit/pkg/p2p" + "github.com/primevprotocol/mev-commit/pkg/p2p/msgpack" + "github.com/primevprotocol/mev-commit/pkg/topology" +) + +const ( + ProtocolName = "blobinclusion" + ProtocolVersion = "1.0.0" +) + +type BlobInclusion struct { + self p2p.Peer + topo Topology + streamer p2p.Streamer + logger *slog.Logger + inclusionLists *lru.Cache[int64, InclusionLists] + inclusionMu sync.Mutex +} + +type Topology interface { + GetPeers(topology.Query) []p2p.Peer + SubscribeOnConnected(func(p2p.Peer)) +} + +type InclusionLists struct { + RelayBlobs map[string][]BlobInclusionItem +} + +func New( + self p2p.Peer, + topo Topology, + streamer p2p.Streamer, + logger *slog.Logger, +) *BlobInclusion { + cache, err := lru.New[int64, InclusionLists](1000) // 1000 blocks + if err != nil { + // out of memory + panic(err) + } + p := &BlobInclusion{ + self: self, + topo: topo, + streamer: streamer, + logger: logger, + inclusionLists: cache, + } + topo.SubscribeOnConnected(func(peer p2p.Peer) { + if peer.Type == p2p.PeerTypeProvider { + go func() { + p.SendBlobs(context.Background(), peer) + }() + } + }) + return p +} + +func (p *BlobInclusion) Protocol() p2p.ProtocolSpec { + return p2p.ProtocolSpec{ + Name: ProtocolName, + Version: ProtocolVersion, + StreamSpecs: []p2p.StreamSpec{ + { + Name: "blob", + Handler: p.handleBlob, + }, + }, + } +} + +type BlobInclusionItem struct { + TxHash string + BlockNumber *big.Int +} + +type Ack struct { + Status bool +} + +func (p *BlobInclusion) sendBlobToProvider( + ctx context.Context, + provider p2p.Peer, + blobs ...BlobInclusionItem, +) (*Ack, error) { + + providerStream, err := p.streamer.NewStream( + ctx, + provider, + ProtocolName, + ProtocolVersion, + "blob", + ) + if err != nil { + return nil, fmt.Errorf("creating stream: %w", err) + } + + p.logger.Info("sending blob", "blobs", len(blobs), "provider", provider) + + r, w := msgpack.NewReaderWriter[Ack, BlobInclusionItem](providerStream) + for _, b := range blobs { + err = w.WriteMsg(ctx, &b) + if err != nil { + _ = providerStream.Reset() + return nil, fmt.Errorf("writing message: %w", err) + } + } + + _ = providerStream.CloseWrite() + + ack, err := r.ReadMsg(ctx) + if err != nil { + _ = providerStream.Reset() + return nil, fmt.Errorf("reading message: %w", err) + } + + _ = providerStream.Close() + p.logger.Info("received blob ack", "provider", provider, "ack", ack) + + return ack, nil +} + +func (p *BlobInclusion) addItem( + blockNumber int64, + blob BlobInclusionItem, +) { + p.inclusionMu.Lock() + defer p.inclusionMu.Unlock() + + currentList, ok := p.inclusionLists.Get(blockNumber) + if !ok { + currentList = InclusionLists{ + RelayBlobs: make(map[string][]BlobInclusionItem), + } + } + if currentBlobs, ok := currentList.RelayBlobs[p.self.EthAddress.Hex()]; ok { + if !slices.Contains(currentBlobs, blob) { + currentBlobs = append(currentBlobs, blob) + currentList.RelayBlobs[p.self.EthAddress.Hex()] = currentBlobs + } + } else { + currentList.RelayBlobs[p.self.EthAddress.Hex()] = []BlobInclusionItem{blob} + } + p.inclusionLists.Add(blockNumber, currentList) +} + +func (p *BlobInclusion) SendBlobs( + ctx context.Context, + provider p2p.Peer, +) { + for _, blockNumber := range p.inclusionLists.Keys() { + list, ok := p.inclusionLists.Get(blockNumber) + if !ok { + continue + } + blobList, ok := list.RelayBlobs[p.self.EthAddress.Hex()] + if !ok { + continue + } + _, err := p.sendBlobToProvider(ctx, provider, blobList...) + if err != nil { + p.logger.Error("sending blobs", "error", err) + } + } +} + +func (p *BlobInclusion) BroadcastBlob( + ctx context.Context, + txHash string, + blockNumber *big.Int, +) ([]p2p.Peer, error) { + providers := p.topo.GetPeers(topology.Query{Type: p2p.PeerTypeProvider}) + if len(providers) == 0 { + p.logger.Error("no providers available", "txHash", txHash) + return nil, errors.New("no providers available") + } + + blobHashes := strings.Split(txHash, ",") + blobs := make([]BlobInclusionItem, 0, len(blobHashes)) + for _, hash := range blobHashes { + b := BlobInclusionItem{ + TxHash: hash, + BlockNumber: blockNumber, + } + blobs = append(blobs, b) + p.addItem(blockNumber.Int64(), b) + } + + type peerAck struct { + peer p2p.Peer + ack *Ack + } + + ackC := make(chan peerAck, len(providers)) + + wg := sync.WaitGroup{} + for idx := range providers { + wg.Add(1) + go func(provider p2p.Peer) { + defer wg.Done() + + logger := p.logger.With("provider", provider, "blob", txHash) + + ack, err := p.sendBlobToProvider(ctx, provider, blobs...) + if err != nil { + logger.Error("sending blob", "error", err) + return + } + + select { + case ackC <- peerAck{peer: provider, ack: ack}: + case <-ctx.Done(): + logger.Error("context cancelled", "error", ctx.Err()) + return + } + }(providers[idx]) + } + + go func() { + wg.Wait() + close(ackC) + }() + + confirmedProviders := make([]p2p.Peer, 0, len(providers)) + for ack := range ackC { + if !ack.ack.Status { + continue + } + confirmedProviders = append(confirmedProviders, ack.peer) + } + + return confirmedProviders, nil +} + +var ErrInvalidNodeTypeForBlob = errors.New("invalid sender type for blob") + +func (p *BlobInclusion) handleBlob( + ctx context.Context, + peer p2p.Peer, + stream p2p.Stream, +) error { + if peer.Type != p2p.PeerTypeRelay { + return ErrInvalidNodeTypeForBlob + } + + r, w := msgpack.NewReaderWriter[BlobInclusionItem, Ack](stream) + + for { + blob, err := r.ReadMsg(ctx) + if err != nil { + if errors.Is(err, io.EOF) { + break + } + return err + } + + p.logger.Info("received blob", "blob", blob) + p.addItem(blob.BlockNumber.Int64(), *blob) + } + + return w.WriteMsg(ctx, &Ack{Status: true}) +} + +func (p *BlobInclusion) GetInclusionLists( + blockNumber int64, +) InclusionLists { + list, ok := p.inclusionLists.Get(blockNumber) + if !ok { + return InclusionLists{} + } + return list +} diff --git a/pkg/debugapi/debugapi.go b/pkg/debugapi/debugapi.go index 2fe2f099..2442f00e 100644 --- a/pkg/debugapi/debugapi.go +++ b/pkg/debugapi/debugapi.go @@ -53,6 +53,7 @@ func (d *debugapi) handleTopology(w http.ResponseWriter, r *http.Request) { logger := d.logger.With("method", "handleTopology") providers := d.topo.GetPeers(topology.Query{Type: p2p.PeerTypeProvider}) bidders := d.topo.GetPeers(topology.Query{Type: p2p.PeerTypeBidder}) + relays := d.topo.GetPeers(topology.Query{Type: p2p.PeerTypeRelay}) topoResp := topologyResponse{ Self: d.p2p.Self(), @@ -73,6 +74,13 @@ func (d *debugapi) handleTopology(w http.ResponseWriter, r *http.Request) { } topoResp.ConnectedPeers["bidders"] = connectedBidders } + if len(relays) > 0 { + connectedRelays := make([]common.Address, len(relays)) + for idx, relay := range relays { + connectedRelays[idx] = relay.EthAddress + } + topoResp.ConnectedPeers["relays"] = connectedRelays + } topoResp.BlockedPeers = d.p2p.BlockedPeers() diff --git a/pkg/node/node.go b/pkg/node/node.go index f5bb174b..0cbfec30 100644 --- a/pkg/node/node.go +++ b/pkg/node/node.go @@ -19,6 +19,7 @@ import ( bidderapiv1 "github.com/primevprotocol/mev-commit/gen/go/rpc/bidderapi/v1" providerapiv1 "github.com/primevprotocol/mev-commit/gen/go/rpc/providerapi/v1" "github.com/primevprotocol/mev-commit/pkg/apiserver" + "github.com/primevprotocol/mev-commit/pkg/blobinclusion" bidder_registrycontract "github.com/primevprotocol/mev-commit/pkg/contracts/bidder_registry" preconfcontract "github.com/primevprotocol/mev-commit/pkg/contracts/preconf" provider_registrycontract "github.com/primevprotocol/mev-commit/pkg/contracts/provider_registry" @@ -170,13 +171,24 @@ func NewNode(opts *Options) (*Node, error) { ) switch opts.PeerType { - case p2p.PeerTypeProvider.String(): + case p2p.PeerTypeProvider.String(), p2p.PeerTypeRelay.String(): + blobInclusionProto := blobinclusion.New( + p2p.Peer{Type: peerType, EthAddress: opts.KeySigner.GetAddress()}, + topo, + p2pSvc, + opts.Logger.With("component", "blobinclusion"), + ) + if peerType == p2p.PeerTypeProvider { + p2pSvc.AddProtocol(blobInclusionProto.Protocol()) + } + providerAPI := providerapi.NewService( opts.Logger.With("component", "providerapi"), providerRegistry, opts.KeySigner.GetAddress(), evmClient, validator, + blobInclusionProto, ) providerapiv1.RegisterProviderServer(grpcServer, providerAPI) bidProcessor = providerAPI @@ -191,12 +203,14 @@ func NewNode(opts *Options) (*Node, error) { ) preconfProto := preconfirmation.New( + peerType, topo, p2pSvc, preconfSigner, bidderRegistry, bidProcessor, commitmentDA, + blobInclusionProto, opts.Logger.With("component", "preconfirmation_protocol"), ) // Only register handler for provider @@ -205,12 +219,14 @@ func NewNode(opts *Options) (*Node, error) { case p2p.PeerTypeBidder.String(): preconfProto := preconfirmation.New( + peerType, topo, p2pSvc, preconfSigner, bidderRegistry, bidProcessor, commitmentDA, + nil, opts.Logger.With("component", "preconfirmation_protocol"), ) srv.RegisterMetricsCollectors(preconfProto.Metrics()...) @@ -284,7 +300,7 @@ func NewNode(opts *Options) (*Node, error) { ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second) defer cancel() switch opts.PeerType { - case p2p.PeerTypeProvider.String(): + case p2p.PeerTypeProvider.String(), p2p.PeerTypeRelay.String(): err := providerapiv1.RegisterProviderHandler(ctx, gatewayMux, grpcConn) if err != nil { opts.Logger.Error("failed to register provider handler", "err", err) diff --git a/pkg/p2p/p2p.go b/pkg/p2p/p2p.go index 4843657c..1b09b95c 100644 --- a/pkg/p2p/p2p.go +++ b/pkg/p2p/p2p.go @@ -18,6 +18,8 @@ const ( PeerTypeProvider // PeerTypeBidder is a bidder node PeerTypeBidder + // PeerTypeRelay is a relay node + PeerTypeRelay ) func (pt PeerType) String() string { @@ -28,6 +30,8 @@ func (pt PeerType) String() string { return "provider" case PeerTypeBidder: return "bidder" + case PeerTypeRelay: + return "relay" default: return "unknown" } @@ -41,6 +45,8 @@ func FromString(str string) PeerType { return PeerTypeProvider case "bidder": return PeerTypeBidder + case "relay": + return PeerTypeRelay default: return -1 } @@ -67,6 +73,9 @@ type Stream interface { Reset() error io.Closer + + CloseWrite() error + CloseRead() error } type Handler func(ctx context.Context, peer Peer, stream Stream) error diff --git a/pkg/p2p/testing/p2p.go b/pkg/p2p/testing/p2p.go index 99db115c..8cec6c6d 100644 --- a/pkg/p2p/testing/p2p.go +++ b/pkg/p2p/testing/p2p.go @@ -3,6 +3,7 @@ package p2ptest import ( "context" "errors" + "io" "github.com/primevprotocol/mev-commit/pkg/p2p" ) @@ -27,10 +28,17 @@ func newStream() *testStream { } func (s *testStream) ReadMsg() ([]byte, error) { - return <-s.in, nil + b, ok := <-s.in + if !ok { + return nil, io.EOF + } + return b, nil } func (s *testStream) WriteMsg(msg []byte) error { + if s.out == nil { + return io.EOF + } s.out <- msg return nil } @@ -45,8 +53,20 @@ func (s *testStream) Reset() error { return nil } +func (s *testStream) CloseWrite() error { + close(s.out) + s.out = nil + return nil +} + +func (s *testStream) CloseRead() error { + close(s.in) + return nil +} + func pipe(a, b *testStream) { go func() { + defer close(b.in) for { msg, ok := <-a.out if !ok { @@ -57,6 +77,7 @@ func pipe(a, b *testStream) { }() go func() { + defer close(a.in) for { msg, ok := <-b.out if !ok { diff --git a/pkg/preconfirmation/preconfirmation.go b/pkg/preconfirmation/preconfirmation.go index eabe4d5a..5287a698 100644 --- a/pkg/preconfirmation/preconfirmation.go +++ b/pkg/preconfirmation/preconfirmation.go @@ -23,14 +23,16 @@ const ( ) type Preconfirmation struct { - signer signer.Signer - topo Topology - streamer p2p.Streamer - us BidderStore - processer BidProcessor - commitmentDA preconfcontract.Interface - logger *slog.Logger - metrics *metrics + nodeType p2p.PeerType + signer signer.Signer + topo Topology + streamer p2p.Streamer + us BidderStore + processer BidProcessor + commitmentDA preconfcontract.Interface + blobBroadcaster BlobBroadcaster + logger *slog.Logger + metrics *metrics } type Topology interface { @@ -45,24 +47,32 @@ type BidProcessor interface { ProcessBid(context.Context, *signer.Bid) (chan providerapiv1.BidResponse_Status, error) } +type BlobBroadcaster interface { + BroadcastBlob(context.Context, string, *big.Int) ([]p2p.Peer, error) +} + func New( + nodeType p2p.PeerType, topo Topology, streamer p2p.Streamer, signer signer.Signer, us BidderStore, processor BidProcessor, commitmentDA preconfcontract.Interface, + blobBroadcaster BlobBroadcaster, logger *slog.Logger, ) *Preconfirmation { return &Preconfirmation{ - topo: topo, - streamer: streamer, - signer: signer, - us: us, - processer: processor, - commitmentDA: commitmentDA, - logger: logger, - metrics: newMetrics(), + nodeType: nodeType, + topo: topo, + streamer: streamer, + signer: signer, + us: us, + processer: processor, + commitmentDA: commitmentDA, + blobBroadcaster: blobBroadcaster, + logger: logger, + metrics: newMetrics(), } } @@ -88,6 +98,7 @@ func (p *Preconfirmation) SendBid( txHash string, bidAmt *big.Int, blockNumber *big.Int, + isBlob bool, ) (chan *signer.PreConfirmation, error) { signedBid, err := p.signer.ConstructSignedBid(txHash, bidAmt, blockNumber) if err != nil { @@ -96,7 +107,12 @@ func (p *Preconfirmation) SendBid( } p.logger.Info("constructed signed bid", "signedBid", signedBid) - providers := p.topo.GetPeers(topology.Query{Type: p2p.PeerTypeProvider}) + var providers []p2p.Peer + if isBlob { + providers = p.topo.GetPeers(topology.Query{Type: p2p.PeerTypeRelay}) + } else { + providers = p.topo.GetPeers(topology.Query{Type: p2p.PeerTypeProvider}) + } if len(providers) == 0 { p.logger.Error("no providers available", "txHash", txHash) return nil, errors.New("no providers available") @@ -151,7 +167,7 @@ func (p *Preconfirmation) SendBid( logger.Error("verifying provider signature", "error", err) return } - preConfirmation.ProviderAddress = *providerAddress + preConfirmation.CommitterAddress = *providerAddress logger.Info("received preconfirmation", "preConfirmation", preConfirmation) p.metrics.ReceivedPreconfsCount.Inc() @@ -185,6 +201,10 @@ func (p *Preconfirmation) handleBid( return ErrInvalidBidderTypeForBid } + if p.nodeType == p2p.PeerTypeRelay { + return p.handleBidRelay(ctx, peer, stream) + } + r, w := msgpack.NewReaderWriter[signer.Bid, signer.PreConfirmation](stream) bid, err := r.ReadMsg(ctx) if err != nil { @@ -242,3 +262,64 @@ func (p *Preconfirmation) handleBid( return nil } + +func (p *Preconfirmation) handleBidRelay( + ctx context.Context, + peer p2p.Peer, + stream p2p.Stream, +) error { + r, w := msgpack.NewReaderWriter[signer.Bid, signer.PreConfirmation](stream) + bid, err := r.ReadMsg(ctx) + if err != nil { + return err + } + + p.logger.Info("received blob bid", "bid", bid) + + ethAddress, err := p.signer.VerifyBid(bid) + if err != nil { + return err + } + + if p.us.CheckBidderAllowance(ctx, *ethAddress) { + // try to enqueue for 5 seconds + ctx, cancel := context.WithTimeout(ctx, 5*time.Second) + defer cancel() + + statusC, err := p.processer.ProcessBid(ctx, bid) + if err != nil { + return err + } + select { + case <-ctx.Done(): + return ctx.Err() + case status := <-statusC: + switch status { + case providerapiv1.BidResponse_STATUS_REJECTED: + return errors.New("bid rejected") + case providerapiv1.BidResponse_STATUS_ACCEPTED: + confirmedProviders, err := p.blobBroadcaster.BroadcastBlob(ctx, bid.TxHash, bid.BlockNumber) + if err != nil { + return err + } + preConfirmation, err := p.signer.ConstructPreConfirmation(bid) + if err != nil { + return err + } + for _, provider := range confirmedProviders { + preConfirmation.BlobCommitters = append(preConfirmation.BlobCommitters, provider.EthAddress) + } + p.logger.Info("sending blob preconfirmation", "preConfirmation", preConfirmation) + err = w.WriteMsg(ctx, preConfirmation) + if err != nil { + return err + } + return nil + } + } + } else { + p.logger.Error("bidder does not have enough allowance", "ethAddress", ethAddress) + return errors.New("bidder not allowed") + } + return nil +} diff --git a/pkg/preconfirmation/preconfirmation_test.go b/pkg/preconfirmation/preconfirmation_test.go index 19e11158..eb2c559f 100644 --- a/pkg/preconfirmation/preconfirmation_test.go +++ b/pkg/preconfirmation/preconfirmation_test.go @@ -1,6 +1,7 @@ package preconfirmation_test import ( + "bytes" "context" "io" "log/slog" @@ -83,6 +84,14 @@ func (t *testCommitmentDA) Close() error { return nil } +type testBlobBroadcaster struct { + committers []p2p.Peer +} + +func (t *testBlobBroadcaster) BroadcastBlob(_ context.Context, _ string, _ *big.Int) ([]p2p.Peer, error) { + return t.committers, nil +} + func newTestLogger(t *testing.T, w io.Writer) *slog.Logger { t.Helper() @@ -136,18 +145,20 @@ func TestPreconfBidSubmission(t *testing.T) { } p := preconfirmation.New( + server.Type, topo, svc, signer, us, proc, &testCommitmentDA{}, + &testBlobBroadcaster{}, newTestLogger(t, os.Stdout), ) svc.SetPeerHandler(server, p.Protocol()) - respC, err := p.SendBid(context.Background(), bid.TxHash, bid.BidAmt, bid.BlockNumber) + respC, err := p.SendBid(context.Background(), bid.TxHash, bid.BidAmt, bid.BlockNumber, false) if err != nil { t.Fatal(err) } @@ -163,3 +174,89 @@ func TestPreconfBidSubmission(t *testing.T) { } }) } + +func TestPreconfBlobBidSubmission(t *testing.T) { + t.Parallel() + + t.Run("ok", func(t *testing.T) { + client := p2p.Peer{ + EthAddress: common.HexToAddress("0x1"), + Type: p2p.PeerTypeBidder, + } + server := p2p.Peer{ + EthAddress: common.HexToAddress("0x2"), + Type: p2p.PeerTypeRelay, + } + committer := p2p.Peer{ + EthAddress: common.HexToAddress("0x3"), + Type: p2p.PeerTypeProvider, + } + + bid := &preconfsigner.Bid{ + TxHash: "test", + BidAmt: big.NewInt(10), + BlockNumber: big.NewInt(10), + Digest: []byte("test"), + Signature: []byte("test"), + } + + preConfirmation := &preconfsigner.PreConfirmation{ + Bid: *bid, + Digest: []byte("test"), + Signature: []byte("test"), + } + + svc := p2ptest.New( + &client, + ) + + topo := &testTopo{server} + us := &testBidderStore{} + proc := &testProcessor{ + status: providerapiv1.BidResponse_STATUS_ACCEPTED, + } + signer := &testSigner{ + bid: bid, + preConfirmation: preConfirmation, + bidSigner: common.HexToAddress("0x1"), + preConfirmationSigner: common.HexToAddress("0x2"), + } + + p := preconfirmation.New( + server.Type, + topo, + svc, + signer, + us, + proc, + &testCommitmentDA{}, + &testBlobBroadcaster{committers: []p2p.Peer{committer}}, + newTestLogger(t, os.Stdout), + ) + + svc.SetPeerHandler(server, p.Protocol()) + + respC, err := p.SendBid(context.Background(), bid.TxHash, bid.BidAmt, bid.BlockNumber, true) + if err != nil { + t.Fatal(err) + } + + commitment := <-respC + + if string(commitment.Digest) != "test" { + t.Fatalf("data hash is not equal to test") + } + + if string(commitment.Signature) != "test" { + t.Fatalf("preConfirmation signature is not equal to test") + } + + if len(commitment.BlobCommitters) != 1 { + t.Fatalf("committer length is not equal to 1") + } + + if !bytes.Equal(commitment.BlobCommitters[0].Bytes(), committer.EthAddress.Bytes()) { + t.Fatalf("committer address is not equal to 0x3") + } + }) +} diff --git a/pkg/rpc/bidder/service.go b/pkg/rpc/bidder/service.go index 525b7994..b9714e96 100644 --- a/pkg/rpc/bidder/service.go +++ b/pkg/rpc/bidder/service.go @@ -45,7 +45,7 @@ func NewService( } type PreconfSender interface { - SendBid(context.Context, string, *big.Int, *big.Int) (chan *preconfsigner.PreConfirmation, error) + SendBid(context.Context, string, *big.Int, *big.Int, bool) (chan *preconfsigner.PreConfirmation, error) } func (s *Service) SendBid( @@ -77,6 +77,7 @@ func (s *Service) SendBid( txnsStr, amtVal, big.NewInt(bid.BlockNumber), + bid.IsBlob, ) if err != nil { s.logger.Error("sending bid", "error", err) @@ -85,6 +86,14 @@ func (s *Service) SendBid( for resp := range respC { b := resp.Bid + var blobCommitters []string + if len(resp.BlobCommitters) > 0 { + blobCommitters := make([]string, 0, len(resp.BlobCommitters)) + for _, committer := range resp.BlobCommitters { + blobCommitters = append(blobCommitters, committer.String()) + } + } + err := srv.Send(&bidderapiv1.Commitment{ TxHashes: strings.Split(b.TxHash, ","), BidAmount: b.BidAmt.Int64(), @@ -93,7 +102,8 @@ func (s *Service) SendBid( ReceivedBidSignature: hex.EncodeToString(b.Signature), CommitmentDigest: hex.EncodeToString(resp.Digest), CommitmentSignature: hex.EncodeToString(resp.Signature), - ProviderAddress: resp.ProviderAddress.String(), + ProviderAddress: resp.CommitterAddress.String(), + BlobCommitters: blobCommitters, }) if err != nil { s.logger.Error("sending preConfirmation", "error", err) diff --git a/pkg/rpc/bidder/service_test.go b/pkg/rpc/bidder/service_test.go index 083dc8c8..a121588a 100644 --- a/pkg/rpc/bidder/service_test.go +++ b/pkg/rpc/bidder/service_test.go @@ -42,6 +42,7 @@ func (s *testSender) SendBid( txHex string, amount *big.Int, blockNum *big.Int, + _ bool, ) (chan *preconfsigner.PreConfirmation, error) { s.bids = append(s.bids, bid{ txHex: txHex, @@ -59,9 +60,9 @@ func (s *testSender) SendBid( Digest: []byte("digest"), Signature: []byte("signature"), }, - Digest: []byte("digest"), - Signature: []byte("signature"), - ProviderAddress: common.HexToAddress(fmt.Sprintf("%x", i)), + Digest: []byte("digest"), + Signature: []byte("signature"), + CommitterAddress: common.HexToAddress(fmt.Sprintf("%x", i)), } } diff --git a/pkg/rpc/provider/service.go b/pkg/rpc/provider/service.go index abb994cd..a666ede4 100644 --- a/pkg/rpc/provider/service.go +++ b/pkg/rpc/provider/service.go @@ -13,6 +13,7 @@ import ( "github.com/bufbuild/protovalidate-go" "github.com/ethereum/go-ethereum/common" providerapiv1 "github.com/primevprotocol/mev-commit/gen/go/rpc/providerapi/v1" + "github.com/primevprotocol/mev-commit/pkg/blobinclusion" registrycontract "github.com/primevprotocol/mev-commit/pkg/contracts/provider_registry" "github.com/primevprotocol/mev-commit/pkg/evmclient" "github.com/primevprotocol/mev-commit/pkg/signer/preconfsigner" @@ -31,6 +32,7 @@ type Service struct { evmClient EvmClient metrics *metrics validator *protovalidate.Validator + inclusionGetter InclusionListGetter } type EvmClient interface { @@ -38,12 +40,17 @@ type EvmClient interface { CancelTx(ctx context.Context, txHash common.Hash) (common.Hash, error) } +type InclusionListGetter interface { + GetInclusionLists(blockNumber int64) blobinclusion.InclusionLists +} + func NewService( logger *slog.Logger, registryContract registrycontract.Interface, owner common.Address, e EvmClient, validator *protovalidate.Validator, + inclusionGetter InclusionListGetter, ) *Service { return &Service{ receiver: make(chan *providerapiv1.Bid), @@ -54,6 +61,7 @@ func NewService( evmClient: e, metrics: newMetrics(), validator: validator, + inclusionGetter: inclusionGetter, } } @@ -241,3 +249,49 @@ func (s *Service) CancelTransaction( return &providerapiv1.CancelResponse{TxHash: cHash.Hex()}, nil } + +func (s *Service) GetInclusionLists( + ctx context.Context, + req *providerapiv1.InclusionListReq, +) (*providerapiv1.InclusionListResp, error) { + if s.inclusionGetter == nil { + return nil, status.Error(codes.Unimplemented, "inclusion list getter not set") + } + + lists := s.inclusionGetter.GetInclusionLists(req.BlockNumber) + + if req.RelayAddress != "" { + relayAddress := common.HexToAddress(req.RelayAddress) + for k, v := range lists.RelayBlobs { + if k == relayAddress.Hex() { + txHashes := make([]string, 0, len(v)) + for _, b := range v { + txHashes = append(txHashes, b.TxHash) + } + return &providerapiv1.InclusionListResp{ + RelayList: []*providerapiv1.RelayInclusionList{ + { + RelayAddress: relayAddress.Hex(), + TxHashes: txHashes, + }, + }, + }, nil + } + } + return nil, status.Errorf(codes.NotFound, "relay address not found") + } + + listsMsg := make([]*providerapiv1.RelayInclusionList, 0, len(lists.RelayBlobs)) + for k, v := range lists.RelayBlobs { + txHashes := make([]string, 0, len(v)) + for _, b := range v { + txHashes = append(txHashes, b.TxHash) + } + listsMsg = append(listsMsg, &providerapiv1.RelayInclusionList{ + RelayAddress: k, + TxHashes: txHashes, + }) + } + + return &providerapiv1.InclusionListResp{RelayList: listsMsg}, nil +} diff --git a/pkg/rpc/provider/service_test.go b/pkg/rpc/provider/service_test.go index 0796bdc4..74e38175 100644 --- a/pkg/rpc/provider/service_test.go +++ b/pkg/rpc/provider/service_test.go @@ -79,6 +79,7 @@ func startServer(t *testing.T, evm *testEVMClient) (providerapiv1.ProviderClient owner, evm, validator, + nil, ) baseServer := grpc.NewServer() diff --git a/pkg/signer/preconfsigner/signer.go b/pkg/signer/preconfsigner/signer.go index bb5e8f41..e98c235c 100644 --- a/pkg/signer/preconfsigner/signer.go +++ b/pkg/signer/preconfsigner/signer.go @@ -47,13 +47,15 @@ type PreConfirmation struct { Digest []byte `json:"digest"` // TODO(@ckaritk): name better Signature []byte `json:"signature"` - ProviderAddress common.Address `json:"provider_address"` + CommitterAddress common.Address `json:"committer_address"` + BlobCommitters []common.Address `json:"blob_committers"` } func (p PreConfirmation) String() string { return fmt.Sprintf( - "Bid: %s, Digest: %s, Signature: %s", + "Bid: %s, Digest: %s, Signature: %s, CommitterAddress: %s, BlobCommitters: %s", p.Bid, hex.EncodeToString(p.Digest), hex.EncodeToString(p.Signature), + p.CommitterAddress, p.BlobCommitters, ) } diff --git a/pkg/topology/topology.go b/pkg/topology/topology.go index 4c329c2d..fbafb6be 100644 --- a/pkg/topology/topology.go +++ b/pkg/topology/topology.go @@ -19,11 +19,14 @@ type Announcer interface { type Topology struct { mu sync.RWMutex + subMu sync.RWMutex providers map[common.Address]p2p.Peer bidders map[common.Address]p2p.Peer + relays map[common.Address]p2p.Peer logger *slog.Logger addressbook p2p.Addressbook announcer Announcer + subscribers []func(p2p.Peer) metrics *metrics } @@ -31,6 +34,7 @@ func New(a p2p.Addressbook, logger *slog.Logger) *Topology { return &Topology{ providers: make(map[common.Address]p2p.Peer), bidders: make(map[common.Address]p2p.Peer), + relays: make(map[common.Address]p2p.Peer), addressbook: a, logger: logger, metrics: newMetrics(), @@ -41,12 +45,32 @@ func (t *Topology) SetAnnouncer(a Announcer) { t.announcer = a } +func (t *Topology) SubscribeOnConnected(f func(p2p.Peer)) { + t.subMu.Lock() + defer t.subMu.Unlock() + + t.subscribers = append(t.subscribers, f) +} + func (t *Topology) Connected(p p2p.Peer) { t.add(p) + defer func() { + t.subMu.RLock() + defer t.subMu.RUnlock() + + for _, f := range t.subscribers { + f(p) + } + }() + if t.announcer != nil { // Whether its a provider or bidder, we want to broadcast the provider peers peersToBroadcast := t.GetPeers(Query{Type: p2p.PeerTypeProvider}) + if p.Type == p2p.PeerTypeBidder { + // If the peer is a bidder, we want to broadcast the relays + peersToBroadcast = append(peersToBroadcast, t.GetPeers(Query{Type: p2p.PeerTypeRelay})...) + } var underlays []p2p.PeerInfo for _, peer := range peersToBroadcast { if peer.EthAddress == p.EthAddress { @@ -73,7 +97,10 @@ func (t *Topology) Connected(p p2p.Peer) { if p.Type == p2p.PeerTypeProvider { t.logger.Info("provider connected broadcasting to previous bidders", "peer", p) // If the peer is a provider, we want to broadcast to the bidder peers - peersToBroadcastTo := t.GetPeers(Query{Type: p2p.PeerTypeBidder}) + bidders := t.GetPeers(Query{Type: p2p.PeerTypeBidder}) + relays := t.GetPeers(Query{Type: p2p.PeerTypeRelay}) + peersToBroadcastTo := append(bidders, relays...) + providerUnderlay, err := t.addressbook.GetPeerInfo(p) if err != nil { t.logger.Error("failed to get peer info", "err", err, "peer", p) @@ -105,6 +132,8 @@ func (t *Topology) add(p p2p.Peer) { case p2p.PeerTypeBidder: t.bidders[p.EthAddress] = p t.metrics.ConnectedBiddersCount.Inc() + case p2p.PeerTypeRelay: + t.relays[p.EthAddress] = p } } @@ -121,6 +150,8 @@ func (t *Topology) Disconnected(p p2p.Peer) { case p2p.PeerTypeBidder: delete(t.bidders, p.EthAddress) t.metrics.ConnectedBiddersCount.Dec() + case p2p.PeerTypeRelay: + delete(t.relays, p.EthAddress) } } @@ -145,6 +176,10 @@ func (t *Topology) GetPeers(q Query) []p2p.Peer { for _, p := range t.bidders { peers = append(peers, p) } + case p2p.PeerTypeRelay: + for _, p := range t.relays { + peers = append(peers, p) + } } return peers @@ -162,5 +197,9 @@ func (t *Topology) IsConnected(addr common.Address) bool { return true } + if _, ok := t.relays[addr]; ok { + return true + } + return false } diff --git a/rpc/bidderapi/v1/bidderapi.proto b/rpc/bidderapi/v1/bidderapi.proto index ed5cf417..263f7019 100644 --- a/rpc/bidderapi/v1/bidderapi.proto +++ b/rpc/bidderapi/v1/bidderapi.proto @@ -113,6 +113,9 @@ message Bid { message: "block_number must be a valid integer.", expression: "uint(this) > 0" }]; + bool is_blob = 4 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { + description: "Boolean flag to indicate if the bid is for a blob." + }]; }; message Commitment { @@ -141,4 +144,7 @@ message Commitment { string provider_address = 8 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { description: "Hex string encoding of the address of the provider that signed the commitment signature." }]; + repeated string blob_committers = 9 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { + description: "Hex string encoding of the addresses of the committers that immediately the blob commitment." + }]; }; diff --git a/rpc/providerapi/v1/providerapi.proto b/rpc/providerapi/v1/providerapi.proto index 5a8082e2..53e0085e 100644 --- a/rpc/providerapi/v1/providerapi.proto +++ b/rpc/providerapi/v1/providerapi.proto @@ -37,6 +37,11 @@ service Provider { body: "*" }; } + // GetBlockInclusionList + // + rpc GetBlockInclusionList(InclusionListReq) returns (InclusionListResp) { + option (google.api.http) = {get: "/v1/provider/get_block_inclusion_list/{block_number}"}; + } // RegisterStake // // RegisterStake is called by the provider to register its stake in the provider registry. @@ -228,3 +233,54 @@ message CancelResponse { pattern: "[a-fA-F0-9]{64}" }]; }; + +message InclusionListReq { + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema) = { + json_schema: { + title: "Inclusion list request" + description: "Inclusion list request message from the provider to the mev-commit node." + required: ["blockNumber"] + } + example: "{\"blockNumber\": 123456, \"relayAddress\": \"91a89B633194c0D86C539A1A5B14DCCacfD47094\"}" + }; + int64 block_number = 1 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { + description: "Block number for which the provider wants to get the inclusion list." + }, (buf.validate.field).int64.gt = 0]; + string relay_address = 2 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { + description: "Hex encoding of the address of the relay." + pattern: "[a-fA-F0-9]{40}" + }]; +}; + +message InclusionListResp { + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema) = { + json_schema: { + title: "Inclusion list response" + description: "Inclusion list response message from the mev-commit node to the provider." + } + }; + repeated RelayInclusionList relay_list = 1 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { + description: "Inclusion list response message from the mev-commit node for a particular relay." + }]; +}; + +message RelayInclusionList { + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema) = { + json_schema: { + title: "Relay inclusion list" + description: "Inclusion list response message from the mev-commit node for a particular relay." + } + }; + string relay_address = 1 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { + description: "Hex encoding of the address of the relay." + pattern: "[a-fA-F0-9]{40}" + }]; + repeated string tx_hashes = 2 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { + description: "Hex string encoding of the hashes of the transactions included in the block." + pattern: "[a-fA-F0-9]{64}" + }, (buf.validate.field).cel = { + id: "tx_hashes", + message: "tx_hashes must be a valid array of transaction hashes.", + expression: "this.all(r, r.matches('^[a-fA-F0-9]{64}$')) && size(this) > 0" + }]; +} From c4a93ef7ab2dcf43501e6295b467739245e9b541 Mon Sep 17 00:00:00 2001 From: Alok Date: Sat, 16 Mar 2024 13:45:15 +0530 Subject: [PATCH 02/12] fix: lint --- pkg/rpc/bidder/service.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/rpc/bidder/service.go b/pkg/rpc/bidder/service.go index b9714e96..a504022d 100644 --- a/pkg/rpc/bidder/service.go +++ b/pkg/rpc/bidder/service.go @@ -88,7 +88,7 @@ func (s *Service) SendBid( b := resp.Bid var blobCommitters []string if len(resp.BlobCommitters) > 0 { - blobCommitters := make([]string, 0, len(resp.BlobCommitters)) + blobCommitters = make([]string, 0, len(resp.BlobCommitters)) for _, committer := range resp.BlobCommitters { blobCommitters = append(blobCommitters, committer.String()) } From 31552ed8926981408387d5d9bb6f9f4b5510162b Mon Sep 17 00:00:00 2001 From: Alok Date: Sat, 16 Mar 2024 16:13:51 +0530 Subject: [PATCH 03/12] chore: deploy test --- integration-compose.yml | 71 ++++++++++++++++++++++++++- integrationtest/foundry/addresses.txt | 1 + integrationtest/keys/relay1 | 1 + mev-commit-cli.sh | 13 ++++- 4 files changed, 84 insertions(+), 2 deletions(-) create mode 100644 integrationtest/keys/relay1 diff --git a/integration-compose.yml b/integration-compose.yml index f4cc688e..d2d99aa3 100644 --- a/integration-compose.yml +++ b/integration-compose.yml @@ -23,6 +23,7 @@ services: profiles: - minimal-setup - integration-test + - hackathon labels: com.datadoghq.ad.check_names: '["openmetrics"]' com.datadoghq.ad.init_configs: '[{}]' @@ -60,6 +61,7 @@ services: profiles: - minimal-setup - integration-test + - hackathon labels: com.datadoghq.ad.check_names: '["openmetrics"]' com.datadoghq.ad.init_configs: '[{}]' @@ -92,6 +94,7 @@ services: profiles: - minimal-setup - integration-test + - hackathon labels: com.datadoghq.ad.check_names: '["openmetrics"]' com.datadoghq.ad.init_configs: '[{}]' @@ -236,6 +239,71 @@ services: } ] + relay-1: + build: + context: . + dockerfile: ./integrationtest/Dockerfile + args: + node_type: relay + service_name: relay1 + restart: always + depends_on: + - bootnode + volumes: + - ./integrationtest/keys/relay1:/key + networks: + - primev_net + ports: + - "8083:13523" + env_file: + - integrationtest/.env + profiles: + - hackathon + labels: + com.datadoghq.ad.check_names: '["openmetrics"]' + com.datadoghq.ad.init_configs: '[{}]' + com.datadoghq.ad.instances: | + [ + { + "openmetrics_endpoint": "http://%%host%%:13523/metrics", + "namespace": "integrationtest", + "metrics": [ + "mev_commit*", + "go*", + "libp2p*" + ] + } + ] + + relay-emulator-1: + build: + context: . + dockerfile: ./integrationtest/provider/Dockerfile + restart: always + depends_on: + - relay-1 + environment: + - PROVIDER_IP=relay-1:13524 + networks: + - primev_net + ports: + - "8084:8080" + profiles: + - hackathon + labels: + com.datadoghq.ad.check_names: '["openmetrics"]' + com.datadoghq.ad.init_configs: '[{}]' + com.datadoghq.ad.instances: | + [ + { + "openmetrics_endpoint": "http://%%host%%:8080/metrics", + "namespace": "integrationtest", + "metrics": [ + "mev_commit*" + ] + } + ] + bidder-1: build: context: . @@ -257,6 +325,7 @@ services: profiles: - minimal-setup - integration-test + - hackathon labels: com.datadoghq.ad.check_names: '["openmetrics"]' com.datadoghq.ad.init_configs: '[{}]' @@ -606,4 +675,4 @@ services: networks: primev_net: - external: true \ No newline at end of file + external: true diff --git a/integrationtest/foundry/addresses.txt b/integrationtest/foundry/addresses.txt index c79ce4ed..7e5d4635 100644 --- a/integrationtest/foundry/addresses.txt +++ b/integrationtest/foundry/addresses.txt @@ -6,3 +6,4 @@ 0x93DC0b6A7F454Dd10373f1BdA7Fe80BB549EE2F9 0x426184Df456375BFfE7f53FdaF5cB48DeB3bbBE9 0x41cC09BD5a97F22045fe433f1AF0B07d0AB28F58 +0xc98F7cE77D1780c4f7913413E109f7C4B30BcF22 diff --git a/integrationtest/keys/relay1 b/integrationtest/keys/relay1 new file mode 100644 index 00000000..d5fa14f3 --- /dev/null +++ b/integrationtest/keys/relay1 @@ -0,0 +1 @@ +7e11eafb2e7c34201cdf4ade12e738ab95e4b8f615399a5ce8c2bcb4ebaf5510 \ No newline at end of file diff --git a/mev-commit-cli.sh b/mev-commit-cli.sh index 962bc42e..3bda7eb2 100755 --- a/mev-commit-cli.sh +++ b/mev-commit-cli.sh @@ -19,7 +19,7 @@ ORACLE_PATH="$PRIMEV_DIR/$ORACLE_REPO_NAME" BRIDGE_PATH="$PRIMEV_DIR/$BRIDGE_REPO_NAME" DOCKER_NETWORK_NAME="primev_net" -MEV_COMMIT_BRANCH="main" +MEV_COMMIT_BRANCH="hackathon.0" GETH_POA_BRANCH="master" CONTRACTS_BRANCH="main" ORACLE_BRANCH="main" @@ -122,6 +122,11 @@ start_mev_commit_minimal() { docker compose --profile minimal-setup -f "$MEV_COMMIT_PATH/integration-compose.yml" up --build -d } +start_mev_commit_hackathon() { + echo "Starting MEV-Commit..." + docker compose --profile hackathon -f "$MEV_COMMIT_PATH/integration-compose.yml" up --build -d +} + start_mev_commit_e2e() { local datadog_key="" local sepolia_key="" @@ -429,6 +434,12 @@ start_service() { deploy_contracts "$rpc_url" start_mev_commit_minimal ;; + "hackathon") + initialize_environment + start_settlement_layer "$datadog_key" + deploy_contracts "$rpc_url" + start_mev_commit_hackathon + ;; "local_l1") start_local_l1 ;; From 8b1461ec4bb04d1583a60a242e74e8af2e58a70f Mon Sep 17 00:00:00 2001 From: Alok Date: Sat, 16 Mar 2024 16:24:00 +0530 Subject: [PATCH 04/12] chore: deploy test --- integrationtest/.env | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/integrationtest/.env b/integrationtest/.env index 9dcd01d3..65303591 100644 --- a/integrationtest/.env +++ b/integrationtest/.env @@ -1,6 +1,6 @@ -BIDDER_REGISTRY=0x5340b92E261141D6B4D0DC6F847667E5e4A63544 -PROVIDER_REGISTRY=0xeA73E67c2E34C4E02A2f3c5D416F59B76e7617fC -PRECONF_CONTRACT=0x451656c1E7eDf82397EBE04f38819c9970AA3658 +BIDDER_REGISTRY=0x02CcEcB19c6D7EFe583C8b97022cB4b4C0B65608 +PROVIDER_REGISTRY=0x070cE6161AD79a3BC7aEa222FdfC6AD171Ca83F3 +PRECONF_CONTRACT=0x4DfF34f74aE5C48a5050eb54e7cEDAb9DEF03715 RPC_URL=http://sl-bootnode:8545 PRIVATE_KEY=ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 L1_RPC_URL=https://sepolia.infura.io/v3/09eaedaa8dda43bc89e0ccd9c6991c51 From 066d8ac7ad4e624209244adc859dd53ba9ebc260 Mon Sep 17 00:00:00 2001 From: Alok Date: Sat, 16 Mar 2024 16:29:25 +0530 Subject: [PATCH 05/12] chore: deploy test --- integration-compose.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/integration-compose.yml b/integration-compose.yml index d2d99aa3..a05bfd54 100644 --- a/integration-compose.yml +++ b/integration-compose.yml @@ -652,6 +652,7 @@ services: profiles: - minimal-setup - integration-test + - hackathon datadog-agent: image: gcr.io/datadoghq/agent:latest From b310a7ca435f6a55de1ef31d2fb6662aed33f6c5 Mon Sep 17 00:00:00 2001 From: Alok Date: Sat, 16 Mar 2024 16:35:04 +0530 Subject: [PATCH 06/12] chore: deploy test --- integrationtest/config/relay.yaml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 integrationtest/config/relay.yaml diff --git a/integrationtest/config/relay.yaml b/integrationtest/config/relay.yaml new file mode 100644 index 00000000..e7c6d55e --- /dev/null +++ b/integrationtest/config/relay.yaml @@ -0,0 +1,16 @@ +priv-key-file: /key +peer-type: relay +p2p-port: 13522 +http-port: 13523 +rpc-port: 13524 +secret: hello +log-fmt: json +log-level: debug +server-tls-certificate: /server-cert.pem +server-tls-private-key: /server-key.pem +preconf-contract: +bidder-registry-contract: +provider-registry-contract: +settlement-rpc-endpoint: +bootnodes: + - /ip4/172.29.18.2/tcp/13522/p2p/16Uiu2HAmLYUvthfDCewNMdfPhrVefBbsfaPL22fWWfC2zuoh5SpV From 46048434fb0dad188f8b06952fd2048b5e6b2395 Mon Sep 17 00:00:00 2001 From: Alok Date: Sat, 16 Mar 2024 16:44:32 +0530 Subject: [PATCH 07/12] chore: deploy test --- cmd/main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/main.go b/cmd/main.go index ac9e30c7..dc4991ee 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -81,7 +81,7 @@ var ( Usage: "peer type to use, options are 'bidder', 'provider' or 'bootnode'", EnvVars: []string{"MEV_COMMIT_PEER_TYPE"}, Value: "bidder", - Action: stringInCheck("peer-type", []string{"bidder", "provider", "bootnode"}), + Action: stringInCheck("peer-type", []string{"bidder", "provider", "bootnode", "relay"}), }) optionP2PPort = altsrc.NewIntFlag(&cli.IntFlag{ From 47e93b86cb5bb1d314111abd51036af0b7af7370 Mon Sep 17 00:00:00 2001 From: Alok Date: Sat, 16 Mar 2024 17:01:27 +0530 Subject: [PATCH 08/12] chore: deploy test --- integrationtest/config/bidder.yaml | 4 ++-- integrationtest/config/provider.yaml | 4 ++-- integrationtest/config/relay.yaml | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/integrationtest/config/bidder.yaml b/integrationtest/config/bidder.yaml index 70994abf..c7d6506c 100644 --- a/integrationtest/config/bidder.yaml +++ b/integrationtest/config/bidder.yaml @@ -6,8 +6,8 @@ rpc-port: 13524 secret: hello log-fmt: json log-level: debug -server-tls-certificate: /server-cert.pem -server-tls-private-key: /server-key.pem +# server-tls-certificate: /server-cert.pem +# server-tls-private-key: /server-key.pem bidder-registry-contract: provider-registry-contract: settlement-rpc-endpoint: diff --git a/integrationtest/config/provider.yaml b/integrationtest/config/provider.yaml index 56fcb6ba..489ddfd0 100644 --- a/integrationtest/config/provider.yaml +++ b/integrationtest/config/provider.yaml @@ -6,8 +6,8 @@ rpc-port: 13524 secret: hello log-fmt: json log-level: debug -server-tls-certificate: /server-cert.pem -server-tls-private-key: /server-key.pem +# server-tls-certificate: /server-cert.pem +# server-tls-private-key: /server-key.pem preconf-contract: bidder-registry-contract: provider-registry-contract: diff --git a/integrationtest/config/relay.yaml b/integrationtest/config/relay.yaml index e7c6d55e..b95711dc 100644 --- a/integrationtest/config/relay.yaml +++ b/integrationtest/config/relay.yaml @@ -6,8 +6,8 @@ rpc-port: 13524 secret: hello log-fmt: json log-level: debug -server-tls-certificate: /server-cert.pem -server-tls-private-key: /server-key.pem +# server-tls-certificate: /server-cert.pem +# server-tls-private-key: /server-key.pem preconf-contract: bidder-registry-contract: provider-registry-contract: From dff18287e717068ec9f88c43930d45ad0c4f69f6 Mon Sep 17 00:00:00 2001 From: Alok Date: Sat, 16 Mar 2024 17:21:03 +0530 Subject: [PATCH 09/12] chore: deploy test --- integrationtest/config/bootnode.yaml | 4 ++-- pkg/rpc/provider/service.go | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/integrationtest/config/bootnode.yaml b/integrationtest/config/bootnode.yaml index a04da47b..eeac2a7d 100644 --- a/integrationtest/config/bootnode.yaml +++ b/integrationtest/config/bootnode.yaml @@ -6,8 +6,8 @@ rpc-port: 13524 secret: hello log-fmt: json log-level: debug -server-tls-certificate: /server-cert.pem -server-tls-private-key: /server-key.pem +# server-tls-certificate: /server-cert.pem +# server-tls-private-key: /server-key.pem bidder-registry-contract: provider-registry-contract: settlement-rpc-endpoint: diff --git a/pkg/rpc/provider/service.go b/pkg/rpc/provider/service.go index a666ede4..b7f5ef0e 100644 --- a/pkg/rpc/provider/service.go +++ b/pkg/rpc/provider/service.go @@ -250,7 +250,7 @@ func (s *Service) CancelTransaction( return &providerapiv1.CancelResponse{TxHash: cHash.Hex()}, nil } -func (s *Service) GetInclusionLists( +func (s *Service) GetBlockInclusionList( ctx context.Context, req *providerapiv1.InclusionListReq, ) (*providerapiv1.InclusionListResp, error) { From 597bdf7f152849664900ad5f7cc309680edc694d Mon Sep 17 00:00:00 2001 From: Kartik Chopra Date: Sat, 16 Mar 2024 16:29:58 +0000 Subject: [PATCH 10/12] WIP/ --- mev-commit-cli.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mev-commit-cli.sh b/mev-commit-cli.sh index 3bda7eb2..74f1da2e 100755 --- a/mev-commit-cli.sh +++ b/mev-commit-cli.sh @@ -22,7 +22,7 @@ DOCKER_NETWORK_NAME="primev_net" MEV_COMMIT_BRANCH="hackathon.0" GETH_POA_BRANCH="master" CONTRACTS_BRANCH="main" -ORACLE_BRANCH="main" +ORACLE_BRANCH="hackathon.0" BRIDGE_BRANCH="main" # Default values for optional arguments From 84aa0ee20d813f75f15f1b8ca28193a3eabfef43 Mon Sep 17 00:00:00 2001 From: Kartik Chopra Date: Sat, 16 Mar 2024 16:46:58 +0000 Subject: [PATCH 11/12] WIP. --- mev-commit-cli.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mev-commit-cli.sh b/mev-commit-cli.sh index 74f1da2e..04d9156e 100755 --- a/mev-commit-cli.sh +++ b/mev-commit-cli.sh @@ -21,7 +21,7 @@ BRIDGE_PATH="$PRIMEV_DIR/$BRIDGE_REPO_NAME" DOCKER_NETWORK_NAME="primev_net" MEV_COMMIT_BRANCH="hackathon.0" GETH_POA_BRANCH="master" -CONTRACTS_BRANCH="main" +CONTRACTS_BRANCH="hackathon.0" ORACLE_BRANCH="hackathon.0" BRIDGE_BRANCH="main" From 6b7ecf5d7fde62a3d422a11951e57dbd205ec1c5 Mon Sep 17 00:00:00 2001 From: Kartik Chopra Date: Sat, 16 Mar 2024 16:49:50 +0000 Subject: [PATCH 12/12] Update to old contracts code. --- integrationtest/.env | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/integrationtest/.env b/integrationtest/.env index 65303591..5172f0f1 100644 --- a/integrationtest/.env +++ b/integrationtest/.env @@ -1,6 +1,6 @@ -BIDDER_REGISTRY=0x02CcEcB19c6D7EFe583C8b97022cB4b4C0B65608 -PROVIDER_REGISTRY=0x070cE6161AD79a3BC7aEa222FdfC6AD171Ca83F3 -PRECONF_CONTRACT=0x4DfF34f74aE5C48a5050eb54e7cEDAb9DEF03715 +BIDDER_REGISTRY=0xa86a41b57Fb73f9118F84847574517258d29eAD0 +PROVIDER_REGISTRY=0x5960774AD41D03DAB4916a30bD2190f8b3b3b4b2 +PRECONF_CONTRACT=0x7D1a4707e573D260581f3AB3f90f697Ab03fC6Dd RPC_URL=http://sl-bootnode:8545 PRIVATE_KEY=ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 -L1_RPC_URL=https://sepolia.infura.io/v3/09eaedaa8dda43bc89e0ccd9c6991c51 +L1_RPC_URL=https://sepolia.infura.io/v3/09eaedaa8dda43bc89e0ccd9c6991c51 \ No newline at end of file