博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用web3j工具生成java版本的智能合约
阅读量:6082 次
发布时间:2019-06-20

本文共 4119 字,大约阅读时间需要 13 分钟。

这里需要使用的环境 web3j,nodejs

  • 安装编译sol工具
$ npm install -g solc
  • 保存为hello.sol文件到本地
pragma solidity 0.4.19;  contract hello {  function main(uint a) constant returns (uint b)       {          uint result = a * 8;          return result;      }  }
  • 编译sol文件
$ solcjs 
--optimize --bin --abi --output-dir
<输出目录>
//demo$ solcjs F:\\hello.sol --optimize --bin --abi --output-dir F:\\

出现这种错误

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_文件夹需要我们创建!

  • 编译成功,记录下bin 和 abi后缀的文件
  • 使用web3j工具生成java版本的智能合约
  • web3j 命令行工具下载
$ web3j solidity generate 
<编译的bin文件地址>
<编译的abi文件地址>
-o
<输出目录>
-p
//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命令,需要进入网站,下载web3j-3.3.1.tar,并解压。

   进入目录bin下,在此目录命令行执行web3j,否则web3j bash命令不存在

  • 生成成功
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;/** * 

Auto generated code. *

Do not modify! *

Please use the web3j command line tools, * or the org.web3j.codegen.SolidityFunctionWrapperGenerator in the * codegen module to update. * *

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

main(BigInteger a) { Function function = new Function("main", Arrays.
asList(new org.web3j.abi.datatypes.generated.Uint256(a)), Arrays.
>asList(new TypeReference
() {})); return executeRemoteCallSingleValueReturn(function, BigInteger.class); } public static RemoteCall
deploy(Web3j web3j, Credentials credentials, BigInteger gasPrice, BigInteger gasLimit) { return deployRemoteCall(Hello_sol_hello.class, web3j, credentials, gasPrice, gasLimit, BINARY, ""); } public static RemoteCall
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); }}

一定要注意合约调用后进行挖矿,这样才能网络确认,才能使用合约

转载地址:http://kykwa.baihongyu.com/

你可能感兴趣的文章
【转】Beginning Game Programming v2.0
查看>>
IntelliJ IDEA 创建 java Maven项目
查看>>
Axure 简单原型设计
查看>>
设备驱动层
查看>>
git的常用命令
查看>>
HttpClient-4.3.X 中get和post方法使用
查看>>
怎么才能让数学公式编辑的简洁整齐?
查看>>
MathType编辑双向斜箭头的教程
查看>>
中国足球
查看>>
windows本机域名配置
查看>>
Java编程基础-反射
查看>>
yarn+webpack+react
查看>>
Linux与VMwareTools与hgfs权限问题
查看>>
Database.SQL.join
查看>>
RIA Services Staying Logged In (Ria Service持久登陆,session-cookie,notcookie)
查看>>
最少加多少边成为强连通图
查看>>
[转]html5 Canvas画图4:填充和渐变
查看>>
数组json格式的字符串 转 list<Bean>
查看>>
alert 多语言的处理
查看>>
Ubuntu 最好用的CHM阅读器KchmViewer
查看>>