No puedo obtener el valor de una variable de estado pública

Estoy desarrollando un contrato inteligente que tengo dos contratos ( A y B ). Tengo una variable de matriz en A y la lleno con valores, pero cuando obtengo esa variable de B , la dirección de la matriz está vacía.

solidez de pragma ^0.4.10;

contrato Censo{

struct Persona{
    string name;
    uint age;
    uint weight;
    uint number;
    uint position;
    address[] propuestasVotadas;
}

address personaAutorizada;

mapping(address => Persona) public personas;
address[] public personasList;

function Censo(){
    personaAutorizada = msg.sender;
}

function existePersona(address _address) public constant returns(bool){

    if(personasList.length == 0) return false;
    return (personasList[personas[_address].position] == _address);
}

function addPersona(address _address, string _name, uint _age, uint _weight, uint _number) public{

    require(!existePersona(_address));

    personas[_address].name = _name;
    personas[_address].age = _age;
    personas[_address].weight = _weight;
    personas[_address].number = _number;
    personas[_address].position = personasList.push(_address) - 1;

}

function getNumPersonas() public returns(uint){

    return personasList.length;
}

}

contrato Ministerio Interior{

struct Propuesta{
    string nombre;
    string descripcion;
    uint numVotos;
    uint position;
}

event PropuestaAdded(address _address, uint now);
event PersonaVotePropuesta(address _addressPropuesta, address _addressPersona, uint now);

mapping(address => Propuesta) propuestas;
address[] propuestasList;

address personaAutorizadaMinisterio;

function MinisterioInterior(){
    personaAutorizadaMinisterio = msg.sender;
}

function existePropuesta(address _address) returns(bool){

    if(propuestasList.length == 0) return false;
    return (propuestasList[propuestas[_address].position] == _address);
}

function crearPropuesta(address _address, string _nombre, string _descripcion) returns(bool){

    require(!existePersona(_address));
    propuestas[_address].nombre = _nombre;
    propuestas[_address].descripcion = _descripcion;
    propuestas[_address].numVotos = 0;
    propuestas[_address].position = propuestasList.push(_address) - 1;
    return true;
}

}

¿Está su matriz en A pública? ¿Podrías compartir tu código fuente?
Sí, A es público
Además, no estoy seguro de cómo acceder a las funciones de A desde B.
Estoy buscando tu código. Pero aquí hay un consejo: if(propuestasList.length == 0) return false;. deberías evitar esto. Deberías fallar rápido y duro. Si la longitud de la matriz es cero, no debe llamarse porque está gastando gasolina aquí. En mi humilde opinión, deberías usarrequire(propuestasList.length>0)
Esa línea de código es necesaria porque estaba probando sin esa línea de código y obtuve un error de código de operación, pero con esa línea de código solucioné el error de código de operación. Sobre todo, es necesario porque tiene una matriz vacía en la primera iteración y no podrá ingresar un elemento en la matriz.

Respuestas (1)

Así es como debe declarar y llamar a un contrato dentro de otro contrato.

Censo trustedCenso;  //it is a good practice to mark a variable as "trusted" if it was written by yourself, so it is trusted, secure.
trustedCenso = Censo(_censoAddress); 
trustedCenso.existePersona(_personAddress);

Y aquí puedes encontrar un patrón de tienda bueno y bien escrito para ayudarte:

Aquí hay algunos patrones simples y útiles en orden creciente de utilidad. - ¿ Existen patrones de almacenamiento sencillos y bien resueltos para Solidity?