neo_solidity/solidity/validate/contract/
events.rs1fn validate_events(metadata: &ContractMetadata, diagnostics: &mut Vec<Diagnostic>) {
2 use std::collections::{BTreeSet, HashMap};
3
4 let mut event_groups: HashMap<String, BTreeSet<String>> = HashMap::new();
5
6 for event in &metadata.events {
7 event_groups
8 .entry(event.name.trim().to_ascii_lowercase())
9 .or_default()
10 .insert(event.normalized_name.clone());
11
12 if event.parameters.len() > 16 {
13 diagnostics.push(Diagnostic::warning(format!(
14 "event '{}' has {} parameters which exceeds Neo ABI limits",
15 event.name,
16 event.parameters.len()
17 )));
18 }
19 }
20
21 for (event_name, signatures) in event_groups {
24 if signatures.len() > 1 {
25 let mut sigs: Vec<_> = signatures.into_iter().collect();
26 sigs.sort();
27 diagnostics.push(Diagnostic::error(format!(
28 "event '{event_name}' is overloaded ({} distinct signatures): {}. Neo N3 requires unique event names",
29 sigs.len(),
30 sigs.join(", ")
31 )));
32 }
33 }
34}