Solidity: Mejores prácticas - ¿Qué versión del compilador debo usar? Ventajas desventajas

¿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?

Gracias por su enlace del cual tomo la información para bloquear la versión es la mejor práctica. ¿ Bloquea pragma solidity 0.4.24;la versión?
sí lo hace Si usa ^será 'abierto'

Respuestas (3)

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.24y 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.

En cuanto a 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.
@Senju Tengo el mismo error que tú.

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.