Instalando el compilador de Solidity
Versionado
Solidity utiliza Versionado Semántico. Además, los parches publicados con versión 0 (ej. 0.x.y) no contendrán cambios con rupturas. Eso significa que si un código compila con una versión 0.x.y puede esperar que compile con una versión 0.x.z donde z > y.
Adicionalmente a los lanzamientos, proporcionamos builds nocturnos con la intención de facilitar a los desarrolladores probar próximas funcionalidades y proveer retroalimentación temprana. Note, sin embargo, que aunque los builds nocturnos son bastante estables, contienen código reciente de la rama de desarrollo y no podemos garantizar que siempre funcionen. A pesar de nuestros mejores esfuerzos, pueden contener cambios fallidos o sin documentar que no formarán parte del lanzamiento final. No están pensados para uso en producción.
Al desplegar contratos, debería usar el último lanzamiento de Solidity. Esto es porque regularmente se introducen cambios con rupturas, funcionalidades nuevas y correcciones de errores. Actualmente usamos un número de versión 0.x para indicar el rápido ritmo de cambio.
Remix
Recomendamos Remix para pequeños contratos y para aprender Solidity rápidamente.
Entre a Remix en línea, no necesita instalar nada.
Si quiere usarlo sin conexión a internet, vaya a
https://github.com/ethereum/remix-live/tree/gh-pages y descargue el archivo .zip
como se explica en la página. Remix también es una buena opción para probar builds
nocturnos sin instalar múltiples versiones de Solidity.
Las siguientes opciones en esta página detallan cómo instalar el software para compilar Solidity mediante línea de comandos en su computadora. Use un compilador de línea de comandos si está trabajando en un contrato más largo o si requiere más opciones de compilación.
npm / Node.js
Use npm
para instalar solcjs
, un compilador de Solidity, de una manera portable
y sencilla. El programa solcjs tiene menos funcionalidades que el resto de maneras de
compilar detalladas más abajo en esta página. La documentación del
compilador de línea de comandos asume que está usando el compilador con funcionalidad
completa, solc
. El uso de solcjs
está documentado dentro de su propio
repositorio.
Nota: El proyecto solc-js fue extraído del programa solc escrito en C++ usando Emscripten, lo que significa que ambos usan el mismo código fuente. solc-js puede usarse directamente en proyectos JavaScript (como Remix). Por favor diríjase al repositorio de solc-js para más instrucciones.
npm install -g solc
Nota
El ejecutable de línea de comandos es llamado solcjs
.
Las opciones de línea de comandos de solcjs
no son compatibles con solc
y las
herramientas (como geth
) que esperen el comportamiento de solc
no funcionarán con solcjs
.
Docker
Las imágenes de Docker de Solidity están disponibles usando la imagen solc
de la organización ethereum
.
Busque la etiqueta stable
para la versión más reciente, y nightly
para versiones con cambios potencialmente
inestables de la rama de desarrollo.
La imagen de Docker corre el ejecutable del compilador, así que puede pasarle todos los argumentos del compilador.
Por ejemplo, el comando de abajo toma la versión estable de la imagen de solc
(si no la tiene todavía),
y la corre en un contenedor nuevo, pasando el argumento --help
.
docker run ethereum/solc:stable --help
También puede solicitar versiones de lanzamientos específicas, por ejemplo la versión 0.5.4.
docker run ethereum/solc:0.5.4 --help
Para usar una imagen de Docker para compilar archivos Solidity en la máquina huésped, monte una carpeta local para entrada y salida, y especifique el contrato a compilar. Por ejemplo.
docker run -v /local/path:/sources ethereum/solc:stable -o /sources/output --abi --bin /sources/Contract.sol
También puede usar la interfaz standard de JSON (que es la recomendada cuando se usa el compilador con otras herramientas). Cuando use esta interfaz, no es necesario montar ningún directorio mientras el input de JSON sea autocontenido (ej. cuando no haga referencia a archivos externos que tendrían que ser cargados con un import callback).
docker run ethereum/solc:stable --standard-json < input.json > output.json
Paquetes de Linux
Los binarios de Solidity están disponibles en solidity/releases.
También tenemos PPAs para Ubuntu, puede obtener la versión estable más reciente usando los siguientes comandos:
sudo add-apt-repository ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install solc
La versión nocturna puede ser instalada usando estos comandos:
sudo add-apt-repository ppa:ethereum/ethereum
sudo add-apt-repository ppa:ethereum/ethereum-dev
sudo apt-get update
sudo apt-get install solc
Más aún, algunas distribuciones de Linux proveen sus propios paquetes. Estos paquetes no son mantenidos directamente por nosotros, sino por los desarrolladores de dichos paquetes.
Por ejemplo, Arch Linux tiene paquetes para la última versión de desarrollo:
pacman -S solidity
También hay un paquete para snap, sin embargo actualmente no se le da mantenimiento. Se puede instalar en todas las distros de Linux respaldadas. Para instalar la última versión estable de solc:
sudo snap install solc
Si usted quiere ayudar a probar la última versión de desarrollo de Solidity con los cambios más recientes, por favor utilice el siguiente comando:
sudo snap install solc --edge
Nota
El snap de solc
usa confinamiento estricto. Este es el modo más seguro para paquetes
de snap pero tiene sus limitaciones, como por ejemplo, el solo acceder a los archivos en sus
directorios /home
y /media
.
Para más información, vaya a Demystifying Snap Confinement.
Paquetes para macOs
Distribuimos el compilador de Solidity a través de Homebrew como una versión build-from-source. Los binarios pre-compilados no son respaldados actualmente.
brew update
brew upgrade
brew tap ethereum/ethereum
brew install solidity
Para instalar la versión 0.4.x / 0.5.x más reciente de Solidity también puede usar
brew install solidity@4
y brew install solidity@5
, respectivamente.
Si necesita una versión específica de Solidity puede instalar una fórmula de Homebrew directamente desde Github.
Ver commits de solidity.rb en Github.
Copie el commit hash de la versión que quiere y haga check out en su máquina.
git clone https://github.com/ethereum/homebrew-ethereum.git
cd homebrew-ethereum
git checkout <el-hash-va-aquí>
Instalar usando brew
:
brew unlink solidity
# ej. para instalar 0.4.8
brew install solidity.rb
Binarios estáticos
Mantenemos un repositorio con todos los binarios estáticos y versiones actuales del compilador para todas las plataformas respaldadas en solc-bin. En esta locación también puede encontrar las compilaciones nocturnas.
Este repositorio no es solamente una manera fácil y rápida para que los usuarios finales puedan obtener los archivos binarios listos para usarse; también está pensado para ser amigable para herramientas de terceros:
El contenido está respaldado en https://binaries.soliditylang.org donde puede ser descargado por HTTPS sin autenticación, limitaciones de velocidad o la necesidad de usar git.
El contenido es servido con las cabeceras de tipo Content-Type correctas y una configuración de CORS permisiva para que pueda ser cargado directamente por herramientas que corran en navegadores.
Los binarios no requieren instalación o desempaquetado (con la excepción de algunas compilaciones antiguas para Windows que vienen con DLLs necesarios).
Nos esforzamos por una alta compatibilidad con versiones anteriores. Una vez que añadimos un archivo, no lo movemos o borramos sin proveer un symlink/redirect a la locación anterior. Nunca los modificamos en su lugar y el checksum siempre debería coincidir. La única excepción es con archivos dañados o corrompidos que potencialmente podrían causar más daño de dejarse como están.
Los archivos son servidos por HTTP y HTTPS. Mientras obtenga la lista de archivos de manera segura (via git, HTTPS, IPFS o esté cacheado localmente) y verifique los hashes de los binarios después de descargarlos, no necesita usar HTTPS para los binarios en sí mismos.
Los mismos binarios están disponibles la mayoría de las ocasiones en la página de releases de Solidity en Gihtub.
La diferencia es que normalmente no actualizamos viejos releases en esa página. Eso significa
que no los renombramos si las convenciones para nombrar archivos cambian, y tampoco añadimos
compilaciones para plataformas que no estaban disponibles cuando se hizo el release. Esto solo sucede
en solc-bin
.
El repositorio de solc-bin
contiene varios directorios de primer nivel, cada uno representando una plataforma.
Cada uno contiene un archivo list.json
que enlista los binarios disponibles. Por ejemplo, en
emscripten-wasm32/list.json
encontrará la siguiente información sobre la versión 0.7.4:
{
"path": "solc-emscripten-wasm32-v0.7.4+commit.3f05b770.js",
"version": "0.7.4",
"build": "commit.3f05b770",
"longVersion": "0.7.4+commit.3f05b770",
"keccak256": "0x300330ecd127756b824aa13e843cb1f43c473cb22eaf3750d5fb9c99279af8c3",
"sha256": "0x2b55ed5fec4d9625b6c7b3ab1abd2b7fb7dd2a9c68543bf0323db2c7e2d55af2",
"urls": [
"bzzr://16c5f09109c793db99fe35f037c6092b061bd39260ee7a677c8a97f18c955ab1",
"dweb:/ipfs/QmTLs5MuLEWXQkths41HiACoXDiH8zxyqBHGFDRSzVE5CS"
]
}
Esto significa que:
Puede encontrar el binario en el mismo directorio bajo el nombre solc-emscripten-wasm32-v0.7.4+commit.3f05b770.js. Note que el archivo puede ser un symlink, y necesitará resolverlo usted mismo si no está usando git para bajarlo a su sistema de archivos o su sistema de archivos no soporta symlinks.
El binario también está respaldado en https://binaries.soliditylang.org/emscripten-wasm32/solc-emscripten-wasm32-v0.7.4+commit.3f05b770.js. En este caso no se necesita git y los symlinks son resueltos transparentemente, ya sea sirviendo una copia del archivo o regresando una redirección de HTTP.
El archivo también está disponible en IPFS en QmTLs5MuLEWXQkths41HiACoXDiH8zxyqBHGFDRSzVE5CS.
El archivo puede estar disponible en Swarm en un futuro en 16c5f09109c793db99fe35f037c6092b061bd39260ee7a677c8a97f18c955ab1.
Usted puede verificar la integridad del binario comparando su hash keccak256 con
0x300330ecd127756b824aa13e843cb1f43c473cb22eaf3750d5fb9c99279af8c3
. El hash puede ser computado en la línea de comandos usando la utileríakeccak256sum
que provee sha3sum o la función keccak256() de ethereumjs-util en JavaScript.Usted también puede verificar la integridad del binario comparando su hash sha256 con
0x2b55ed5fec4d9625b6c7b3ab1abd2b7fb7dd2a9c68543bf0323db2c7e2d55af2
.
Advertencia
Debido a los fuertes requerimientos de compatibilidad con versiones anteriores, el repositorio contiene algunos elementos descontinuados que debería evitar usar al crear herramientas nuevas:
Use
emscripten-wasm32/
(o en su defectoemscripten-asmjs/
) en lugar debin/
si quiere el mejor rendimiento. Hasta la versión 0.6.1 solo proveíamos binarios de asm.js. A partir de la versión 0.6.2 hicimos el cambio a WebAssembly builds que tiene mucho mejor rendimiento. Hemos recompilado las versiones más antiguas para wasm pero los archivos originales asm.js se mantienen enbin/
. Los nuevos tuvieron que ser puestos en un directorio separado para evitar conflictos de nombramiento.Use los directorios
emscripten-asmjs/
yemscripten-wasm32/
en lugar debin/
ywasm/
si quiere estar seguro de si está descargando un binario de wasm o de asm.js.Use
list.json
en vez delist.js
ylist.txt
. El formato JSON contiene toda la información de los binarios antiguos y más.Use https://binaries.soliditylang.org en vez de https://solc-bin.ethereum.org. Para mantener las cosas simples, movimos casi todo lo relacionado al compilador al nuevo dominio
soliditylang.org
y esto también aplica parasolc-bin
. Aunque recomendamos el nuevo dominio, el antiguo sigue siendo mantenido y se garantiza que apunte a la misma locación.
Advertencia
Los binarios también están disponbiles en https://ethereum.github.io/solc-bin/ pero esta página dejó de ser actualizada justo después del lanzamiento de la versión 0.7.2, no va a recibir nuevos releases ni compilaciones nocturnas para ninguna plataforma y no sirve la nueva estructura del directorio, incluyendo compilaciones no-emscripten.
Si usted la está usando, por favor cambie a https://binaries.soliditylang.org, que es su reemplazo.
Esto nos permite hacerle cambios al hosting subyacente de una manera transparente y minimizar
disrupciones. Al contrario del dominio ethereum.github.io
, el cual no controlamos,
binaries.soliditylang.org
está garantizado para funcionar y mantener la misma estructura de URLs
en el largo plazo.
Compilando del código fuente
Prerrequisitos - Todos los Sistemas Operativos
A continuación las dependencias para todas las compilaciones de Solidity:
<<<<<<< HEAD | CMake (version 3.13+) | Generadord de código fuente multiplataforma. | +———————————–+——————————————————-+ | Boost (version 1.77+ en | Librerías de C++. | | Windows, 1.65+ en otros) | | ======= | CMake (version 3.21.3+ on | Cross-platform build file generator. | | Windows, 3.13+ otherwise) | | +———————————–+——————————————————-+ | Boost (version 1.77 on | C++ libraries. | | Windows, 1.65+ otherwise) | | >>>>>>> english/develop +———————————–+——————————————————-+ | Git | Software de línea de comandos para obtener código | | | fuente. | +———————————–+——————————————————-+ | z3 (versión 4.8+, Opcional) | Para usar con SMT checker. | | z3 (version 4.8.16+, Opcional) | Para usar con SMT checker. | +———————————–+——————————————————-+ | cvc4 (Opcional) | Para usar con SMT checker. | +———————————–+——————————————————-+
Nota
Las versiones de Solidity anteriores a la 0.5.10 pueden no funcionar correctamente con
versiones de Boost 1.70+. Una posible solución es renombrar temporalmente
<Boost install path>/lib/cmake/Boost-1.70.0
antes de correr el comando de cmake para
configurar Solidity.
A partir de la versión 0.5.10, debería funcionar correctamente con las versiones de Boost 1.70+ sin necesidad de ajustes manuales.
Nota
La configuración de la compilación por defecto requiere una versión de Z3 específica (la última
en el momento que el código se actualizó por última vez). Los cambios que hay entre versiones de
Z3 generalmente dan como resultado lanzamientos ligeramente distintos (pero válidos). Nuestras
pruebas SMT no toman en cuenta estas diferencias y probablemente fallarán con una versión diferente
de la versión para la que fueron escritas. Esto no significa que una compilación que use una
versión diferente está dañada. Si usted pasa la opción -DSTRICT_Z3_VERSION=OFF
a CMake, puede
compilar con cualquier versión que satisfaga los requerimientos de la tabla de arriba. Si hace esto,
sin embargo, recuerde pasar la opción --no-smt
a scripts/tests.sh
para saltar las pruebas SMT.
Versiones Mínimas del Compilador
Nota
De forma predeterminada, la compilación se realiza en modo pedante, lo que activa advertencias adicionales y le indica al compilador para tratar todas las advertencias como errores. Esto obliga a los desarrolladores a corregir las advertencias a medida que surgen, de modo que no acumulen que se solucionen más tarde. Si sólo le interesa crear una versión de lanzamiento y no desea modificar el código fuente para tratar estas advertencias, puede pasar la opción ``-DPEDANTIC=OFF` a CMake para deshabilitar este modo. No se recomienda hacerlo para uso general, pero puede ser necesario cuando se utiliza una cadena de herramientas que estamos no probar o intentar crear una versión anterior con herramientas más recientes. Si encuentra este tipo de advertencias, tenga en cuenta reporting them.
Los siguientes compiladores de C++ y sus versiones mínimas pueden compilar el código de Solidity:
Prerrequisitos - macOS
Para compilar en macOS, asegúrese que tenga la versión más reciente de Xcode instalada. Ésta contiene el compilador Clang C++, el IDE de Xcode y otras herramientas de desarrollo de Apple que se requieren para compilar aplicaciones C++ en OS X. Si está instalando Xcode por primera vez, o acaba de instalar una nueva versión necesitará aceptar la licencia antes de poder compilar desde la línea de comandos:
sudo xcodebuild -license accept
Nuestro script de compilación para OS X usa el gestor de paquetes Homebrew para instalar dependencias externas. Aquí puede ver cómo desinstalar Homebrew, si necesita empezar desde cero.
Prerrequisitos - Windows
Necesitará instalar las siguientes dependencias para compilar Solidity en Windows:
Software |
Notas |
---|---|
Compilador de C++ |
|
Visual Studio 2019 (Opcional) |
Compilador de C++ y entorno de desarrollo |
<<<<<<< HEAD | Boost (versión 1.77+) | Librerías de C++ | ======= | Boost (version 1.77) | C++ libraries. | >>>>>>> english/develop +———————————–+——————————————————-+
Si ya tiene un IDE y solo necesita instalar el compilador y las librerías, puede instalar solamente Visual Studio 2019 Build Tools.
Visual Studio 2019 provee un IDE y el compilador y librerías necesarias. Si usted todavía no cuenta con un IDE de su preferencia y desea programar en Solidity, Visual Studio 2019 puede ser una opción para configurar todo de manera sencilla.
A continuación, una lista de componentes que deben ser instalados ya sea que use Visual Studio 2019 o Visual Studio 2019 Build Tools.
Visual Studio C++ core features
VC++ 2019 v141 toolset (x86,x64)
Windows Universal CRT SDK
Windows 8.1 SDK
C++/CLI support
Tenemos un script de soporte que puede usar para instalar todas las dependencias externas necesarias:
scripts\install_deps.ps1
Esto instalará boost
y cmake
al subdirectorio deps
.
Clonar el repositorio
Para clonar el código fuente ejecute el siguiente comando:
git clone --recursive https://github.com/ethereum/solidity.git
cd solidity
Si usted quiere ayudar en el desarrollo de Solidity, le recomendamos hacer “fork” de Solidity y añadir su “fork” personal como segundo remoto:
git remote add personal git@github.com:[username]/solidity.git
Nota
Este método generará una precompilación que llevará a, por ejemplo, que se genere una bandera en cada bytecode producido por el compilador. Si quiere recompilar un compilador de Solidity ya lanzado, por favor use el archivo tarball en la página de lanzamientos de github:
https://github.com/ethereum/solidity/releases/download/v0.X.Y/solidity_0.X.Y.tar.gz
(no el «código fuente» de github).
Compilación por la línea de comandos
Asegúrese de instalar todas las dependencias externas (ver arriba) antes de compilar.
El proyecto de Solidity utiliza CMake para configurar la compilación. Se recomienda instalar ccache para acelerar el proceso si requiere compilar en repetidas ocasiones. CMake lo detectará automaticamente. Compilar Solidity es bastante parecido en Linux, macOS y otras versiones de Unix:
mkdir build
cd build
cmake .. && make
En Linux y macOS es todavía más fácil, puede correr:
#nota: esto instalará los binarios solc y soltest en usr/local/bin
./scripts/build.sh
Advertencia
Las compilaciones en BSD deberían funcionar, pero no han sido probadas por el equipo de Solidity.
Y para Windows:
mkdir build
cd build
cmake -G "Visual Studio 16 2019" ..
En caso de querer usar la versión de boost instalada por scripts\install_deps.ps1
, deberá
pasar adicionalmente las banderas -DBoost_DIR="deps\boost\lib\cmake\Boost-*"
y
-DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded
como argumentos cuando corra cmake
.
Esto debería crear un archivo solidity.sln en ese directorio. Al hacer doble click en ese archivo Visual Studio debería abrirse. Sugerimos compilar con la configuración Release pero todas las demás funcionan.
De manera alternativa, puede compilar en Windows desde la línea de comandos:
cmake --build . --config Release
Opciones de CMake
Para ver las opciones de Cmake disponibles solo corra cmake .. -LH
.
Solvers de SMT
Solidity puede ser compilado contra solvers SMT y lo hará por defecto si se encuentran en el sistema. Cada solver puede ser deshabilitado con una opción de cmake.
Nota: En algunos casos, esto también puede ser una solución alterna para compilaciones fallidas.
En la carpeta donde compile puede deshabilitarlos, ya que están habilitados por defecto:
# deshabilita solo el solver SMT para Z3
cmake .. -DUSE_Z3=OFF
# deshabilita solo el solver SMT para CVC4
cmake .. -DUSE_CVC4=OFF
# deshabilita los solvers para CVC4 y Z3
cmake .. -DUSE_CVC4=OFF -DUSE_Z3=OFF
La Cadena de Versión en Detalle
La cadena de versión de Solidity contiene cuatro partes:
el número de versión
la etiqueta de pre-release, generalmente fijada en
develop.YYYY.MM.DD
onightly.YYYY.MM.DD
commit en el formato
commit.GITHASH
la plataforma, que contiene un número arbitrario de elementos, e incluye detalles sobre la plataforma y el compilador
Si hay modificaciones locales, el commit tendrá el sufijo de .mod
.
Estas partes se combinan según requerimientos de SemVer, donde la etiqueta de pre-release de Solidity equivale al pre-release de SemVer y el commit de Solidity y la plataforma combinados nos dan la metadata del compilado de SemVer.
Un ejemplo de release: 0.4.8+commit.60cc1668.Emscripten.clang
.
Un ejemplo de pre-release: 0.4.9-nightly.2017.1.17+commit.6ecb4aa3.Emscripten.clang
Información Importante Sobre el Versionado
Después de que se hace un lanzamiento, se aumenta el número de versión de parche, porque asumimos
que solo siguen cambios a nivel de parches. Cuando los cambios se fusionan, la versión debería ser
aumentada de acuerdo a SemVer y a la severidad del cambio. Finalmente, un lanzamiento siempre se hace
con la versión de la compilación nocturna vigente, pero sin el especificador de prerelease
.
Ejemplo:
Se hace el release de la versión 0.4.0.
La compilación nocturna tiene una versión de 0.4.1 de ahora en adelante.
Se introducen cambios sin rupturas –> no hay cambio en la versión.
Se introduce un cambio con rupturas –> la versión se aumenta a 0.5.0.
Se hace el release de la versión 0.5.0.
Este método funciona bien con la versión de pragma.