Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 20 additions & 2 deletions src/commands/create_multisig_address.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ use sha2::{Digest, Sha256};

use transparent::address::TransparentAddress;
use zcash_keys::encoding::AddressCodec;
use zcash_protocol::consensus::Network;
use zcash_protocol::{consensus, local_consensus::LocalNetwork, consensus::BlockHeight};
use zcash_script::{
pattern::check_multisig,
script::{self, Evaluable},
Expand Down Expand Up @@ -54,7 +54,25 @@ impl Command {
} = self;

let (multisig_script, addr) = multisig_script(threshold, pub_keys)?;
let addr = addr.encode(&Network::from(network));
let params = match network {
crate::data::Network::Main => crate::data::NetworkParams::Consensus(consensus::Network::MainNetwork),
crate::data::Network::Test => crate::data::NetworkParams::Consensus(consensus::Network::TestNetwork),
crate::data::Network::Regtest => {
// Create a LocalNetwork with all upgrades at height 1
let height_1 = Some(BlockHeight::from_u32(1));
crate::data::NetworkParams::Local(LocalNetwork {
overwinter: height_1,
sapling: height_1,
blossom: height_1,
heartwood: height_1,
canopy: height_1,
nu5: height_1,
nu6: height_1,
nu6_1: height_1,
})
}
};
let addr = addr.encode(&params);
println!("Created multisig address: {addr}");
println!("Redeem script: {}", hex::encode(multisig_script.to_bytes()));

Expand Down
20 changes: 20 additions & 0 deletions src/commands/inspect/block.rs
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,26 @@ impl BlockParams for Network {
}
}

impl BlockParams for zcash_protocol::local_consensus::LocalNetwork {
// Equihash parameters for Regtest obtained from
// https://github.com/zcash/zcash/blob/16ac743764a513e41dafb2cd79c2417c5bb41e81/src/chainparams.cpp#L795-L799
fn equihash_n(&self) -> u32 {
48
}

fn equihash_k(&self) -> u32 {
5
}

fn pow_limit(&self) -> U256 {
// Regtest uses same PoW limit as testnet (easier than mainnet)
U256::from_big_endian(
&hex::decode("0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f")
.unwrap(),
)
}
}

pub(crate) fn guess_params(header: &BlockHeader) -> Option<Network> {
// If the block target falls between the testnet and mainnet powLimit, assume testnet.
let (target, is_negative, did_overflow) = U256::from_compact(header.bits);
Expand Down
2 changes: 1 addition & 1 deletion src/commands/keystone.rs
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ impl Enroll {
let params = config.network();

let (_, db_data) = get_db_paths(wallet_dir.as_ref());
let db_data = WalletDb::for_path(db_data, params, SystemClock, OsRng)?;
let db_data = WalletDb::for_path(db_data, params.clone(), SystemClock, OsRng)?;
let account = select_account(&db_data, self.account_id)?;

let key_derivation = account
Expand Down
2 changes: 1 addition & 1 deletion src/commands/pczt/create.rs
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ impl Command {
let params = config.network();

let (_, db_data) = get_db_paths(wallet_dir.as_ref());
let mut db_data = WalletDb::for_path(db_data, params, SystemClock, OsRng)?;
let mut db_data = WalletDb::for_path(db_data, params.clone(), SystemClock, OsRng)?;
let account = select_account(&db_data, self.account_id)?;

// Create the PCZT.
Expand Down
27 changes: 22 additions & 5 deletions src/commands/pczt/create_manual.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,15 +21,16 @@ use zcash_primitives::transaction::{
Transaction,
};
use zcash_protocol::{
consensus::{self, Parameters},
consensus::{self, BlockHeight, Parameters},
local_consensus::LocalNetwork,
memo::{Memo, MemoBytes},
value::Zatoshis,
};
use zcash_script::script;

use crate::{
config::WalletConfig,
data::Network,
data::{Network, NetworkParams},
error,
remote::{tor_client, Servers},
};
Expand Down Expand Up @@ -144,7 +145,23 @@ enum SpendInfo {
impl Command {
pub(crate) async fn run(self, wallet_dir: Option<String>) -> anyhow::Result<()> {
let params = if let Some(network) = self.network {
consensus::Network::from(network)
match network {
Network::Main => NetworkParams::Consensus(consensus::Network::MainNetwork),
Network::Test => NetworkParams::Consensus(consensus::Network::TestNetwork),
Network::Regtest => {
let height_1 = Some(BlockHeight::from_u32(1));
NetworkParams::Local(LocalNetwork {
overwinter: height_1,
sapling: height_1,
blossom: height_1,
heartwood: height_1,
canopy: height_1,
nu5: height_1,
nu6: height_1,
nu6_1: height_1,
})
}
}
} else {
let config = WalletConfig::read(wallet_dir.as_ref())?;
config.network()
Expand All @@ -166,7 +183,7 @@ impl Command {
.transpose()?
.map(MemoBytes::from);

let server = self.server.pick(params)?;
let server = self.server.pick(&params)?;
let mut client = if self.disable_tor {
server.connect_direct().await?
} else {
Expand Down Expand Up @@ -308,7 +325,7 @@ impl Command {
memo: Option<MemoBytes>|
-> anyhow::Result<_> {
let mut builder = Builder::new(
params,
params.clone(),
target_height,
zcash_primitives::transaction::builder::BuildConfig::Standard {
sapling_anchor,
Expand Down
4 changes: 2 additions & 2 deletions src/commands/pczt/send.rs
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,9 @@ impl Command {
let params = config.network();

let (_, db_data) = get_db_paths(wallet_dir.as_ref());
let mut db_data = WalletDb::for_path(db_data, params, SystemClock, OsRng)?;
let mut db_data = WalletDb::for_path(db_data, params.clone(), SystemClock, OsRng)?;

let server = self.server.pick(params)?;
let server = self.server.pick(&params)?;
let mut client = if self.disable_tor {
server.connect_direct().await?
} else {
Expand Down
2 changes: 1 addition & 1 deletion src/commands/pczt/send_without_storing.rs
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ impl Command {
let config = WalletConfig::read(wallet_dir.as_ref())?;
let params = config.network();

let server = self.server.pick(params)?;
let server = self.server.pick(&params)?;
let mut client = if self.disable_tor {
server.connect_direct().await?
} else {
Expand Down
2 changes: 1 addition & 1 deletion src/commands/pczt/shield.rs
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ impl Command {
let params = config.network();

let (_, db_data) = get_db_paths(wallet_dir.as_ref());
let mut db_data = WalletDb::for_path(db_data, params, SystemClock, OsRng)?;
let mut db_data = WalletDb::for_path(db_data, params.clone(), SystemClock, OsRng)?;
let account = select_account(&db_data, self.account_id)?;

let addresses = self
Expand Down
2 changes: 1 addition & 1 deletion src/commands/wallet/balance.rs
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ impl Command {
let params = get_wallet_network(wallet_dir.as_ref())?;

let (_, db_data) = get_db_paths(wallet_dir.as_ref());
let db_data = WalletDb::for_path(db_data, params, (), ())?;
let db_data = WalletDb::for_path(db_data, params.clone(), (), ())?;
let account = select_account(&db_data, self.account_id)?;

let address = db_data
Expand Down
12 changes: 6 additions & 6 deletions src/commands/wallet/enhance.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,11 @@ use zcash_client_backend::{
use zcash_client_sqlite::{util::SystemClock, WalletDb};
use zcash_keys::encoding::AddressCodec;
use zcash_primitives::transaction::{Transaction, TxId};
use zcash_protocol::consensus::{BlockHeight, BranchId, Network};
use zcash_protocol::consensus::{BlockHeight, BranchId};

use crate::{
config::get_wallet_network,
data::get_db_paths,
data::{get_db_paths, NetworkParams},
remote::{tor_client, Servers},
};

Expand All @@ -40,7 +40,7 @@ pub(crate) struct Command {
}

fn parse_raw_transaction(
params: &Network,
params: &NetworkParams,
chain_tip: BlockHeight,
tx: RawTransaction,
) -> Result<(Transaction, Option<BlockHeight>), anyhow::Error> {
Expand All @@ -58,7 +58,7 @@ fn parse_raw_transaction(

async fn fetch_transaction(
client: &mut CompactTxStreamerClient<Channel>,
params: &Network,
params: &NetworkParams,
chain_tip: BlockHeight,
txid: TxId,
) -> Result<Option<(Transaction, Option<BlockHeight>)>, anyhow::Error> {
Expand Down Expand Up @@ -88,7 +88,7 @@ impl Command {
let params = get_wallet_network(wallet_dir.as_ref())?;
let (_, db_data) = get_db_paths(wallet_dir.as_ref());

let mut db_data = WalletDb::for_path(db_data, params, SystemClock, OsRng)?;
let mut db_data = WalletDb::for_path(db_data, params.clone(), SystemClock, OsRng)?;
let chain_tip = db_data.chain_height()?.ok_or_else(|| {
anyhow!("Chain height must be available to perform transaction enhancement.")
})?;
Expand All @@ -98,7 +98,7 @@ impl Command {
// - Create an isolated `lightwalletd` connection for each transaction.
// - Spread transactions across all available servers.
// - Fetch transactions in parallel, with timing noise.
let server = self.server.pick(params)?;
let server = self.server.pick(&params)?;
let mut client = if self.disable_tor {
server.connect_direct().await?
} else {
Expand Down
4 changes: 2 additions & 2 deletions src/commands/wallet/gen_account.rs
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ impl Command {
let params = config.network();

let (_, db_data) = get_db_paths(wallet_dir.as_ref());
let mut db_data = WalletDb::for_path(db_data, params, SystemClock, OsRng)?;
let mut db_data = WalletDb::for_path(db_data, params.clone(), SystemClock, OsRng)?;

// Decrypt the mnemonic to access the seed.
let identities = age::IdentityFile::from_file(self.identity)?.into_identities()?;
Expand All @@ -48,7 +48,7 @@ impl Command {
"Seed must be present to enable generating a new account"
))?;

let server = self.server.pick(params)?;
let server = self.server.pick(&params)?;
let mut client = if self.disable_tor {
server.connect_direct().await?
} else {
Expand Down
2 changes: 1 addition & 1 deletion src/commands/wallet/gen_addr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ impl Command {
pub(crate) fn run(self, wallet_dir: Option<String>) -> anyhow::Result<()> {
let params = get_wallet_network(wallet_dir.as_ref())?;
let (_, db_data) = get_db_paths(wallet_dir.as_ref());
let mut db_data = WalletDb::for_path(db_data, params, SystemClock, OsRng)?;
let mut db_data = WalletDb::for_path(db_data, params.clone(), SystemClock, OsRng)?;

let account = select_account(&db_data, self.account_id)?;

Expand Down
27 changes: 19 additions & 8 deletions src/commands/wallet/import_ufvk.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,11 @@ use zcash_client_backend::{
};
use zcash_client_sqlite::{util::SystemClock, WalletDb};
use zcash_keys::keys::UnifiedFullViewingKey;
use zcash_protocol::consensus;
use zcash_protocol::{consensus::{self, BlockHeight}, local_consensus::LocalNetwork};
use zip32::fingerprint::SeedFingerprint;

use crate::{
data::get_db_paths,
data::{get_db_paths, NetworkParams},
error, parse_hex,
remote::{tor_client, Servers},
};
Expand Down Expand Up @@ -56,21 +56,32 @@ impl Command {
let ufvk = UnifiedFullViewingKey::parse(&ufvk).map_err(|e| anyhow!("{e}"))?;

let params = match network {
consensus::NetworkType::Main => Ok(consensus::Network::MainNetwork),
consensus::NetworkType::Test => Ok(consensus::Network::TestNetwork),
consensus::NetworkType::Main => NetworkParams::Consensus(consensus::Network::MainNetwork),
consensus::NetworkType::Test => NetworkParams::Consensus(consensus::Network::TestNetwork),
consensus::NetworkType::Regtest => {
Err(anyhow!("UFVK is for regtest, which is unsupported"))
// Create a LocalNetwork with all upgrades at height 1
let height_1 = Some(BlockHeight::from_u32(1));
NetworkParams::Local(LocalNetwork {
overwinter: height_1,
sapling: height_1,
blossom: height_1,
heartwood: height_1,
canopy: height_1,
nu5: height_1,
nu6: height_1,
nu6_1: height_1,
})
}
}?;
};

let (_, db_data) = get_db_paths(wallet_dir.as_ref());
let mut db_data = WalletDb::for_path(db_data, params, SystemClock, OsRng)?;
let mut db_data = WalletDb::for_path(db_data, params.clone(), SystemClock, OsRng)?;

// Construct an `AccountBirthday` for the account's birthday.
let birthday = {
// Fetch the tree state corresponding to the last block prior to the wallet's
// birthday height. NOTE: THIS APPROACH LEAKS THE BIRTHDAY TO THE SERVER!
let server = self.server.pick(params)?;
let server = self.server.pick(&params)?;
let mut client = if self.disable_tor {
server.connect_direct().await?
} else {
Expand Down
27 changes: 22 additions & 5 deletions src/commands/wallet/init.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,11 @@ use zcash_client_backend::{
data_api::{AccountBirthday, WalletWrite},
proto::service::{self, compact_tx_streamer_client::CompactTxStreamerClient},
};
use zcash_protocol::consensus::{self, BlockHeight, Parameters};
use zcash_protocol::{consensus::{self, BlockHeight, Parameters}, local_consensus::LocalNetwork};

use crate::{
config::WalletConfig,
data::{init_dbs, Network},
data::{init_dbs, Network, NetworkParams},
error,
remote::{tor_client, Servers},
};
Expand Down Expand Up @@ -51,9 +51,26 @@ pub(crate) struct Command {
impl Command {
pub(crate) async fn run(self, wallet_dir: Option<String>) -> Result<(), anyhow::Error> {
let opts = self;
let params = consensus::Network::from(opts.network);
let params = match opts.network {
Network::Main => NetworkParams::Consensus(consensus::Network::MainNetwork),
Network::Test => NetworkParams::Consensus(consensus::Network::TestNetwork),
Network::Regtest => {
// Create a LocalNetwork with all upgrades at height 1
let height_1 = Some(BlockHeight::from_u32(1));
NetworkParams::Local(LocalNetwork {
overwinter: height_1,
sapling: height_1,
blossom: height_1,
heartwood: height_1,
canopy: height_1,
nu5: height_1,
nu6: height_1,
nu6_1: height_1,
})
}
};

let server = opts.server.pick(params)?;
let server = opts.server.pick(&params)?;
let mut client = if opts.disable_tor {
server.connect_direct().await?
} else {
Expand Down Expand Up @@ -123,7 +140,7 @@ impl Command {
recipients.iter().map(|r| r.as_ref() as _),
&mnemonic,
birthday.height(),
opts.network.into(),
&params,
)?;

let seed = {
Expand Down
Loading