difftreelog
fix dynamic part offset should not include selector
in: master
1 file changed
crates/evm-coder/src/abi.rsdiffbeforeafterboth184pub struct AbiWriter {184pub struct AbiWriter {185 static_part: Vec<u8>,185 static_part: Vec<u8>,186 dynamic_part: Vec<(usize, AbiWriter)>,186 dynamic_part: Vec<(usize, AbiWriter)>,187 had_call: bool,187}188}188impl AbiWriter {189impl AbiWriter {189 pub fn new() -> Self {190 pub fn new() -> Self {192 pub fn new_call(method_id: u32) -> Self {193 pub fn new_call(method_id: u32) -> Self {193 let mut val = Self::new();194 let mut val = Self::new();194 val.static_part.extend(&method_id.to_be_bytes());195 val.static_part.extend(&method_id.to_be_bytes());196 val.had_call = true;195 val197 val196 }198 }197199264266265 pub fn finish(mut self) -> Vec<u8> {267 pub fn finish(mut self) -> Vec<u8> {266 for (static_offset, part) in self.dynamic_part {268 for (static_offset, part) in self.dynamic_part {267 let part_offset = self.static_part.len();269 let part_offset = self.static_part.len() - self.had_call.then(|| 4).unwrap_or(0);268270269 let encoded_dynamic_offset = usize::to_be_bytes(part_offset);271 let encoded_dynamic_offset = usize::to_be_bytes(part_offset);270 self.static_part[static_offset + ABI_ALIGNMENT - encoded_dynamic_offset.len()272 self.static_part[static_offset + ABI_ALIGNMENT - encoded_dynamic_offset.len()