<!-- io常用工具类 --><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.5</version></dependency><dependency><groupId>org.web3j</groupId><artifactId>core</artifactId><version>3.2.0</version></dependency><dependency><groupId>org.web3j</groupId><artifactId>geth</artifactId><version>3.2.0</version></dependency><!-- web3j --><dependency><groupId>org.web3j</groupId><artifactId>web3j-spring-boot-starter</artifactId><version>1.6.0</version></dependency>
public static void main(String[] args) {/*SpringApplication.run(LongApplication.class, args);System.out.printf("启动成功");*/// 转出地址String from = "0x9175F9EcBbddC078e40C5e037AD31F4abf36628a";//转入地址String to = "0xa7B049d3A19796B195B0e976ec43EB7a12f07Bf9";//转入数量String value = "5";//转出地址私钥String privateKey ="";//合约地址String contractAddress="0x57E0297510fA155eF165646c208C495E563B3342";//位数,根据合约里面的来int decimal=4;tokenDeal(from,to,value,privateKey,contractAddress,decimal);}public static String tokenDeal(String from, String to, String value, String privateKey, String contractAddress, int decimal) {Web3j web3j = Web3j.build(new HttpService("https://ropsten.infura.io/v3/9aa3d95b3bc440fa88ea12eaa4456161"));try {//转账的凭证,需要传入私钥Credentials credentials = Credentials.create(privateKey);//获取交易笔数BigInteger nonce;EthGetTransactionCount ethGetTransactionCount = web3j.ethGetTransactionCount(from, DefaultBlockParameterName.PENDING).send();if (ethGetTransactionCount == null) {return null;}nonce = ethGetTransactionCount.getTransactionCount();//手续费BigInteger gasPrice;EthGasPrice ethGasPrice = web3j.ethGasPrice().sendAsync().get();if (ethGasPrice == null) {return null;}gasPrice = ethGasPrice.getGasPrice();//注意手续费的设置,这块很容易遇到问题BigInteger gasLimit = BigInteger.valueOf(60000L);BigInteger val = new BigDecimal(value).multiply(new BigDecimal("10").pow(decimal)).toBigInteger();// 单位换算Function function = new Function("transfer",Arrays.asList(new Address(to), new Uint256(val)),Collections.singletonList(new TypeReference<Type>() {}));//创建交易对象String encodedFunction = FunctionEncoder.encode(function);RawTransaction rawTransaction = RawTransaction.createTransaction(nonce, gasPrice, gasLimit,contractAddress, encodedFunction);//进行签名操作byte[] signMessage = TransactionEncoder.signMessage(rawTransaction, credentials);String hexValue = Numeric.toHexString(signMessage);//发起交易EthSendTransaction ethSendTransaction = web3j.ethSendRawTransaction(hexValue).sendAsync().get();String hash = ethSendTransaction.getTransactionHash();if (hash != null) {//执行业务System.out.printf("执行成功:"+hash);return hash;}} catch (Exception ex) {//报错应进行错误处理ex.printStackTrace();}return null;}

查询余额

public static void main(String[] args) {//查询的钱包地址String from = "0x9175F9EcBbddC078e40C5e037AD31F4abf36628a";//合约地址String contractAddress="0x57E0297510fA155eF165646c208C495E563B3342";//合约部署节点Web3j web3j = Web3j.build(new HttpService("https://ropsten.infura.io/v3/9aa3d95b3bc440fa88ea12eaa4456161"));try {String code = getERC20Balance(web3j,from,contractAddress);System.out.printf("查询出来的余额:"+code);} catch (ExecutionException e) {e.printStackTrace();} catch (InterruptedException e) {e.printStackTrace();}}private static final BigDecimal WEI = new BigDecimal(10000);/*** 获取ERC-20 token指定地址余额** @param address         查询地址* @param contractAddress 合约地址* @return* @throws ExecutionException* @throws InterruptedException*/public static String getERC20Balance(Web3j web3j, String address, String contractAddress) throws ExecutionException, InterruptedException {String methodName = "balanceOf";List<Type> inputParameters = new ArrayList<>();List<TypeReference<?>> outputParameters = new ArrayList<>();Address fromAddress = new Address(address);inputParameters.add(fromAddress);TypeReference<Uint256> typeReference = new TypeReference<Uint256>() {};outputParameters.add(typeReference);Function function = new Function(methodName, inputParameters, outputParameters);String data = FunctionEncoder.encode(function);Transaction transaction = Transaction.createEthCallTransaction(address, contractAddress, data);EthCall ethCall;BigDecimal balanceValue = BigDecimal.ZERO;try {ethCall = web3j.ethCall(transaction, DefaultBlockParameterName.LATEST).send();List<Type> results = FunctionReturnDecoder.decode(ethCall.getValue(), function.getOutputParameters());Integer value = 0;if(results != null && results.size()>0){value = Integer.parseInt(String.valueOf(results.get(0).getValue()));}balanceValue = new BigDecimal(value).divide(WEI, 6, RoundingMode.HALF_DOWN);} catch (IOException e) {e.printStackTrace();}return balanceValue.toString();}

java使用web3J进行代币转账、余额查询相关推荐

  1. android web3j 代币查询_ERC20代币转账以及余额查询--java(web3j)

    ERC20代币转账以及余额查询–java(web3j) 准备工作:转账之前你得有一个ERC20代币,代币发行戳这里,可以在测试网上进行测试. 因为发行代币本质就是部署智能合约,是需要消耗gas的,代币 ...

  2. Python 使用 Web3.py 进行 ETH 和代币转账

    1.安装 Web3.py pip install web3.py 2.注册 Infura 获得节点服务 使用邮箱注册 Infura 账户后,创建一个项目,即可获得以太坊节点服务,进入设置即可看到链接的 ...

  3. 前端Vue项目调用页面web3.js:连接metaMask钱包,(查询钱包ETH余额,查询代币余额,ETH转账,代币转账,代币授权,查询授权数量,计算价格)等功能

    这里分享下相关文档 1.web3.js中文文档 https://learnblockchain.cn/docs/web3.js/getting-started.html 2.metamask官方文档: ...

  4. coldwallet java eth_wallet-eth 以太坊代币钱包 助记词 私钥 keystore 转账

    wallet-eth-android wallet-eth 以太坊代币钱包 助记词 私钥 keystore 转账(bip39.bip32.bip44.web3j) 生成钱包地址 // 生成钱包地址 W ...

  5. java 创建以太坊代币_以太坊 (五)编写智能合约-建立简易加密代币

    本篇文章,我们将写一个简易的加密代币的智能合约来给大家诠释加密代币的原理 启动 ganache-cli 打开终端,启动ganache-cli,相关环境在区块链学习日记(四)这篇文章里面已经有具体说明. ...

  6. 代币转账_手把手教你从源代码开始搭建多节点以太坊私链(五)部署智能合约及代币发行...

    一.安装以太坊合约编译环境 安装solc 智能合约代码的编译可以通过第三方平台或者软件.不过,为了安全起见,还是搭建自己的编译器比较好.(But be aware that if the compil ...

  7. Java 7:项目代币中的代码示例

    该博客通过代码示例介绍了一些新的Java 7功能,这些功能在Project Coin一词下进行了概述. Project Coin的目标是向JDK 7添加一组小的语言更改.这些更改确实简化了Java语言 ...

  8. 超级简单的EOS代币转账教程(EETH)

    ethsidechain(EETH)是一个致力于在EOS中实现ETH侧链的项目,实现ETH和EOS互通.  详细教程请点击这里[EETH转账免费领取]

  9. Evm链原生代币转账

    func (ob *Payer) Transfer(amount *big.Int) (string, error) { senderAddr := ethcrypto.PubkeyToAddress ...

最新文章

  1. 数组的解构赋值(未完成)
  2. .NET中如何通过文本框中按回车键进行的提交数据
  3. 译 | .NET Core 基础架构进化之路(二)
  4. 如何在mysql中打开mongodb_图解:如何从MySQL移植到MongoDB
  5. redis基本数据类型之String
  6. Java2精要_java知识精要(一)
  7. anaconda安装好tensorflow后,无法在jupyter notebook上使用的解决方法
  8. java entry迭代,如何迭代Entry / BarEntry ArrayList并修改它们的值MPAndroid Chart
  9. 贴吧粉丝怎么全部移除_亚马逊FBA怎么发货?怎么把货发到FBA仓库?
  10. SSM框架之Spring MVC(四)异常处理和拦截器实现
  11. 【MySQL】5.7新特性之四
  12. 详解云原生应用实践与未来趋势
  13. C++实现计算器功能(包括计算含未知量的式子),输出后缀表达式
  14. SLAM--求解2D-2D图像间的运动
  15. atca背板_Xilinx公司展示ATCA背板10 Gbps串行信号传输
  16. 信度和效度经典例子_效度与信度的通俗解释
  17. 私域流量客服社群运营员工工作绩效表格方案计划手册指南宝典
  18. Kienct与Arduino学习笔记(1) 基础知识之Arduino’Kinect‘Processing
  19. Android开发之WebDav
  20. 使用JDBC 获取相关的数据

热门文章

  1. 【6G 新技术】6G数据面介绍
  2. Dhcp+acs认证
  3. ITPUB名人堂第37期:大型金融机构数据架构师刘盛带你体验大数据的冰与火
  4. python爬虫--URL部分加密破解
  5. 面试 | 接口和抽象类的区别
  6. dofilter在java中_FilterChain doFilter中的java.lang.NullPointerException方法
  7. js slice和splice
  8. 《前方的路 - 阮一峰》系列分享专栏
  9. android 控制震动强度
  10. 网管宝典 电脑故障排除之“八先八后”