Cambiar el contenido de la variable de estado en el contrato A del contrato B

Si tengo dos contratos, el contrato A y el contrato B. ¿Cómo puedo cambiar el contenido de las variables de estado declaradas públicamente en el contrato A del contrato B?

Respuestas (1)

No es importante que la variable sea public. Implica muchas cosas, pero no implica que alguien o cualquier contrato pueda venir y sobrescribirlo.

contract Atendrá que explotar una función. contract Bnecesitará el conocimiento de esta función, así como el conocimiento de la dirección del contrato A. Esta es más de una forma de abordar cada una de esas preocupaciones. Como punto de partida, considere.

En el contrato A, cree una función que realmente escriba en la variable de estado.

function setValue(uint newValue) public returns(bool success) {
  someValue = newValue;
  return true;
}

en el contrato B.sol, informa a B sobre la interfaz y la ubicación de A e instancia una instancia.

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);
  }
}

Espero eso ayude.

Hola Rob, entonces, sin el enfoque de interfaz, técnicamente, las variables de estado no pueden ser sobrescritas por contratos externos.
Bien. No. El estado interno del contrato está 100% bajo el control del propio contrato y nadie lo evita. publicestá haciendo algunas cosas, una de las cuales es un captador "gratuito". No implica que haya un setter libre. Esta función de conveniencia tiene sentido porque no hay problemas de control de acceso en las funciones de solo lectura... todo es visible para todos, por lo que tiene sentido hacerlo más conveniente. Los establecedores muy a menudo tienen preocupaciones de control de acceso específicas del caso de uso, por lo que tiene sentido dejar que el autor decida qué es aceptable.