forward revert message from low level solidity call The Next CEO of Stack Overflowdoes it comply with ERC20 if transfer() reverts instead returning false?This contract does not implement all functions and thus cannot be createdPadding parameter values in contract low-level callLower level implementation of solidity callGetting error message from require()Solidity: using low level call function on an EOAGet return data from delegatecallHow strings are stored in Solidity on a low level?Solidity: Info on How it works on the low levelremix ERC223: This contract does not implement all functions and thus cannot be created

Is it a bad idea to plug the other end of ESD strap to wall ground?

Trying to insert a background image via TikZ results in extra white-space around the corners

Would a grinding machine be a simple and workable propulsion system for an interplanetary spacecraft?

Does the Idaho Potato Commission associate potato skins with healthy eating?

How to avoid supervisors with prejudiced views?

Prodigo = pro + ago?

Finitely generated matrix groups whose eigenvalues are all algebraic

What difference does it make matching a word with/without a trailing whitespace?

What does it mean 'exit 1' for a job status after rclone sync

Can you teleport closer to a creature you are Frightened of?

Is it okay to majorly distort historical facts while writing a fiction story?

How to find if SQL server backup is encrypted with TDE without restoring the backup

What does this strange code stamp on my passport mean?

Strange use of "whether ... than ..." in official text

Calculate the Mean mean of two numbers

Shortening a title without changing its meaning

Find the majority element, which appears more than half the time

Compensation for working overtime on Saturdays

Plausibility of squid whales

Salesforce opportunity stages

How seriously should I take size and weight limits of hand luggage?

How can I prove that a state of equilibrium is unstable?

Is a distribution that is normal, but highly skewed, considered Gaussian?

Incomplete cube



forward revert message from low level solidity call



The Next CEO of Stack Overflowdoes it comply with ERC20 if transfer() reverts instead returning false?This contract does not implement all functions and thus cannot be createdPadding parameter values in contract low-level callLower level implementation of solidity callGetting error message from require()Solidity: using low level call function on an EOAGet return data from delegatecallHow strings are stored in Solidity on a low level?Solidity: Info on How it works on the low levelremix ERC223: This contract does not implement all functions and thus cannot be created










1















I'm working on a proxy contract that will perform calls as follows:



bool success;
bytes memory returndata;
(success, returndata) = _to.call.value(_value)(_data);
require(success);


this works great, except that, if the call reverts with an error message, this function will simply reverts, hiding the reason string.



How can I retrieve the reason string (I assume in the returndata) and use if to revert properly










share|improve this question


























    1















    I'm working on a proxy contract that will perform calls as follows:



    bool success;
    bytes memory returndata;
    (success, returndata) = _to.call.value(_value)(_data);
    require(success);


    this works great, except that, if the call reverts with an error message, this function will simply reverts, hiding the reason string.



    How can I retrieve the reason string (I assume in the returndata) and use if to revert properly










    share|improve this question
























      1












      1








      1


      2






      I'm working on a proxy contract that will perform calls as follows:



      bool success;
      bytes memory returndata;
      (success, returndata) = _to.call.value(_value)(_data);
      require(success);


      this works great, except that, if the call reverts with an error message, this function will simply reverts, hiding the reason string.



      How can I retrieve the reason string (I assume in the returndata) and use if to revert properly










      share|improve this question














      I'm working on a proxy contract that will perform calls as follows:



      bool success;
      bytes memory returndata;
      (success, returndata) = _to.call.value(_value)(_data);
      require(success);


      this works great, except that, if the call reverts with an error message, this function will simply reverts, hiding the reason string.



      How can I retrieve the reason string (I assume in the returndata) and use if to revert properly







      solidity revert-opcode proxy-contracts






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked 7 hours ago









      AmxxAmxx

      1135




      1135




















          1 Answer
          1






          active

          oldest

          votes


















          3














          It is simpler than you think:



          require(success, string (returndata));


          See documentation for details. You may also forward raw bytes, but you will need to use assembly.






          share|improve this answer























          • I tryed require(success, returndata); and started looking into assembly when it failled to compile ... thanks for proving how stupid I am :P

            – Amxx
            6 hours ago











          Your Answer








          StackExchange.ready(function()
          var channelOptions =
          tags: "".split(" "),
          id: "642"
          ;
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function()
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled)
          StackExchange.using("snippets", function()
          createEditor();
          );

          else
          createEditor();

          );

          function createEditor()
          StackExchange.prepareEditor(
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: false,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: null,
          bindNavPrevention: true,
          postfix: "",
          imageUploader:
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          ,
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          );



          );













          draft saved

          draft discarded


















          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fethereum.stackexchange.com%2fquestions%2f69133%2fforward-revert-message-from-low-level-solidity-call%23new-answer', 'question_page');

          );

          Post as a guest















          Required, but never shown

























          1 Answer
          1






          active

          oldest

          votes








          1 Answer
          1






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          3














          It is simpler than you think:



          require(success, string (returndata));


          See documentation for details. You may also forward raw bytes, but you will need to use assembly.






          share|improve this answer























          • I tryed require(success, returndata); and started looking into assembly when it failled to compile ... thanks for proving how stupid I am :P

            – Amxx
            6 hours ago















          3














          It is simpler than you think:



          require(success, string (returndata));


          See documentation for details. You may also forward raw bytes, but you will need to use assembly.






          share|improve this answer























          • I tryed require(success, returndata); and started looking into assembly when it failled to compile ... thanks for proving how stupid I am :P

            – Amxx
            6 hours ago













          3












          3








          3







          It is simpler than you think:



          require(success, string (returndata));


          See documentation for details. You may also forward raw bytes, but you will need to use assembly.






          share|improve this answer













          It is simpler than you think:



          require(success, string (returndata));


          See documentation for details. You may also forward raw bytes, but you will need to use assembly.







          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered 6 hours ago









          Mikhail VladimirovMikhail Vladimirov

          1,163314




          1,163314












          • I tryed require(success, returndata); and started looking into assembly when it failled to compile ... thanks for proving how stupid I am :P

            – Amxx
            6 hours ago

















          • I tryed require(success, returndata); and started looking into assembly when it failled to compile ... thanks for proving how stupid I am :P

            – Amxx
            6 hours ago
















          I tryed require(success, returndata); and started looking into assembly when it failled to compile ... thanks for proving how stupid I am :P

          – Amxx
          6 hours ago





          I tryed require(success, returndata); and started looking into assembly when it failled to compile ... thanks for proving how stupid I am :P

          – Amxx
          6 hours ago

















          draft saved

          draft discarded
















































          Thanks for contributing an answer to Ethereum Stack Exchange!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid


          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.

          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fethereum.stackexchange.com%2fquestions%2f69133%2fforward-revert-message-from-low-level-solidity-call%23new-answer', 'question_page');

          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          Bett Inhaltsverzeichnis Geschichte | Bettformen | Bettgrößen | Andere Bezeichnungen | Bettenmangel | Betten in der bildenden Kunst | Schlafmedizinische Gesichtspunkte | Siehe auch | Literatur | Weblinks | Einzelnachweise | NavigationsmenüBett, Bettstatt, BettstelleCommons: BettBabybetten: Anwendung, Ausstattungsmerkmale und VergleichskriterienWasserbetten. Vorurteile im TestHapfnNursch10.1007/s11818-012-0584-74006250-8AKS4329276-8

          Luksemburg Sisukord Nimi | Asend | Loodus | Riigikord | Haldusjaotus | Rahvastik | Riigikaitse | Majandus | Taristu | Ajalugu | Eesti ja Luksemburgi suhted | Haridus | Kultuur | Vaata ka | Viited | Välislingid | Navigeerimismenüü50° N, 6° EÜlevaade Luksemburgi kaitsealadest.Luksemburgi rahvaarv. Statistikaamet.World Bank'i andmebaasÜlevaade Luksemburgi loodusest.Ülevaade Luksemburgi metsadest.Guy Colling. "Red List of the Vascular Plants of Luxembourg." Travaux scientifiques du Musée national d’histoire naturelle Luxembourg. 2005.Luxembourg’s biodiversity at risk.Maailma kahepaiksete andmebaas.Denis Lepage. "Luxembourg." Avibase.Ülevaade temperatuuridest. Luksemburgi meteoroloogiateenistus.Ülevaade Luksemburgist. Euroopa Liidu esinduse koduleht.Système politique. TerritoireÜlevaade Luksemburgi rahvastikust. Luksemburgi statistikaamet.Luksemburgi rahvastik. Luksemburgi statistikaamet.The World FactbookMonique Borsenberger, Paul Dickes. "Religions au Luxembourg. Quelle évolution entre 1999-2008". Luksemburgi statistikaamet. 2011.Luksemburgi peapiiskopkond. Catholic-Hierarchy.Luksemburgi armee koduleht.Luksemburgi armee relvastus.Eesti Välisministeerium.Luksemburgi rahvastik. Luksemburgi statistikaamet.Luksemburgi Eesti Seltsi koduleht.Helen Eelrand. "Raadio, mis muutis maailma." Eesti Päevaleht. 13. märts 2004.Ülevaade Luksemburgi haridussüsteemist.Ülevaade Luksemburgi keskkoolidest.Luksemburgr

          Valle di Casies Indice Geografia fisica | Origini del nome | Storia | Società | Amministrazione | Sport | Note | Bibliografia | Voci correlate | Altri progetti | Collegamenti esterni | Menu di navigazione46°46′N 12°11′E / 46.766667°N 12.183333°E46.766667; 12.183333 (Valle di Casies)46°46′N 12°11′E / 46.766667°N 12.183333°E46.766667; 12.183333 (Valle di Casies)Sito istituzionaleAstat Censimento della popolazione 2011 - Determinazione della consistenza dei tre gruppi linguistici della Provincia Autonoma di Bolzano-Alto Adige - giugno 2012Numeri e fattiValle di CasiesDato IstatTabella dei gradi/giorno dei Comuni italiani raggruppati per Regione e Provincia26 agosto 1993, n. 412Heraldry of the World: GsiesStatistiche I.StatValCasies.comWikimedia CommonsWikimedia CommonsValle di CasiesSito ufficialeValle di CasiesMM14870458910042978-6