`ecrecover` wirft Gasfehler auf Ropsten aus

Hier: http://solidity.readthedocs.io/en/v0.4.21/units-and-global-variables.html , heißt es

Es kann sein, dass Sie auf einer privaten Blockchain auf Out-of-Gas für sha256, ricemd160 oder ecrecover stoßen . Der Grund dafür ist, dass diese als sogenannte vorkompilierte Verträge implementiert sind und diese Verträge erst wirklich existieren, nachdem sie die erste Nachricht erhalten haben (obwohl ihr Vertragscode fest codiert ist). Nachrichten zu nicht existierenden Kontrakten sind teurer und somit läuft die Ausführung in einen Out-of-Gas-Error. Eine Problemumgehung für dieses Problem besteht darin, zuerst z. B. 1 Wei an jeden der Verträge zu senden, bevor Sie sie in Ihren eigentlichen Verträgen verwenden. Dies ist kein Problem im offiziellen oder Testnetz.

Auch auf Ropsten geht das Gas aus, ich rufe eine Funktion auf, die ecrecoverdaran beteiligt ist, und sie wird nicht ausgeführt.

Obwohl die gleiche Funktion beim Trüffeltest gut funktionierte. Dieselbe Funktion auf Remix ausführen , get

Fehlerhafte Gasschätzung mit folgender Meldung (siehe unten). Die Ausführung der Transaktion wird wahrscheinlich fehlschlagen. Möchten Sie das Senden erzwingen? Fehler: Benötigtes Gas übersteigt Freibetrag oder Transaktion schlägt immer fehl

Etherscan Tx: https://ropsten.etherscan.io/tx/0x229a4e16f4464809181a24a16e1db2acb82b11ac160c26a1aa5e692495fb4d4a

Wie kann ich diese Funktion mit Ropsten zum Laufen bringen?

Das von Ihnen angegebene Problem gilt nur für private Blockchains und nicht für Ropsten. Es gibt einen Fehler in der Solidität , der die falsche Berechnung des Gases für vorkompilierte Verträge verursacht. Aber aus Ihrer Transaktion geht hervor, dass Ecrecover die Ursache ist.
Andere Vertragsfunktionen funktionieren gut, auf Trüffel habe ich dieselben Verträge getestet. Nur die Funktionen, die ecrecover betreffen, funktionieren nicht mit Metamask.
@AK Bitte geben Sie Ihren Vertragscode an oder überprüfen Sie ihn auf Etherscan.
Bitte fügen Sie Ihren Code hinzu, sonst ist es so gut wie unmöglich zu debuggen.

Antworten (1)

Ich habe es geschafft. Das Problem war mit einem Präfix in der Signatur, dh \x19Ethereum Signed Message:\n32. Weitere Einzelheiten zum Problem finden Sie hier: https://github.com/OpenZeppelin/zeppelin-solidity/issues/644