Merge pull request #3713 from ethcore/fix-v-u64

Encode networkid as a u64.
This commit is contained in:
Robert Habermeier 2016-12-05 17:14:07 +01:00 committed by GitHub
commit a726472023
13 changed files with 28 additions and 28 deletions

View File

@ -1272,7 +1272,7 @@ impl BlockChainClient for Client {
self.miner.pending_transactions(self.chain.read().best_block_number()) self.miner.pending_transactions(self.chain.read().best_block_number())
} }
fn signing_network_id(&self) -> Option<u8> { fn signing_network_id(&self) -> Option<u64> {
self.engine.signing_network_id(&self.latest_env_info()) self.engine.signing_network_id(&self.latest_env_info())
} }

View File

@ -662,7 +662,7 @@ impl BlockChainClient for TestBlockChainClient {
self.miner.pending_transactions(self.chain_info().best_block_number) self.miner.pending_transactions(self.chain_info().best_block_number)
} }
fn signing_network_id(&self) -> Option<u8> { None } fn signing_network_id(&self) -> Option<u64> { None }
fn mode(&self) -> Mode { Mode::Active } fn mode(&self) -> Mode { Mode::Active }

View File

@ -237,7 +237,7 @@ pub trait BlockChainClient : Sync + Send {
} }
/// Get the preferred network ID to sign on /// Get the preferred network ID to sign on
fn signing_network_id(&self) -> Option<u8>; fn signing_network_id(&self) -> Option<u64>;
/// Get the mode. /// Get the mode.
fn mode(&self) -> Mode; fn mode(&self) -> Mode;

View File

@ -113,7 +113,7 @@ pub trait Engine : Sync + Send {
fn verify_transaction(&self, _t: &SignedTransaction, _header: &Header) -> Result<(), Error> { Ok(()) } fn verify_transaction(&self, _t: &SignedTransaction, _header: &Header) -> Result<(), Error> { Ok(()) }
/// The network ID that transactions should be signed with. /// The network ID that transactions should be signed with.
fn signing_network_id(&self, _env_info: &EnvInfo) -> Option<u8> { None } fn signing_network_id(&self, _env_info: &EnvInfo) -> Option<u64> { None }
/// Verify the seal of a block. This is an auxilliary method that actually just calls other `verify_` methods /// Verify the seal of a block. This is an auxilliary method that actually just calls other `verify_` methods
/// to get the job done. By default it must pass `verify_basic` and `verify_block_unordered`. If more or fewer /// to get the job done. By default it must pass `verify_basic` and `verify_block_unordered`. If more or fewer

View File

@ -163,9 +163,9 @@ impl Engine for Ethash {
} }
} }
fn signing_network_id(&self, env_info: &EnvInfo) -> Option<u8> { fn signing_network_id(&self, env_info: &EnvInfo) -> Option<u64> {
if env_info.number >= self.ethash_params.eip155_transition && self.params().network_id < 127 { if env_info.number >= self.ethash_params.eip155_transition {
Some(self.params().network_id as u8) Some(self.params().network_id)
} else { } else {
None None
} }
@ -314,7 +314,7 @@ impl Engine for Ethash {
} }
if let Some(n) = t.network_id() { if let Some(n) = t.network_id() {
if header.number() < self.ethash_params.eip155_transition || n as usize != self.params().network_id { if header.number() < self.ethash_params.eip155_transition || n != self.params().network_id {
return Err(TransactionError::InvalidNetworkId.into()) return Err(TransactionError::InvalidNetworkId.into())
} }
} }

View File

@ -38,7 +38,7 @@ pub struct CommonParams {
/// Maximum size of extra data. /// Maximum size of extra data.
pub maximum_extra_data_size: usize, pub maximum_extra_data_size: usize,
/// Network id. /// Network id.
pub network_id: usize, pub network_id: u64,
/// Main subprotocol name. /// Main subprotocol name.
pub subprotocol_name: String, pub subprotocol_name: String,
/// Minimum gas limit. /// Minimum gas limit.
@ -164,7 +164,7 @@ impl Spec {
pub fn nodes(&self) -> &[String] { &self.nodes } pub fn nodes(&self) -> &[String] { &self.nodes }
/// Get the configured Network ID. /// Get the configured Network ID.
pub fn network_id(&self) -> usize { self.params.network_id } pub fn network_id(&self) -> u64 { self.params.network_id }
/// Get the configured subprotocol name. /// Get the configured subprotocol name.
pub fn subprotocol_name(&self) -> String { self.params.subprotocol_name.clone() } pub fn subprotocol_name(&self) -> String { self.params.subprotocol_name.clone() }

View File

@ -72,7 +72,7 @@ pub struct Transaction {
impl Transaction { impl Transaction {
/// Append object with a without signature into RLP stream /// Append object with a without signature into RLP stream
pub fn rlp_append_unsigned_transaction(&self, s: &mut RlpStream, network_id: Option<u8>) { pub fn rlp_append_unsigned_transaction(&self, s: &mut RlpStream, network_id: Option<u64>) {
s.begin_list(if network_id.is_none() { 6 } else { 9 }); s.begin_list(if network_id.is_none() { 6 } else { 9 });
s.append(&self.nonce); s.append(&self.nonce);
s.append(&self.gas_price); s.append(&self.gas_price);
@ -140,26 +140,26 @@ impl From<ethjson::transaction::Transaction> for SignedTransaction {
impl Transaction { impl Transaction {
/// The message hash of the transaction. /// The message hash of the transaction.
pub fn hash(&self, network_id: Option<u8>) -> H256 { pub fn hash(&self, network_id: Option<u64>) -> H256 {
let mut stream = RlpStream::new(); let mut stream = RlpStream::new();
self.rlp_append_unsigned_transaction(&mut stream, network_id); self.rlp_append_unsigned_transaction(&mut stream, network_id);
stream.out().sha3() stream.out().sha3()
} }
/// Signs the transaction as coming from `sender`. /// Signs the transaction as coming from `sender`.
pub fn sign(self, secret: &Secret, network_id: Option<u8>) -> SignedTransaction { pub fn sign(self, secret: &Secret, network_id: Option<u64>) -> SignedTransaction {
let sig = ::ethkey::sign(secret, &self.hash(network_id)) let sig = ::ethkey::sign(secret, &self.hash(network_id))
.expect("data is valid and context has signing capabilities; qed"); .expect("data is valid and context has signing capabilities; qed");
self.with_signature(sig, network_id) self.with_signature(sig, network_id)
} }
/// Signs the transaction with signature. /// Signs the transaction with signature.
pub fn with_signature(self, sig: Signature, network_id: Option<u8>) -> SignedTransaction { pub fn with_signature(self, sig: Signature, network_id: Option<u64>) -> SignedTransaction {
SignedTransaction { SignedTransaction {
unsigned: self, unsigned: self,
r: sig.r().into(), r: sig.r().into(),
s: sig.s().into(), s: sig.s().into(),
v: sig.v() + if let Some(n) = network_id { 35 + n * 2 } else { 27 }, v: sig.v() as u64 + if let Some(n) = network_id { 35 + n * 2 } else { 27 },
hash: Cell::new(None), hash: Cell::new(None),
sender: Cell::new(None), sender: Cell::new(None),
} }
@ -211,7 +211,7 @@ pub struct SignedTransaction {
unsigned: Transaction, unsigned: Transaction,
/// The V field of the signature; the LS bit described which half of the curve our point falls /// The V field of the signature; the LS bit described which half of the curve our point falls
/// in. The MS bits describe which network this transaction is for. If 27/28, its for all networks. /// in. The MS bits describe which network this transaction is for. If 27/28, its for all networks.
v: u8, v: u64,
/// The R field of the signature; helps describe the point on the curve. /// The R field of the signature; helps describe the point on the curve.
r: U256, r: U256,
/// The S field of the signature; helps describe the point on the curve. /// The S field of the signature; helps describe the point on the curve.
@ -302,10 +302,10 @@ impl SignedTransaction {
} }
/// 0 if `v` would have been 27 under "Electrum" notation, 1 if 28 or 4 if invalid. /// 0 if `v` would have been 27 under "Electrum" notation, 1 if 28 or 4 if invalid.
pub fn standard_v(&self) -> u8 { match self.v { v if v == 27 || v == 28 || v > 36 => (v - 1) % 2, _ => 4 } } pub fn standard_v(&self) -> u8 { match self.v { v if v == 27 || v == 28 || v > 36 => ((v - 1) % 2) as u8, _ => 4 } }
/// The network ID, or `None` if this is a global transaction. /// The network ID, or `None` if this is a global transaction.
pub fn network_id(&self) -> Option<u8> { pub fn network_id(&self) -> Option<u64> {
match self.v { match self.v {
v if v > 36 => Some((v - 35) / 2), v if v > 36 => Some((v - 35) / 2),
_ => None, _ => None,

View File

@ -48,7 +48,7 @@ usage! {
flag_testnet: bool, flag_testnet: bool,
flag_import_geth_keys: bool, flag_import_geth_keys: bool,
flag_datadir: Option<String>, flag_datadir: Option<String>,
flag_networkid: Option<usize>, flag_networkid: Option<u64>,
flag_peers: Option<u16>, flag_peers: Option<u16>,
flag_nodekey: Option<String>, flag_nodekey: Option<String>,
flag_nodiscover: bool, flag_nodiscover: bool,
@ -122,7 +122,7 @@ usage! {
or |c: &Config| otry!(c.network).nat.clone(), or |c: &Config| otry!(c.network).nat.clone(),
flag_allow_ips: String = "all", flag_allow_ips: String = "all",
or |c: &Config| otry!(c.network).allow_ips.clone(), or |c: &Config| otry!(c.network).allow_ips.clone(),
flag_network_id: Option<usize> = None, flag_network_id: Option<u64> = None,
or |c: &Config| otry!(c.network).id.clone().map(Some), or |c: &Config| otry!(c.network).id.clone().map(Some),
flag_bootnodes: Option<String> = None, flag_bootnodes: Option<String> = None,
or |c: &Config| otry!(c.network).bootnodes.clone().map(|vec| Some(vec.join(","))), or |c: &Config| otry!(c.network).bootnodes.clone().map(|vec| Some(vec.join(","))),
@ -328,7 +328,7 @@ struct Network {
max_pending_peers: Option<u16>, max_pending_peers: Option<u16>,
nat: Option<String>, nat: Option<String>,
allow_ips: Option<String>, allow_ips: Option<String>,
id: Option<usize>, id: Option<u64>,
bootnodes: Option<Vec<String>>, bootnodes: Option<Vec<String>>,
discovery: Option<bool>, discovery: Option<bool>,
node_key: Option<String>, node_key: Option<String>,

View File

@ -527,7 +527,7 @@ impl Configuration {
Ok(ret) Ok(ret)
} }
fn network_id(&self) -> Option<usize> { fn network_id(&self) -> Option<u64> {
self.args.flag_network_id.or(self.args.flag_networkid) self.args.flag_network_id.or(self.args.flag_networkid)
} }

View File

@ -70,7 +70,7 @@ pub struct RunCmd {
pub http_conf: HttpConfiguration, pub http_conf: HttpConfiguration,
pub ipc_conf: IpcConfiguration, pub ipc_conf: IpcConfiguration,
pub net_conf: NetworkConfiguration, pub net_conf: NetworkConfiguration,
pub network_id: Option<usize>, pub network_id: Option<u64>,
pub warp_sync: bool, pub warp_sync: bool,
pub acc_conf: AccountsConfig, pub acc_conf: AccountsConfig,
pub gas_pricer: GasPricerConfig, pub gas_pricer: GasPricerConfig,

View File

@ -23,7 +23,7 @@ use ethsync::{SyncProvider, SyncStatus, SyncState, PeerInfo, TransactionStats};
/// TestSyncProvider config. /// TestSyncProvider config.
pub struct Config { pub struct Config {
/// Protocol version. /// Protocol version.
pub network_id: usize, pub network_id: u64,
/// Number of peers. /// Number of peers.
pub num_peers: usize, pub num_peers: usize,
} }

View File

@ -44,7 +44,7 @@ pub struct SyncConfig {
/// Enable ancient block download. /// Enable ancient block download.
pub download_old_blocks: bool, pub download_old_blocks: bool,
/// Network ID /// Network ID
pub network_id: usize, pub network_id: u64,
/// Main "eth" subprotocol name. /// Main "eth" subprotocol name.
pub subprotocol_name: [u8; 3], pub subprotocol_name: [u8; 3],
/// Fork block to check /// Fork block to check

View File

@ -192,7 +192,7 @@ pub struct SyncStatus {
/// Syncing protocol version. That's the maximum protocol version we connect to. /// Syncing protocol version. That's the maximum protocol version we connect to.
pub protocol_version: u8, pub protocol_version: u8,
/// The underlying p2p network version. /// The underlying p2p network version.
pub network_id: usize, pub network_id: u64,
/// `BlockChain` height for the moment the sync started. /// `BlockChain` height for the moment the sync started.
pub start_block_number: BlockNumber, pub start_block_number: BlockNumber,
/// Last fully downloaded and imported block number (if any). /// Last fully downloaded and imported block number (if any).
@ -273,7 +273,7 @@ struct PeerInfo {
/// Peer chain genesis hash /// Peer chain genesis hash
genesis: H256, genesis: H256,
/// Peer network id /// Peer network id
network_id: usize, network_id: u64,
/// Peer best block hash /// Peer best block hash
latest_hash: H256, latest_hash: H256,
/// Peer total difficulty if known /// Peer total difficulty if known
@ -341,7 +341,7 @@ pub struct ChainSync {
/// Last propagated block number /// Last propagated block number
last_sent_block_number: BlockNumber, last_sent_block_number: BlockNumber,
/// Network ID /// Network ID
network_id: usize, network_id: u64,
/// Optional fork block to check /// Optional fork block to check
fork_block: Option<(BlockNumber, H256)>, fork_block: Option<(BlockNumber, H256)>,
/// Snapshot downloader. /// Snapshot downloader.