Quiero reutilizar el tipo DateRange
en dos contratos. Sin embargo, fallo con múltiples errores. Actualmente tengo un error:
G21FE98E9 Member "endTicks" not found or not visible after argument-dependent lookup in tuple(uint64,uint64)
No encontré ninguna información relacionada que pudiera ayudar a resolver este problema.
Aquí está el código completo del contrato:
pragma solidity ^0.4.21;
contract SeasonFactory {
address public owner;
address[] public seasons;
event SeasonCreated(uint64 indexed beginTicks, uint64 indexed endTicks, address season);
function SeasonFactory() public {
owner = msg.sender;
}
function newSeason(uint64 beginTicks, uint64 endTicks) public restricted {
require(beginTicks < endTicks);
require(seasons.length == 0 || Season(seasons[seasons.length - 1]).period().endTicks() < beginTicks);
Season season = new Season(owner, beginTicks, endTicks);
seasons.push(season);
emit SeasonCreated(beginTicks, endTicks, season);
}
function getSeasonsCount() public view returns(uint) {
return seasons.length;
}
function getSeasonForDate(uint64 ticks) public view returns(address) {
for (uint i = seasons.length - 1; i >= 0; i--) {
Season season = Season(seasons[i]);
if (ticks >= season.period.beginTicks() && ticks <= season.period.endTicks())
return season;
}
return 0;
}
modifier restricted {
require(owner == msg.sender);
_;
}
}
contract Season {
address public owner;
SharedTypes.DateRange public period;
function Season(address owner_, uint64 beginTicks, uint64 endTicks) public {
owner = owner_;
period = SharedTypes.DateRange(beginTicks, endTicks);
}
}
library SharedTypes {
struct DateRange {
uint64 beginTicks;
uint64 endTicks;
}
}
¿Qué podría estar mal aquí?
Según esta publicación , un contrato no puede acceder directamente al almacenamiento de otro contrato.
Probablemente necesite implementar una función getter, como se describe en esta publicación .
Intenté usar la siguiente función en su contrato de temporada y funcionó bien:
function getTicks(uint ind) view public returns( uint64 ){
if(ind == 1) return period.endTicks;
else return period.beginTicks;
}
reyhaynes
Season(seasons[seasons.length - 1]).period().endTicks() < beginTicks)
ySeason season = Season(seasons[i])
cuándo Season necesita 3 parámetros?reyhaynes
Season
función decontract Season
, debe colocar ese contrato sobreSeasonFactory
y heredar correctamente concontract SeasonFactory is Season {}
Alex Zhukovsky
reyhaynes
Alex Zhukovsky
address
que se sabe que son un contrato T. Ver dappsforbeginners.wordpress.com/tutorials/…