Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[WIP] Fix incorrect solidity function signature #483

Closed
wants to merge 1 commit into from

Conversation

montyly
Copy link
Member

@montyly montyly commented May 13, 2020

  • Remove variable.function_name
  • Move state_variable.signature / signature_str to variable
  • Add variable.solidity_signature
  • Add better support for complex types in utils.type

Additionally, the function-id printer will now show the return types

Fix #482

Example:

pragma experimental ABIEncoderV2;

contract A{}

contract C{

	mapping(uint => address)[] public arrayOfMappings;

	mapping(uint => address[]) public normalMappingArrayField;

	enum State{a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20,a21,a22,a23,a24,a25,a26,a27,a28,a29,a30,a31,a32,a33,a34,a35,a36,a37,a38,a39,a40,a41,a42,a43,a44,a45,a46,a47,a48,a49,a50,a51,a52,a53,a54,a55,a56,a57,a58,a59,a60,a61,a62,a63,a64,a65,a66,a67,a68,a69,a70,a71,a72,a73,a74,a75,a76,a77,a78,a79,a80,a81,a82,a83,a84,a85,a86,a87,a88,a89,a90,a91,a92,a93,a94,a95,a96,a97,a98,a99,a100,a101,a102,a103,a104,a105,a106,a107,a108,a109,a110,a111,a112,a113,a114,a115,a116,a117,a118,a119,a120,a121,a122,a123,a124,a125,a126,a127,a128,a129,a130,a131,a132,a133,a134,a135,a136,a137,a138,a139,a140,a141,a142,a143,a144,a145,a146,a147,a148,a149,a150,a151,a152,a153,a154,a155,a156,a157,a158,a159,a160,a161,a162,a163,a164,a165,a166,a167,a168,a169,a170,a171,a172,a173,a174,a175,a176,a177,a178,a179,a180,a181,a182,a183,a184,a185,a186,a187,a188,a189,a190,a191,a192,a193,a194,a195,a196,a197,a198,a199,a200,a201,a202,a203,a204,a205,a206,a207,a208,a209,a210,a211,a212,a213,a214,a215,a216,a217,a218,a219,a220,a221,a222,a223,a224,a225,a226,a227,a228,a229,a230,a231,a232,a233,a234,a235,a236,a237,a238,a239,a240,a241,a242,a243,a244,a245,a246,a247,a248,a249,a250,a251,a252,a253,a254,a255,a256}
	mapping(State => uint) public stateMap;

	mapping(A => uint) public contractMap;

	uint[][] public multiDimensionalArray;

	struct Simple {
	    uint a;
	    uint b;
	    mapping(uint => uint) c;
	    uint[] d;
	    function(uint) external returns (uint) e;
	}

	Simple public simple;

	struct Inner {
	    uint a;
	    uint b;
	}

	struct Outer {
	    Inner inner;
	    uint c;
	}

	Outer public outer;
}
+------------------------------------------+------------+----------------------------------------------------+
|            Solidity Signature            |     ID     |                    Return types                    |
+------------------------------------------+------------+----------------------------------------------------+
|     arrayOfMappings(uint256,uint256)     | 0x98fc2aa5 |                      address                       |
| normalMappingArrayField(uint256,uint256) | 0x9539e3c8 |                      address                       |
|             stateMap(uint16)             | 0x5a20851f |                      uint256                       |
|           contractMap(address)           | 0x3c0af344 |                      uint256                       |
|  multiDimensionalArray(uint256,uint256)  | 0xf29872a8 |                      uint256                       |
|                 simple()                 | 0xdf201a46 | uint256,uint256,function(uint256) returns(uint256) |
|                 outer()                  | 0x87c3dbb6 |              uint256,uint256,uint256               |
+------------------------------------------+------------+----------------------------------------------------+

- Remove variable.solidity_signature
- Move state_variable.signature / signature_str to variable
- Add variable.solidity_signature
- Add better support for complex types in utils.type

Additionally, the function-id printer will now show the return types

Fix #482

return [variable_or_type]
else:
if isinstance(variable_or_type.type, MappingType):
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we replace this with export_return_type_from_variable(variable_or_type.type)?

@samczsun
Copy link
Contributor

Oh, actually, the return type for outer looks to be incorrect. Currently, the return types for the two examples below would both be uint256,uint256,uint256. Maybe we can ret.append() on line 88 and unwrap the return value if it's a list with only one element?

struct A {
  Inner inner;
  uint a;
}
struct B {
  uint a;
  Inner inner;
}

montyly added a commit that referenced this pull request Aug 3, 2022
- Better support nested types/array/structure/mapping
- Clarify the API for full_name versus solidity_signature
- Addd contract.get_function_from_full_name
- Use the same API for function and variable
- Add tests

Replace #483
Fix #1077
@montyly
Copy link
Member Author

montyly commented Aug 3, 2022

Replaced by #1323

@montyly montyly closed this Aug 3, 2022
@montyly montyly deleted the dev-functions-sigs branch August 9, 2022 15:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants