Merge branch 'master' into verification
This commit is contained in:
commit
eaf2240e6b
|
@ -7,5 +7,11 @@
|
||||||
*.swn
|
*.swn
|
||||||
*.DS_Store
|
*.DS_Store
|
||||||
|
|
||||||
|
# Visual Studio Code stuff
|
||||||
|
/.vscode
|
||||||
|
|
||||||
|
# GitEye stuff
|
||||||
|
/.project
|
||||||
|
|
||||||
# idea ide
|
# idea ide
|
||||||
.idea
|
.idea
|
||||||
|
|
|
@ -0,0 +1,43 @@
|
||||||
|
sudo: required
|
||||||
|
dist: trusty
|
||||||
|
language: rust
|
||||||
|
|
||||||
|
branches:
|
||||||
|
only:
|
||||||
|
- master
|
||||||
|
matrix:
|
||||||
|
fast_finish: false
|
||||||
|
include:
|
||||||
|
- rust: stable
|
||||||
|
cache:
|
||||||
|
apt: true
|
||||||
|
directories:
|
||||||
|
- $TRAVIS_BUILD_DIR/target
|
||||||
|
- $HOME/.cargo
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
packages:
|
||||||
|
- libcurl4-openssl-dev
|
||||||
|
- libelf-dev
|
||||||
|
- libdw-dev
|
||||||
|
- gcc-4.8
|
||||||
|
- g++-4.8
|
||||||
|
script:
|
||||||
|
- ./tools/test.sh
|
||||||
|
after_success: |
|
||||||
|
[ false ] &&
|
||||||
|
[ $TRAVIS_BRANCH = master ] &&
|
||||||
|
[ $TRAVIS_PULL_REQUEST = false ] &&
|
||||||
|
[ $TRAVIS_RUST_VERSION = stable ] &&
|
||||||
|
cargo doc --no-deps --verbose &&
|
||||||
|
echo '<meta http-equiv=refresh content=0;url=pbtc/index.html>' > target/doc/index.html &&
|
||||||
|
pip install --user ghp-import &&
|
||||||
|
/home/travis/.local/bin/ghp-import -n target/doc &&
|
||||||
|
git push -fq https://${GH_TOKEN}@github.com/${TRAVIS_REPO_SLUG}.git gh-pages
|
||||||
|
env:
|
||||||
|
global:
|
||||||
|
- CXX="g++-4.8"
|
||||||
|
- CC="gcc-4.8"
|
||||||
|
- secure: IbTkR3KY7N9e3lc6hreWuY2mhuKyf7k6LSRUMMrOeb1k9TIncYMbR6Sl2W1t5+CJVp7WqVoUbP9YIH8o8a9BBuFldTyAz3tapa908KrZKIRlb/uCTef11z/jzasye4Ttj+358DBrCXZqueFw5Bh5Bnaie3r5bSYWTcQU693Bm/tKFp0lh4fSjzGyk7kRZ4V4rz2YHudZOcNIXN+QfY8aY6dxQraw82GUnNXJLzGiC5GJgeSV1uSnxMUM/lb4+zP1qRlcLBLnwHSTH/3vHH5xsOaRwHEYOQT9pTDyxMnJzDgYfjH4mNu3jSvZ7WFrP+Sza/yR+3sjHpOCFN6rsWc88iTq6Nwp+ESfyjHiLT+jqWs7r57sg2VfwHXuzoEW5GGagrIoF/pDEWJvhtNRYvdYevDtlZYPTfhSR4WOPkMPCg7Ln2W7a7vrSH2iRNxawUDnq3bOIyGGBeGwBJFDOEd6CmP+ojjUUm9L5I4berYACgYEDuZ4bpRX3WpGR1yAhSF4o5BTh+88EWU/VhL2ceXreHlztma3KQ5526Ip46lC4eLFrl/w64zaupesEZFjLsOFm7U9Vx9IM6aqBzOFr8Mt8DlPLaTRmRrbzPRYqHg0MLpHkH8S/HyNbK0xvqbQFRHQ6XPXNJVJXZPz8XPUYWYPK9ayplVdRN9nonHQO7F0gV8=
|
|
@ -2,11 +2,11 @@
|
||||||
name = "pbtc"
|
name = "pbtc"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitcrypto 0.1.0",
|
|
||||||
"clap 2.14.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"clap 2.14.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"db 0.1.0",
|
"db 0.1.0",
|
||||||
"keys 0.1.0",
|
"keys 0.1.0",
|
||||||
"message 0.1.0",
|
"message 0.1.0",
|
||||||
|
"miner 0.1.0",
|
||||||
"p2p 0.1.0",
|
"p2p 0.1.0",
|
||||||
"script 0.1.0",
|
"script 0.1.0",
|
||||||
"verification 0.1.0",
|
"verification 0.1.0",
|
||||||
|
@ -220,6 +220,15 @@ dependencies = [
|
||||||
"serialization 0.1.0",
|
"serialization 0.1.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "miner"
|
||||||
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"chain 0.1.0",
|
||||||
|
"primitives 0.1.0",
|
||||||
|
"serialization 0.1.0",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "mio"
|
name = "mio"
|
||||||
version = "0.6.0"
|
version = "0.6.0"
|
||||||
|
|
|
@ -7,9 +7,9 @@ description = "Parity bitcoin client."
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
clap = { version = "2", features = ["yaml"] }
|
clap = { version = "2", features = ["yaml"] }
|
||||||
bitcrypto = { path = "crypto" }
|
|
||||||
keys = { path = "keys" }
|
keys = { path = "keys" }
|
||||||
message = { path = "message" }
|
message = { path = "message" }
|
||||||
|
miner = { path = "miner" }
|
||||||
p2p = { path = "p2p" }
|
p2p = { path = "p2p" }
|
||||||
script = { path = "script" }
|
script = { path = "script" }
|
||||||
db = { path = "db" }
|
db = { path = "db" }
|
||||||
|
|
|
@ -1,6 +1,13 @@
|
||||||
# parity-bitcoin
|
# parity-bitcoin
|
||||||
The Parity Bitcoin client
|
The Parity Bitcoin client
|
||||||
|
|
||||||
|
[![Build Status][travis-image]][travis-url]
|
||||||
|
|
||||||
|
[Internal Documentation][doc-url]
|
||||||
|
|
||||||
![Graph][graph]
|
![Graph][graph]
|
||||||
|
|
||||||
[graph]: https://github.com/ethcore/parity-bitcoin/blob/master/tools/graph.png
|
[graph]: https://github.com/ethcore/parity-bitcoin/blob/master/tools/graph.png
|
||||||
|
[travis-image]: https://travis-ci.com/ethcore/parity-bitcoin.svg?token=DMFvZu71iaTbUYx9UypX&branch=master
|
||||||
|
[travis-url]: https://travis-ci.com/ethcore/parity-bitcoin
|
||||||
|
[doc-url]: https://ethcore.github.io/parity-bitcoin/pbtc/index.html
|
||||||
|
|
|
@ -55,7 +55,7 @@ impl Block {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn transactions(&self) -> &[Transaction] {
|
pub fn transactions(&self) -> &[Transaction] {
|
||||||
&self.transactions[..]
|
&self.transactions
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn header(&self) -> &BlockHeader {
|
pub fn header(&self) -> &BlockHeader {
|
||||||
|
|
|
@ -6,7 +6,7 @@ use hex::FromHex;
|
||||||
use bytes::Bytes;
|
use bytes::Bytes;
|
||||||
use ser::{
|
use ser::{
|
||||||
Deserializable, Reader, Error as ReaderError, deserialize,
|
Deserializable, Reader, Error as ReaderError, deserialize,
|
||||||
Serializable, Stream, serialize
|
Serializable, Stream, serialize, serialized_list_size
|
||||||
};
|
};
|
||||||
use crypto::dhash256;
|
use crypto::dhash256;
|
||||||
use hash::H256;
|
use hash::H256;
|
||||||
|
@ -42,6 +42,11 @@ impl Serializable for OutPoint {
|
||||||
.append(&self.hash)
|
.append(&self.hash)
|
||||||
.append(&self.index);
|
.append(&self.index);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
fn serialized_size(&self) -> usize {
|
||||||
|
self.hash.serialized_size() + self.index.serialized_size()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Deserializable for OutPoint {
|
impl Deserializable for OutPoint {
|
||||||
|
@ -79,6 +84,13 @@ impl Serializable for TransactionInput {
|
||||||
.append(&self.script_sig)
|
.append(&self.script_sig)
|
||||||
.append(&self.sequence);
|
.append(&self.sequence);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
fn serialized_size(&self) -> usize {
|
||||||
|
self.previous_output.serialized_size() +
|
||||||
|
self.script_sig.serialized_size() +
|
||||||
|
self.sequence.serialized_size()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Deserializable for TransactionInput {
|
impl Deserializable for TransactionInput {
|
||||||
|
@ -119,6 +131,12 @@ impl Serializable for TransactionOutput {
|
||||||
.append(&self.value)
|
.append(&self.value)
|
||||||
.append(&self.script_pubkey);
|
.append(&self.script_pubkey);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
fn serialized_size(&self) -> usize {
|
||||||
|
self.value.serialized_size() +
|
||||||
|
self.script_pubkey.serialized_size()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Deserializable for TransactionOutput {
|
impl Deserializable for TransactionOutput {
|
||||||
|
@ -167,6 +185,14 @@ impl Serializable for Transaction {
|
||||||
.append_list(&self.outputs)
|
.append_list(&self.outputs)
|
||||||
.append(&self.lock_time);
|
.append(&self.lock_time);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
fn serialized_size(&self) -> usize {
|
||||||
|
self.version.serialized_size() +
|
||||||
|
serialized_list_size(&self.inputs) +
|
||||||
|
serialized_list_size(&self.outputs) +
|
||||||
|
self.lock_time.serialized_size()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Deserializable for Transaction {
|
impl Deserializable for Transaction {
|
||||||
|
@ -205,6 +231,7 @@ impl Transaction {
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use hash::H256;
|
use hash::H256;
|
||||||
|
use ser::Serializable;
|
||||||
use super::Transaction;
|
use super::Transaction;
|
||||||
|
|
||||||
// real transaction from block 80000
|
// real transaction from block 80000
|
||||||
|
@ -231,4 +258,11 @@ mod tests {
|
||||||
let hash = H256::from_reversed_str("5a4ebf66822b0b2d56bd9dc64ece0bc38ee7844a23ff1d7320a88c5fdb2ad3e2");
|
let hash = H256::from_reversed_str("5a4ebf66822b0b2d56bd9dc64ece0bc38ee7844a23ff1d7320a88c5fdb2ad3e2");
|
||||||
assert_eq!(t.hash(), hash);
|
assert_eq!(t.hash(), hash);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_transaction_serialized_len() {
|
||||||
|
let raw_tx: &'static str = "0100000001a6b97044d03da79c005b20ea9c0e1a6d9dc12d9f7b91a5911c9030a439eed8f5000000004948304502206e21798a42fae0e854281abd38bacd1aeed3ee3738d9e1446618c4571d1090db022100e2ac980643b0b82c0e88ffdfec6b64e3e6ba35e7ba5fdd7d5d6cc8d25c6b241501ffffffff0100f2052a010000001976a914404371705fa9bd789a2fcd52d2c580b65d35549d88ac00000000";
|
||||||
|
let tx: Transaction = raw_tx.into();
|
||||||
|
assert_eq!(tx.serialized_size(), raw_tx.len() / 2);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,8 +8,7 @@ use rocksdb::{DB, Writable, WriteBatch, WriteOptions, IteratorMode, DBIterator,
|
||||||
Options, DBCompactionStyle, BlockBasedOptions, Cache, Column};
|
Options, DBCompactionStyle, BlockBasedOptions, Cache, Column};
|
||||||
use elastic_array::ElasticArray32;
|
use elastic_array::ElasticArray32;
|
||||||
use parking_lot::RwLock;
|
use parking_lot::RwLock;
|
||||||
|
use primitives::bytes::Bytes;
|
||||||
pub type Bytes = Vec<u8>;
|
|
||||||
|
|
||||||
/// Database error
|
/// Database error
|
||||||
pub enum Error {
|
pub enum Error {
|
||||||
|
@ -66,7 +65,7 @@ impl DBTransaction {
|
||||||
self.ops.push(DBOp::Insert {
|
self.ops.push(DBOp::Insert {
|
||||||
col: col,
|
col: col,
|
||||||
key: ekey,
|
key: ekey,
|
||||||
value: value.to_vec(),
|
value: value.to_vec().into(),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -390,8 +389,8 @@ impl Database {
|
||||||
Some(&KeyState::Delete) => Ok(None),
|
Some(&KeyState::Delete) => Ok(None),
|
||||||
None => {
|
None => {
|
||||||
col.map_or_else(
|
col.map_or_else(
|
||||||
|| db.get(key).map(|r| r.map(|v| v.to_vec())),
|
|| db.get(key).map(|r| r.map(|v| v.to_vec().into())),
|
||||||
|c| db.get_cf(cfs[c as usize], key).map(|r| r.map(|v| v.to_vec())))
|
|c| db.get_cf(cfs[c as usize], key).map(|r| r.map(|v| v.to_vec().into())))
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
@ -1,14 +1,13 @@
|
||||||
//! Bitcoin storage
|
//! Bitcoin storage
|
||||||
|
|
||||||
|
use std::{self, fs};
|
||||||
|
use std::path::Path;
|
||||||
use kvdb::{Database, DatabaseConfig};
|
use kvdb::{Database, DatabaseConfig};
|
||||||
|
use byteorder::{LittleEndian, ByteOrder};
|
||||||
use primitives::hash::H256;
|
use primitives::hash::H256;
|
||||||
use primitives::bytes::Bytes;
|
use primitives::bytes::Bytes;
|
||||||
use super::BlockRef;
|
use super::BlockRef;
|
||||||
use byteorder::{LittleEndian, ByteOrder};
|
use {chain, serialization};
|
||||||
use std::{self, fs};
|
|
||||||
use std::path::Path;
|
|
||||||
use chain;
|
|
||||||
use serialization;
|
|
||||||
|
|
||||||
const COL_COUNT: u32 = 10;
|
const COL_COUNT: u32 = 10;
|
||||||
const COL_META: u32 = 0;
|
const COL_META: u32 = 0;
|
||||||
|
@ -87,7 +86,7 @@ impl From<std::io::Error> for Error {
|
||||||
|
|
||||||
fn u64_key(num: u64) -> [u8; 8] {
|
fn u64_key(num: u64) -> [u8; 8] {
|
||||||
let mut result = [0u8; 8];
|
let mut result = [0u8; 8];
|
||||||
LittleEndian::write_u64(&mut result[..], num);
|
LittleEndian::write_u64(&mut result, num);
|
||||||
result
|
result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -180,7 +179,7 @@ impl Storage {
|
||||||
impl Store for Storage {
|
impl Store for Storage {
|
||||||
fn block_hash(&self, number: u64) -> Option<H256> {
|
fn block_hash(&self, number: u64) -> Option<H256> {
|
||||||
self.get(COL_BLOCK_HASHES, &u64_key(number))
|
self.get(COL_BLOCK_HASHES, &u64_key(number))
|
||||||
.map(|val| H256::from(&val[..]))
|
.map(|val| H256::from(&**val))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn block_header_bytes(&self, block_ref: BlockRef) -> Option<Bytes> {
|
fn block_header_bytes(&self, block_ref: BlockRef) -> Option<Bytes> {
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
[package]
|
||||||
|
name = "miner"
|
||||||
|
version = "0.1.0"
|
||||||
|
authors = ["Ethcore <admin@ethcore.io>"]
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
chain = { path = "../chain" }
|
||||||
|
primitives = { path = "../primitives" }
|
||||||
|
serialization = { path = "../serialization" }
|
|
@ -0,0 +1,9 @@
|
||||||
|
extern crate chain;
|
||||||
|
extern crate primitives;
|
||||||
|
extern crate serialization as ser;
|
||||||
|
|
||||||
|
pub mod memory_pool;
|
||||||
|
|
||||||
|
pub use primitives::{hash};
|
||||||
|
|
||||||
|
pub use self::memory_pool::{MemoryPool, Information as MemoryPoolInformation};
|
File diff suppressed because it is too large
Load Diff
|
@ -3,7 +3,6 @@
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate clap;
|
extern crate clap;
|
||||||
|
|
||||||
extern crate bitcrypto as crypto;
|
|
||||||
extern crate keys;
|
extern crate keys;
|
||||||
extern crate script;
|
extern crate script;
|
||||||
extern crate message;
|
extern crate message;
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
use std::{fmt, ops, cmp, str};
|
use std::{fmt, ops, cmp, str};
|
||||||
|
use std::hash::{Hash, Hasher};
|
||||||
use hex::{ToHex, FromHex, FromHexError};
|
use hex::{ToHex, FromHex, FromHexError};
|
||||||
use std::hash::{Hash, Hasher};
|
use std::hash::{Hash, Hasher};
|
||||||
|
|
||||||
|
@ -97,6 +98,8 @@ macro_rules! impl_hash {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Eq for $name {}
|
||||||
|
|
||||||
impl cmp::PartialEq for $name {
|
impl cmp::PartialEq for $name {
|
||||||
fn eq(&self, other: &Self) -> bool {
|
fn eq(&self, other: &Self) -> bool {
|
||||||
let self_ref: &[u8] = &self.0;
|
let self_ref: &[u8] = &self.0;
|
||||||
|
|
|
@ -82,6 +82,15 @@ impl Serializable for CompactInteger {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn serialized_size(&self) -> usize {
|
||||||
|
match self.0 {
|
||||||
|
0...0xfc => 1,
|
||||||
|
0xfd...0xffff => 3,
|
||||||
|
0x10000...0xffff_ffff => 5,
|
||||||
|
_ => 9,
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Deserializable for CompactInteger {
|
impl Deserializable for CompactInteger {
|
||||||
|
|
|
@ -9,6 +9,11 @@ impl Serializable for bool {
|
||||||
fn serialize(&self, s: &mut Stream) {
|
fn serialize(&self, s: &mut Stream) {
|
||||||
s.write_u8(*self as u8).unwrap();
|
s.write_u8(*self as u8).unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
fn serialized_size(&self) -> usize {
|
||||||
|
1
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Serializable for i32 {
|
impl Serializable for i32 {
|
||||||
|
@ -16,6 +21,11 @@ impl Serializable for i32 {
|
||||||
fn serialize(&self, s: &mut Stream) {
|
fn serialize(&self, s: &mut Stream) {
|
||||||
s.write_i32::<LittleEndian>(*self).unwrap();
|
s.write_i32::<LittleEndian>(*self).unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
fn serialized_size(&self) -> usize {
|
||||||
|
4
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Serializable for i64 {
|
impl Serializable for i64 {
|
||||||
|
@ -23,6 +33,11 @@ impl Serializable for i64 {
|
||||||
fn serialize(&self, s: &mut Stream) {
|
fn serialize(&self, s: &mut Stream) {
|
||||||
s.write_i64::<LittleEndian>(*self).unwrap();
|
s.write_i64::<LittleEndian>(*self).unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
fn serialized_size(&self) -> usize {
|
||||||
|
8
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Serializable for u8 {
|
impl Serializable for u8 {
|
||||||
|
@ -30,6 +45,11 @@ impl Serializable for u8 {
|
||||||
fn serialize(&self, s: &mut Stream) {
|
fn serialize(&self, s: &mut Stream) {
|
||||||
s.write_u8(*self).unwrap();
|
s.write_u8(*self).unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
fn serialized_size(&self) -> usize {
|
||||||
|
1
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Serializable for u16 {
|
impl Serializable for u16 {
|
||||||
|
@ -37,6 +57,11 @@ impl Serializable for u16 {
|
||||||
fn serialize(&self, s: &mut Stream) {
|
fn serialize(&self, s: &mut Stream) {
|
||||||
s.write_u16::<LittleEndian>(*self).unwrap();
|
s.write_u16::<LittleEndian>(*self).unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
fn serialized_size(&self) -> usize {
|
||||||
|
2
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Serializable for u32 {
|
impl Serializable for u32 {
|
||||||
|
@ -44,6 +69,11 @@ impl Serializable for u32 {
|
||||||
fn serialize(&self, s: &mut Stream) {
|
fn serialize(&self, s: &mut Stream) {
|
||||||
s.write_u32::<LittleEndian>(*self).unwrap();
|
s.write_u32::<LittleEndian>(*self).unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
fn serialized_size(&self) -> usize {
|
||||||
|
4
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Serializable for u64 {
|
impl Serializable for u64 {
|
||||||
|
@ -51,6 +81,11 @@ impl Serializable for u64 {
|
||||||
fn serialize(&self, s: &mut Stream) {
|
fn serialize(&self, s: &mut Stream) {
|
||||||
s.write_u64::<LittleEndian>(*self).unwrap();
|
s.write_u64::<LittleEndian>(*self).unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
fn serialized_size(&self) -> usize {
|
||||||
|
8
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Deserializable for bool {
|
impl Deserializable for bool {
|
||||||
|
@ -114,6 +149,12 @@ impl Serializable for String {
|
||||||
.append(&CompactInteger::from(bytes.len()))
|
.append(&CompactInteger::from(bytes.len()))
|
||||||
.append_slice(bytes);
|
.append_slice(bytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
fn serialized_size(&self) -> usize {
|
||||||
|
let bytes: &[u8] = self.as_ref();
|
||||||
|
CompactInteger::from(bytes.len()).serialized_size() + bytes.len()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Deserializable for String {
|
impl Deserializable for String {
|
||||||
|
@ -129,6 +170,11 @@ macro_rules! impl_ser_for_hash {
|
||||||
fn serialize(&self, stream: &mut Stream) {
|
fn serialize(&self, stream: &mut Stream) {
|
||||||
stream.append_slice(&**self);
|
stream.append_slice(&**self);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
fn serialized_size(&self) -> usize {
|
||||||
|
$size
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Deserializable for $name {
|
impl Deserializable for $name {
|
||||||
|
@ -157,6 +203,11 @@ impl Serializable for Bytes {
|
||||||
.append(&CompactInteger::from(self.len()))
|
.append(&CompactInteger::from(self.len()))
|
||||||
.append_slice(&self);
|
.append_slice(&self);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
fn serialized_size(&self) -> usize {
|
||||||
|
CompactInteger::from(self.len()).serialized_size() + self.len()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Deserializable for Bytes {
|
impl Deserializable for Bytes {
|
||||||
|
|
|
@ -10,4 +10,4 @@ pub use primitives::{hash, bytes};
|
||||||
|
|
||||||
pub use compact_integer::CompactInteger;
|
pub use compact_integer::CompactInteger;
|
||||||
pub use self::reader::{Reader, Deserializable, deserialize, Error};
|
pub use self::reader::{Reader, Deserializable, deserialize, Error};
|
||||||
pub use self::stream::{Stream, Serializable, serialize};
|
pub use self::stream::{Stream, Serializable, serialize, serialized_list_size};
|
||||||
|
|
|
@ -9,9 +9,20 @@ pub fn serialize(t: &Serializable) -> Bytes {
|
||||||
stream.out()
|
stream.out()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn serialized_list_size<T>(t: &[T]) -> usize where T: Serializable {
|
||||||
|
CompactInteger::from(t.len()).serialized_size() +
|
||||||
|
t.iter().map(Serializable::serialized_size).sum::<usize>()
|
||||||
|
}
|
||||||
|
|
||||||
pub trait Serializable {
|
pub trait Serializable {
|
||||||
/// Serialize the struct and appends it to the end of stream.
|
/// Serialize the struct and appends it to the end of stream.
|
||||||
fn serialize(&self, s: &mut Stream);
|
fn serialize(&self, s: &mut Stream);
|
||||||
|
|
||||||
|
/// Hint about the size of serialized struct.
|
||||||
|
fn serialized_size(&self) -> usize where Self: Sized {
|
||||||
|
// fallback implementation
|
||||||
|
serialize(self).len()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Stream used for serialization.
|
/// Stream used for serialization.
|
||||||
|
|
350
tools/graph.dot
350
tools/graph.dot
|
@ -1,10 +1,10 @@
|
||||||
digraph dependencies {
|
digraph dependencies {
|
||||||
N0[label="pbtc",shape=box];
|
N0[label="pbtc",shape=box];
|
||||||
N1[label="bitcrypto",shape=box];
|
N1[label="clap",shape=box];
|
||||||
N2[label="clap",shape=box];
|
N2[label="db",shape=box];
|
||||||
N3[label="db",shape=box];
|
N3[label="keys",shape=box];
|
||||||
N4[label="keys",shape=box];
|
N4[label="message",shape=box];
|
||||||
N5[label="message",shape=box];
|
N5[label="miner",shape=box];
|
||||||
N6[label="p2p",shape=box];
|
N6[label="p2p",shape=box];
|
||||||
N7[label="script",shape=box];
|
N7[label="script",shape=box];
|
||||||
N8[label="ansi_term",shape=box];
|
N8[label="ansi_term",shape=box];
|
||||||
|
@ -12,58 +12,59 @@ digraph dependencies {
|
||||||
N10[label="nodrop",shape=box];
|
N10[label="nodrop",shape=box];
|
||||||
N11[label="odds",shape=box];
|
N11[label="odds",shape=box];
|
||||||
N12[label="base58",shape=box];
|
N12[label="base58",shape=box];
|
||||||
N13[label="primitives",shape=box];
|
N13[label="bitcrypto",shape=box];
|
||||||
N14[label="rust-crypto",shape=box];
|
N14[label="primitives",shape=box];
|
||||||
N15[label="bitflags v0.4.0",shape=box];
|
N15[label="rust-crypto",shape=box];
|
||||||
N16[label="bitflags v0.7.0",shape=box];
|
N16[label="bitflags v0.4.0",shape=box];
|
||||||
N17[label="byteorder",shape=box];
|
N17[label="bitflags v0.7.0",shape=box];
|
||||||
N18[label="cfg-if",shape=box];
|
N18[label="byteorder",shape=box];
|
||||||
N19[label="chain",shape=box];
|
N19[label="cfg-if",shape=box];
|
||||||
N20[label="rustc-serialize",shape=box];
|
N20[label="chain",shape=box];
|
||||||
N21[label="serialization",shape=box];
|
N21[label="rustc-serialize",shape=box];
|
||||||
N22[label="libc",shape=box];
|
N22[label="serialization",shape=box];
|
||||||
N23[label="strsim",shape=box];
|
N23[label="libc",shape=box];
|
||||||
N24[label="term_size",shape=box];
|
N24[label="strsim",shape=box];
|
||||||
N25[label="unicode-segmentation",shape=box];
|
N25[label="term_size",shape=box];
|
||||||
N26[label="unicode-width",shape=box];
|
N26[label="unicode-segmentation",shape=box];
|
||||||
N27[label="vec_map",shape=box];
|
N27[label="unicode-width",shape=box];
|
||||||
N28[label="yaml-rust",shape=box];
|
N28[label="vec_map",shape=box];
|
||||||
N29[label="crossbeam",shape=box];
|
N29[label="yaml-rust",shape=box];
|
||||||
N30[label="elastic-array",shape=box];
|
N30[label="crossbeam",shape=box];
|
||||||
N31[label="ethcore-devtools",shape=box];
|
N31[label="elastic-array",shape=box];
|
||||||
N32[label="parking_lot",shape=box];
|
N32[label="ethcore-devtools",shape=box];
|
||||||
N33[label="rocksdb",shape=box];
|
N33[label="parking_lot",shape=box];
|
||||||
N34[label="deque",shape=box];
|
N34[label="rocksdb",shape=box];
|
||||||
N35[label="rand",shape=box];
|
N35[label="deque",shape=box];
|
||||||
N36[label="eth-secp256k1",shape=box];
|
N36[label="rand",shape=box];
|
||||||
N37[label="gcc",shape=box];
|
N37[label="eth-secp256k1",shape=box];
|
||||||
N38[label="futures",shape=box];
|
N38[label="gcc",shape=box];
|
||||||
N39[label="log",shape=box];
|
N39[label="futures",shape=box];
|
||||||
N40[label="futures-cpupool",shape=box];
|
N40[label="log",shape=box];
|
||||||
N41[label="num_cpus v1.1.0",shape=box];
|
N41[label="futures-cpupool",shape=box];
|
||||||
N42[label="rayon",shape=box];
|
N42[label="num_cpus v1.1.0",shape=box];
|
||||||
N43[label="kernel32-sys",shape=box];
|
N43[label="rayon",shape=box];
|
||||||
N44[label="winapi",shape=box];
|
N44[label="kernel32-sys",shape=box];
|
||||||
N45[label="winapi-build",shape=box];
|
N45[label="winapi",shape=box];
|
||||||
N46[label="lazy_static",shape=box];
|
N46[label="winapi-build",shape=box];
|
||||||
N47[label="lazycell",shape=box];
|
N47[label="lazy_static",shape=box];
|
||||||
N48[label="mio",shape=box];
|
N48[label="lazycell",shape=box];
|
||||||
N49[label="miow",shape=box];
|
N49[label="mio",shape=box];
|
||||||
N50[label="net2",shape=box];
|
N50[label="miow",shape=box];
|
||||||
N51[label="nix",shape=box];
|
N51[label="net2",shape=box];
|
||||||
N52[label="slab",shape=box];
|
N52[label="nix",shape=box];
|
||||||
N53[label="ws2_32-sys",shape=box];
|
N53[label="slab",shape=box];
|
||||||
N54[label="rustc_version",shape=box];
|
N54[label="ws2_32-sys",shape=box];
|
||||||
N55[label="semver",shape=box];
|
N55[label="rustc_version",shape=box];
|
||||||
N56[label="void",shape=box];
|
N56[label="semver",shape=box];
|
||||||
N57[label="num_cpus v0.2.13",shape=box];
|
N57[label="void",shape=box];
|
||||||
N58[label="owning_ref",shape=box];
|
N58[label="num_cpus v0.2.13",shape=box];
|
||||||
N59[label="time",shape=box];
|
N59[label="owning_ref",shape=box];
|
||||||
N60[label="tokio-core",shape=box];
|
N60[label="time",shape=box];
|
||||||
N61[label="parking_lot_core",shape=box];
|
N61[label="tokio-core",shape=box];
|
||||||
N62[label="smallvec",shape=box];
|
N62[label="parking_lot_core",shape=box];
|
||||||
N63[label="rocksdb-sys",shape=box];
|
N63[label="smallvec",shape=box];
|
||||||
N64[label="scoped-tls",shape=box];
|
N64[label="rocksdb-sys",shape=box];
|
||||||
|
N65[label="scoped-tls",shape=box];
|
||||||
N0 -> N1[label="",style=dashed];
|
N0 -> N1[label="",style=dashed];
|
||||||
N0 -> N2[label="",style=dashed];
|
N0 -> N2[label="",style=dashed];
|
||||||
N0 -> N3[label="",style=dashed];
|
N0 -> N3[label="",style=dashed];
|
||||||
|
@ -71,130 +72,137 @@ digraph dependencies {
|
||||||
N0 -> N5[label="",style=dashed];
|
N0 -> N5[label="",style=dashed];
|
||||||
N0 -> N6[label="",style=dashed];
|
N0 -> N6[label="",style=dashed];
|
||||||
N0 -> N7[label="",style=dashed];
|
N0 -> N7[label="",style=dashed];
|
||||||
N1 -> N13[label="",style=dashed];
|
N1 -> N8[label="",style=dashed];
|
||||||
N1 -> N14[label="",style=dashed];
|
N1 -> N17[label="",style=dashed];
|
||||||
N2 -> N8[label="",style=dashed];
|
N1 -> N23[label="",style=dashed];
|
||||||
N2 -> N16[label="",style=dashed];
|
N1 -> N24[label="",style=dashed];
|
||||||
|
N1 -> N25[label="",style=dashed];
|
||||||
|
N1 -> N26[label="",style=dashed];
|
||||||
|
N1 -> N27[label="",style=dashed];
|
||||||
|
N1 -> N28[label="",style=dashed];
|
||||||
|
N1 -> N29[label="",style=dashed];
|
||||||
|
N2 -> N14[label="",style=dashed];
|
||||||
|
N2 -> N18[label="",style=dashed];
|
||||||
|
N2 -> N20[label="",style=dashed];
|
||||||
N2 -> N22[label="",style=dashed];
|
N2 -> N22[label="",style=dashed];
|
||||||
N2 -> N23[label="",style=dashed];
|
N2 -> N31[label="",style=dashed];
|
||||||
N2 -> N24[label="",style=dashed];
|
N2 -> N32[label="",style=dashed];
|
||||||
N2 -> N25[label="",style=dashed];
|
N2 -> N33[label="",style=dashed];
|
||||||
N2 -> N26[label="",style=dashed];
|
N2 -> N34[label="",style=dashed];
|
||||||
N2 -> N27[label="",style=dashed];
|
N3 -> N12[label="",style=dashed];
|
||||||
N2 -> N28[label="",style=dashed];
|
N3 -> N13[label="",style=dashed];
|
||||||
N3 -> N30[label="",style=dashed];
|
N3 -> N14[label="",style=dashed];
|
||||||
N3 -> N31[label="",style=dashed];
|
N3 -> N21[label="",style=dashed];
|
||||||
N3 -> N32[label="",style=dashed];
|
N3 -> N36[label="",style=dashed];
|
||||||
N3 -> N33[label="",style=dashed];
|
N3 -> N37[label="",style=dashed];
|
||||||
N4 -> N1[label="",style=dashed];
|
N3 -> N47[label="",style=dashed];
|
||||||
N4 -> N12[label="",style=dashed];
|
|
||||||
N4 -> N13[label="",style=dashed];
|
N4 -> N13[label="",style=dashed];
|
||||||
|
N4 -> N14[label="",style=dashed];
|
||||||
|
N4 -> N18[label="",style=dashed];
|
||||||
N4 -> N20[label="",style=dashed];
|
N4 -> N20[label="",style=dashed];
|
||||||
N4 -> N35[label="",style=dashed];
|
N4 -> N22[label="",style=dashed];
|
||||||
N4 -> N36[label="",style=dashed];
|
N5 -> N14[label="",style=dashed];
|
||||||
N4 -> N46[label="",style=dashed];
|
N5 -> N20[label="",style=dashed];
|
||||||
N5 -> N1[label="",style=dashed];
|
N5 -> N22[label="",style=dashed];
|
||||||
N5 -> N13[label="",style=dashed];
|
N6 -> N4[label="",style=dashed];
|
||||||
N5 -> N17[label="",style=dashed];
|
|
||||||
N5 -> N19[label="",style=dashed];
|
|
||||||
N5 -> N21[label="",style=dashed];
|
|
||||||
N6 -> N1[label="",style=dashed];
|
|
||||||
N6 -> N5[label="",style=dashed];
|
|
||||||
N6 -> N13[label="",style=dashed];
|
N6 -> N13[label="",style=dashed];
|
||||||
N6 -> N21[label="",style=dashed];
|
N6 -> N14[label="",style=dashed];
|
||||||
N6 -> N32[label="",style=dashed];
|
N6 -> N22[label="",style=dashed];
|
||||||
N6 -> N35[label="",style=dashed];
|
N6 -> N33[label="",style=dashed];
|
||||||
N6 -> N38[label="",style=dashed];
|
N6 -> N36[label="",style=dashed];
|
||||||
N6 -> N40[label="",style=dashed];
|
N6 -> N39[label="",style=dashed];
|
||||||
N6 -> N59[label="",style=dashed];
|
N6 -> N41[label="",style=dashed];
|
||||||
N6 -> N60[label="",style=dashed];
|
N6 -> N60[label="",style=dashed];
|
||||||
N7 -> N1[label="",style=dashed];
|
N6 -> N61[label="",style=dashed];
|
||||||
N7 -> N4[label="",style=dashed];
|
N7 -> N3[label="",style=dashed];
|
||||||
N7 -> N13[label="",style=dashed];
|
N7 -> N13[label="",style=dashed];
|
||||||
N7 -> N19[label="",style=dashed];
|
N7 -> N14[label="",style=dashed];
|
||||||
N7 -> N21[label="",style=dashed];
|
N7 -> N20[label="",style=dashed];
|
||||||
|
N7 -> N22[label="",style=dashed];
|
||||||
N9 -> N10[label=""];
|
N9 -> N10[label=""];
|
||||||
N9 -> N11[label=""];
|
N9 -> N11[label=""];
|
||||||
N10 -> N11[label=""];
|
N10 -> N11[label=""];
|
||||||
N13 -> N20[label="",style=dashed];
|
N13 -> N14[label="",style=dashed];
|
||||||
N14 -> N20[label="",style=dashed];
|
N13 -> N15[label="",style=dashed];
|
||||||
N14 -> N22[label="",style=dashed];
|
N14 -> N21[label="",style=dashed];
|
||||||
N14 -> N35[label="",style=dashed];
|
N15 -> N21[label="",style=dashed];
|
||||||
N14 -> N37[label="",style=dashed];
|
N15 -> N23[label="",style=dashed];
|
||||||
N14 -> N59[label="",style=dashed];
|
N15 -> N36[label="",style=dashed];
|
||||||
N19 -> N1[label="",style=dashed];
|
N15 -> N38[label="",style=dashed];
|
||||||
N19 -> N13[label="",style=dashed];
|
N15 -> N60[label="",style=dashed];
|
||||||
N19 -> N20[label="",style=dashed];
|
N20 -> N13[label="",style=dashed];
|
||||||
N19 -> N21[label="",style=dashed];
|
N20 -> N14[label="",style=dashed];
|
||||||
N21 -> N13[label="",style=dashed];
|
N20 -> N21[label="",style=dashed];
|
||||||
N21 -> N17[label="",style=dashed];
|
N20 -> N22[label="",style=dashed];
|
||||||
N24 -> N22[label="",style=dashed];
|
N22 -> N14[label="",style=dashed];
|
||||||
N24 -> N43[label="",style=dashed];
|
N22 -> N18[label="",style=dashed];
|
||||||
N24 -> N44[label="",style=dashed];
|
N25 -> N23[label="",style=dashed];
|
||||||
N31 -> N35[label="",style=dashed];
|
N25 -> N44[label="",style=dashed];
|
||||||
N32 -> N58[label="",style=dashed];
|
N25 -> N45[label="",style=dashed];
|
||||||
N32 -> N61[label="",style=dashed];
|
N32 -> N36[label="",style=dashed];
|
||||||
N33 -> N22[label="",style=dashed];
|
N33 -> N59[label="",style=dashed];
|
||||||
N33 -> N63[label="",style=dashed];
|
N33 -> N62[label="",style=dashed];
|
||||||
N34 -> N35[label="",style=dashed];
|
N34 -> N23[label="",style=dashed];
|
||||||
N35 -> N22[label="",style=dashed];
|
N34 -> N64[label="",style=dashed];
|
||||||
N36 -> N9[label="",style=dashed];
|
N35 -> N36[label="",style=dashed];
|
||||||
N36 -> N20[label="",style=dashed];
|
N36 -> N23[label="",style=dashed];
|
||||||
N36 -> N22[label="",style=dashed];
|
N37 -> N9[label="",style=dashed];
|
||||||
N36 -> N35[label="",style=dashed];
|
N37 -> N21[label="",style=dashed];
|
||||||
N36 -> N37[label="",style=dashed];
|
N37 -> N23[label="",style=dashed];
|
||||||
N37 -> N42[label="",style=dashed];
|
N37 -> N36[label="",style=dashed];
|
||||||
N38 -> N39[label="",style=dashed];
|
N37 -> N38[label="",style=dashed];
|
||||||
N40 -> N29[label="",style=dashed];
|
N38 -> N43[label="",style=dashed];
|
||||||
N40 -> N38[label="",style=dashed];
|
N39 -> N40[label="",style=dashed];
|
||||||
N40 -> N41[label="",style=dashed];
|
N41 -> N30[label="",style=dashed];
|
||||||
N41 -> N22[label="",style=dashed];
|
N41 -> N39[label="",style=dashed];
|
||||||
N42 -> N34[label="",style=dashed];
|
N41 -> N42[label="",style=dashed];
|
||||||
N42 -> N35[label="",style=dashed];
|
N42 -> N23[label="",style=dashed];
|
||||||
N42 -> N57[label="",style=dashed];
|
N43 -> N35[label="",style=dashed];
|
||||||
N43 -> N44[label="",style=dashed];
|
N43 -> N36[label="",style=dashed];
|
||||||
N43 -> N45[label="",style=dashed];
|
N43 -> N58[label="",style=dashed];
|
||||||
N48 -> N22[label="",style=dashed];
|
N44 -> N45[label="",style=dashed];
|
||||||
N48 -> N39[label="",style=dashed];
|
N44 -> N46[label="",style=dashed];
|
||||||
N48 -> N43[label="",style=dashed];
|
N49 -> N23[label="",style=dashed];
|
||||||
N48 -> N44[label="",style=dashed];
|
N49 -> N40[label="",style=dashed];
|
||||||
N48 -> N47[label=""];
|
N49 -> N44[label="",style=dashed];
|
||||||
N48 -> N49[label=""];
|
N49 -> N45[label="",style=dashed];
|
||||||
N48 -> N50[label=""];
|
N49 -> N48[label=""];
|
||||||
N48 -> N51[label=""];
|
|
||||||
N48 -> N52[label="",style=dashed];
|
|
||||||
N49 -> N43[label=""];
|
|
||||||
N49 -> N44[label=""];
|
|
||||||
N49 -> N50[label=""];
|
N49 -> N50[label=""];
|
||||||
N49 -> N53[label=""];
|
N49 -> N51[label=""];
|
||||||
N50 -> N18[label=""];
|
N49 -> N52[label=""];
|
||||||
N50 -> N22[label=""];
|
N49 -> N53[label="",style=dashed];
|
||||||
N50 -> N43[label=""];
|
|
||||||
N50 -> N44[label=""];
|
N50 -> N44[label=""];
|
||||||
N50 -> N53[label=""];
|
N50 -> N45[label=""];
|
||||||
N51 -> N15[label=""];
|
N50 -> N51[label=""];
|
||||||
N51 -> N18[label=""];
|
N50 -> N54[label=""];
|
||||||
N51 -> N22[label=""];
|
N51 -> N19[label=""];
|
||||||
|
N51 -> N23[label=""];
|
||||||
|
N51 -> N44[label=""];
|
||||||
|
N51 -> N45[label=""];
|
||||||
N51 -> N54[label=""];
|
N51 -> N54[label=""];
|
||||||
N51 -> N55[label=""];
|
N52 -> N16[label=""];
|
||||||
N51 -> N56[label=""];
|
N52 -> N19[label=""];
|
||||||
N53 -> N44[label=""];
|
N52 -> N23[label=""];
|
||||||
N53 -> N45[label=""];
|
N52 -> N55[label=""];
|
||||||
N54 -> N55[label=""];
|
N52 -> N56[label=""];
|
||||||
N57 -> N22[label="",style=dashed];
|
N52 -> N57[label=""];
|
||||||
N59 -> N22[label="",style=dashed];
|
N54 -> N45[label=""];
|
||||||
N59 -> N43[label="",style=dashed];
|
N54 -> N46[label=""];
|
||||||
N59 -> N44[label="",style=dashed];
|
N55 -> N56[label=""];
|
||||||
N60 -> N38[label="",style=dashed];
|
N58 -> N23[label="",style=dashed];
|
||||||
N60 -> N39[label="",style=dashed];
|
N60 -> N23[label="",style=dashed];
|
||||||
N60 -> N48[label="",style=dashed];
|
N60 -> N44[label="",style=dashed];
|
||||||
N60 -> N52[label="",style=dashed];
|
N60 -> N45[label="",style=dashed];
|
||||||
N60 -> N64[label="",style=dashed];
|
N61 -> N39[label="",style=dashed];
|
||||||
N61 -> N22[label="",style=dashed];
|
N61 -> N40[label="",style=dashed];
|
||||||
N61 -> N35[label="",style=dashed];
|
N61 -> N49[label="",style=dashed];
|
||||||
N61 -> N43[label="",style=dashed];
|
N61 -> N53[label="",style=dashed];
|
||||||
N61 -> N44[label="",style=dashed];
|
N61 -> N65[label="",style=dashed];
|
||||||
N61 -> N62[label="",style=dashed];
|
N62 -> N23[label="",style=dashed];
|
||||||
N63 -> N22[label="",style=dashed];
|
N62 -> N36[label="",style=dashed];
|
||||||
N63 -> N37[label="",style=dashed];
|
N62 -> N44[label="",style=dashed];
|
||||||
|
N62 -> N45[label="",style=dashed];
|
||||||
|
N62 -> N63[label="",style=dashed];
|
||||||
|
N64 -> N23[label="",style=dashed];
|
||||||
|
N64 -> N38[label="",style=dashed];
|
||||||
}
|
}
|
||||||
|
|
BIN
tools/graph.png
BIN
tools/graph.png
Binary file not shown.
Before Width: | Height: | Size: 424 KiB After Width: | Height: | Size: 455 KiB |
|
@ -7,6 +7,7 @@ cargo test\
|
||||||
-p bitcrypto\
|
-p bitcrypto\
|
||||||
-p keys\
|
-p keys\
|
||||||
-p message\
|
-p message\
|
||||||
|
-p miner\
|
||||||
-p p2p\
|
-p p2p\
|
||||||
-p primitives\
|
-p primitives\
|
||||||
-p script\
|
-p script\
|
||||||
|
|
Loading…
Reference in New Issue