Beim Bereitstellen eines Smart Contracts wird eine Warnung angezeigt: [Schlechte Anweisung]

Ich setze einen Smart Contract ein und er zeigt diesen Fehler, nachdem ich sehe, dass er auf Testnet erstellt wurde:

Warning! Error encountered during contract execution [Bad instruction] 

Wenn ich zur Registerkarte Vertragscode gehe, ist sie leer und hat nur ein 0xdort.

Fast wie Vertrag erstellt, aber nicht vollständig.

Hier ist die Transaktion, die den Vertrag erstellt hat:

https://testnet.etherscan.io/tx/0xaf1adfc8a995068e0f8eb02ad5fa4582244997e4d8b8284165bd18937d6371b9

Hier ist das Konstrukteursstück des Vertrages:

pragma solidity ^0.4.8;

contract RouteCoin {

    string public parentContracts;

    address private buyer;   

    address private seller;

    uint private contractStartTime;

    address private finalDestination;  

    uint private contractGracePeriod;

    function RouteCoin(address _finalDestination, uint _contractGracePeriod, string _parentContracts) {
        buyer = msg.sender;
        contractStartTime = now;        
        finalDestination = _finalDestination;
        contractGracePeriod = _contractGracePeriod;
        parentContracts = _parentContracts;
    }

Auch wenn ich die Ethereum-Brieftasche verwende, erhalte ich diesen Fehler:Geben Sie hier die Bildbeschreibung ein

No data is deployed on the contract address!

Und wenn ich zu Etherscan gehe, sehe ich das:

Warning! Error encountered during contract execution [Bad jump destination] 

https://testnet.etherscan.io/tx/0xadd8d2807cc9405ef317f664d86195464afcd62471dc890c9de69ac3a122f31d

Irgendwelche Ideen?

Geben Sie hier die Bildbeschreibung ein

Kannst du deinen Vertragscode posten? Wahrscheinlich entweder ein Konstrukteursfehler oder zu wenig Gas.
@RobHitchens hat die Frage mit dem oberen Abschnitt des Vertrags aktualisiert
Vertrag ist gültig. Ich würde mich auf die Bereitstellungsmethode konzentrieren. Es gibt mehrere Möglichkeiten, dies zu tun, so schwer, genau zu sein. In letzter Zeit haben Leute solche Probleme und sie erzielen gute Ergebnisse, indem sie ihre Wallets und/oder Geth aktualisieren. Zum Beispiel hier: ethereum.stackexchange.com/questions/12386/…
Danke @RobHitchens. Ja, ich verwende Nethereum (.net) zum Bereitstellen. und wenn ich die Geth-Version auf die neueste aktualisiere, wird sie überhaupt nicht bereitgestellt. Beim Versuch, mit Ethereum Wallet 0.8.9 Win 64 bereitzustellen, wird auch ein anderer Fehler angezeigt.
@RobHitchens Ich erhalte über den Link, den Sie bei der Verwendung der Ethereum-Brieftasche gesendet haben, „Auf dieser Vertragsadresse werden keine Daten bereitgestellt“.
Hmmm ... es gab kürzlich ein anderes Problem, das sich irgendwie darauf reimt, aber ich bin mir nicht sicher, ob es in Nethereum eine Rolle spielt. Schau mal hier ethereum.stackexchange.com/questions/11912/… . Ich frage mich nur, ob sich Ihr Compiler in diese unerwünschte <stdin> einschleicht.
@RobHitchens Sieht so aus, als ob dies passiert, wenn ich versuche, Ethers an den Vertrag zu senden, wenn ich ihn einsetze. das hat früher mal funktioniert! Kann ich beim Deployment Ether zum Vertrag senden?
Oh wow. Das ist ein (das?) Problem. Nach solc 4.x, wenn ich mich richtig erinnere, können Sie Ether an keine Funktion senden, es sei denn, die Funktion ist mit dem Schlüsselwort bezahlbar gekennzeichnet. Ein Konstruktor kann zahlbar sein, aber wenn dies nicht der Fall ist (ist er nicht), dann verursacht das Senden von Ether an ihn einen Fehler, anstatt wie erwartet ausgeführt zu werden.
@RobHitchens Ja, das Hinzufügen einer Zahlung an den Konstruktor hat das Problem behoben!
Hi @Aram - bitte füge eine Antwort mit diesen Details hinzu :-) (Und akzeptiere sie dann.)

Antworten (1)

Mit Hilfe von @RobHitchens stellt sich jetzt nach Sol 4.x heraus, dass ich, wenn ich zum Zeitpunkt der Vertragserstellung Ether an einen Vertrag senden möchte, payabledie Konstruktormethode verwenden sollte (genau wie alle normalen Funktionen im Vertrag der Äther überträgt)

Also den Vertragskonstruktor so geändert, dass er so aussieht und jetzt gut funktioniert:

function RouteCoin(address _finalDestination, uint _contractGracePeriod) 
payable
{
    buyer = msg.sender;
    contractStartTime = now;        
    finalDestination = _finalDestination;
    contractGracePeriod = _contractGracePeriod;
}