這裏須要使用的環境 web3j,nodejshtml
$ npm install -g solc
pragma solidity 0.4.19; contract hello { function main(uint a) constant returns (uint b) { uint result = a * 8; return result; } }
$ solcjs <sol文件目錄> --optimize --bin --abi --output-dir <輸出目錄> //demo $ solcjs F:\\hello.sol --optimize --bin --abi --output-dir F:\\
出現這種錯誤java
Failed to write F:\F_\hello_sol_hello.bin: Error: ENOENT: no such file or directory, open 'F:\F_\hello_sol_hello.bin' Failed to write F:\F_\hello_sol_hello.abi: Error: ENOENT: no such file or directory, open 'F:\F_\hello_sol_hello.abi'
這裏有個坑,就是使用solcjs 編譯智能合約文件輸出到目錄會有一個文件夾,這個須要手動建立,我這裏輸出目錄到F:\\ 可是它仍是要輸出到F:\\F_\ 下,這裏的F_文件夾須要咱們建立!node
$ web3j solidity generate <編譯的bin文件地址> <編譯的abi文件地址> -o <輸出目錄> -p <java包名> //demo $ web3j solidity generate F:\F_\hello_sol_hello.bin F:\F_\hello_sol_hello.abi -o E:\etheth\src\main\java -p xyz.lihang.demo.eth.sol
PS:使用web3j命令,須要進入https://github.com/web3j/web3j/releases/tag/v3.3.1網站,下載web3j-3.3.1.tar,並解壓。git
進入目錄bin下,在此目錄命令行執行web3j,不然web3j bash命令不存在github
package xyz.lihang.demo.eth.sol; import java.math.BigInteger; import java.util.Arrays; import org.web3j.abi.TypeReference; import org.web3j.abi.datatypes.Function; import org.web3j.abi.datatypes.Type; import org.web3j.abi.datatypes.generated.Uint256; import org.web3j.crypto.Credentials; import org.web3j.protocol.Web3j; import org.web3j.protocol.core.RemoteCall; import org.web3j.tx.Contract; import org.web3j.tx.TransactionManager; /** * <p>Auto generated code. * <p><strong>Do not modify!</strong> * <p>Please use the <a href="https://docs.web3j.io/command_line.html">web3j command line tools</a>, * or the org.web3j.codegen.SolidityFunctionWrapperGenerator in the * <a href="https://github.com/web3j/web3j/tree/master/codegen">codegen module</a> to update. * * <p>Generated with web3j version 3.2.0. */ public class Hello_sol_hello extends Contract { private static final String BINARY = "60606040523415600e57600080fd5b609a8061001c6000396000f300606060405260043610603e5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663ab3ae25581146043575b600080fd5b3415604d57600080fd5b60566004356068565b60405190815260200160405180910390f35b600802905600a165627a7a723058200cc51f5dad45190b24189d9f8ff836d704bcebc9862cfd669e054b8c8f19f66c0029"; protected Hello_sol_hello(String contractAddress, Web3j web3j, Credentials credentials, BigInteger gasPrice, BigInteger gasLimit) { super(BINARY, contractAddress, web3j, credentials, gasPrice, gasLimit); } protected Hello_sol_hello(String contractAddress, Web3j web3j, TransactionManager transactionManager, BigInteger gasPrice, BigInteger gasLimit) { super(BINARY, contractAddress, web3j, transactionManager, gasPrice, gasLimit); } public RemoteCall<BigInteger> main(BigInteger a) { Function function = new Function("main", Arrays.<Type>asList(new org.web3j.abi.datatypes.generated.Uint256(a)), Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {})); return executeRemoteCallSingleValueReturn(function, BigInteger.class); } public static RemoteCall<Hello_sol_hello> deploy(Web3j web3j, Credentials credentials, BigInteger gasPrice, BigInteger gasLimit) { return deployRemoteCall(Hello_sol_hello.class, web3j, credentials, gasPrice, gasLimit, BINARY, ""); } public static RemoteCall<Hello_sol_hello> deploy(Web3j web3j, TransactionManager transactionManager, BigInteger gasPrice, BigInteger gasLimit) { return deployRemoteCall(Hello_sol_hello.class, web3j, transactionManager, gasPrice, gasLimit, BINARY, ""); } public static Hello_sol_hello load(String contractAddress, Web3j web3j, Credentials credentials, BigInteger gasPrice, BigInteger gasLimit) { return new Hello_sol_hello(contractAddress, web3j, credentials, gasPrice, gasLimit); } public static Hello_sol_hello load(String contractAddress, Web3j web3j, TransactionManager transactionManager, BigInteger gasPrice, BigInteger gasLimit) { return new Hello_sol_hello(contractAddress, web3j, transactionManager, gasPrice, gasLimit); } }
必定要注意合約調用後進行挖礦,這樣才能網絡確認,才能使用合約web