Vertragserstellung, bei der die Adresse nicht als Groß-/Kleinschreibung gespeichert wird. mit web3 1.0

Ich arbeite mit web3 1.0.0-beta.33, Truffle-Contract 3.0.5 und habe festgestellt, dass beim Abrufen der Liste der Konten von meinem aktuellen web3-Anbieter die Adressen gemäß der web3 1.0-Dokumentation in Groß- und Kleinschreibung sind. Bei der Speicherung msg.sendermeiner Vertragsinstanziierung wird die Adresse nur in Kleinbuchstaben gespeichert. Wenn ich das anrufe, mycontract.creator()gibt es das richtige Konto zurück. Ich habe es mit und ohne Metamask, Trüffelvertrag versucht und sogar zwischen Ganache-Cli und meinem eigenen Geth-Knoten gewechselt. Jedes Mal, wenn es das Erstellerkonto als Kleinbuchstaben festgelegt hat. Hier ist die Kontoliste, die von Firefox mit Metamask abgerufen wurdeKonten mit Metamaske

Hier ist die von Chrome erhaltene Kontoliste ohne Metamask (Anbieter ist ganache-cli), Konten ohne Metamaskeda Sie sehen können, dass alle Kontoadressen wie erwartet in beiden Fällen gemischte Groß- und Kleinschreibung sind, daher gehe ich davon aus, dass web3 hier nicht das Problem ist.

Der Kontoabgleich aus dem Browser links ist derjenige, der von meinem Vertrag gespeichert und der andere mit abgerufen wirdweb3.eth.getAccounts()[0]

firefox-metamask Konten gespeichertchrom-ganacheerhaltene Konten von Chrome

Dies sind die Testergebnisse, in denen Adressen wie erwartet Mit Ganache-Cli testenmit ganache-cli gespeichert werden

Testen Sie mit dem Geth-Knoten^ Verwendung meines eigenen privaten Netzwerks mit Geth-Knoten Seltsam ist, dass während meiner Tests die im Vertrag gespeicherten Adressen gemischte Groß- und Kleinschreibung sind

Hier ist mein Vertragscode (die relevanten Teile)

pragma solidity ^0.4.18;

contract Ive {

address public creator;
address public owner;

constructor () public {
    creator = msg.sender;
    owner = msg.sender;
}

function setOwner(address _owner) external {
    owner = _owner;
    // allowVisitor(_owner);
    // emit OwnerAssigned(msg.sender, _owner);
}

}
Hallo, mir ist dieses Thema so fremd ... aber a ... Ich werde streng bleiben "Hi" und "Hi" Unterschiede Wie auch immer Sie tun, ist eine wirklich schwierige Programmiersache. Ich kann dich einholen XD Wie auch immer GLHF und wenn du einen guten Tag haben könntest, ist mir eine Freude :)

Antworten (1)

Verträge speichern Adressen niemals in Groß-/Kleinschreibung. Das liegt daran, dass Adressen eine Hex-Darstellung von 20 Bytes sind (und Bytes keine Fälle haben). Der gemischte Fall ändert die Adresse eigentlich überhaupt nicht, es ist nur eine Möglichkeit, die Hex-Darstellung einer Adresse aufzuschreiben, die eine Prüfsumme enthält.

Ob also ein web3-Aufruf zu einem Vertrag Ihnen einen gemischten Fall zurückgibt, hat nichts mit dem Vertrag zu tun, sondern mit der Bibliothek, die Sie verwenden, um die Daten aus dem Vertrag abzurufen. Sie können verwenden web3.utils.toChecksumAddress, um eine Adresse in Groß-/Kleinschreibung in gemischte Schreibweise umzuwandeln: https://web3js.readthedocs.io/en/1.0/web3-utils.html#tochecksumaddress

Beachten Sie auch, dass Metamask web3 0.20.x verwendet, das (afaik) standardmäßig keine Adressen mit gemischten Groß- und Kleinschreibung verwendet oder zumindest inkonsistent ist.

Dies könnte auch damit zusammenhängen: github.com/ethereum/web3.js/issues/1395
Nachdem ich Ihre beiden Beiträge gelesen habe, kann ich wirklich auf das Problem hinweisen, dass beim Vergleich der gespeicherten Adresse im Vertrag mit dem Konto, das die Transaktion sendet, diese Fallunterschiede dazu führen, dass die Eigentumsvalidierung fehlschlägt. Tatsächlich ist das Thema mit @leberknecht verlinkt