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?
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.sender
des 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.
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.
A
, der es nur erlaubt C
, Ether abzuheben und an eine beliebige Adresse zu senden.A
von innerhalb von bereit C
. Dies wird C
als msg.sender
für A
.A
und es steht kein privater Schlüssel für den Zugriff zur Verfügung A
.A
wäre der Vertrag C
.
Thorkil Værge