mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-12 07:41:08 +00:00
BEEFY and GRANDPA protocol names should use full genesis hash (#10974)
std::fmt::Display shows formats as reduced hash (e.g. 0xb0a8…dafe) Use hex::encode to format full hash. Signed-off-by: acatangiu <adrian@parity.io>
This commit is contained in:
@@ -53,13 +53,13 @@ pub(crate) mod beefy_protocol_name {
|
||||
/// Name of the notifications protocol used by BEEFY.
|
||||
///
|
||||
/// Must be registered towards the networking in order for BEEFY to properly function.
|
||||
pub fn standard_name<Hash: std::fmt::Display>(
|
||||
pub fn standard_name<Hash: AsRef<[u8]>>(
|
||||
genesis_hash: &Hash,
|
||||
chain_spec: &Box<dyn ChainSpec>,
|
||||
) -> std::borrow::Cow<'static, str> {
|
||||
let chain_prefix = match chain_spec.fork_id() {
|
||||
Some(fork_id) => format!("/{}/{}", genesis_hash, fork_id),
|
||||
None => format!("/{}", genesis_hash),
|
||||
Some(fork_id) => format!("/{}/{}", hex::encode(genesis_hash), fork_id),
|
||||
None => format!("/{}", hex::encode(genesis_hash)),
|
||||
};
|
||||
format!("{}{}", chain_prefix, NAME).into()
|
||||
}
|
||||
@@ -190,3 +190,48 @@ where
|
||||
|
||||
worker.run().await
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
use sc_chain_spec::{ChainSpec, GenericChainSpec};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use sp_core::H256;
|
||||
use sp_runtime::{BuildStorage, Storage};
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
struct Genesis(std::collections::BTreeMap<String, String>);
|
||||
impl BuildStorage for Genesis {
|
||||
fn assimilate_storage(&self, storage: &mut Storage) -> Result<(), String> {
|
||||
storage.top.extend(
|
||||
self.0.iter().map(|(a, b)| (a.clone().into_bytes(), b.clone().into_bytes())),
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn beefy_protocol_name() {
|
||||
let chain_spec = GenericChainSpec::<Genesis>::from_json_file(std::path::PathBuf::from(
|
||||
"../chain-spec/res/chain_spec.json",
|
||||
))
|
||||
.unwrap()
|
||||
.cloned_box();
|
||||
|
||||
// Create protocol name using random genesis hash.
|
||||
let genesis_hash = H256::random();
|
||||
let expected = format!("/{}/beefy/1", hex::encode(genesis_hash));
|
||||
let proto_name = beefy_protocol_name::standard_name(&genesis_hash, &chain_spec);
|
||||
assert_eq!(proto_name.to_string(), expected);
|
||||
|
||||
// Create protocol name using hardcoded genesis hash. Verify exact representation.
|
||||
let genesis_hash = [
|
||||
50, 4, 60, 123, 58, 106, 216, 246, 194, 188, 139, 193, 33, 212, 202, 171, 9, 55, 123,
|
||||
94, 8, 43, 12, 251, 187, 57, 173, 19, 188, 74, 205, 147,
|
||||
];
|
||||
let expected =
|
||||
"/32043c7b3a6ad8f6c2bc8bc121d4caab09377b5e082b0cfbbb39ad13bc4acd93/beefy/1".to_string();
|
||||
let proto_name = beefy_protocol_name::standard_name(&genesis_hash, &chain_spec);
|
||||
assert_eq!(proto_name.to_string(), expected);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user