Merge pull request #3713 from ethcore/fix-v-u64
Encode networkid as a u64.
This commit is contained in:
commit
a726472023
@ -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())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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 }
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
@ -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
|
||||||
|
@ -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())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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() }
|
||||||
|
@ -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,
|
||||||
|
@ -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>,
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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,
|
||||||
|
@ -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,
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
@ -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.
|
||||||
|
Loading…
Reference in New Issue
Block a user