Wenn ich zwei Verträge habe, Vertrag A und Vertrag B. Wie kann ich den Inhalt einer öffentlich deklarierten Zustandsvariablen in Vertrag A von Vertrag B ändern?
Es ist nicht wichtig, dass die Variable public
. Es impliziert viele Dinge, aber es impliziert nicht, dass irgendjemand oder irgendein Vertrag kommen und es überschreiben kann.
contract A
muss eine Funktion aufdecken. contract B
benötigt Kenntnis dieser Funktion sowie Kenntnis der Adresse von Vertrag A. Dies ist mehr als eine Möglichkeit, auf all diese Bedenken einzugehen. Betrachten Sie als Ausgangspunkt.
Erstellen Sie in Vertrag A eine Funktion, die tatsächlich in die Zustandsvariable schreibt.
function setValue(uint newValue) public returns(bool success) {
someValue = newValue;
return true;
}
im Vertrag B.sol B über die Schnittstelle und den Ort von A informieren und eine Instanz instanziieren.
contract AInterface {
function setValue(uint newValue) public returns(bool success);
}
contract B {
AInterface a;
function B(address addressContractA) public {
a = AInterface(addressContractA);
}
function setThatThing(uint newNumber) public returns(bool success) {
return a.setValue(newNumber);
}
}
Ich hoffe es hilft.
NowsyMe
Rob Hitchens
public
macht ein paar Dinge, von denen eines ein "freier" Getter ist. Es bedeutet nicht, dass es einen freien Setter gibt. Diese Komfortfunktion ist sinnvoll, weil es keine Bedenken hinsichtlich der Zugriffskontrolle bei Nur-Lese-Funktionen gibt ... alles ist für alle sichtbar, daher ist es sinnvoll, es bequemer zu machen. Setter haben sehr oft anwendungsfallspezifische Bedenken hinsichtlich der Zugriffskontrolle, daher ist es sinnvoll, es dem Autor zu überlassen, zu entscheiden, was akzeptabel ist.