Tengo una matriz pública creciente
struct MatchInfo {
uint256 matchId;
bool isMatchDone;
}
MatchInfo[] public matchInfo;
y quiero devolver una matriz que uint256
recorrerá matchInfo
y encontrará dóndeisMatchdone == false
function getUnfinishedMatches() public constant returns (uint256[]) {
uint256[] memory unFinishedMatches = new uint[](getMatchCount());
for (uint i = 0; i <= matchInfo.length; i++) {
if (matchInfo.isMatchdone == false) {
unFinishedMatches[i] = matchInfo.matchId;
}
}
return unFinishedMatches;
}
Vi en algún lugar de la publicación que constant returns
no consumirá gasolina. ¿Es verdad? si no es cierto, ¿es la función anterior una mala forma de enfoque/práctica para devolver una matriz en solidez? Si es así, cuáles son las alternativas?
Realmente depende. Hay dos formas de llamar funciones desde un contrato inteligente
Llámalos desde una transacción de Ethereum. Esto llamará a la función en cadena y le costará gasolina de la ejecución.
Llámelos de solo lectura sin crear una transacción. Esto no cuesta gasolina. Esto se puede hacer porque, dado que es una función constante y no modifica el estado, se puede llamar sin crear una transacción en cadena. Esto no funcionará para funciones que modifican el estado porque el estado no persistirá ya que no hay transacción. Esto generalmente se hace en web3 haciendo call()
en la función.
bbusdriver
constant
un modificador, no costaría gasolina porque no crea una transacción. Veo. Si sacoconstant
comofunction sellProduct(string _name, string _description, uint256 _price) public {}
entonces crearía una transacción y costaría gasolina, ¿verdad?natewelch_
sellProduct
probablemente no tendría sentido para ser constante, ya que el nombre hace que suene como si necesitara modificar el estado y, por lo tanto, no ser constante.bbusdriver