Skip to content

Conversation

@Lohann
Copy link

@Lohann Lohann commented Oct 6, 2020

Issue

Solidity supports method overloading and Rust don’t.

How to Reproduce

Currently ethabi-derive and ethabi-contract doesn't support contracts with overloaded methods, like the ERC721 standard:

function safeTransferFrom(address from, address to, uint256 tokenId) external;
function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;

if you attempt to use

use_contract!(erc721, "../res/ERC721.abi")

Rust will complain with following error:

   | use_contract!(erc721, "../res/ERC721.abi");
   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   | |
   | `safe_transfer_from` redefined here
   | previous definition of the module `safe_transfer_from` here
   |
   = note: `safe_transfer_from` must be defined only once in the type namespace of this module
   = note: this error originates in a derive macro (in Nightly builds, run with -Z macro-backtrace for more info)

Proposal

For ethabi-derive, I included a new attribute ethabi_function_options, which receives function parameters.

pub mod erc721 {
    #[derive(ethabi_derive::EthabiContract)]
    #[ethabi_contract_options(path = "../res/ERC721.abi")]
    #[ethabi_function_options(
        signature = "safeTransferFrom(address,address,uint256,bytes)",
        alias = "safe_transfer_from_with_data"
    )]
    struct _Dummy;
}

For ethabi-contract, I included a new Macro Rule which accepts custom function options.

use_contract!{
    erc721,
    "../res/ERC721.abi"
    "safeTransferFrom(address,address,uint256,bytes)" => "safe_transfer_from_with_data",
    "safeTransferFrom(address,address,uint256)" => "regular_safe_transfer_from",
}

erc721::functions::safe_transfer_from_with_data::encode_input(...);
erc721::functions::regular_safe_transfer_from::encode_input(...);

@Lohann Lohann changed the title Feature/ Support contracts with overloaded methods Feature/ Support overloaded methods Oct 7, 2020
@Lohann Lohann changed the title Feature/ Support overloaded methods Support overloaded methods Oct 7, 2020
@Lohann Lohann changed the title Support overloaded methods Support solidity overloaded methods Nov 10, 2020
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.

1 participant