multichain updates

This commit is contained in:
Cryptoforge 2020-09-06 13:11:33 -07:00
parent 41d855a784
commit fc7459dc03
4 changed files with 115 additions and 32 deletions

View File

@ -5,7 +5,7 @@ use std::sync::mpsc::{channel, Sender, Receiver};
use log::{info, error};
use zecwalletlitelib::{commands,
lightclient::{LightClient, LightClientConfig},
lightclient::{LightClient, LightClientConfig, AddressParameters},
};
pub mod version;
@ -243,6 +243,7 @@ pub fn attempt_recover_seed(password: Option<String>) {
consensus_branch_id: "000000".to_string(),
anchor_offset: 0,
data_dir: None,
address_params: AddressParameters::new()
};
match LightClient::attempt_recover_seed(&config, password) {

View File

@ -57,6 +57,31 @@ impl WalletStatus {
}
}
#[derive(Clone, Debug)]
pub struct AddressParameters {
pub coin_type: Option<u32>,
pub hrp_sapling_extended_spending_key: Option<String>,
pub hrp_sapling_extended_full_viewing_key: Option<String>,
pub hrp_sapling_payment_address: Option<String>,
pub b58_pubkey_address_prefix: Option<[u8; 2]>,
pub b58_script_address_prefix: Option<[u8; 2]>,
}
impl AddressParameters {
pub fn new() -> Self {
AddressParameters {
coin_type: Some(323), //Zero Default COIN_TYPE
hrp_sapling_extended_spending_key: None,
hrp_sapling_extended_full_viewing_key: None,
hrp_sapling_payment_address: None,
b58_pubkey_address_prefix: None,
b58_script_address_prefix: None
}
}
}
#[derive(Clone, Debug)]
pub struct LightClientConfig {
pub server : http::Uri,
@ -64,7 +89,8 @@ pub struct LightClientConfig {
pub sapling_activation_height : u64,
pub consensus_branch_id : String,
pub anchor_offset : u32,
pub data_dir : Option<String>
pub data_dir : Option<String>,
pub address_params : AddressParameters
}
impl LightClientConfig {
@ -78,6 +104,7 @@ impl LightClientConfig {
consensus_branch_id : "".to_string(),
anchor_offset : ANCHOR_OFFSET,
data_dir : dir,
address_params : AddressParameters::new()
}
}
@ -101,6 +128,7 @@ impl LightClientConfig {
consensus_branch_id : info.consensus_branch_id,
anchor_offset : ANCHOR_OFFSET,
data_dir : None,
address_params : AddressParameters::new()
};
Ok((config, info.block_height))
@ -249,58 +277,106 @@ impl LightClientConfig {
}.parse().unwrap()
}
pub fn set_coin_type(&mut self, param: u32) {
self.address_params.coin_type = Some(param);
}
pub fn set_hrp_sapling_extended_spending_key(&mut self, param: String) {
self.address_params.hrp_sapling_extended_spending_key = Some(param);
}
pub fn set_hrp_sapling_extended_full_viewing_key(&mut self, param: String) {
self.address_params.hrp_sapling_extended_full_viewing_key = Some(param);
}
pub fn set_hrp_sapling_payment_address(&mut self, param: String) {
self.address_params.hrp_sapling_payment_address = Some(param);
}
pub fn set_b58_pubkey_address_prefix(&mut self, param: [u8; 2]) {
self.address_params.b58_pubkey_address_prefix = Some(param);
}
pub fn set_b58_script_address_prefix(&mut self, param: [u8; 2]) {
self.address_params.b58_script_address_prefix = Some(param);
}
pub fn get_coin_type(&self) -> u32 {
match &self.chain_name[..] {
"main" => mainnet::COIN_TYPE,
"test" => testnet::COIN_TYPE,
"regtest" => regtest::COIN_TYPE,
c => panic!("Unknown chain {}", c)
match &self.address_params.coin_type {
Some(s) => *s,
None =>
match &self.chain_name[..] {
"main" => mainnet::COIN_TYPE,
"test" => testnet::COIN_TYPE,
"regtest" => regtest::COIN_TYPE,
c => panic!("Unknown chain {}", c)
}
}
}
pub fn hrp_sapling_address(&self) -> &str {
match &self.chain_name[..] {
"main" => mainnet::HRP_SAPLING_PAYMENT_ADDRESS,
"test" => testnet::HRP_SAPLING_PAYMENT_ADDRESS,
"regtest" => regtest::HRP_SAPLING_PAYMENT_ADDRESS,
c => panic!("Unknown chain {}", c)
match &self.address_params.hrp_sapling_payment_address {
Some(s) => s,
None =>
match &self.chain_name[..] {
"main" => mainnet::HRP_SAPLING_PAYMENT_ADDRESS,
"test" => testnet::HRP_SAPLING_PAYMENT_ADDRESS,
"regtest" => regtest::HRP_SAPLING_PAYMENT_ADDRESS,
c => panic!("Unknown chain {}", c)
}
}
}
pub fn hrp_sapling_private_key(&self) -> &str {
match &self.chain_name[..] {
"main" => mainnet::HRP_SAPLING_EXTENDED_SPENDING_KEY,
"test" => testnet::HRP_SAPLING_EXTENDED_SPENDING_KEY,
"regtest" => regtest::HRP_SAPLING_EXTENDED_SPENDING_KEY,
c => panic!("Unknown chain {}", c)
match &self.address_params.hrp_sapling_extended_full_viewing_key {
Some(s) => s,
None =>
match &self.chain_name[..] {
"main" => mainnet::HRP_SAPLING_EXTENDED_SPENDING_KEY,
"test" => testnet::HRP_SAPLING_EXTENDED_SPENDING_KEY,
"regtest" => regtest::HRP_SAPLING_EXTENDED_SPENDING_KEY,
c => panic!("Unknown chain {}", c)
}
}
}
pub fn hrp_sapling_viewing_key(&self) -> &str {
match &self.chain_name[..] {
"main" => mainnet::HRP_SAPLING_EXTENDED_FULL_VIEWING_KEY,
"test" => testnet::HRP_SAPLING_EXTENDED_FULL_VIEWING_KEY,
"regtest" => regtest::HRP_SAPLING_EXTENDED_FULL_VIEWING_KEY,
c => panic!("Unknown chain {}", c)
match &self.address_params.hrp_sapling_extended_spending_key {
Some(s) => s,
None =>
match &self.chain_name[..] {
"main" => mainnet::HRP_SAPLING_EXTENDED_FULL_VIEWING_KEY,
"test" => testnet::HRP_SAPLING_EXTENDED_FULL_VIEWING_KEY,
"regtest" => regtest::HRP_SAPLING_EXTENDED_FULL_VIEWING_KEY,
c => panic!("Unknown chain {}", c)
}
}
}
pub fn base58_pubkey_address(&self) -> [u8; 2] {
match &self.chain_name[..] {
"main" => mainnet::B58_PUBKEY_ADDRESS_PREFIX,
"test" => testnet::B58_PUBKEY_ADDRESS_PREFIX,
"regtest" => regtest::B58_PUBKEY_ADDRESS_PREFIX,
c => panic!("Unknown chain {}", c)
match &self.address_params.b58_pubkey_address_prefix {
Some(s) => *s,
None =>
match &self.chain_name[..] {
"main" => mainnet::B58_PUBKEY_ADDRESS_PREFIX,
"test" => testnet::B58_PUBKEY_ADDRESS_PREFIX,
"regtest" => regtest::B58_PUBKEY_ADDRESS_PREFIX,
c => panic!("Unknown chain {}", c)
}
}
}
pub fn base58_script_address(&self) -> [u8; 2] {
match &self.chain_name[..] {
"main" => mainnet::B58_SCRIPT_ADDRESS_PREFIX,
"test" => testnet::B58_SCRIPT_ADDRESS_PREFIX,
"regtest" => regtest::B58_SCRIPT_ADDRESS_PREFIX,
c => panic!("Unknown chain {}", c)
match &self.address_params.b58_script_address_prefix {
Some(s) => *s,
None =>
match &self.chain_name[..] {
"main" => mainnet::B58_SCRIPT_ADDRESS_PREFIX,
"test" => testnet::B58_SCRIPT_ADDRESS_PREFIX,
"regtest" => regtest::B58_SCRIPT_ADDRESS_PREFIX,
c => panic!("Unknown chain {}", c)
}
}
}

View File

@ -659,6 +659,7 @@ fn get_test_config() -> LightClientConfig {
consensus_branch_id: "000000".to_string(),
anchor_offset: 0,
data_dir: None,
address_params: AddressParameters::new()
}
}
@ -671,6 +672,7 @@ fn get_main_config() -> LightClientConfig {
consensus_branch_id: "000000".to_string(),
anchor_offset: 0,
data_dir: None,
address_params: AddressParameters::new()
}
}
@ -717,6 +719,7 @@ fn test_unconfirmed_txns() {
consensus_branch_id: "000000".to_string(),
anchor_offset: 5, // offset = 5
data_dir: None,
address_params: AddressParameters::new()
};
let branch_id = u32::from_str_radix("2bb40e60", 16).unwrap();
@ -2169,6 +2172,7 @@ fn test_t_z_derivation() {
consensus_branch_id: "000000".to_string(),
anchor_offset: 1,
data_dir: None,
address_params: AddressParameters::new()
};
let seed_phrase = Some("chimney better bulb horror rebuild whisper improve intact letter giraffe brave rib appear bulk aim burst snap salt hill sad merge tennis phrase raise".to_string());
@ -2325,6 +2329,7 @@ fn test_import_birthday_adjust() {
consensus_branch_id: "000000".to_string(),
anchor_offset: 0,
data_dir: None,
address_params: AddressParameters::new()
};
let privkey = "secret-extended-key-main1q0p44m9zqqqqpqyxfvy5w2vq6ahvxyrwsk2w4h2zleun4cft4llmnsjlv77lhuuknv6x9jgu5g2clf3xq0wz9axxxq8klvv462r5pa32gjuj5uhxnvps6wsrdg6xll05unwks8qpgp4psmvy5e428uxaggn4l29duk82k3sv3njktaaj453fdmfmj2fup8rls4egqxqtj2p5a3yt4070khn99vzxj5ag5qjngc4v2kq0ctl9q2rpc2phu4p3e26egu9w88mchjf83sqgh3cev";

View File

@ -295,6 +295,7 @@ pub mod tests {
consensus_branch_id: "000000".to_string(),
anchor_offset: 0,
data_dir: None,
address_params: AddressParameters::new()
}
}