Mein Forward Smart Contract sendet Geld an 0x000000000000

Dies ist meine Codierung unten. Wenn Gelder an diesen Vertrag gesendet werden, sollen sie an den Ersteller des Smart Contracts weitergeleitet werden, aber es funktioniert nicht. Alle Gelder werden an die Ethereum-Adresse 0x000000000000000000 gesendet.

Vertragsadresse ist https://etherscan.io/address/0x6f3c294288c62ff70d6274c73741e16d3113f37d

pragma solidity ^0.4.23;

contract Forward {

  address public destinationAddress;
  event LogForwarded(address indexed sender, uint amount);
  event LogFlushed(address indexed sender, uint amount);

  function constuctor() public {
    destinationAddress = msg.sender;
  }

  function() payable public {
    emit LogForwarded(msg.sender, msg.value);
    destinationAddress.transfer(msg.value);
  }

  function flush() public {
    emit LogFlushed(msg.sender, address(this).balance);
    destinationAddress.transfer(address(this).balance);
  }

}

Antworten (1)

Ihr Konstruktor wurde nie aufgerufen. Der Konstruktor sollte ohne das Schlüsselwort geschrieben werden function. Außerdem ist die Schreibweise des Konstruktors auch falsch.

Der richtige Smart Contract wäre

pragma solidity ^0.4.23;

contract Forward {

  address public destinationAddress;
  event LogForwarded(address indexed sender, uint amount);
  event LogFlushed(address indexed sender, uint amount);

  constructor() public {
    destinationAddress = msg.sender;
  }

  function() payable public {
    emit LogForwarded(msg.sender, msg.value);
    destinationAddress.transfer(msg.value);
  }

  function flush() public {
    emit LogFlushed(msg.sender, address(this).balance);
    destinationAddress.transfer(address(this).balance);
  }

}

Aktualisieren:

Und selbst dies könnte Ihren Zweck nicht erfüllen. Weil Sie eine geschriebene flushFunktion haben, mit der ich annehme, dass der Vertrag das Guthaben speichern und später an den Bestimmungsort spülen soll. Aber in der Fallback-Funktion verschenken Sie das gesammelte Guthaben sofort an destinationAddress. Der Vertrag wird also niemals das Guthaben speichern. Wenn dies der Fall ist, möchten Sie vielleicht, dass Ihr Fallback so aussieht:

  function() payable public {
    emit LogForwarded(msg.sender, msg.value);
    // destinationAddress.transfer(msg.value);
  }

Oder ich kann falsch liegen, wenn ich den gewünschten Anwendungsfall annehme.

Hinweis: Die meisten Entwickler testen gerne in Testnetzwerken. Nur für den Fall, dass Sie nichts davon wussten.