From 10169e0970ed1ed55de2edebf570842344cad0d4 Mon Sep 17 00:00:00 2001 From: Sander Pick Date: Tue, 8 Oct 2024 12:59:18 -0700 Subject: [PATCH] feat: ipc cli util command to convert f4 to eth address Signed-off-by: Sander Pick --- ipc/cli/src/commands/util/eth.rs | 33 ++++++++++++++++++++++++++++++++ ipc/cli/src/commands/util/f4.rs | 2 +- ipc/cli/src/commands/util/mod.rs | 4 ++++ 3 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 ipc/cli/src/commands/util/eth.rs diff --git a/ipc/cli/src/commands/util/eth.rs b/ipc/cli/src/commands/util/eth.rs new file mode 100644 index 0000000000..0e0fa1208c --- /dev/null +++ b/ipc/cli/src/commands/util/eth.rs @@ -0,0 +1,33 @@ +// Copyright 2022-2024 Protocol Labs +// SPDX-License-Identifier: MIT +//! Eth address util + +use async_trait::async_trait; +use clap::Args; +use fvm_shared::address::Address; +use ipc_api::evm::payload_to_evm_address; +use std::fmt::Debug; +use std::str::FromStr; + +use crate::{CommandLineHandler, GlobalArguments}; + +pub(crate) struct F4ToEthAddr; + +#[async_trait] +impl CommandLineHandler for F4ToEthAddr { + type Arguments = F4ToEthAddrArgs; + + async fn handle(_global: &GlobalArguments, arguments: &Self::Arguments) -> anyhow::Result<()> { + let addr = Address::from_str(&arguments.addr)?; + let eth_addr = payload_to_evm_address(addr.payload())?; + log::info!("eth address: {:?}", eth_addr); + Ok(()) + } +} + +#[derive(Debug, Args)] +#[command(about = "Get Ethereum address for an F4")] +pub(crate) struct F4ToEthAddrArgs { + #[arg(long, help = "F4 address to get the underlying Ethereum addr from")] + pub addr: String, +} diff --git a/ipc/cli/src/commands/util/f4.rs b/ipc/cli/src/commands/util/f4.rs index 71b435e99d..175371853b 100644 --- a/ipc/cli/src/commands/util/f4.rs +++ b/ipc/cli/src/commands/util/f4.rs @@ -19,7 +19,7 @@ impl CommandLineHandler for EthToF4Addr { async fn handle(_global: &GlobalArguments, arguments: &Self::Arguments) -> anyhow::Result<()> { let eth_addr = EthAddress::from_str(&arguments.addr)?; - log::info!("f4 address: {:}", Address::from(eth_addr)); + log::info!("f4 address: {}", Address::from(eth_addr)); Ok(()) } } diff --git a/ipc/cli/src/commands/util/mod.rs b/ipc/cli/src/commands/util/mod.rs index f01102cbdd..698ffccbce 100644 --- a/ipc/cli/src/commands/util/mod.rs +++ b/ipc/cli/src/commands/util/mod.rs @@ -4,8 +4,10 @@ use crate::{CommandLineHandler, GlobalArguments}; use clap::{Args, Subcommand}; +use self::eth::{F4ToEthAddr, F4ToEthAddrArgs}; use self::f4::{EthToF4Addr, EthToF4AddrArgs}; +mod eth; mod f4; #[derive(Debug, Args)] @@ -20,6 +22,7 @@ impl UtilCommandsArgs { pub async fn handle(&self, global: &GlobalArguments) -> anyhow::Result<()> { match &self.command { Commands::EthToF4Addr(args) => EthToF4Addr::handle(global, args).await, + Commands::F4ToEthAddr(args) => F4ToEthAddr::handle(global, args).await, } } } @@ -27,4 +30,5 @@ impl UtilCommandsArgs { #[derive(Debug, Subcommand)] pub(crate) enum Commands { EthToF4Addr(EthToF4AddrArgs), + F4ToEthAddr(F4ToEthAddrArgs), }