Kann sich jeder als Vertragseigentümer ausgeben?

Ich bin neu bei Ethereum und Solidity, ich habe eine Token-App mit Zeppelin und Trüffel erstellt, die Token generiert und an andere sendet.

Meine Frage ist, wenn ich den Vertrag bereitgestellt habe, dann ist msg.sender mein öffentlicher Schlüssel (z. B.: 0xbb439f37bf26d74aa02d0d85d8748c85530d439a), dann kann ich das Eigentum an eine andere Adresse übertragen. Wenn jemand meinen öffentlichen Schlüssel kennt, kann er/sie die transferOwnership-Methode aufrufen?

Antworten (1)

Lassen Sie uns für diese Demonstration unsere eigene kleine transferOwnershipMethode verwenden, von der ich sicher bin, dass sie dasselbe bewirkt wie die, von der Sie sprechen.

function transferOwnership(address new_owner) {
    require(msg.sender == owner);
    owner = new_owner;
}

Sie können sehen, dass die Funktion prüft, ob der Absender der Nachricht tatsächlich der Eigentümer ist, sodass niemand sonst den Eigentümer ändern kann.

Selbst wenn die Leute Ihren öffentlichen Schlüssel, Ihre Adresse kennen, reicht das nicht aus. Wenn sie den Eigentümer des Vertrages, also Sie, ändern wollen, müssen sie „eine Nachricht an den Vertrag senden, der von Ihnen unterzeichnet wurde“, und dafür brauchen sie etwas, das sie sicher nicht haben, nämlich Ihren privaten Schlüssel .

Solange es also niemand weiß, sind Sie sicher! :)

Ich würde auch hinzufügen, dass msg.senderdas automatisch von der EVM gesetzt wird und nicht vom Absender der Nachricht.
Wo finden Sie diese Art von Informationen? Code von Solidity (wie auf Github)?
Der Absender ist Teil der Ethereum Virtual Machine-Spezifikation (es liegt nicht an Compiler-Autoren wie Solidity oder Clients wie Parity), daher ist der beste Ort, um nachzusehen, das Ethereum-Whitepaper (oder ein relevantes EIP, das schwer nachzuverfolgen sein kann). In diesem Fall steht es im Whitepaper unter github.com/ethereum/wiki/wiki/White-Paper . Konkret finden Sie es im Abschnitt über Nachrichten und was eine Nachricht enthält.
@WarisAhmedkhan, wenn Sie denken, dass es Ihre Frage beantwortet hat, wären Sie nett und markieren Sie es? ;-)
@ElishaDrion Ich habe die Antwort markiert, danke :) . Kann ich Ihnen noch eine Frage stellen, dh nach der Bereitstellung von Smart Contract, wenn jemand über die Befehlszeile auf mein Trüffelprojektverzeichnis zugreift, kann dieser Verdächtige als Vertragseigentümer vorgeben, da ich hdwalletprovider-privkey verwendet habe, der den privaten Schlüssel als Parameter zum Signieren aller Transaktionen verwendet .so gibt es eine Möglichkeit, es zu schützen?
@WarisAhmedkhan Sorry, kann ich nicht beantworten, ich weiß nichts darüber :/