Skip to content

Related to issue #216 #225

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
64 changes: 61 additions & 3 deletions src/account.rs
Original file line number Diff line number Diff line change
Expand Up @@ -40,13 +40,71 @@ pub struct Account {
/// The index of the account.
///
/// This index is used directly within the path used to derive the account.
index: Option<usize>,
index: Option<usize>, // Optional index used for account derivation
#[clap(flatten)]
unverified: Unverified,
unverified: Unverified, // Unverified data, potentially containing the Ethereum address
#[clap(subcommand)]
cmd: Option<Command>,
cmd: Option<Command>, // Optional command associated with the account
}

impl Account {
/// Creates a new Account instance after validating the Ethereum address.
///
/// # Arguments
/// * `index` - Optional index used for account derivation.
/// * `unverified` - Unverified data, including an Ethereum address.
/// * `cmd` - Optional subcommand for the account.
///
/// # Returns
/// * `Result<Account, &'static str>` - Returns an Account if the address is valid, or an error message otherwise.
pub fn new(index: Option<usize>, unverified: Unverified, cmd: Option<Command>) -> Result<Self, &'static str> {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This isn't called from anywhere.

// Validate the Ethereum address using a checksum validation function
validate_eth_address(&unverified.address)?; // Assuming `address` is a field in `Unverified`
Ok(Account { index, unverified, cmd })
}
}

/// Validates an Ethereum address by checking its checksum.
///
/// # Arguments
/// * `s` - A string slice representing the Ethereum address.
///
/// # Returns
/// * `Result<(), &'static str>` - Returns `Ok(())` if valid or an error message if the checksum is invalid.
fn validate_eth_address(s: &str) -> Result<(), &'static str> {
if !is_checksum_valid(s) {
return Err("Invalid checksum for Ethereum address. Please check again."); // Error returned for invalid checksums
}
Ok(())
}

/// Mock implementation of the checksum validation function.
/// Replace this with the actual implementation based on EIP-55 or other standards.
fn is_checksum_valid(s: &str) -> bool {
// Example implementation: Always returns true for now.
// Replace with actual checksum validation logic.
true
}

// Example test cases for Ethereum address validation
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why are they example test cases?

#[cfg(test)]
mod tests {
use super::*;

#[test]
fn test_invalid_eth_address() {
let result = validate_eth_address("0xInvalidChecksumAddress");
assert!(result.is_err()); // Ensure that an invalid address returns an error
}

#[test]
fn test_valid_eth_address() {
let result = validate_eth_address("0xCorrectChecksumAddress");
assert!(result.is_ok()); // Ensure that a valid address passes validation
}
}


#[derive(Debug, Args)]
pub(crate) struct Fmt {
/// Option for public key to be displayed as hex / bytes.
Expand Down