Ändern Sie den Inhalt der Zustandsvariablen in Vertrag A von Vertrag B

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?

Antworten (1)

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 Amuss eine Funktion aufdecken. contract Bbenö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.

Hallo Rob, also ohne den Schnittstellenansatz können Zustandsvariablen technisch gesehen nicht durch externe Verträge überschrieben werden?
Rechts. Nein. Der interne Vertragsstatus unterliegt zu 100 % der Kontrolle des Vertrags selbst, und daran kommt niemand vorbei. publicmacht 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.