Register a contract's methods names
MetaMask uses the Parity on-chain registry of function signatures to display method names on the confirm screen. For many common method names, such as token methods, this allows MetaMask to successfully look up the method names by their method signature. However, sometimes you're using a method that isn't in that on-chain registry, and MetaMask simply displays Contract Interaction to the user.
To add your contract's function names to this registry so it shows in the MetaMask interface, follow these steps:
Go to the Mainnet Parity signature registration contract on Etherscan.
Connect MetaMask.
Use Etherscan's write contract feature to input the string value (without quotes or spaces) to the register function. For example:
getOwners()
execTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes)
Select write.
Approve the transaction in MetaMask (you only pay gas).
Verify
ethers.utils.keccak256('getOwners()') => 0xa0e67e2bdc0a6d8a09ccd6c353c9df590807ad66ff5e6630c4f31a86dfa84821
Input the first 10 characters, 0xa0e67e2b
, into
this demo app that checks the
on-chain registry (Mainnet or Rinkeby only).
Use Remix
- Paste the contract code from bokky's blog post into Remix.
- Set the correct compiler version based on the contract.
- Use Remix's write functionality to add to the registry.
- You can look at the
FUNCTIONHASHES
section on Remix by loading the signature registry contract, and selecting details on the compile tab.
Use eth-method-registry
You can also use the signature registry deployed on Rinkeby.
eth-method-registry
is used to lookup methods
in MetaMask.
MetaMask reads from the mainnet eth-method-registry
endpoint, regardless of the user's network.
For more details, see this StackExchange answer.