mirror of
https://github.com/sigp/lighthouse.git
synced 2026-05-07 16:55:46 +00:00
Add unfinished attesation code
This commit is contained in:
@@ -60,6 +60,44 @@ fn sign_block<T: BeaconChainTypes>(
|
|||||||
block.signature = Signature::new(&message, domain, &keypair.sk);
|
block.signature = Signature::new(&message, domain, &keypair.sk);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn validator_produce_attestation() {
|
||||||
|
let mut env = build_env();
|
||||||
|
|
||||||
|
let node = LocalBeaconNode::production(env.core_context());
|
||||||
|
let remote_node = node.remote_node().expect("should produce remote node");
|
||||||
|
|
||||||
|
let beacon_chain = node
|
||||||
|
.client
|
||||||
|
.beacon_chain()
|
||||||
|
.expect("client should have beacon chain");
|
||||||
|
let state = beacon_chain.head().beacon_state.clone();
|
||||||
|
|
||||||
|
let validator_index = 0;
|
||||||
|
let validator_pubkey = state.validators[validator_index].pubkey.clone();
|
||||||
|
let duties = state
|
||||||
|
.get_attestation_duties(validator_index, RelativeEpoch::Current)
|
||||||
|
.expect("should have attestation duties cache")
|
||||||
|
.expect("should have attestation duties");
|
||||||
|
|
||||||
|
let attestation = env
|
||||||
|
.runtime()
|
||||||
|
.block_on(remote_node.http.validator().produce_attestation(
|
||||||
|
duties.slot,
|
||||||
|
duties.shard,
|
||||||
|
&validator_pubkey,
|
||||||
|
false,
|
||||||
|
))
|
||||||
|
.expect("should fetch attestation from http api");
|
||||||
|
|
||||||
|
assert_eq!(
|
||||||
|
attestation.data.crosslink.shard, duties.shard,
|
||||||
|
"should have same shard"
|
||||||
|
);
|
||||||
|
|
||||||
|
// TODO: try to push the attestation.
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn validator_duties() {
|
fn validator_duties() {
|
||||||
let mut env = build_env();
|
let mut env = build_env();
|
||||||
|
|||||||
@@ -13,7 +13,9 @@ use ssz::Encode;
|
|||||||
use std::marker::PhantomData;
|
use std::marker::PhantomData;
|
||||||
use std::net::SocketAddr;
|
use std::net::SocketAddr;
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
use types::{BeaconBlock, BeaconState, Epoch, EthSpec, Hash256, PublicKey, Signature, Slot};
|
use types::{
|
||||||
|
Attestation, BeaconBlock, BeaconState, Epoch, EthSpec, Hash256, PublicKey, Signature, Slot,
|
||||||
|
};
|
||||||
use url::Url;
|
use url::Url;
|
||||||
|
|
||||||
pub use rest_api::{HeadResponse, ValidatorDuty};
|
pub use rest_api::{HeadResponse, ValidatorDuty};
|
||||||
@@ -161,6 +163,30 @@ impl<E: EthSpec> Validator<E> {
|
|||||||
.map_err(Into::into)
|
.map_err(Into::into)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Produces an unsigned attestation.
|
||||||
|
pub fn produce_attestation(
|
||||||
|
&self,
|
||||||
|
slot: Slot,
|
||||||
|
shard: u64,
|
||||||
|
validator_pubkey: &PublicKey,
|
||||||
|
poc_bit: bool,
|
||||||
|
) -> impl Future<Item = Attestation<E>, Error = Error> {
|
||||||
|
let query_params = vec![
|
||||||
|
("slot".into(), format!("{}", slot)),
|
||||||
|
("shard".into(), format!("{}", shard)),
|
||||||
|
("poc_bit".into(), format!("{}", poc_bit as u8)),
|
||||||
|
(
|
||||||
|
"validator_pubkey".into(),
|
||||||
|
pubkey_as_string(validator_pubkey),
|
||||||
|
),
|
||||||
|
];
|
||||||
|
|
||||||
|
let client = self.0.clone();
|
||||||
|
self.url("attestation")
|
||||||
|
.into_future()
|
||||||
|
.and_then(move |url| client.json_get(url, query_params))
|
||||||
|
}
|
||||||
|
|
||||||
/// Returns the duties required of the given validator pubkeys in the given epoch.
|
/// Returns the duties required of the given validator pubkeys in the given epoch.
|
||||||
pub fn get_duties(
|
pub fn get_duties(
|
||||||
&self,
|
&self,
|
||||||
|
|||||||
Reference in New Issue
Block a user