mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-04-29 07:58:00 +00:00
Fix the light client protocol protobuf schema (#12732)
* Fix the light client protocol protobuf schema * Add another test * Remove unused protobuf struct * Ok you have to use the nightly rustfmt apparently
This commit is contained in:
@@ -173,10 +173,7 @@ where
|
||||
let block = Decode::decode(&mut request.block.as_ref())?;
|
||||
|
||||
let response = match self.client.execution_proof(block, &request.method, &request.data) {
|
||||
Ok((_, proof)) => {
|
||||
let r = schema::v1::light::RemoteCallResponse { proof: proof.encode() };
|
||||
Some(schema::v1::light::response::Response::RemoteCallResponse(r))
|
||||
},
|
||||
Ok((_, proof)) => schema::v1::light::RemoteCallResponse { proof: Some(proof.encode()) },
|
||||
Err(e) => {
|
||||
trace!(
|
||||
"remote call request from {} ({} at {:?}) failed with: {}",
|
||||
@@ -185,11 +182,13 @@ where
|
||||
request.block,
|
||||
e,
|
||||
);
|
||||
None
|
||||
schema::v1::light::RemoteCallResponse { proof: None }
|
||||
},
|
||||
};
|
||||
|
||||
Ok(schema::v1::light::Response { response })
|
||||
Ok(schema::v1::light::Response {
|
||||
response: Some(schema::v1::light::response::Response::RemoteCallResponse(response)),
|
||||
})
|
||||
}
|
||||
|
||||
fn on_remote_read_request(
|
||||
@@ -213,10 +212,7 @@ where
|
||||
|
||||
let response =
|
||||
match self.client.read_proof(block, &mut request.keys.iter().map(AsRef::as_ref)) {
|
||||
Ok(proof) => {
|
||||
let r = schema::v1::light::RemoteReadResponse { proof: proof.encode() };
|
||||
Some(schema::v1::light::response::Response::RemoteReadResponse(r))
|
||||
},
|
||||
Ok(proof) => schema::v1::light::RemoteReadResponse { proof: Some(proof.encode()) },
|
||||
Err(error) => {
|
||||
trace!(
|
||||
"remote read request from {} ({} at {:?}) failed with: {}",
|
||||
@@ -225,11 +221,13 @@ where
|
||||
request.block,
|
||||
error,
|
||||
);
|
||||
None
|
||||
schema::v1::light::RemoteReadResponse { proof: None }
|
||||
},
|
||||
};
|
||||
|
||||
Ok(schema::v1::light::Response { response })
|
||||
Ok(schema::v1::light::Response {
|
||||
response: Some(schema::v1::light::response::Response::RemoteReadResponse(response)),
|
||||
})
|
||||
}
|
||||
|
||||
fn on_remote_read_child_request(
|
||||
@@ -264,10 +262,7 @@ where
|
||||
&mut request.keys.iter().map(AsRef::as_ref),
|
||||
)
|
||||
}) {
|
||||
Ok(proof) => {
|
||||
let r = schema::v1::light::RemoteReadResponse { proof: proof.encode() };
|
||||
Some(schema::v1::light::response::Response::RemoteReadResponse(r))
|
||||
},
|
||||
Ok(proof) => schema::v1::light::RemoteReadResponse { proof: Some(proof.encode()) },
|
||||
Err(error) => {
|
||||
trace!(
|
||||
"remote read child request from {} ({} {} at {:?}) failed with: {}",
|
||||
@@ -277,11 +272,13 @@ where
|
||||
request.block,
|
||||
error,
|
||||
);
|
||||
None
|
||||
schema::v1::light::RemoteReadResponse { proof: None }
|
||||
},
|
||||
};
|
||||
|
||||
Ok(schema::v1::light::Response { response })
|
||||
Ok(schema::v1::light::Response {
|
||||
response: Some(schema::v1::light::response::Response::RemoteReadResponse(response)),
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -23,3 +23,47 @@ pub(crate) mod v1 {
|
||||
include!(concat!(env!("OUT_DIR"), "/api.v1.light.rs"));
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use prost::Message as _;
|
||||
|
||||
#[test]
|
||||
fn empty_proof_encodes_correctly() {
|
||||
let encoded = super::v1::light::Response {
|
||||
response: Some(super::v1::light::response::Response::RemoteReadResponse(
|
||||
super::v1::light::RemoteReadResponse { proof: Some(Vec::new()) },
|
||||
)),
|
||||
}
|
||||
.encode_to_vec();
|
||||
|
||||
// Make sure that the response contains one field of number 2 and wire type 2 (message),
|
||||
// then another field of number 2 and wire type 2 (bytes), then a length of 0.
|
||||
assert_eq!(encoded, vec![(2 << 3) | 2, 2, (2 << 3) | 2, 0]);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn no_proof_encodes_correctly() {
|
||||
let encoded = super::v1::light::Response {
|
||||
response: Some(super::v1::light::response::Response::RemoteReadResponse(
|
||||
super::v1::light::RemoteReadResponse { proof: None },
|
||||
)),
|
||||
}
|
||||
.encode_to_vec();
|
||||
|
||||
// Make sure that the response contains one field of number 2 and wire type 2 (message).
|
||||
assert_eq!(encoded, vec![(2 << 3) | 2, 0]);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn proof_encodes_correctly() {
|
||||
let encoded = super::v1::light::Response {
|
||||
response: Some(super::v1::light::response::Response::RemoteReadResponse(
|
||||
super::v1::light::RemoteReadResponse { proof: Some(vec![1, 2, 3, 4]) },
|
||||
)),
|
||||
}
|
||||
.encode_to_vec();
|
||||
|
||||
assert_eq!(encoded, vec![(2 << 3) | 2, 6, (2 << 3) | 2, 4, 1, 2, 3, 4]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,17 +1,9 @@
|
||||
// Schema definition for light client messages.
|
||||
|
||||
syntax = "proto3";
|
||||
syntax = "proto2";
|
||||
|
||||
package api.v1.light;
|
||||
|
||||
// A pair of arbitrary bytes.
|
||||
message Pair {
|
||||
// The first element of the pair.
|
||||
bytes fst = 1;
|
||||
// The second element of the pair.
|
||||
bytes snd = 2;
|
||||
}
|
||||
|
||||
// Enumerate all possible light client request messages.
|
||||
message Request {
|
||||
oneof request {
|
||||
@@ -34,40 +26,42 @@ message Response {
|
||||
// Remote call request.
|
||||
message RemoteCallRequest {
|
||||
// Block at which to perform call.
|
||||
bytes block = 2;
|
||||
required bytes block = 2;
|
||||
// Method name.
|
||||
string method = 3;
|
||||
required string method = 3;
|
||||
// Call data.
|
||||
bytes data = 4;
|
||||
required bytes data = 4;
|
||||
}
|
||||
|
||||
// Remote call response.
|
||||
message RemoteCallResponse {
|
||||
// Execution proof.
|
||||
bytes proof = 2;
|
||||
// Execution proof. If missing, indicates that the remote couldn't answer, for example because
|
||||
// the block is pruned.
|
||||
optional bytes proof = 2;
|
||||
}
|
||||
|
||||
// Remote storage read request.
|
||||
message RemoteReadRequest {
|
||||
// Block at which to perform call.
|
||||
bytes block = 2;
|
||||
required bytes block = 2;
|
||||
// Storage keys.
|
||||
repeated bytes keys = 3;
|
||||
}
|
||||
|
||||
// Remote read response.
|
||||
message RemoteReadResponse {
|
||||
// Read proof.
|
||||
bytes proof = 2;
|
||||
// Read proof. If missing, indicates that the remote couldn't answer, for example because
|
||||
// the block is pruned.
|
||||
optional bytes proof = 2;
|
||||
}
|
||||
|
||||
// Remote storage read child request.
|
||||
message RemoteReadChildRequest {
|
||||
// Block at which to perform call.
|
||||
bytes block = 2;
|
||||
required bytes block = 2;
|
||||
// Child Storage key, this is relative
|
||||
// to the child type storage location.
|
||||
bytes storage_key = 3;
|
||||
required bytes storage_key = 3;
|
||||
// Storage keys.
|
||||
repeated bytes keys = 6;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user