Skip to content

Commit

Permalink
Support paradium
Browse files Browse the repository at this point in the history
  • Loading branch information
Yamaguchi committed Sep 18, 2019
1 parent ac41b09 commit 50a7e98
Show file tree
Hide file tree
Showing 6 changed files with 52 additions and 6 deletions.
26 changes: 26 additions & 0 deletions src/blockdata/constants.rs
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,20 @@ pub fn genesis_block(network: Network) -> Block {
txdata: txdata
}
}
Network::Paradium => {
let txdata = vec![bitcoin_genesis_tx()];
Block {
header: BlockHeader {
version: 1,
prev_blockhash: Default::default(),
merkle_root: txdata[0].txid(),
im_merkle_root: txdata[0].ntxid(),
time: 1562925929,
proof: Signature { signature: Script::new() },
},
txdata: txdata
}
}
}
}

Expand Down Expand Up @@ -186,5 +200,17 @@ mod test {
assert_eq!(format!("{:x}", gen.header.bitcoin_hash()),
"2f90e0d9843be35112f9830d6e86bf2ef4dd92836979ac4aae1a6f41e0797588".to_string());
}

#[test]
fn paradium_genesis_full_block() {
let gen = genesis_block(Network::Paradium);
assert_eq!(gen.header.version, 1);
assert_eq!(gen.header.prev_blockhash, Default::default());
assert_eq!(format!("{:x}", gen.header.merkle_root),
"4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b".to_string());
assert_eq!(gen.header.time, 1562925929);
assert_eq!(format!("{:x}", gen.header.bitcoin_hash()),
"78be4db611a1e7394c14b98fdf9a6f0db847efbfe10335bc681bd3d3a105d34e".to_string());
}
}

5 changes: 5 additions & 0 deletions src/consensus/params.rs
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,11 @@ impl Params {
rule_change_activation_threshold: 108, // 75%
miner_confirmation_window: 144,
},
Network::Paradium => Params {
network: Network::Paradium,
rule_change_activation_threshold: 108, // 75%
miner_confirmation_window: 144,
}
}
}
}
16 changes: 15 additions & 1 deletion src/network/constants.rs
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,9 @@ user_enum! {
/// Bitcoin's testnet
Testnet <-> "testnet",
/// Bitcoin's regtest
Regtest <-> "regtest"
Regtest <-> "regtest",
/// Paradium
Paradium <-> "paradium"
}
}

Expand All @@ -74,6 +76,7 @@ impl Network {
0x00F0FF01 => Some(Network::Bitcoin),
0x74839A75 => Some(Network::Testnet),
0x74979A73 => Some(Network::Regtest),
0x64F0FF01 => Some(Network::Paradium),
_ => None
}
}
Expand All @@ -95,6 +98,7 @@ impl Network {
Network::Bitcoin => 0x00F0FF01,
Network::Testnet => 0x74839A75,
Network::Regtest => 0x74979A73,
Network::Paradium => 0x64F0FF01,
}
}
}
Expand All @@ -118,6 +122,10 @@ mod tests {
serialize(&Network::Regtest.magic()),
&[0x73, 0x9a, 0x97, 0x74]
);
assert_eq!(
serialize(&Network::Paradium.magic()),
&[0x01, 0xff, 0xf0, 0x64]
);

assert_eq!(
deserialize(&[0x01, 0xff, 0xf0, 0x00]).ok(),
Expand All @@ -131,17 +139,23 @@ mod tests {
deserialize(&[0x73, 0x9a, 0x97, 0x74]).ok(),
Some(Network::Regtest.magic())
);
assert_eq!(
deserialize(&[0x01, 0xff, 0xf0, 0x64]).ok(),
Some(Network::Paradium.magic())
);
}

#[test]
fn string_test() {
assert_eq!(Network::Bitcoin.to_string(), "bitcoin");
assert_eq!(Network::Testnet.to_string(), "testnet");
assert_eq!(Network::Regtest.to_string(), "regtest");
assert_eq!(Network::Paradium.to_string(), "paradium");

assert_eq!("bitcoin".parse::<Network>().unwrap(), Network::Bitcoin);
assert_eq!("testnet".parse::<Network>().unwrap(), Network::Testnet);
assert_eq!("regtest".parse::<Network>().unwrap(), Network::Regtest);
assert_eq!("paradium".parse::<Network>().unwrap(), Network::Paradium);
assert!("fakenet".parse::<Network>().is_err());
}
}
Expand Down
5 changes: 3 additions & 2 deletions src/util/address.rs
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,7 @@ impl Address {
Network::Bitcoin => bitcoin_bech32::constants::Network::Bitcoin,
Network::Testnet => bitcoin_bech32::constants::Network::Testnet,
Network::Regtest => bitcoin_bech32::constants::Network::Regtest,
Network::Paradium => bitcoin_bech32::constants::Network::Bitcoin,
}
}

Expand Down Expand Up @@ -208,7 +209,7 @@ impl Display for Address {
Payload::PubkeyHash(ref hash) => {
let mut prefixed = [0; 21];
prefixed[0] = match self.network {
Network::Bitcoin => 0,
Network::Bitcoin | Network::Paradium => 0,
Network::Testnet | Network::Regtest => 111,
};
prefixed[1..].copy_from_slice(&hash[..]);
Expand All @@ -217,7 +218,7 @@ impl Display for Address {
Payload::ScriptHash(ref hash) => {
let mut prefixed = [0; 21];
prefixed[0] = match self.network {
Network::Bitcoin => 5,
Network::Bitcoin | Network::Paradium => 5,
Network::Testnet | Network::Regtest => 196,
};
prefixed[1..].copy_from_slice(&hash[..]);
Expand Down
4 changes: 2 additions & 2 deletions src/util/bip32.rs
Original file line number Diff line number Diff line change
Expand Up @@ -618,7 +618,7 @@ impl fmt::Display for ExtendedPrivKey {
fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
let mut ret = [0; 78];
ret[0..4].copy_from_slice(&match self.network {
Network::Bitcoin => [0x04, 0x88, 0xAD, 0xE4],
Network::Bitcoin | Network::Paradium => [0x04, 0x88, 0xAD, 0xE4],
Network::Testnet | Network::Regtest => [0x04, 0x35, 0x83, 0x94],
}[..]);
ret[4] = self.depth as u8;
Expand Down Expand Up @@ -677,7 +677,7 @@ impl fmt::Display for ExtendedPubKey {
fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
let mut ret = [0; 78];
ret[0..4].copy_from_slice(&match self.network {
Network::Bitcoin => [0x04u8, 0x88, 0xB2, 0x1E],
Network::Bitcoin | Network::Paradium => [0x04u8, 0x88, 0xB2, 0x1E],
Network::Testnet | Network::Regtest => [0x04u8, 0x35, 0x87, 0xCF],
}[..]);
ret[4] = self.depth as u8;
Expand Down
2 changes: 1 addition & 1 deletion src/util/key.rs
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ impl PrivateKey {
pub fn fmt_wif(&self, fmt: &mut fmt::Write) -> fmt::Result {
let mut ret = [0; 34];
ret[0] = match self.network {
Network::Bitcoin => 128,
Network::Bitcoin | Network::Paradium => 128,
Network::Testnet | Network::Regtest => 239,
};
ret[1..33].copy_from_slice(&self.key[..]);
Expand Down

0 comments on commit 50a7e98

Please sign in to comment.