diff --git a/da/executor/README.md b/da/executor/README.md new file mode 100644 index 0000000..30974de --- /dev/null +++ b/da/executor/README.md @@ -0,0 +1,9 @@ +# Zone Executor to Nomos DA communication + +## Protobuf + +To generate the updated protobuf serializer from `dispersal.proto` run: + +``` bash +protoc --python_out=. dispersal.proto +``` diff --git a/da/executor/dispersal.proto b/da/executor/dispersal.proto index e4af369..de6a0fe 100644 --- a/da/executor/dispersal.proto +++ b/da/executor/dispersal.proto @@ -2,22 +2,52 @@ syntax = "proto3"; package dispersal; -message DispersalReq { +message Blob { bytes blob_id = 1; bytes data = 2; } +message BlobId { + bytes blob_id = 1; +} + +message Error { + string description = 1; +} + +message DispersalErr { + oneof message_type { + Error chunk_size_err = 1; + Error verification_err = 2; + } +} + +message DispersalReq { + Blob blob = 1; +} + message DispersalRes { - int32 blob_id = 1; + oneof message_type { + BlobId blob_id = 1; + DispersalErr err = 2; + } +} + +message SampleErr { + oneof message_type { + Error not_found = 1; + } } message SampleReq { - int32 blob_id = 1; + BlobId blob_id = 1; } message SampleRes { - int32 blob_id = 1; - bytes data = 2; + oneof message_type { + Blob blob = 1; + SampleErr err = 2; + } } message DispersalMessage { @@ -28,4 +58,3 @@ message DispersalMessage { SampleRes sample_res = 4; } } - diff --git a/da/executor/dispersal_pb2.py b/da/executor/dispersal_pb2.py index e696ea9..055b86f 100644 --- a/da/executor/dispersal_pb2.py +++ b/da/executor/dispersal_pb2.py @@ -24,21 +24,31 @@ _sym_db = _symbol_database.Default() -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0f\x64ispersal.proto\x12\tdispersal\"-\n\x0c\x44ispersalReq\x12\x0f\n\x07\x62lob_id\x18\x01 \x01(\x0c\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\"\x1f\n\x0c\x44ispersalRes\x12\x0f\n\x07\x62lob_id\x18\x01 \x01(\x05\"\x1c\n\tSampleReq\x12\x0f\n\x07\x62lob_id\x18\x01 \x01(\x05\"*\n\tSampleRes\x12\x0f\n\x07\x62lob_id\x18\x01 \x01(\x05\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\"\xde\x01\n\x10\x44ispersalMessage\x12\x30\n\rdispersal_req\x18\x01 \x01(\x0b\x32\x17.dispersal.DispersalReqH\x00\x12\x30\n\rdispersal_res\x18\x02 \x01(\x0b\x32\x17.dispersal.DispersalResH\x00\x12*\n\nsample_req\x18\x03 \x01(\x0b\x32\x14.dispersal.SampleReqH\x00\x12*\n\nsample_res\x18\x04 \x01(\x0b\x32\x14.dispersal.SampleResH\x00\x42\x0e\n\x0cmessage_typeb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0f\x64ispersal.proto\x12\tdispersal\"%\n\x04\x42lob\x12\x0f\n\x07\x62lob_id\x18\x01 \x01(\x0c\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\"\x19\n\x06\x42lobId\x12\x0f\n\x07\x62lob_id\x18\x01 \x01(\x0c\"\x1c\n\x05\x45rror\x12\x13\n\x0b\x64\x65scription\x18\x01 \x01(\t\"x\n\x0c\x44ispersalErr\x12*\n\x0e\x63hunk_size_err\x18\x01 \x01(\x0b\x32\x10.dispersal.ErrorH\x00\x12,\n\x10verification_err\x18\x02 \x01(\x0b\x32\x10.dispersal.ErrorH\x00\x42\x0e\n\x0cmessage_type\"-\n\x0c\x44ispersalReq\x12\x1d\n\x04\x62lob\x18\x01 \x01(\x0b\x32\x0f.dispersal.Blob\"l\n\x0c\x44ispersalRes\x12$\n\x07\x62lob_id\x18\x01 \x01(\x0b\x32\x11.dispersal.BlobIdH\x00\x12&\n\x03\x65rr\x18\x02 \x01(\x0b\x32\x17.dispersal.DispersalErrH\x00\x42\x0e\n\x0cmessage_type\"B\n\tSampleErr\x12%\n\tnot_found\x18\x01 \x01(\x0b\x32\x10.dispersal.ErrorH\x00\x42\x0e\n\x0cmessage_type\"/\n\tSampleReq\x12\"\n\x07\x62lob_id\x18\x01 \x01(\x0b\x32\x11.dispersal.BlobId\"a\n\tSampleRes\x12\x1f\n\x04\x62lob\x18\x01 \x01(\x0b\x32\x0f.dispersal.BlobH\x00\x12#\n\x03\x65rr\x18\x02 \x01(\x0b\x32\x14.dispersal.SampleErrH\x00\x42\x0e\n\x0cmessage_type\"\xde\x01\n\x10\x44ispersalMessage\x12\x30\n\rdispersal_req\x18\x01 \x01(\x0b\x32\x17.dispersal.DispersalReqH\x00\x12\x30\n\rdispersal_res\x18\x02 \x01(\x0b\x32\x17.dispersal.DispersalResH\x00\x12*\n\nsample_req\x18\x03 \x01(\x0b\x32\x14.dispersal.SampleReqH\x00\x12*\n\nsample_res\x18\x04 \x01(\x0b\x32\x14.dispersal.SampleResH\x00\x42\x0e\n\x0cmessage_typeb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'dispersal_pb2', _globals) if not _descriptor._USE_C_DESCRIPTORS: DESCRIPTOR._loaded_options = None - _globals['_DISPERSALREQ']._serialized_start=30 - _globals['_DISPERSALREQ']._serialized_end=75 - _globals['_DISPERSALRES']._serialized_start=77 - _globals['_DISPERSALRES']._serialized_end=108 - _globals['_SAMPLEREQ']._serialized_start=110 - _globals['_SAMPLEREQ']._serialized_end=138 - _globals['_SAMPLERES']._serialized_start=140 - _globals['_SAMPLERES']._serialized_end=182 - _globals['_DISPERSALMESSAGE']._serialized_start=185 - _globals['_DISPERSALMESSAGE']._serialized_end=407 + _globals['_BLOB']._serialized_start=30 + _globals['_BLOB']._serialized_end=67 + _globals['_BLOBID']._serialized_start=69 + _globals['_BLOBID']._serialized_end=94 + _globals['_ERROR']._serialized_start=96 + _globals['_ERROR']._serialized_end=124 + _globals['_DISPERSALERR']._serialized_start=126 + _globals['_DISPERSALERR']._serialized_end=246 + _globals['_DISPERSALREQ']._serialized_start=248 + _globals['_DISPERSALREQ']._serialized_end=293 + _globals['_DISPERSALRES']._serialized_start=295 + _globals['_DISPERSALRES']._serialized_end=403 + _globals['_SAMPLEERR']._serialized_start=405 + _globals['_SAMPLEERR']._serialized_end=471 + _globals['_SAMPLEREQ']._serialized_start=473 + _globals['_SAMPLEREQ']._serialized_end=520 + _globals['_SAMPLERES']._serialized_start=522 + _globals['_SAMPLERES']._serialized_end=619 + _globals['_DISPERSALMESSAGE']._serialized_start=622 + _globals['_DISPERSALMESSAGE']._serialized_end=844 # @@protoc_insertion_point(module_scope) diff --git a/da/executor/node.py b/da/executor/node.py index 4035943..0396a82 100644 --- a/da/executor/node.py +++ b/da/executor/node.py @@ -26,7 +26,7 @@ class Node: async def _handle(self, conn_id, writer, message): if message.HasField('dispersal_req'): - print(f"Received DispersalRes: blob_id={message.dispersal_req.blob_id}") + print(f"Received DispersalRes: blob_id={message.dispersal_req.blob.blob_id}") elif message.HasField('sample_req'): print(f"Received SampleRes: blob_id={message.sample_req.blob_id}") else: diff --git a/da/executor/proto.py b/da/executor/proto.py index 4d1e534..06491f0 100644 --- a/da/executor/proto.py +++ b/da/executor/proto.py @@ -15,21 +15,41 @@ def unpack_message(data): return message def new_dispersal_req_msg(blob_id, data): - dispersal_req = dispersal_pb2.DispersalReq(blob_id=blob_id, data=data) + blob = dispersal_pb2.Blob(blob_id=blob_id, data=data) + dispersal_req = dispersal_pb2.DispersalReq(blob=blob) dispersal_message = dispersal_pb2.DispersalMessage(dispersal_req=dispersal_req) return pack_message(dispersal_message) -def new_dispersal_res_msg(blob_id): - dispersal_res = dispersal_pb2.DispersalRes(blob_id=blob_id) +def new_dispersal_res_msg(blob_id=None, error_type=None, error_description=None): + if blob_id is not None: + blob_id_msg = dispersal_pb2.BlobId(blob_id=blob_id) + dispersal_res = dispersal_pb2.DispersalRes(blob_id=blob_id_msg) + elif error_type is not None and error_description is not None: + error = dispersal_pb2.Error(description=error_description) + dispersal_err = dispersal_pb2.DispersalErr() + setattr(dispersal_err, error_type, error) + dispersal_res = dispersal_pb2.DispersalRes(err=dispersal_err) + else: + raise ValueError("Either blob_id or error_type and error_description must be provided") dispersal_message = dispersal_pb2.DispersalMessage(dispersal_res=dispersal_res) return pack_message(dispersal_message) def new_sample_req_msg(blob_id): - sample_req = dispersal_pb2.SampleReq(blob_id=blob_id) + blob_id_msg = dispersal_pb2.BlobId(blob_id=blob_id) + sample_req = dispersal_pb2.SampleReq(blob_id=blob_id_msg) dispersal_message = dispersal_pb2.DispersalMessage(sample_req=sample_req) return pack_message(dispersal_message) -def new_sample_res_msg(blob_id, data): - sample_res = dispersal_pb2.SampleRes(blob_id=blob_id, data=data) +def new_sample_res_msg(blob_id=None, data=None, error_description=None): + if blob_id is not None and data is not None: + blob = dispersal_pb2.Blob(blob_id=blob_id, data=data) + sample_res = dispersal_pb2.SampleRes(blob=blob) + elif error_description is not None: + error = dispersal_pb2.Error(description=error_description) + sample_err = dispersal_pb2.SampleErr(not_found=error) + sample_res = dispersal_pb2.SampleRes(err=sample_err) + else: + raise ValueError("Either blob_id and data or error_description must be provided") dispersal_message = dispersal_pb2.DispersalMessage(sample_res=sample_res) return pack_message(dispersal_message) +