Compatibilidad entre el lenguaje Solidity y la biblioteca Web3j

¿Cuál es la compatibilidad entre solidity y web3j. No encuentro ningún recurso al respecto. Supongamos que genero mi clase contenedora Java de contrato inteligente escrita en la versión Solidity ^0.4.17 y tomo la ayuda de web3j de la versión ^3.4.0 para la generación de la clase contenedora. ¿Funcionará perfectamente?

Respuestas (1)

Web3j no depende directamente del lenguaje Solidity, pero utiliza la interfaz binaria de aplicación (ABI) estándar y el código binario EVM (legible por máquina) para generar el envoltorio Java de contrato inteligente.

Por eso, primero tienes que compilar tu código solidty usandosolc

$ solc <contract>.sol --bin --abi --optimize -o <output-dir>/

La compatibilidad entre la versión de Solidity está a cargo de solc. Si intenta compilar un archivo solidity 0.4.18 con un solc muy antiguo, fallará.

Luego, finalmente puede generar su contrato inteligente Java Wrapper usando web3j que toma el ABI y el código binario como entrada

web3j solidity generate [--javaTypes|--solidityTypes] /path/to/<smart-contract>.bin /path/to/<smart-contract>.abi -o /path/to/src/main/java -p com.your.organisation.name

Por lo tanto, Web3j Smart Contract Java Wrapper no depende directamente de Solidity, sino que depende del lenguaje universal EVM. De esa manera, podría escribir el contrato inteligente en otro idioma (viper, por ejemplo) y seguirá funcionando a la perfección (abstracción del lenguaje).