Ich entwickle einen Smart Contract, bei dem ich zwei Verträge habe ( A und B ). Ich habe eine Array-Variable in A und fülle sie mit Werten, aber wenn ich diese Variable von B bekomme , ist die Array-Adresse leer.
Pragma Solidität ^0.4.10;
Vertrag 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;
}
}
Vertrag MinisterioInterior{
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;
}
}
So sollten Sie einen Vertrag in einem anderen Vertrag deklarieren und aufrufen.
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);
Und hier finden Sie ein gutes und gut geschriebenes Ladenmuster, das Ihnen hilft:
Hier sind einige einfache und nützliche Muster in aufsteigender Reihenfolge der Nützlichkeit. - Gibt es gut gelöste und einfache Speichermuster für Solidity?
Luis Soares
aflorom
aflorom
Luis Soares
if(propuestasList.length == 0) return false;
. das solltest du vermeiden. Du solltest schnell und hart scheitern. Wenn die Array-Länge Null ist, sollte es nicht aufgerufen werden, da Sie hier Gas ausgeben. IMHO, sollten Sie verwendenrequire(propuestasList.length>0)
aflorom