1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
use crate::{
chain,
config::provider::ledgertm::LedgerTendermintConfig,
error::{Error, ErrorKind::*},
keyring::{ed25519::Signer, SigningProvider},
};
use signatory::PublicKeyed;
use signatory_ledger_tm::Ed25519LedgerTmAppSigner;
use tendermint::TendermintKey;
pub fn init(
chain_registry: &mut chain::Registry,
ledgertm_configs: &[LedgerTendermintConfig],
) -> Result<(), Error> {
if ledgertm_configs.is_empty() {
return Ok(());
}
if ledgertm_configs.len() != 1 {
fail!(
ConfigError,
"expected one [providers.ledgertm] in config, found: {}",
ledgertm_configs.len()
);
}
let provider = Ed25519LedgerTmAppSigner::connect().map_err(|_| Error::from(SigningError))?;
let public_key = TendermintKey::ConsensusKey(
provider
.public_key()
.map_err(|_| Error::from(InvalidKey))?
.into(),
);
let signer = Signer::new(SigningProvider::LedgerTm, public_key, Box::new(provider));
for chain_id in &ledgertm_configs[0].chain_ids {
chain_registry.add_to_keyring(chain_id, signer.clone())?;
}
Ok(())
}