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?
No es importante que la variable sea public
. Implica muchas cosas, pero no implica que alguien o cualquier contrato pueda venir y sobrescribirlo.
contract A
tendrá que explotar una función. contract B
necesitará 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.
AhorasyMe
Rob Hitchens
public
está 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.