TA的每日心情 | 开心 2021-12-13 21:45 |
---|
签到天数: 15 天 [LV.4]偶尔看看III
|
使用java开发区块链
安装编译sol工具
- [code]$ npm install -g solc
复制代码 [/code]
保存为hello.sol文件到本地
- [code]pragma solidity 0.4.19;
- contract hello {
- function main(uint a) constant returns (uint b)
- {
- uint result = a * 8;
- return result;
- }
- }
复制代码 [/code]
编译sol文件
- [code]$ solcjs <sol文件目录> --optimize --bin --abi --output-dir <输出目录>
- //demo
- $ solcjs F:\\hello.sol --optimize --bin --abi --output-dir F:\\
复制代码 [/code]
- [code]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"
复制代码 [/code]
这里有个坑,就是使用solcjs 编译智能合约文件输出到目录会有一个文件夹,这个需要手动创建,我这里输出目录到F:\\ 但是它还是要输出到F:\\F_\ 下,这里的F_文件夹需要我们创建!
编译成功,记录下bin 和 abi后缀的文件
使用web3j工具生成java版本的智能合约
web3j 命令行工具下载
- [code]$ 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
复制代码 [/code]
生成成功
- [code]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);
- }
- }
复制代码 [/code]
一定要注意合约调用后进行挖矿,这样才能网络确认,才能使用合约
|
|