difftreelog
fix solidity param parser
in: master
4 files changed
crates/evm-coder/procedural/src/solidity_interface.rsdiffbeforeafterboth404 let name = &self.name;404 let name = &self.name;405 let ty = &self.ty;405 let ty = &self.ty;406 quote! {406 quote! {407 #name: <#ty>::abi_read(reader)?407 #name: {408 let value = <#ty as ::evm_coder::abi::AbiRead>::abi_read(reader)?;409 if !is_dynamic {reader.seek(<#ty as ::evm_coder::abi::AbiType>::size())};410 value411 }408 }412 }409 }413 }410414630 let pascal_name = &self.pascal_name;634 let pascal_name = &self.pascal_name;631 let screaming_name = &self.screaming_name;635 let screaming_name = &self.screaming_name;632 if self.has_normal_args {636 if self.has_normal_args {633 let parsers = self637 let args_iter = self.args.iter().filter(|a| !a.is_special());634 .args638 let arg_type = args_iter.clone().map(|a| &a.ty);635 .iter()636 .filter(|a| !a.is_special())637 .map(|a| a.expand_parse());639 let parsers = args_iter.map(|a| a.expand_parse());638 quote! {640 quote! {639 Self::#screaming_name => return Ok(Some(Self::#pascal_name {641 Self::#screaming_name => {642 let is_dynamic = false #(|| <#arg_type as ::evm_coder::abi::AbiType>::is_dynamic())*;643 return Ok(Some(Self::#pascal_name {640 #(644 #(641 #parsers,645 #parsers,642 )*646 )*643 }))647 }))648 }644 }649 }645 } else {650 } else {646 quote! { Self::#screaming_name => return Ok(Some(Self::#pascal_name)) }651 quote! { Self::#screaming_name => return Ok(Some(Self::#pascal_name)) }crates/evm-coder/src/abi/impls.rsdiffbeforeafterboth262262263 impl<$($ident),+> AbiRead for ($($ident,)+)263 impl<$($ident),+> AbiRead for ($($ident,)+)264 where264 where265 Self: AbiType,265 $($ident: AbiRead + AbiType,)+266 $($ident: AbiRead + AbiType,)+266 ($($ident,)+): AbiType,267 {267 {268 fn abi_read(reader: &mut AbiReader) -> Result<($($ident,)+)> {268 fn abi_read(reader: &mut AbiReader) -> Result<($($ident,)+)> {269 let is_dynamic = <($($ident,)+)>::is_dynamic();269 let is_dynamic = <Self>::is_dynamic();270 let size = if !is_dynamic { Some(<($($ident,)+)>::size()) } else { None };270 let size = if !is_dynamic { Some(<Self>::size()) } else { None };271 let mut subresult = reader.subresult(size)?;271 let mut subresult = reader.subresult(size)?;272 Ok((272 Ok((273 $({273 $({crates/evm-coder/src/abi/test.rsdiffbeforeafterboth449 );449 );450}450}451452#[test]453fn encode_decode_tuple0_tuple1_uint8_uint8_tuple1_uint8_uint8_and_uint8() {454 test_impl::<((u8, u8), (u8, u8), u8)>(455 0xdeadbeef,456 ((10, 11), (12, 13), 14),457 &hex!(458 "459 deadbeef460 000000000000000000000000000000000000000000000000000000000000000a461 000000000000000000000000000000000000000000000000000000000000000b462 000000000000000000000000000000000000000000000000000000000000000c463 000000000000000000000000000000000000000000000000000000000000000d464 000000000000000000000000000000000000000000000000000000000000000e465 "466 ),467 );468}451469452#[test]470#[test]453fn encode_decode_tuple0_tuple1_string() {471fn encode_decode_tuple0_tuple1_string() {526 );544 );527}545}546547#[test]548fn parse_multiple_params() {549 let encoded_data = hex!(550 "551 deadbeef552 000000000000000000000000000000000000000000000000000000000000000a553 000000000000000000000000000000000000000000000000000000000000000b554 "555 );556 let (_, mut decoder) = AbiReader::new_call(&encoded_data).unwrap();557 let p1 = <u8>::abi_read(&mut decoder).unwrap();558 let p2 = <u8>::abi_read(&mut decoder).unwrap();559 assert_eq!(p1, 0x0a);560 assert_eq!(p2, 0x0b);561}528562crates/evm-coder/tests/abi_derive_generation.rsdiffbeforeafterboth620 );620 );621}621}622623#[derive(AbiCoder, PartialEq, Debug)]624struct TypeStruct2SimpleStruct1Simple {625 _a: TypeStruct2SimpleParam,626 _b: TypeStruct2SimpleParam,627 _c: u8,628}629#[derive(AbiCoder, PartialEq, Debug)]630struct TupleStruct2SimpleStruct1Simple(TupleStruct2SimpleParam, TupleStruct2SimpleParam, u8);631632#[test]633fn codec_struct_2_struct_simple_1_simple() {634 let _a = 0xff;635 let _b = 0xbeefbaba;636 test_impl::<637 ((u8, u32), (u8, u32), u8),638 TupleStruct2SimpleStruct1Simple,639 TypeStruct2SimpleStruct1Simple,640 >(641 ((_a, _b), (_a, _b), _a),642 TupleStruct2SimpleStruct1Simple(643 TupleStruct2SimpleParam(_a, _b),644 TupleStruct2SimpleParam(_a, _b),645 _a,646 ),647 TypeStruct2SimpleStruct1Simple {648 _a: TypeStruct2SimpleParam { _a, _b },649 _b: TypeStruct2SimpleParam { _a, _b },650 _c: _a,651 },652 );653}622654