Estoy ocupado con un proyecto. Entonces tengo una matriz de una estructura dentro de otra estructura. En este caso, por ejemplo, matriz de CattleHealth en Cattle. En mi función RecordHealth, tomo la dirección de la estructura Cattle y agrego la longitud actual de su lista actual para crear una dirección única. ¿Es esta una forma correcta de hacerlo?
contract WagyuRecordContract
{
address owner;
struct Cattle
{
address RFID;
string Name;
uint256 Weight;
string Gender;
string Colour;
string Breed;
uint Age;
uint DOB;
string Location;
bool Parent;
string SireName;
string DamName;
bool Active;
bool ForSale;
CattleHealth[] HealthRecord;
CattleGrowth[] GrowthRecord;
CattleMovements[] MovementsRecord;
Facility SlaughterDetails;
Meat[] DistributionDetails
}
struct CattleGrowth
{
uint DateRecorded;
uint256 FoodIntake;
uint256 Growth;
}
mapping (address => Cattle) public cattle;
mapping (address=> CattleGrowth) public growth;
modifier Owner()
{
require(msg.sender == owner);
_;
}
function RecordHealth(address rfid, string _bodyCond, string _healthStat, uint256, string _med) Owner public
{
health[rfid+cattle[rfid].HealthRecord.length].DateRecorded = now;
health[rfid+cattle[rfid].HealthRecord.length].BodyCondition = _bodyCond;
health[rfid+cattle[rfid].HealthRecord.length].HealthStatus = _healthStat;
health[rfid+cattle[rfid].HealthRecord.length].Medication = _med;
cattle[rfid].HealthRecord.push(health[rfid+cattle[rfid].HealthRecord.length]);
}
}
Editar: My Buddy usó este método a continuación sin usar un mapeo. No entiendo cómo funciona esto. ¿Para qué sirve el -1? ¿Cómo es exclusivo del ganado?
function RecordHealth(address rfid, string _bodyCond, string _healthStat, string _med) Owner public
{
cattle[rfid].HealthRecord.push(now, _bodyCond, _healthStat, _med)-1;
}
Negativo. Mientras que en C o lenguajes similares la aritmética de punteros es la regla normal, en Solidity no se garantiza que funcione, tanto para el empaquetado eventual como para la desalineación cíclica eventual. Por lo tanto, se recomienda encarecidamente no hacerlo.
buena vibración
rfid+cattle[rfid].HealthRecord.length
Incluso compila? Estás tratando de agregaraddress + uint
. Parece que por lo menos necesita reemplazarlo conaddress(uint(rfid)+cattle[rfid].HealthRecord.length)
.buena vibración
health
mapeo.buena vibración
eli2099