4cdeb6abe5
- Added a 'beacon_attester' RPC endpoint, so the BeaconNode can supply attestation data. - Renamed 'attestation_data' to just 'attestation' throughout (except where it is actually just the data structure).
45 lines
1.2 KiB
Rust
45 lines
1.2 KiB
Rust
use protos::services_grpc::AttestationServiceClient;
|
|
use std::sync::Arc;
|
|
|
|
use attester::{BeaconNode, BeaconNodeError, PublishOutcome};
|
|
use protos::services::ProduceAttestationRequest;
|
|
use types::{AttestationData, FreeAttestation, Slot};
|
|
|
|
pub struct AttestationGrpcClient {
|
|
client: Arc<AttestationServiceClient>,
|
|
}
|
|
|
|
impl AttestationGrpcClient {
|
|
pub fn new(client: Arc<AttestationServiceClient>) -> Self {
|
|
Self { client }
|
|
}
|
|
}
|
|
|
|
impl BeaconNode for AttestationGrpcClient {
|
|
fn produce_attestation(
|
|
&self,
|
|
slot: Slot,
|
|
shard: u64,
|
|
) -> Result<Option<AttestationData>, BeaconNodeError> {
|
|
let mut req = ProduceAttestationRequest::new();
|
|
req.set_slot(slot.as_u64());
|
|
req.set_shard(shard);
|
|
|
|
let reply = self
|
|
.client
|
|
.produce_attestation(&req)
|
|
.map_err(|err| BeaconNodeError::RemoteFailure(format!("{:?}", err)))?;
|
|
|
|
// TODO: return correct Attestation
|
|
Err(BeaconNodeError::DecodeFailure)
|
|
}
|
|
|
|
fn publish_attestation(
|
|
&self,
|
|
free_attestation: FreeAttestation,
|
|
) -> Result<PublishOutcome, BeaconNodeError> {
|
|
// TODO: return correct PublishOutcome
|
|
Err(BeaconNodeError::DecodeFailure)
|
|
}
|
|
}
|