Skip to content

Commit

Permalink
Merge branch 'tiago/cli-parse-eth-addrs' (#1850)
Browse files Browse the repository at this point in the history
* origin/tiago/cli-parse-eth-addrs:
  Changelog for #1850
  Parse Eth addresses from the CLI
  • Loading branch information
Fraccaman committed Sep 6, 2023
2 parents 54e1f05 + 91bbf00 commit 9b4b55a
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 6 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
- Parse Eth addresses from the CLI
([\#1850](https://github.com/anoma/namada/pull/1850))
22 changes: 16 additions & 6 deletions apps/src/lib/cli/context.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,9 @@ use std::str::FromStr;
use color_eyre::eyre::Result;
use namada::ledger::masp::ShieldedContext;
use namada::ledger::wallet::Wallet;
use namada::types::address::Address;
use namada::types::address::{Address, InternalAddress};
use namada::types::chain::ChainId;
use namada::types::ethereum_events::EthAddress;
use namada::types::key::*;
use namada::types::masp::*;

Expand Down Expand Up @@ -345,16 +346,25 @@ impl ArgFromContext for Address {
ctx: &Context,
raw: impl AsRef<str>,
) -> Result<Self, String> {
struct Skip;
let raw = raw.as_ref();
// An address can be either raw (bech32m encoding)
FromStr::from_str(raw)
// Or it can be an alias that may be found in the wallet
// An Ethereum address
.or_else(|_| {
ctx.wallet
.find_address(raw)
.cloned()
.ok_or_else(|| format!("Unknown address {}", raw))
(raw.len() == 42 && raw.starts_with("0x"))
.then(|| {
raw.parse::<EthAddress>()
.map(|addr| {
Address::Internal(InternalAddress::Erc20(addr))
})
.map_err(|_| Skip)
})
.unwrap_or(Err(Skip))
})
// Or it can be an alias that may be found in the wallet
.or_else(|_| ctx.wallet.find_address(raw).cloned().ok_or(Skip))
.map_err(|_| format!("Unknown address {raw}"))
}
}

Expand Down

0 comments on commit 9b4b55a

Please sign in to comment.