Kompatibilität zwischen Solidity-Sprache und Web3j-Bibliothek

Wie ist die Kompatibilität zwischen solidity und web3j. Ich finde keine Quelle darüber. Angenommen, ich generiere meine Java-Wrapper-Klasse des Smart Contracts, die in der Version Solidity ^0.4.17 geschrieben ist, und nehme die Hilfe von web3j der Version ^3.4.0 für die Wrapper-Klassengenerierung. Wird es perfekt funktionieren?

Antworten (1)

Web3j hängt nicht direkt von der Solidity-Sprache ab, sondern verwendet das standardmäßige Application Binary Interface (ABI) und den EVM-Binärcode (maschinenlesbar), um den Smart Contract Java-Wrapper zu generieren.

Aus diesem Grund müssen Sie zuerst Ihren Solidty-Code mit kompilierensolc

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

Die Kompatibilität zwischen Solidity-Versionen wird von solc gehandhabt. Wenn Sie versuchen, eine solidity 0.4.18-Datei mit einem sehr alten Solc zu kompilieren, wird dies fehlschlagen.

Dann können Sie endlich Ihren Smart Contract Java Wrapper mit web3j generieren, der den ABI- und Binärcode als Eingabe verwendet

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

Web3j Smart Contract Java Wrapper hängt also nicht direkt von Solidity ab, sondern von der universellen EVM-Sprache. Auf diese Weise könnten Sie den Smart Contract in einer anderen Sprache schreiben (z. B. Viper) und es funktioniert immer noch wie ein Zauber (Sprachabstraktion).