MCPcopy Create free account
hub / github.com/enviodev/hypersync-client-python / decode_impl

Method decode_impl

src/decode.rs:84–126  ·  view source on GitHub ↗
(&self, log: &Log, py: Python)

Source from the content-addressed store, hash-verified

82
83impl Decoder {
84 fn decode_impl(&self, log: &Log, py: Python) -> Result<Option<DecodedEvent>> {
85 let topics = log
86 .topics
87 .iter()
88 .map(|v| {
89 v.as_ref()
90 .map(|v| LogArgument::decode_hex(v).context("decode topic"))
91 .transpose()
92 })
93 .collect::<Result<Vec<_>>>()
94 .context("decode topics")?;
95
96 let topic0 = topics
97 .first()
98 .context("get topic0")?
99 .as_ref()
100 .context("topic0 is null")?;
101
102 let data = log.data.as_ref().context("get log.data")?;
103 let data = Data::decode_hex(data).context("decode data")?;
104
105 let decoded = match self
106 .inner
107 .decode(topic0.as_slice(), &topics, &data)
108 .context("decode log")?
109 {
110 Some(v) => v,
111 None => return Ok(None),
112 };
113
114 Ok(Some(DecodedEvent {
115 indexed: decoded
116 .indexed
117 .into_iter()
118 .map(|v| DecodedSolValue::new(py, v, self.checksummed_addresses))
119 .collect(),
120 body: decoded
121 .body
122 .into_iter()
123 .map(|v| DecodedSolValue::new(py, v, self.checksummed_addresses))
124 .collect(),
125 }))
126 }
127}
128
129#[pyfunction]

Callers 2

decode_logs_syncMethod · 0.45
decode_events_syncMethod · 0.45

Calls 1

collectMethod · 0.45

Tested by

no test coverage detected