¿Dónde está la principal diferencia entre:
pragma solidity ^0.4.24;
ypragma solidity 0.4.24;
¿Por qué usaría uno u otro? ¿Ventajas desventajas?
¿Qué efecto tendrá en el futuro cuando implemente el contrato inteligente en la cadena de bloques?
Según la sección Versión Pragma de la documentación :
La versión pragma se utiliza de la siguiente manera:
pragma solidity ^0.4.0;
Dicho archivo fuente no se compilará con un compilador anterior a la versión 0.4.0 y tampoco funcionará en un compilador a partir de la versión 0.5.0 (esta segunda condición se agrega usando ^).
Así que en tu ejemplo,
pragma solidity 0.4.24;
funcionará en cualquier compilador desde 0.4.24
y hacia arriba, mientras que
pragma solidity ^0.4.24;
compilará en cualquier compilador desde 0.4.24
(inclusive) hasta 0.5.0
(no inclusive.
Sin embargo, tenga en cuenta que esto es solo para la compatibilidad del compilador. Una vez que haya compilado su contrato, ya no estará en Solidity, por lo que podrá implementarlo en el futuro sin preocuparse por la compatibilidad.
pragma solidity ^0.4.24;
que entiendo. Sin embargo, ¿ pragma solidity 0.4.24;
realmente especifica 0.4.24 y más? Ya que cuando lo uso pragma solidity 0.4.0;
arroja un error al compilar: SyntaxError: Source file requires different compiler version (current compiler is 0.4.24+commit.e67f0147.Emscripten.clang - note that nightly builds are considered to be strictly less than the released version pragma solidity 0.4.0; ^--------------------^ Compilation failed. See above.
como en su explicación, debería estar bien ya que 0.4.0 incluiría todas las versiones superiores del compilador.Bloquear pragmas a una versión específica del compilador
Los contratos deben implementarse con la misma versión del compilador y las mismas marcas con las que se han probado más. Bloquear el pragma ayuda a garantizar que los contratos no se implementen accidentalmente utilizando, por ejemplo, el último compilador que puede tener mayores riesgos de errores no descubiertos. Los contratos también pueden ser implementados por otros y el pragma indica la versión del compilador prevista por los autores originales.
// bad pragma solidity ^0.4.4; // good pragma solidity 0.4.4;
Documentación de Solidity: Versión Pragma
La versión pragma se utiliza de la siguiente manera:
pragma solidity ^0.4.0;
Dicho archivo fuente no se compilará con un compilador anterior a la versión 0.4.0 y tampoco funcionará en un compilador a partir de la versión 0.5.0 (esta segunda condición se agrega usando ^).
El símbolo ^ significa que puede compilar usando cualquier versión entre la versión declarada y el siguiente número entero.
mirg
senju
pragma solidity 0.4.24;
la versión?mirg
^
será 'abierto'