getBlockProduction now correctly reports block production
This commit is contained in:
parent
ec2b06d81d
commit
d6c076f1b6
|
@ -3233,9 +3233,9 @@ pub mod rpc_full {
|
|||
|
||||
let mut slot = first_slot;
|
||||
for identity in slot_leaders {
|
||||
slot += 1;
|
||||
if let Some(ref filter_by_identity) = filter_by_identity {
|
||||
if identity != *filter_by_identity {
|
||||
slot += 1;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
@ -3245,6 +3245,7 @@ pub mod rpc_full {
|
|||
entry.1 += 1; // Increment blocks_produced
|
||||
}
|
||||
entry.0 += 1; // Increment leader_slots
|
||||
slot += 1;
|
||||
}
|
||||
|
||||
Ok(new_response(
|
||||
|
@ -5813,6 +5814,83 @@ pub mod tests {
|
|||
assert_eq!(confirmed_block.rewards.unwrap(), vec![]);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_get_block_production() {
|
||||
let bob_pubkey = solana_sdk::pubkey::new_rand();
|
||||
let roots = vec![0, 1, 3, 4, 8];
|
||||
let RpcHandler {
|
||||
io,
|
||||
meta,
|
||||
block_commitment_cache,
|
||||
leader_pubkey,
|
||||
..
|
||||
} = start_rpc_handler_with_tx_and_blockstore(&bob_pubkey, roots);
|
||||
block_commitment_cache
|
||||
.write()
|
||||
.unwrap()
|
||||
.set_highest_confirmed_root(8);
|
||||
|
||||
let req = r#"{"jsonrpc":"2.0","id":1,"method":"getBlockProduction","params":[]}"#;
|
||||
let res = io.handle_request_sync(&req, meta.clone());
|
||||
let result: Value = serde_json::from_str(&res.expect("actual response"))
|
||||
.expect("actual response deserialization");
|
||||
let block_production: RpcBlockProduction =
|
||||
serde_json::from_value(result["result"]["value"].clone()).unwrap();
|
||||
assert_eq!(
|
||||
block_production.by_identity.get(&leader_pubkey.to_string()),
|
||||
Some(&(9, 5))
|
||||
);
|
||||
assert_eq!(
|
||||
block_production.range,
|
||||
RpcBlockProductionRange {
|
||||
first_slot: 0,
|
||||
last_slot: 8
|
||||
}
|
||||
);
|
||||
|
||||
let req = format!(
|
||||
r#"{{"jsonrpc":"2.0","id":1,"method":"getBlockProduction","params":[{{"identity": "{}"}}]}}"#,
|
||||
leader_pubkey
|
||||
);
|
||||
let res = io.handle_request_sync(&req, meta.clone());
|
||||
let result: Value = serde_json::from_str(&res.expect("actual response"))
|
||||
.expect("actual response deserialization");
|
||||
let block_production: RpcBlockProduction =
|
||||
serde_json::from_value(result["result"]["value"].clone()).unwrap();
|
||||
assert_eq!(
|
||||
block_production.by_identity.get(&leader_pubkey.to_string()),
|
||||
Some(&(9, 5))
|
||||
);
|
||||
assert_eq!(
|
||||
block_production.range,
|
||||
RpcBlockProductionRange {
|
||||
first_slot: 0,
|
||||
last_slot: 8
|
||||
}
|
||||
);
|
||||
|
||||
let req = format!(
|
||||
r#"{{"jsonrpc":"2.0","id":1,"method":"getBlockProduction","params":[{{"range": {{"firstSlot": 0, "lastSlot": 4}}, "identity": "{}"}}]}}"#,
|
||||
bob_pubkey
|
||||
);
|
||||
let res = io.handle_request_sync(&req, meta);
|
||||
let result: Value = serde_json::from_str(&res.expect("actual response"))
|
||||
.expect("actual response deserialization");
|
||||
let block_production: RpcBlockProduction =
|
||||
serde_json::from_value(result["result"]["value"].clone()).unwrap();
|
||||
assert_eq!(
|
||||
block_production.by_identity.get(&leader_pubkey.to_string()),
|
||||
None
|
||||
);
|
||||
assert_eq!(
|
||||
block_production.range,
|
||||
RpcBlockProductionRange {
|
||||
first_slot: 0,
|
||||
last_slot: 4
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_get_blocks() {
|
||||
let bob_pubkey = solana_sdk::pubkey::new_rand();
|
||||
|
|
|
@ -595,7 +595,7 @@ The result will be an RpcResponse JSON object with `value` equal to:
|
|||
- `byIdentity: <object>` - a dictionary of validator identities,
|
||||
as base-58 encoded strings. Value is a two element array containing the
|
||||
number of leader slots and the number of blocks produced.
|
||||
- `range: <object>` - Slot range to return block production for. If parameter not provided, defaults to current epoch.
|
||||
- `range: <object>` - Block production slot range
|
||||
- `firstSlot: <u64>` - first slot of the block production information (inclusive)
|
||||
- `lastSlot: <u64>` - last slot of block production information (inclusive)
|
||||
|
||||
|
|
Loading…
Reference in New Issue