Kann ein Vertrag eine andere Adresse kontrollieren?

Angenommen, ich habe die Kontrolle über die Adressen A und B und schreibe Vertrag C. Wenn ich C in der Blockchain einsetze, hat es seine eigene Adresse, die Ether senden und empfangen kann. Aber ich möchte eine Methode auf C haben, die, wenn sie aufgerufen wird, Ether von Adresse A zu Adresse B sendet, nicht zu oder von C.

Natürlich könnte ich das tun, indem ich den privaten Schlüssel für A in C speichere, aber dann könnte sich jeder C ansehen, den Schlüssel herauskopieren und ihn selbst verwenden. Ich möchte nur C erlauben, Äther von A zu senden, niemand anderem.

Gibt es eine Möglichkeit, einem Vertrag die Kontrolle über eine andere Adresse zu ermöglichen, ohne den Schlüssel für diese Adresse öffentlich zugänglich zu machen?

Antworten (3)

Wenn A ein Vertrag ist, dann ja. Wenn dies nicht der Fall ist, ist Ihre Argumentation insofern richtig, als C in dieser Situation den privaten Schlüssel für A benötigen würde und dieser für jeden zugänglich ist, der einen Ethereum-Client betreibt oder direkt aus der Ethereum-Blockchain lesen kann.

Wenn A ein Kontrakt ist, können Sie in A ein Häkchen machen, so dass nur C berechtigt ist, eine Übertragung von Ether von A nach B zu initiieren.

Das könnte in A so aussehen:

if (msg.sender != "0xb7cB1C96dB6B22b0D3d9536E0108d062BD488F74"){
    return false;
}
/// Code to transfer ether

Sie können dies tun, indem Sie einfach die Adresse von C in den Vertrag A fest codieren und dann die Adresse von C mit der Adresse msg.senderdes Anrufers vergleichen.

Da Ethereum-Adressen deterministisch sind, basierend auf der Erstelleradresse und ihrer Nonce, können Sie A sogar fest codieren und bereitstellen, bevor Sie C bereitgestellt haben.

Diese Frage wurde abgelehnt. Es wäre schön, wenn die Downvoter einen Kommentar hinterlassen könnten, warum sie die Antwort schlecht finden.

Nein, Sie können dies nicht tun, es sei denn, A ist ein Smart Contract.

Ja, das können Sie tun. Hier sind die Schritte.

  1. Erstellen Sie einen intelligenten Vertrag A, der es nur erlaubt C, Ether abzuheben und an eine beliebige Adresse zu senden.
  2. Stellen Sie eine Instanz Avon innerhalb von bereit C. Dies wird Cals msg.senderfür A.
  3. Dadurch wird eine Adresse für erstellt Aund es steht kein privater Schlüssel für den Zugriff zur Verfügung A.
  4. Der einzige, der Ether abheben kann, Awäre der Vertrag C.