OpenZeppelin/openzeppelin-labs

Ensure that proxies bubble up error messages

Opened this issue · 21 comments

Solidity 0.4.22 introduced support for error reasons on revert EVM operations, check that proxies correctlly forward the error reason to their clients.

As an example, let's assume we have a logic contract named Reverter:

contract Reverter {
    function willRevert() public {
        require(false, "This is an error message from the contract");
    }
}

If you deploy this contract and attempt to call willRevert, you get the following message. Note that the message includes the revert reason This is an error message from the contract.

transact to Reverter.willRevert errored: VM error: revert.
revert The transaction has been reverted to the initial state.
Reason provided by the contract: "This is an error message from the contract".
Debug the transaction to get more information. 

Now, if you create a Proxy for Reverter via ZeppelinOS, and attempt to call willRevert on the proxy, the returned error message must include the This is an error message from the contract legend. Add a test in zos-lib to ensure it works like this, and make any necessary changes in Proxy if needed.

Depends on zeppelinos/zos-lib#162

Issue Status: 1. Open 2. Started 3. Submitted 4. Done


This issue now has a funding of 0.2 ETH (103.97 USD @ $519.84/ETH) attached to it.

@yjkimjunior thanks for tackling this issue!! Note that the issue is not exactly what you're describing. I've just updated the description to better explain it. Please us me know if it's now clear, and if you're still willing to work on this after the clarification.

Thanks for the clarification, @spalladino, that makes sense. So make sure that error messages are retrieved/bubbled up from calls made to contracts through the proxies, right? I can modify/add the helper assertRevertWithErrMsg.js for this and assert error.message has a Reason provided by the contract: in the string.

Here are my two cents on that, we could add an optional argument to the current assertRevert expecting it to assert a revert with a custom message when given and assert a revert without a message when not.

@yjkimjunior Hello from Gitcoin Core - are you still working on this issue? Please submit a WIP PR or comment back within the next 3 days or you will be removed from this ticket and it will be returned to an ‘Open’ status. Please let us know if you have questions!

  • warning (3 days)
  • escalation to mods (6 days)

Funders only: Snooze warnings for 1 day | 3 days | 5 days | 10 days | 100 days

Looks like this is blocked for now by these issues at Truffle/Ganache:

trufflesuite/truffle#976
trufflesuite/ganache#106

@yjkimjunior Hello from Gitcoin Core - are you still working on this issue? Please submit a WIP PR or comment back within the next 3 days or you will be removed from this ticket and it will be returned to an ‘Open’ status. Please let us know if you have questions!

  • warning (3 days)
  • escalation to mods (6 days)

Funders only: Snooze warnings for 1 day | 3 days | 5 days | 10 days | 100 days

@yjkimjunior Hello from Gitcoin Core - are you still working on this issue? Please submit a WIP PR or comment back within the next 3 days or you will be removed from this ticket and it will be returned to an ‘Open’ status. Please let us know if you have questions!

  • warning (3 days)
  • escalation to mods (6 days)

Funders only: Snooze warnings for 1 day | 3 days | 5 days | 10 days | 100 days

Issue Status: 1. Open 2. Started 3. Submitted 4. Done


@yjkimjunior due to inactivity, we have escalated this issue to Gitcoin's moderation team. Let us know if you believe this has been done in error!

  • warning (3 days)
  • escalation to mods (6 days)

Funders only: Snooze warnings for 1 day | 3 days | 5 days | 10 days | 100 days

spm32 commented

Hey @yjkimjunior have you looked at trufflesuite/truffle#976 (comment)? It may actually be possible to get around that blocking issue.

Hey @spalladino are you still looking to get this one fulfilled?

@smitrajput sure! It seems to require a new version of truffle to work, so we may not yet include it in zeppelinos/zos, but it'd be interesting to check if the assembly for delegating calls in the proxy work properly.

Not sure if @yjkimjunior is still working on it though. @yjkimjunior could you confirm if it's ok for @smitrajput to tackle this issue?

Hey all, sorry I've been busy with other things and haven't been working on this. @smitrajput feel free to take the baton!

hey @smitrajput - Frank from Gitcoin here - are you still working on this issue?

hey @spalladino - the issue is currently expired on Gitcoin - is it still open to the public?

Hey @frankchen07! I'm not sure about the bounty on gitcoin, but you're welcome to work on this if interested! Note that it may be the case that we don't actually need to code anything, and revert reasons are indeed working on the current implementation.

hey @spalladino - I see. I'm on the Gitcoin team, and just checking in on the issue :). We'll leave it up in open status, but currently it's expired, so whoever is up next to help out on the issue may reach out!

Thanks @frankchen07! I wasn't aware that you were on the gitcoin team, thanks for all the help around here, and for checking in on this issue!

Issue Status: 1. Open 2. Cancelled


The funding of 0.2 ETH (35.14 USD @ $175.71/ETH) attached to this issue has been cancelled by the bounty submitter