web3j调用合约的两种方式以及eth转账

以ERC20转账为例

token转账参数即data字段
 String methodName = "transfer";
 List<Type> inputParameters = new ArrayList<>();
 List<TypeReference<?>> outputParameters = new ArrayList<>();
 Address tAddress = new Address(toAddress);
 Uint256 tokenValue = new Uint256(BigDecimal.valueOf(amount).multiply(BigDecimal.TEN.pow(decimals)).toBigInteger());
 inputParameters.add(tAddress);
 inputParameters.add(tokenValue);
 TypeReference<Bool> typeReference = new TypeReference<Bool>() {
 };
 outputParameters.add(typeReference);
 Function function = new Function(methodName, inputParameters, outputParameters);
 String data = FunctionEncoder.encode(function);

第二种 利用web3j生成的contract类去调用交易

TokenERC20 contract = TokenERC20.load(contractAddress, web3j, credentials,
 Convert.toWei("10", Convert.Unit.GWEI).toBigInteger(),
 BigInteger.valueOf(100000));
 String myAddress = null;
 String toAddress = null;
 BigInteger amount = BigInteger.ONE;
 try {
 TransactionReceipt receipt = contract.transfer(toAddress, amount).send();
 } catch (Exception e) {
 e.printStackTrace();
 }
eth转账及普通转账
 BigInteger nonce;
 EthGetTransactionCount ethGetTransactionCount = null;
 try {
 ethGetTransactionCount =
 getClient()
 .ethGetTransactionCount(fromAddress, DefaultBlockParameterName.LATEST).send();
 } catch (Exception e) {
 e.printStackTrace();
 }
 if (ethGetTransactionCount == null) return null;
 nonce = ethGetTransactionCount.getTransactionCount();
 BigInteger gasPrice = Convert.toWei(gas, Convert.Unit.GWEI).toBigInteger();
 BigInteger value = Convert.toWei(balance, Convert.Unit.ETHER).toBigInteger();
 String data = "";
 byte chainId = ChainId.NONE; // 测试网络

然后ERC20及eth使用 该data发送签名交易即可

RawTransaction rawTransaction = RawTransaction.createTransaction(
 nonce,
 gasPrice,
 gasLimit,
 to,
 value,
 data);
 ECKeyPair ecKeyPair = ECKeyPair.create(new BigInteger(privateKey, 16));
 Credentials credentials = Credentials.create(ecKeyPair);
 byte[] signedMessage = TransactionEncoder.signMessage(rawTransaction, credentials;
 String hexValue = Numeric.toHexString(signedMessage);
 EthSendTransaction ethSendTransaction = web3j.ethSendRawTransaction(signedData).send();
 System.out.println(ethSendTransaction.getTransactionHash());

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏aCloudDeveloper

算法导论第十三章 红黑树

  写在前面:这一章真的把我害惨了,之前至少尝试看过3遍,每次看之前都下定决定一定要把它拿下,可是由于内容较多,深度够深,以致于每次要不是中途有什么事放弃了就跳...

2308
来自专栏菩提树下的杨过

利用Boost影响Lucene查询结果的排序

以下代码在Lucene2.1下通过,主要是通过设置Document的Boost来影响文档的权重,以达到控制查询结果顺序的目的(前提是不利用Sort排序的情况下...

2026
来自专栏拂晓风起

jQuery 和 json 简单例子(注意callback函数的处理!!) (servlet返回json,jquery更新,java json)

1233
来自专栏菩提树下的杨过

利用Boost影响Lucene查询结果的排序

以下代码在Lucene2.1下通过,主要是通过设置Document的Boost来影响文档的权重,以达到控制查询结果顺序的目的(前提是不利用Sort排序的情况下...

1978
来自专栏码匠的流水账

聊聊spring cloud gateway的LoadBalancerClientFilter

本文主要研究一下spring cloud gateway的LoadBalancerClientFilter

1521
来自专栏码匠的流水账

java字符全角半角转换

1111
来自专栏码匠的流水账

聊聊eureka client的serviceUrl

eureka-client-1.8.8-sources.jar!/com/netflix/discovery/DiscoveryClient.java

2721
来自专栏木宛城主

PowerShell 获取Site Collection下被签出的文件

由于权限的设置,当文件被签出时导致别人不可见了,这对校验文件个数的人来说着实是件烦恼的事。幸好利用PowerShell,可以获取Site Collection下...

2037
来自专栏菩提树下的杨过

base64编码在silverlight中的使用

在传统的.net应用中,使用base64编码字符串是一件很轻松的事情,比如下面这段代码演示了如何将本地文件转化为base64字符串,并且将base64字符串又还...

2307
来自专栏拂晓风起

cocos2d-js Shader系列4:Shader、GLProgram在jsb(native、手机)和html5之间的兼容问题。cocos2d-js框架各种坑。

2134

扫码关注云+社区

领取腾讯云代金券