mirror of
https://github.com/Qortal/piratewallet-light-cli.git
synced 2025-02-14 19:05:48 +00:00
Notes command
This commit is contained in:
parent
c4083a835f
commit
7b34d4fa7e
@ -147,6 +147,25 @@ impl Command for TransactionsCommand {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
struct NotesCommand {}
|
||||||
|
impl Command for NotesCommand {
|
||||||
|
fn help(&self) {
|
||||||
|
println!("Show Notes");
|
||||||
|
}
|
||||||
|
|
||||||
|
fn short_help(&self) -> String {
|
||||||
|
"List all sapling notes in the wallet".to_string()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn exec(&self, _args: &[String], lightclient: &mut LightClient) {
|
||||||
|
let txns = lightclient.do_list_notes();
|
||||||
|
println!("{}", txns.pretty(2));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
struct QuitCommand {}
|
struct QuitCommand {}
|
||||||
impl Command for QuitCommand {
|
impl Command for QuitCommand {
|
||||||
fn help(&self) {
|
fn help(&self) {
|
||||||
@ -174,6 +193,7 @@ pub fn get_commands() -> Box<HashMap<String, Box<dyn Command>>> {
|
|||||||
map.insert("save".to_string(), Box::new(SaveCommand{}));
|
map.insert("save".to_string(), Box::new(SaveCommand{}));
|
||||||
map.insert("quit".to_string(), Box::new(QuitCommand{}));
|
map.insert("quit".to_string(), Box::new(QuitCommand{}));
|
||||||
map.insert("list".to_string(), Box::new(TransactionsCommand{}));
|
map.insert("list".to_string(), Box::new(TransactionsCommand{}));
|
||||||
|
map.insert("notes".to_string(), Box::new(NotesCommand{}));
|
||||||
map.insert("seed".to_string(), Box::new(SeedCommand{}));
|
map.insert("seed".to_string(), Box::new(SeedCommand{}));
|
||||||
|
|
||||||
Box::new(map)
|
Box::new(map)
|
||||||
|
@ -136,6 +136,26 @@ impl LightClient {
|
|||||||
self.wallet.get_seed_phrase()
|
self.wallet.get_seed_phrase()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Return a list of all notes, spent and unspent
|
||||||
|
pub fn do_list_notes(&self) -> JsonValue {
|
||||||
|
JsonValue::Array(
|
||||||
|
self.wallet.txs.read().unwrap().iter()
|
||||||
|
.flat_map( |(txid, wtx)| {
|
||||||
|
wtx.notes.iter().map(move |nd|
|
||||||
|
object!{
|
||||||
|
"created_in_block" => wtx.block,
|
||||||
|
"created_in_txid" => format!("{}", txid),
|
||||||
|
"value" => nd.note.value,
|
||||||
|
"is_change" => nd.is_change,
|
||||||
|
"address" => LightWallet::address_from_extfvk(&nd.extfvk, nd.diversifier),
|
||||||
|
"spent" => nd.spent.map(|spent_txid| format!("{}", spent_txid))
|
||||||
|
}
|
||||||
|
)
|
||||||
|
})
|
||||||
|
.collect::<Vec<JsonValue>>()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
pub fn do_list_transactions(&self) -> JsonValue {
|
pub fn do_list_transactions(&self) -> JsonValue {
|
||||||
// Create a list of TransactionItems
|
// Create a list of TransactionItems
|
||||||
let mut tx_list = self.wallet.txs.read().unwrap().iter()
|
let mut tx_list = self.wallet.txs.read().unwrap().iter()
|
||||||
|
@ -42,7 +42,7 @@ use zcash_primitives::{
|
|||||||
use crate::address;
|
use crate::address;
|
||||||
use crate::prover;
|
use crate::prover;
|
||||||
|
|
||||||
const ANCHOR_OFFSET: u32 = 10;
|
const ANCHOR_OFFSET: u32 = 1;
|
||||||
|
|
||||||
const SAPLING_ACTIVATION_HEIGHT: i32 = 280_000;
|
const SAPLING_ACTIVATION_HEIGHT: i32 = 280_000;
|
||||||
|
|
||||||
@ -94,8 +94,8 @@ impl BlockData {
|
|||||||
|
|
||||||
pub struct SaplingNoteData {
|
pub struct SaplingNoteData {
|
||||||
account: usize,
|
account: usize,
|
||||||
extfvk: ExtendedFullViewingKey, // Technically, this should be recoverable from the account number, but we're going to refactor this in the future, so I'll write it again here.
|
pub extfvk: ExtendedFullViewingKey, // Technically, this should be recoverable from the account number, but we're going to refactor this in the future, so I'll write it again here.
|
||||||
diversifier: Diversifier,
|
pub diversifier: Diversifier,
|
||||||
pub note: Note<Bls12>,
|
pub note: Note<Bls12>,
|
||||||
witnesses: Vec<IncrementalWitness<Node>>,
|
witnesses: Vec<IncrementalWitness<Node>>,
|
||||||
nullifier: [u8; 32],
|
nullifier: [u8; 32],
|
||||||
@ -543,8 +543,9 @@ impl LightWallet {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn address(&self, account: usize) -> String {
|
pub fn address_from_extfvk(extfvk: &ExtendedFullViewingKey, diversifier: Diversifier) -> String {
|
||||||
encode_payment_address(HRP_SAPLING_PAYMENT_ADDRESS, &self.address[account])
|
encode_payment_address(HRP_SAPLING_PAYMENT_ADDRESS,
|
||||||
|
&extfvk.fvk.vk.into_payment_address(diversifier, &JUBJUB).unwrap())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_seed_phrase(&self) -> String {
|
pub fn get_seed_phrase(&self) -> String {
|
||||||
@ -879,8 +880,7 @@ impl LightWallet {
|
|||||||
println!("{}: Adding output", now() - start_time);
|
println!("{}: Adding output", now() - start_time);
|
||||||
if let Err(e) = match to {
|
if let Err(e) = match to {
|
||||||
address::RecipientAddress::Shielded(to) => {
|
address::RecipientAddress::Shielded(to) => {
|
||||||
// TODO Make it use encoded_memo
|
builder.add_sapling_output(ovk, to.clone(), value, encoded_memo)
|
||||||
builder.add_sapling_output(ovk, to.clone(), value, None)
|
|
||||||
}
|
}
|
||||||
address::RecipientAddress::Transparent(to) => {
|
address::RecipientAddress::Transparent(to) => {
|
||||||
builder.add_transparent_output(&to, value)
|
builder.add_transparent_output(&to, value)
|
||||||
|
@ -38,9 +38,6 @@ pub fn main() {
|
|||||||
|
|
||||||
println!("Starting Light Client");
|
println!("Starting Light Client");
|
||||||
|
|
||||||
// At startup, read the wallet.dat
|
|
||||||
commands::do_user_command(&"read".to_string(), &mut lightclient);
|
|
||||||
|
|
||||||
// `()` can be used when no completer is required
|
// `()` can be used when no completer is required
|
||||||
let mut rl = Editor::<()>::new();
|
let mut rl = Editor::<()>::new();
|
||||||
let _ = rl.load_history("history.txt");
|
let _ = rl.load_history("history.txt");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user