Skip to content

Commit

Permalink
fix(abigen): use event name from abi attribute (#2144)
Browse files Browse the repository at this point in the history
* fix(abigen): use event name from abi attribute

* rustfmt
  • Loading branch information
mattsse committed Feb 14, 2023
1 parent 85d7c07 commit e970f58
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 4 deletions.
10 changes: 6 additions & 4 deletions ethers-contract/ethers-contract-derive/src/event.rs
Expand Up @@ -21,8 +21,6 @@ pub(crate) fn derive_eth_event_impl(input: DeriveInput) -> Result<TokenStream, E
let name = &input.ident;
let attributes = parse_event_attributes(&input)?;

let event_name = attributes.name.map(|(s, _)| s).unwrap_or_else(|| input.ident.to_string());

let mut event = if let Some((src, span)) = attributes.abi {
// try to parse as a Solidity event
match HumanReadableParser::parse_event(&src) {
Expand Down Expand Up @@ -55,7 +53,10 @@ pub(crate) fn derive_eth_event_impl(input: DeriveInput) -> Result<TokenStream, E
derive_abi_event_from_fields(&input)
}?;

event.name = event_name.clone();
if let Some((attribute_name, _)) = attributes.name {
event.name = attribute_name;
}

if let Some((anon, _)) = attributes.anonymous.as_ref() {
event.anonymous = *anon;
}
Expand All @@ -71,6 +72,7 @@ pub(crate) fn derive_eth_event_impl(input: DeriveInput) -> Result<TokenStream, E
};

let anon = attributes.anonymous.map(|(b, _)| b).unwrap_or_default();
let event_name = &event.name;

let ethers_core = ethers_core_crate();
let ethers_contract = ethers_contract_crate();
Expand Down Expand Up @@ -281,7 +283,7 @@ fn derive_decode_from_log_impl(
/// Determine the event's ABI by parsing the AST
fn derive_abi_event_from_fields(input: &DeriveInput) -> Result<Event, Error> {
let event = Event {
name: "".to_string(),
name: input.ident.to_string(),
inputs: utils::derive_abi_inputs_from_fields(input, "EthEvent")?
.into_iter()
.map(|(name, kind)| EventParam { name, kind, indexed: false })
Expand Down
22 changes: 22 additions & 0 deletions ethers-contract/tests/it/common/derive.rs
Expand Up @@ -647,3 +647,25 @@ fn can_use_human_readable_error() {

assert_etherror::<MyError>();
}

// <https://github.com/gakonst/ethers-rs/issues/2142>
#[test]
fn derives_abi_name() {
#[derive(Debug, EthEvent)]
#[ethevent(abi = "Transfer(address,address,uint256)")]
struct Erc20TransferEvent {
#[ethevent(indexed, name = "_from")]
from: Address,
#[ethevent(indexed, name = "_to")]
to: Address,
#[ethevent(name = "_value")]
value: U256,
}

assert_eq!(Erc20TransferEvent::abi_signature(), "Transfer(address,address,uint256)");

assert_eq!(
Erc20TransferEvent::signature(),
"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef".parse().unwrap()
);
}

0 comments on commit e970f58

Please sign in to comment.