Merge #1211: Add list of words for new generated mnemonic in share xpubs panel
c638350eb9c69c6375ae9c59599e3604c4387d9a Add list of words for new generated mnemonic in share xpubs panel (edouardparis)
Pull request description:
Because the share xpubs is not anymore a install process, no information is stored. If user want to generate a new mnemonic and share it xpubs he must be aware that he has to backup it.

close #1203
ACKs for top commit:
jp1ac4:
Tested ACK c638350eb9.
Tree-SHA512: 616d208e4923a442dc4b0306a157fe069679b8b78f28cb0ba0b2ad075f811ba527e84d48ff45e706cb0d62c68d56b761f50d4993bc76c3365b9579888b8c26f8
This commit is contained in:
commit
ee9cfb9b73
@ -32,14 +32,19 @@ pub struct SignerXpubs {
|
||||
signer: Arc<Mutex<Signer>>,
|
||||
xpubs: Vec<String>,
|
||||
next_account: ChildNumber,
|
||||
words: [&'static str; 12],
|
||||
did_backup: bool,
|
||||
}
|
||||
|
||||
impl SignerXpubs {
|
||||
fn new(signer: Arc<Mutex<Signer>>) -> Self {
|
||||
let words = { signer.lock().unwrap().mnemonic() };
|
||||
Self {
|
||||
words,
|
||||
signer,
|
||||
xpubs: Vec::new(),
|
||||
next_account: ChildNumber::from_hardened_idx(0).unwrap(),
|
||||
did_backup: false,
|
||||
}
|
||||
}
|
||||
|
||||
@ -57,15 +62,12 @@ impl SignerXpubs {
|
||||
}
|
||||
|
||||
pub fn view(&self) -> Element<Message> {
|
||||
view::signer_xpubs(&self.xpubs)
|
||||
view::signer_xpubs(&self.xpubs, &self.words, self.did_backup)
|
||||
}
|
||||
}
|
||||
|
||||
pub struct ShareXpubs {
|
||||
network: Network,
|
||||
|
||||
shared: bool,
|
||||
|
||||
hw_xpubs: Vec<HardwareWalletXpubs>,
|
||||
xpubs_signer: SignerXpubs,
|
||||
}
|
||||
@ -75,7 +77,6 @@ impl ShareXpubs {
|
||||
Self {
|
||||
network,
|
||||
hw_xpubs: Vec::new(),
|
||||
shared: false,
|
||||
xpubs_signer: SignerXpubs::new(signer),
|
||||
}
|
||||
}
|
||||
@ -86,7 +87,6 @@ impl Step for ShareXpubs {
|
||||
// Verification of the values is happening when the user click on Next button.
|
||||
fn update(&mut self, hws: &mut HardwareWallets, message: Message) -> Command<Message> {
|
||||
match message {
|
||||
Message::UserActionDone(shared) => self.shared = shared,
|
||||
Message::ImportXpub(fg, res) => {
|
||||
if let Some(hw_xpubs) = self.hw_xpubs.iter_mut().find(|x| x.fingerprint == fg) {
|
||||
hw_xpubs.processing = false;
|
||||
@ -105,6 +105,9 @@ impl Step for ShareXpubs {
|
||||
Message::UseHotSigner => {
|
||||
self.xpubs_signer.select(self.network);
|
||||
}
|
||||
Message::UserActionDone(done) => {
|
||||
self.xpubs_signer.did_backup = done;
|
||||
}
|
||||
Message::Select(i) => {
|
||||
if let Some(HardwareWallet::Supported {
|
||||
device,
|
||||
|
||||
@ -422,18 +422,22 @@ pub fn import_descriptor<'a>(
|
||||
)
|
||||
}
|
||||
|
||||
pub fn signer_xpubs(xpubs: &[String]) -> Element<Message> {
|
||||
const BACKUP_WARNING: &str =
|
||||
"Beware to back up the mnemonic as it will NOT be stored on the computer.";
|
||||
|
||||
pub fn signer_xpubs<'a>(
|
||||
xpubs: &'a [String],
|
||||
words: &'a [&'static str; 12],
|
||||
did_backup: bool,
|
||||
) -> Element<'a, Message> {
|
||||
Container::new(
|
||||
Column::new()
|
||||
.push(
|
||||
Button::new(
|
||||
Row::new().align_items(Alignment::Center).push(
|
||||
Column::new()
|
||||
.push(text("This computer").bold())
|
||||
.push(
|
||||
text("Derive a key from a mnemonic stored on this computer")
|
||||
.small(),
|
||||
)
|
||||
.push(text("Generate a new mnemonic").bold())
|
||||
.push(text(BACKUP_WARNING).small().style(color::ORANGE))
|
||||
.spacing(5)
|
||||
.width(Length::Fill),
|
||||
),
|
||||
@ -451,6 +455,39 @@ pub fn signer_xpubs(xpubs: &[String]) -> Element<Message> {
|
||||
.push_maybe(if xpubs.is_empty() {
|
||||
None
|
||||
} else {
|
||||
Some(
|
||||
Container::new(words.iter().enumerate().fold(
|
||||
Column::new().spacing(5),
|
||||
|acc, (i, w)| {
|
||||
acc.push(
|
||||
Row::new()
|
||||
.align_items(Alignment::End)
|
||||
.push(
|
||||
Container::new(text(format!("#{}", i + 1)).small())
|
||||
.width(Length::Fixed(50.0)),
|
||||
)
|
||||
.push(text(*w).bold()),
|
||||
)
|
||||
},
|
||||
))
|
||||
.padding(15),
|
||||
)
|
||||
})
|
||||
.push_maybe(if !xpubs.is_empty() {
|
||||
Some(
|
||||
Container::new(
|
||||
checkbox(
|
||||
"I have backed up the mnemonic, show the extended public key",
|
||||
did_backup,
|
||||
)
|
||||
.on_toggle(Message::UserActionDone),
|
||||
)
|
||||
.padding(10),
|
||||
)
|
||||
} else {
|
||||
None
|
||||
})
|
||||
.push_maybe(if !xpubs.is_empty() && did_backup {
|
||||
Some(xpubs.iter().fold(Column::new().padding(15), |col, xpub| {
|
||||
col.push(
|
||||
Row::new()
|
||||
@ -475,6 +512,8 @@ pub fn signer_xpubs(xpubs: &[String]) -> Element<Message> {
|
||||
),
|
||||
)
|
||||
}))
|
||||
} else {
|
||||
None
|
||||
}),
|
||||
)
|
||||
.style(theme::Container::Card(theme::Card::Simple))
|
||||
@ -571,17 +610,24 @@ pub fn share_xpubs<'a>(
|
||||
) -> Element<'a, Message> {
|
||||
layout(
|
||||
(0, 0),
|
||||
"Share your public keys",
|
||||
"Share your public keys (Xpubs)",
|
||||
Column::new()
|
||||
.push(
|
||||
Container::new(
|
||||
text("Generate an extended public key by selecting a signing device:").bold(),
|
||||
text("Import an extended public key by selecting a signing device:").bold(),
|
||||
)
|
||||
.width(Length::Fill),
|
||||
)
|
||||
.push_maybe(if hws.is_empty() {
|
||||
Some(p1_regular("No signing device connected").style(color::GREY_3))
|
||||
} else {
|
||||
None
|
||||
})
|
||||
.spacing(10)
|
||||
.push(Column::with_children(hws).spacing(10))
|
||||
.push(Container::new(text("Or create a new random key:").bold()).width(Length::Fill))
|
||||
.push(signer)
|
||||
.push(Space::with_height(10))
|
||||
.width(Length::Fill),
|
||||
true,
|
||||
Some(Message::Previous),
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user