分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > IT知识

【web3】Transaction 转账

发布时间:2023-09-06 01:45责任编辑:熊小新关键词:暂无标签

  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是一样的,但是里面的币是不一样的。

【web3】Transaction 转账

原文地址:https://www.cnblogs.com/hongpxiaozhu/p/8574986.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved