From 7173f6ef766d1b91228041d0775dada68c5fc552 Mon Sep 17 00:00:00 2001 From: Hajime Yamaguchi Date: Fri, 13 Dec 2019 13:53:58 +0900 Subject: [PATCH 1/3] Block should include an aggregated public key --- src/blockdata.rs | 42 +++++++++++++++++++++++++++++++++++++++--- 1 file changed, 39 insertions(+), 3 deletions(-) diff --git a/src/blockdata.rs b/src/blockdata.rs index 0f83ed3dc..b77589145 100644 --- a/src/blockdata.rs +++ b/src/blockdata.rs @@ -34,12 +34,21 @@ impl BlockHash { pub struct Block(Vec); impl Block { + const PROOF_POSISION: usize = 138; + pub fn new(data: Vec) -> Block { Block(data) } - /// Length of block header without proof is 104 bytes. + + /// Length of block header without proof is 138 bytes. + /// Version: 4 + /// hasPrevBlock: 32 + /// hashMerkleRoot: 32 + /// hashImMerkleRoot: 32 + /// time: 4 + /// aggPubkey: 34 pub fn get_header_without_proof(&self) -> &[u8] { - &self.0[..104] + &self.0[..Self::PROOF_POSISION] } pub fn hex(&self) -> String { @@ -56,8 +65,35 @@ impl Block { &self.0 } pub fn add_proof(&self, proof: Vec) -> Block { - let (header, txs) = self.payload().split_at(104); + let (header, txs) = self.payload().split_at(Self::PROOF_POSISION); let new_payload = [header, &proof[..], &txs[1..]].concat(); Block(new_payload) } } + +#[test] +fn test_get_header_without_proof() { + let hex_block = "010000000000000000000000000000000000000000000000000000000000000000000000c1457ff3e5c527e69858108edf0ff1f49eea9c58d8d37300a164b3b4f8c8c7cef1a2e72770d547feae29f2dd40123a97c580d44fd4493de072416d53331997617b96f05d210366262690cbdf648132ce0c088962c6361112582364ede120f3780ab73438fc4b403a4c09253c7b583e5260074380c9b99b895f938e37799d326ded984fb707e91fa4df2e0524a4ccf5fe224945b4fb94784b411a760eb730d95402d3383dd7ffdc01010000000100000000000000000000000000000000000000000000000000000000000000000000000022210366262690cbdf648132ce0c088962c6361112582364ede120f3780ab73438fc4bffffffff0100f2052a010000002776a9226d70757956774d32596a454d755a4b72687463526b614a787062715447417346484688ac00000000"; + let raw_block = hex::decode(hex_block).unwrap(); + let block = Block(raw_block); + + let hex_expect = "010000000000000000000000000000000000000000000000000000000000000000000000c1457ff3e5c527e69858108edf0ff1f49eea9c58d8d37300a164b3b4f8c8c7cef1a2e72770d547feae29f2dd40123a97c580d44fd4493de072416d53331997617b96f05d210366262690cbdf648132ce0c088962c6361112582364ede120f3780ab73438fc4b"; + let raw_expect = hex::decode(hex_expect).unwrap(); + + assert_eq!(block.get_header_without_proof(), &raw_expect[..]); +} + +#[test] +fn test_add_proof() { + let hex_block = "010000000000000000000000000000000000000000000000000000000000000000000000c1457ff3e5c527e69858108edf0ff1f49eea9c58d8d37300a164b3b4f8c8c7cef1a2e72770d547feae29f2dd40123a97c580d44fd4493de072416d53331997617b96f05d210366262690cbdf648132ce0c088962c6361112582364ede120f3780ab73438fc4b0001010000000100000000000000000000000000000000000000000000000000000000000000000000000022210366262690cbdf648132ce0c088962c6361112582364ede120f3780ab73438fc4bffffffff0100f2052a010000002776a9226d70757956774d32596a454d755a4b72687463526b614a787062715447417346484688ac00000000"; + let raw_block = hex::decode(hex_block).unwrap(); + let block = Block(raw_block); + + let sig_hex = "403a4c09253c7b583e5260074380c9b99b895f938e37799d326ded984fb707e91fa4df2e0524a4ccf5fe224945b4fb94784b411a760eb730d95402d3383dd7ffdc"; + + let hex_expect = "010000000000000000000000000000000000000000000000000000000000000000000000c1457ff3e5c527e69858108edf0ff1f49eea9c58d8d37300a164b3b4f8c8c7cef1a2e72770d547feae29f2dd40123a97c580d44fd4493de072416d53331997617b96f05d210366262690cbdf648132ce0c088962c6361112582364ede120f3780ab73438fc4b403a4c09253c7b583e5260074380c9b99b895f938e37799d326ded984fb707e91fa4df2e0524a4ccf5fe224945b4fb94784b411a760eb730d95402d3383dd7ffdc01010000000100000000000000000000000000000000000000000000000000000000000000000000000022210366262690cbdf648132ce0c088962c6361112582364ede120f3780ab73438fc4bffffffff0100f2052a010000002776a9226d70757956774d32596a454d755a4b72687463526b614a787062715447417346484688ac00000000"; + let raw_expect = hex::decode(hex_expect).unwrap(); + let expect = Block(raw_expect); + + assert_eq!(block.add_proof(hex::decode(sig_hex).unwrap()), expect); +} From 09ad658ff4f680640e52cf26f9ad23c66dce427d Mon Sep 17 00:00:00 2001 From: Hajime Yamaguchi Date: Fri, 13 Dec 2019 14:31:22 +0900 Subject: [PATCH 2/3] version 0.3.0, Block has no aggregated pubkey, but has length of aggregated pubkey(00) --- src/blockdata.rs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/blockdata.rs b/src/blockdata.rs index b77589145..128b8de0b 100644 --- a/src/blockdata.rs +++ b/src/blockdata.rs @@ -34,19 +34,19 @@ impl BlockHash { pub struct Block(Vec); impl Block { - const PROOF_POSISION: usize = 138; + const PROOF_POSISION: usize = 105; pub fn new(data: Vec) -> Block { Block(data) } - /// Length of block header without proof is 138 bytes. + /// Length of block header without proof is 105 bytes. /// Version: 4 /// hasPrevBlock: 32 /// hashMerkleRoot: 32 /// hashImMerkleRoot: 32 /// time: 4 - /// aggPubkey: 34 + /// length of aggPubkey: 1 pub fn get_header_without_proof(&self) -> &[u8] { &self.0[..Self::PROOF_POSISION] } @@ -73,11 +73,11 @@ impl Block { #[test] fn test_get_header_without_proof() { - let hex_block = "010000000000000000000000000000000000000000000000000000000000000000000000c1457ff3e5c527e69858108edf0ff1f49eea9c58d8d37300a164b3b4f8c8c7cef1a2e72770d547feae29f2dd40123a97c580d44fd4493de072416d53331997617b96f05d210366262690cbdf648132ce0c088962c6361112582364ede120f3780ab73438fc4b403a4c09253c7b583e5260074380c9b99b895f938e37799d326ded984fb707e91fa4df2e0524a4ccf5fe224945b4fb94784b411a760eb730d95402d3383dd7ffdc01010000000100000000000000000000000000000000000000000000000000000000000000000000000022210366262690cbdf648132ce0c088962c6361112582364ede120f3780ab73438fc4bffffffff0100f2052a010000002776a9226d70757956774d32596a454d755a4b72687463526b614a787062715447417346484688ac00000000"; + let hex_block = "010000000000000000000000000000000000000000000000000000000000000000000000c1457ff3e5c527e69858108edf0ff1f49eea9c58d8d37300a164b3b4f8c8c7cef1a2e72770d547feae29f2dd40123a97c580d44fd4493de072416d53331997617b96f05d00403a4c09253c7b583e5260074380c9b99b895f938e37799d326ded984fb707e91fa4df2e0524a4ccf5fe224945b4fb94784b411a760eb730d95402d3383dd7ffdc01010000000100000000000000000000000000000000000000000000000000000000000000000000000022210366262690cbdf648132ce0c088962c6361112582364ede120f3780ab73438fc4bffffffff0100f2052a010000002776a9226d70757956774d32596a454d755a4b72687463526b614a787062715447417346484688ac00000000"; let raw_block = hex::decode(hex_block).unwrap(); let block = Block(raw_block); - let hex_expect = "010000000000000000000000000000000000000000000000000000000000000000000000c1457ff3e5c527e69858108edf0ff1f49eea9c58d8d37300a164b3b4f8c8c7cef1a2e72770d547feae29f2dd40123a97c580d44fd4493de072416d53331997617b96f05d210366262690cbdf648132ce0c088962c6361112582364ede120f3780ab73438fc4b"; + let hex_expect = "010000000000000000000000000000000000000000000000000000000000000000000000c1457ff3e5c527e69858108edf0ff1f49eea9c58d8d37300a164b3b4f8c8c7cef1a2e72770d547feae29f2dd40123a97c580d44fd4493de072416d53331997617b96f05d00"; let raw_expect = hex::decode(hex_expect).unwrap(); assert_eq!(block.get_header_without_proof(), &raw_expect[..]); @@ -85,13 +85,13 @@ fn test_get_header_without_proof() { #[test] fn test_add_proof() { - let hex_block = "010000000000000000000000000000000000000000000000000000000000000000000000c1457ff3e5c527e69858108edf0ff1f49eea9c58d8d37300a164b3b4f8c8c7cef1a2e72770d547feae29f2dd40123a97c580d44fd4493de072416d53331997617b96f05d210366262690cbdf648132ce0c088962c6361112582364ede120f3780ab73438fc4b0001010000000100000000000000000000000000000000000000000000000000000000000000000000000022210366262690cbdf648132ce0c088962c6361112582364ede120f3780ab73438fc4bffffffff0100f2052a010000002776a9226d70757956774d32596a454d755a4b72687463526b614a787062715447417346484688ac00000000"; + let hex_block = "010000000000000000000000000000000000000000000000000000000000000000000000c1457ff3e5c527e69858108edf0ff1f49eea9c58d8d37300a164b3b4f8c8c7cef1a2e72770d547feae29f2dd40123a97c580d44fd4493de072416d53331997617b96f05d000001010000000100000000000000000000000000000000000000000000000000000000000000000000000022210366262690cbdf648132ce0c088962c6361112582364ede120f3780ab73438fc4bffffffff0100f2052a010000002776a9226d70757956774d32596a454d755a4b72687463526b614a787062715447417346484688ac00000000"; let raw_block = hex::decode(hex_block).unwrap(); let block = Block(raw_block); let sig_hex = "403a4c09253c7b583e5260074380c9b99b895f938e37799d326ded984fb707e91fa4df2e0524a4ccf5fe224945b4fb94784b411a760eb730d95402d3383dd7ffdc"; - let hex_expect = "010000000000000000000000000000000000000000000000000000000000000000000000c1457ff3e5c527e69858108edf0ff1f49eea9c58d8d37300a164b3b4f8c8c7cef1a2e72770d547feae29f2dd40123a97c580d44fd4493de072416d53331997617b96f05d210366262690cbdf648132ce0c088962c6361112582364ede120f3780ab73438fc4b403a4c09253c7b583e5260074380c9b99b895f938e37799d326ded984fb707e91fa4df2e0524a4ccf5fe224945b4fb94784b411a760eb730d95402d3383dd7ffdc01010000000100000000000000000000000000000000000000000000000000000000000000000000000022210366262690cbdf648132ce0c088962c6361112582364ede120f3780ab73438fc4bffffffff0100f2052a010000002776a9226d70757956774d32596a454d755a4b72687463526b614a787062715447417346484688ac00000000"; + let hex_expect = "010000000000000000000000000000000000000000000000000000000000000000000000c1457ff3e5c527e69858108edf0ff1f49eea9c58d8d37300a164b3b4f8c8c7cef1a2e72770d547feae29f2dd40123a97c580d44fd4493de072416d53331997617b96f05d00403a4c09253c7b583e5260074380c9b99b895f938e37799d326ded984fb707e91fa4df2e0524a4ccf5fe224945b4fb94784b411a760eb730d95402d3383dd7ffdc01010000000100000000000000000000000000000000000000000000000000000000000000000000000022210366262690cbdf648132ce0c088962c6361112582364ede120f3780ab73438fc4bffffffff0100f2052a010000002776a9226d70757956774d32596a454d755a4b72687463526b614a787062715447417346484688ac00000000"; let raw_expect = hex::decode(hex_expect).unwrap(); let expect = Block(raw_expect); From 19b41a32291d8f0c92d1febcc55665e46271ff7d Mon Sep 17 00:00:00 2001 From: Hajime Yamaguchi Date: Mon, 16 Dec 2019 16:48:43 +0900 Subject: [PATCH 3/3] Update multi-party-schnorr revision --- Cargo.lock | 6 +++--- Cargo.toml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 701e25208..392dab26b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -574,7 +574,7 @@ dependencies = [ [[package]] name = "multi-party-schnorr" version = "0.3.0" -source = "git+https://github.com/Yamaguchi/multi-party-schnorr#6764d5d33e66b4115613d29a7663efb4e3df0952" +source = "git+https://github.com/Yamaguchi/multi-party-schnorr?rev=cd92eecc736b7a48bd3a24284f3c3155c7f18179#cd92eecc736b7a48bd3a24284f3c3155c7f18179" dependencies = [ "centipede 0.2.0 (git+https://github.com/KZen-networks/centipede?tag=v0.2.0)", "curv 0.2.0 (git+https://github.com/KZen-networks/curv?tag=v0.2.0)", @@ -1011,7 +1011,7 @@ dependencies = [ "http 0.1.19 (registry+https://github.com/rust-lang/crates.io-index)", "jsonrpc 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "multi-party-schnorr 0.3.0 (git+https://github.com/Yamaguchi/multi-party-schnorr)", + "multi-party-schnorr 0.3.0 (git+https://github.com/Yamaguchi/multi-party-schnorr?rev=cd92eecc736b7a48bd3a24284f3c3155c7f18179)", "redis 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", "secp256k1 0.15.5 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1344,7 +1344,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum mime 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "ba626b8a6de5da682e1caa06bdb42a335aee5a84db8e5046a3e8ab17ba0a3ae0" "checksum mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)" = "83f51996a3ed004ef184e16818edc51fadffe8e7ca68be67f9dee67d84d0ff23" "checksum miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919" -"checksum multi-party-schnorr 0.3.0 (git+https://github.com/Yamaguchi/multi-party-schnorr)" = "" +"checksum multi-party-schnorr 0.3.0 (git+https://github.com/Yamaguchi/multi-party-schnorr?rev=cd92eecc736b7a48bd3a24284f3c3155c7f18179)" = "" "checksum net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88" "checksum num-traits 0.2.9 (registry+https://github.com/rust-lang/crates.io-index)" = "443c53b3c3531dfcbfa499d8893944db78474ad7a1d87fa2d94d1a2231693ac6" "checksum num_cpus 1.11.1 (registry+https://github.com/rust-lang/crates.io-index)" = "76dac5ed2a876980778b8b85f75a71b6cbf0db0b1232ee12f826bccb00d09d72" diff --git a/Cargo.toml b/Cargo.toml index 695c97c57..7e0625fb9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -21,5 +21,5 @@ base64 = "0.10.1" redis = "0.10.0" clap = "2.33.0" toml = "0.5" -multi-party-schnorr = { git = "https://github.com/Yamaguchi/multi-party-schnorr", branch = "master" } +multi-party-schnorr = { git = "https://github.com/Yamaguchi/multi-party-schnorr", rev = "cd92eecc736b7a48bd3a24284f3c3155c7f18179" } curv = { git = "https://github.com/KZen-networks/curv" , tag = "v0.2.0", features = ["ec_secp256k1"]}