Skip to content

Commit

Permalink
change: change McBlockHash inner type from Vec to an array (#17)
Browse files Browse the repository at this point in the history
  • Loading branch information
AmbientTea authored Aug 8, 2024
1 parent da4423d commit d44e2f8
Show file tree
Hide file tree
Showing 10 changed files with 32 additions and 40 deletions.
1 change: 1 addition & 0 deletions changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ This changelog is based on [Keep A Changelog](https://keepachangelog.com/en/1.1.
## Changed
* polkadot-sdk dependency updated to partnerchains-stable2407 (stable2407 is v1.15.0 in the previous scheme)
* remove Relay docker build files
* changed the inner type of `McBlockHash` from Vec to an array

## Removed

Expand Down
31 changes: 9 additions & 22 deletions mainchain-follower/db-sync-follower/src/block/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,7 @@ async fn get_latest_block_info(pool: PgPool) {
let source = mk_datasource(pool, irrelevant_security_parameter);
let expected = MainchainBlock {
number: McBlockNumber(5),
hash: McBlockHash(
hex!("EBEED7FB0067F14D6F6436C7F7DEDB27CE3CEB4D2D18FF249D43B22D86FAE3F1").to_vec(),
),
hash: McBlockHash(hex!("EBEED7FB0067F14D6F6436C7F7DEDB27CE3CEB4D2D18FF249D43B22D86FAE3F1")),
epoch: McEpochNumber(193),
slot: McSlotNumber(193500),
timestamp: NaiveDateTime::from_str("2022-04-21T17:36:10")
Expand Down Expand Up @@ -129,9 +127,8 @@ async fn test_get_stable_block_at_filters_out_by_max_slots_boundary(pool: PgPool
#[sqlx::test(migrations = "./testdata/migrations")]
async fn test_get_stable_block_info_by_hash_for_unknown_hash(pool: PgPool) {
let source = mk_datasource(pool, 2);
let unknown_hash = McBlockHash(
hex!("0000D7FB0067F14D6F6436C7F7DEDB27CE3CEB4D2D18FF249D43B22D86FAE3F1").to_vec(),
);
let unknown_hash =
McBlockHash(hex!("0000D7FB0067F14D6F6436C7F7DEDB27CE3CEB4D2D18FF249D43B22D86FAE3F1"));
let result = source
.get_stable_block_for(unknown_hash, BLOCK_4_TS_MILLIS.into())
.await
Expand Down Expand Up @@ -197,7 +194,7 @@ async fn test_get_latest_stable_block_with_stability_margin_2(pool: PgPool) {
#[sqlx::test(migrations = "./testdata/migrations")]
async fn test_get_stable_block_caching(pool: PgPool) {
fn dummy_hash(n: u8) -> McBlockHash {
McBlockHash(vec![n; 32])
McBlockHash([n; 32])
}

async fn update_block_hash_in_db(pool: &PgPool, n: u8) {
Expand Down Expand Up @@ -285,9 +282,7 @@ fn mainchain_epoch_config() -> MainchainEpochConfig {
fn block_0() -> MainchainBlock {
MainchainBlock {
number: McBlockNumber(0),
hash: McBlockHash(
hex!("0BEED7FB0067F14D6F6436C7F7DEDB27CE3CEB4D2D18FF249D43B22D86FAE3F1").to_vec(),
),
hash: McBlockHash(hex!("0BEED7FB0067F14D6F6436C7F7DEDB27CE3CEB4D2D18FF249D43B22D86FAE3F1")),
epoch: McEpochNumber(189),
slot: McSlotNumber(189410),
timestamp: 1650558480, // 2022-04-21T16:28:00Z
Expand All @@ -297,9 +292,7 @@ fn block_0() -> MainchainBlock {
fn block_1() -> MainchainBlock {
MainchainBlock {
number: McBlockNumber(1),
hash: McBlockHash(
hex!("ABEED7FB0067F14D6F6436C7F7DEDB27CE3CEB4D2D18FF249D43B22D86FAE3F1").to_vec(),
),
hash: McBlockHash(hex!("ABEED7FB0067F14D6F6436C7F7DEDB27CE3CEB4D2D18FF249D43B22D86FAE3F1")),
epoch: McEpochNumber(190),
slot: McSlotNumber(190400),
timestamp: 1650559470, // 2022-04-21T16:44:30Z
Expand All @@ -309,9 +302,7 @@ fn block_1() -> MainchainBlock {
fn block_2() -> MainchainBlock {
MainchainBlock {
number: McBlockNumber(2),
hash: McBlockHash(
hex!("BBEED7FB0067F14D6F6436C7F7DEDB27CE3CEB4D2D18FF249D43B22D86FAE3F1").to_vec(),
),
hash: McBlockHash(hex!("BBEED7FB0067F14D6F6436C7F7DEDB27CE3CEB4D2D18FF249D43B22D86FAE3F1")),
epoch: McEpochNumber(190),
slot: McSlotNumber(190500),
timestamp: 1650559570, // 2022-04-23T16:46:10Z
Expand All @@ -321,9 +312,7 @@ fn block_2() -> MainchainBlock {
fn block_3() -> MainchainBlock {
MainchainBlock {
number: McBlockNumber(3),
hash: McBlockHash(
hex!("CBEED7FB0067F14D6F6436C7F7DEDB27CE3CEB4D2D18FF249D43B22D86FAE3F1").to_vec(),
),
hash: McBlockHash(hex!("CBEED7FB0067F14D6F6436C7F7DEDB27CE3CEB4D2D18FF249D43B22D86FAE3F1")),
epoch: McEpochNumber(191),
slot: McSlotNumber(191500),
timestamp: 1650560570, // 2022-04-21T17:02:50Z
Expand All @@ -333,9 +322,7 @@ fn block_3() -> MainchainBlock {
fn block_4() -> MainchainBlock {
MainchainBlock {
number: McBlockNumber(4),
hash: McBlockHash(
hex!("DBEED7FB0067F14D6F6436C7F7DEDB27CE3CEB4D2D18FF249D43B22D86FAE3F1").to_vec(),
),
hash: McBlockHash(hex!("DBEED7FB0067F14D6F6436C7F7DEDB27CE3CEB4D2D18FF249D43B22D86FAE3F1")),
epoch: McEpochNumber(192),
slot: McSlotNumber(192500),
timestamp: 1650561570, // 2022-04-25T17:19:30Z
Expand Down
2 changes: 1 addition & 1 deletion mainchain-follower/db-sync-follower/src/db_model.rs
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ impl From<Block> for main_chain_follower_api::block::MainchainBlock {
fn from(b: Block) -> Self {
main_chain_follower_api::block::MainchainBlock {
number: McBlockNumber(b.block_no.0),
hash: McBlockHash(b.hash.to_vec()),
hash: McBlockHash(b.hash),
epoch: McEpochNumber(b.epoch_no.0),
slot: McSlotNumber(b.slot_no.0),
timestamp: b.time.and_utc().timestamp().try_into().expect("i64 timestamp is valid u64"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ mod block {
fn mock_block() -> MainchainBlock {
MainchainBlock {
number: McBlockNumber(5),
hash: McBlockHash(vec![1, 2, 3, 4]),
hash: McBlockHash([123; 32]),
epoch: McEpochNumber(3),
slot: McSlotNumber(12),
timestamp: 8,
Expand All @@ -79,7 +79,7 @@ mod block {
pub fn mock_stable_block() -> MainchainBlock {
MainchainBlock {
number: McBlockNumber(1),
hash: McBlockHash(vec![1; 32]),
hash: McBlockHash([1; 32]),
epoch: McEpochNumber(2),
slot: McSlotNumber(3),
timestamp: 4,
Expand Down
2 changes: 1 addition & 1 deletion mainchain-follower/mock/src/block.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ impl BlockDataSource for BlockDataSourceMock {
hash_arr[..4].copy_from_slice(&block_number.to_be_bytes());
Ok(Some(MainchainBlock {
number: McBlockNumber(block_number),
hash: McBlockHash(hash_arr.to_vec()),
hash: McBlockHash(hash_arr),
epoch: McEpochNumber(epoch),
slot: McSlotNumber(block_number as u64),
timestamp: reference_timestamp.0,
Expand Down
2 changes: 1 addition & 1 deletion node/src/tests/inherent_data_tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ async fn block_proposal_cidp_should_be_created_correctly() {
async fn block_verification_cidp_should_be_created_correctly() {
let mut block_data_source = MockBlockDataSource::default();
let parent_stable_block = block_data_source.get_all_stable_blocks().first().unwrap().clone();
let mc_block_hash = McBlockHash(vec![2; 32]);
let mc_block_hash = McBlockHash([2; 32]);
block_data_source.push_stable_block(MainchainBlock {
number: McBlockNumber(parent_stable_block.number.0 + 5),
hash: mc_block_hash.clone(),
Expand Down
2 changes: 1 addition & 1 deletion node/src/tests/runtime_api_mock.rs
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,6 @@ pub fn mock_header() -> <Block as BlockT>::Header {
Default::default(),
Default::default(),
Default::default(),
Digest { logs: McHashInherentDigest::from_mc_block_hash(McBlockHash(vec![1; 32])) },
Digest { logs: McHashInherentDigest::from_mc_block_hash(McBlockHash([1; 32])) },
)
}
4 changes: 2 additions & 2 deletions primitives/domain/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -381,9 +381,9 @@ impl TryFrom<Vec<u8>> for McTxHash {
}
}

#[derive(Default, Clone, Decode, Encode, PartialEq, Eq, TypeInfo, ToDatum)]
#[derive(Default, Clone, Decode, Encode, PartialEq, Eq, TypeInfo, ToDatum, MaxEncodedLen)]
#[byte_string(debug, decode_hex, hex_serialize, hex_deserialize)]
pub struct McBlockHash(pub Vec<u8>);
pub struct McBlockHash(pub [u8; 32]);

impl Display for McBlockHash {
fn fmt(&self, f: &mut Formatter<'_>) -> core::fmt::Result {
Expand Down
9 changes: 6 additions & 3 deletions primitives/sidechain-mc-hash/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ use crate::McHashInherentError::StableBlockNotFound;
use main_chain_follower_api::{
block::MainchainBlock, common::Timestamp as McTimestamp, BlockDataSource, DataSourceError,
};
use sidechain_domain::{McBlockHash, McBlockNumber, McEpochNumber};
use sidechain_domain::{byte_string::ByteString, McBlockHash, McBlockNumber, McEpochNumber};
use sp_consensus_slots::{Slot, SlotDuration};
use sp_inherents::{InherentData, InherentDataProvider, InherentDigest, InherentIdentifier};
use sp_runtime::{traits::Header as HeaderT, DigestItem};
Expand Down Expand Up @@ -167,7 +167,7 @@ pub struct McHashInherentDigest;

impl McHashInherentDigest {
pub fn from_mc_block_hash(mc_block_hash: McBlockHash) -> Vec<DigestItem> {
vec![DigestItem::PreRuntime(MC_HASH_DIGEST_ID, mc_block_hash.0)]
vec![DigestItem::PreRuntime(MC_HASH_DIGEST_ID, mc_block_hash.0.to_vec())]
}
}

Expand All @@ -190,7 +190,10 @@ impl InherentDigest for McHashInherentDigest {
for item in digest {
if let DigestItem::PreRuntime(id, data) = item {
if *id == MC_HASH_DIGEST_ID {
return Ok(McBlockHash(data.clone()));
let data = data.clone().try_into().map_err(|_| {
format!("Invalid MC hash referenced by block author in digest: {:?}\nMC hash must be exactly 32 bytes long.", ByteString(data.to_vec()))
})?;
return Ok(McBlockHash(data));
}
}
}
Expand Down
15 changes: 8 additions & 7 deletions primitives/sidechain-mc-hash/src/test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,25 +5,26 @@ mod inherent_digest_tests {

#[tokio::test]
async fn from_inherent_data_works() {
let inherent_data = MockMcHashInherentDataProvider { mc_hash: McBlockHash(b"abcd".into()) }
let inherent_data = MockMcHashInherentDataProvider { mc_hash: McBlockHash([42; 32]) }
.create_inherent_data()
.await
.unwrap();

let result = McHashInherentDigest::from_inherent_data(&inherent_data)
.expect("from_inherent_data should not fail");

assert_eq!(result, vec![DigestItem::PreRuntime(MC_HASH_DIGEST_ID, b"abcd".into())])
assert_eq!(result, vec![DigestItem::PreRuntime(MC_HASH_DIGEST_ID, vec![42; 32])])
}

#[tokio::test]
async fn value_from_digest_works() {
let digest = DigestItem::PreRuntime(MC_HASH_DIGEST_ID, b"abcdef".into());
let digest_to_ignore = DigestItem::PreRuntime(*b"irlv", vec![0; 32]);
let digest = DigestItem::PreRuntime(MC_HASH_DIGEST_ID, vec![42; 32]);

let result = McHashInherentDigest::value_from_digest(&[digest])
let result = McHashInherentDigest::value_from_digest(&[digest_to_ignore, digest])
.expect("value_from_digest should not fail");

assert_eq!(result, McBlockHash(b"abcdef".into()))
assert_eq!(result, McBlockHash([42; 32]))
}
}

Expand All @@ -43,7 +44,7 @@ mod validation_tests {
let mut block_data_source = MockBlockDataSource::default();
let parent_stable_block =
block_data_source.get_all_stable_blocks().first().unwrap().clone();
let mc_block_hash = McBlockHash(vec![2; 32]);
let mc_block_hash = McBlockHash([2; 32]);
let slot_duration = SlotDuration::from_millis(1000);

block_data_source.push_stable_block(MainchainBlock {
Expand Down Expand Up @@ -77,7 +78,7 @@ mod validation_tests {
Default::default(),
Default::default(),
Default::default(),
Digest { logs: McHashInherentDigest::from_mc_block_hash(McBlockHash(vec![1; 32])) },
Digest { logs: McHashInherentDigest::from_mc_block_hash(McBlockHash([1; 32])) },
)
}
}

0 comments on commit d44e2f8

Please sign in to comment.