文档章节

web3j转账

智能合约
 智能合约
发布于 07/19 10:12
字数 911
阅读 80
收藏 0

 web3 转账功能

  为了完成以太坊交易,必须有几个先决条件

  1、对方的以太坊地址

  2、确定要转账的金额

  3、自己地址的转账权限

  4、大于转账金额的以太币,以太币转账其实就是提出一个交易,矿工会帮你计算,计算完成即达成交易,但是矿工计算需要支付一定的费用(GAS),支付过少,计算转账就有可能很慢或者不成功。

 

  转账方式1:

  代码如下

1 import org.web3j.crypto.Credentials;
 2 import org.web3j.crypto.RawTransaction;
 3 import org.web3j.crypto.TransactionEncoder;
 4 import org.web3j.protocol.Web3j;
 5 import org.web3j.protocol.core.DefaultBlockParameterName;
 6 import org.web3j.protocol.core.methods.response.EthGetTransactionCount;
 7 import org.web3j.protocol.core.methods.response.EthSendTransaction;
 8 import org.web3j.protocol.http.HttpService;
 9 import org.web3j.utils.Convert;
10 import org.web3j.utils.Numeric;
11 
12 import java.math.BigInteger;
13 
14 
15 public class TransactionTest {
16     public static void main(String[] args) throws Exception {
17         //设置需要的矿工费
18         BigInteger GAS_PRICE = BigInteger.valueOf(22_000_000_000L);
19         BigInteger GAS_LIMIT = BigInteger.valueOf(4_300_000);
20 
21         //调用的是kovan测试环境,这里使用的是infura这个客户端
22         Web3j web3j = Web3j.build(new HttpService("https://kovan.infura.io/<your-token>"));
23         //转账人账户地址
24         String ownAddress = "0xD1c82c71cC567d63Fd53D5B91dcAC6156E5B96B3";
25         //被转人账户地址
26         String toAddress = "0x6e27727bbb9f0140024a62822f013385f4194999";
27         //转账人私钥
28         Credentials credentials = Credentials.create("xxxxxxxxxxxxx");
29         //        Credentials credentials = WalletUtils.loadCredentials(
30         //                "123",
31         //                "src/main/resources/UTC--2018-03-01T05-53-37.043Z--d1c82c71cc567d63fd53d5b91dcac6156e5b96b3");
32 
33         //getNonce(这里的Nonce我也不是很明白,大概是交易的笔数吧)
34         EthGetTransactionCount ethGetTransactionCount = web3j.ethGetTransactionCount(
35                 ownAddress, DefaultBlockParameterName.LATEST).sendAsync().get();
36         BigInteger nonce = ethGetTransactionCount.getTransactionCount();
37 
38         //创建交易,这里是转0.5个以太币
39         BigInteger value = Convert.toWei("0.5", Convert.Unit.ETHER).toBigInteger();
40         RawTransaction rawTransaction = RawTransaction.createEtherTransaction(
41                 nonce, GAS_PRICE, GAS_LIMIT, toAddress, value);
42 
43         //签名Transaction,这里要对交易做签名
44         byte[] signedMessage = TransactionEncoder.signMessage(rawTransaction, credentials);
45         String hexValue = Numeric.toHexString(signedMessage);
46 
47         //发送交易
48         EthSendTransaction ethSendTransaction =
49                 web3j.ethSendRawTransaction(hexValue).sendAsync().get();
50         String transactionHash = ethSendTransaction.getTransactionHash();
51 
52         //获得到transactionHash后就可以到以太坊的网站上查询这笔交易的状态了
53         System.out.println(transactionHash);
54     }
55 }

注意:

以上交易代码是离线交易,先组装交易,然后发送到链上,web3j提供在线交易,但是这种交易需要parity钱包,将完整的区块链钱包下载下来,然后绑定账户进去。

 

1、第27-31行,可以用两种方式获得地址的信任凭证,一种是直接使用私钥,一种是使用keystore文件

2、https://kovan.etherscan.io/tx/0x88cb6e625b57cadd6d7f71872433c2e638014fca30e47c649f2831db79b54304

这个地址是可以查到你的这笔交易的

0x88cb6e625b57cadd6d7f71872433c2e638014fca30e47c649f2831db79b54304是transactionHash

这个地址是测试地址,如果需要查询主网上的,删除kovan

 

转账方式2:

import org.web3j.crypto.Credentials;
import org.web3j.protocol.Web3j;
import org.web3j.protocol.core.methods.response.TransactionReceipt;
import org.web3j.protocol.http.HttpService;
import org.web3j.tx.Transfer;
import org.web3j.utils.Convert;

import java.math.BigDecimal;

public class TransactionTest2 {
    public static void main(String[] args) throws Exception {
        Web3j web3j = Web3j.build(new HttpService("https://kovan.infura.io/<your-token>"));
        String ownAddress = "0xD1c82c71cC567d63Fd53D5B91dcAC6156E5B96B3";
        String toAddress = "0x6e27727bbb9f0140024a62822f013385f4194999";
        Credentials credentials = Credentials.create("xxxxxxxx");

        TransactionReceipt transactionReceipt = Transfer.sendFunds(
                web3j, credentials, toAddress,
                BigDecimal.valueOf(0.2), Convert.Unit.ETHER).send();

        System.out.println(transactionReceipt.getTransactionHash());
    }
}

注意

这种也是离线的,但是代码量比较小。

 

备注:

如果在kovan环境中没有以太币的话,可以到https://gitter.im/kovan-testnet/faucet这里去要,直接注册账号之后,把你的账号地址发到群里就行了,过几分钟就会给你转钱的,主网的账号地址和kovan是一样的,但是里面的币是不一样的。

 

如果想系统的学习java开发以太坊的话推荐一个很受欢迎的在线互动教程:
java以太坊,主要是介绍使用java围绕web3j库进行智能合约开发交互,进行账号创建、交易、转账、代币开发以及过滤器和事件等内容。

© 著作权归作者所有

共有 人打赏支持
智能合约
粉丝 7
博文 104
码字总数 87235
作品 0
海淀
java程序员使用web3j进行以太坊开发详解

如何使用web3j为Java应用或Android App增加以太坊区块链支持,教程内容即涉及以太坊中的核心概念,例如账户管理包括账户的创建、钱包创建、交易转账,交易与状态、智能合约开发与交互、过滤器...

笔阁
06/22
0
0
web3j教程:android和java程序员如何使用web3j开发区块链以太坊

如何使用web3j为Java应用或Android App增加以太坊区块链支持,本教程内容即涉及以太坊中的核心概念,例如账户管理包括账户的创建、钱包创建、交易转账,交易与状态、智能合约开发与交互、过滤...

智能合约
06/24
0
0
android和java程序员如何使用web3j开发区块链以太坊 原

如何使用web3j为Java应用或Android App增加以太坊区块链支持,本教程内容即涉及以太坊中的核心概念,例如账户管理包括账户的创建、钱包创建、交易转账,交易与状态、智能合约开发与交互、过滤...

android自学
07/21
0
0
java以太坊开发 - web3j使用钱包进行转账

首先载入钱包,然后利用账户凭证操作受控交易Transfer进行转账: 详细讲解请参考教程[web3j以太坊开发详解][1]。 [1]: http://xc.hubwiz.com/course/5b2b6e82c02e6b6a59171de2?affid=osc787...

以太坊教程
06/22
0
0
web3j 的 Infura Http 客户端

web3j Infura 模块提供了一个Infura Http 客户端(InfuraHttpService),它为Infura特定的提供支持。这允许你指定是否希望geth或Parity客户端响应你的请求。你可以像普通的一样创建客户端: 如...

马拉喀什
07/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

python3.6 取整除法

python3.6 中取整除法运算逻辑如下: d 非零,那么商 q 满足这样的关系: a = qd + r ,且0 ≤ r n1=7//3#7 = 3*2 +1n2=-6.1//3#-7 = 3*(-3)+2'{},{}'.format(n1,n2) 从运行结果可以...

colinux
24分钟前
3
0
阶段总结——用虚拟机搭建一个高可用负载均衡集群架构

[toc] linux基本知识已经介绍完,现有一个业务需要操作,通过对这个项目的操作,可以复习、总结、巩固之前的知识点; ** 用13台虚拟机搭建一个高可用负载均衡集群架构出来,并运行三个站点,...

feng-01
27分钟前
0
0
mysql 设置utf8字符集 (CentOS)

1.查看数据库及mysql应用目前使用的编码方式 (1)链接mysql 客户端 (2)执行:status 结果: 2.修改mysql 应用的字符编码(server characterset ) (1)打开配置文件:vim /etc/mysql/my...

qimh
27分钟前
0
0
windows无法格式化u盘解决方法

1。点开始-运行-输入cmd-format f: /fs: fat32 (这里f:是指U盘所在盘符) 这个格式化会很慢 请耐心等待

大灰狼wow
38分钟前
0
0
MySql 8.0连接失败

原来,MySql 8.0.11 换了新的身份验证插件(caching_sha2_password), 原来的身份验证插件为(mysql_native_password)。而客户端工具Navicat Premium12 中找不到新的身份验证插件(caching_s...

放飞E梦想O
55分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部