java erc 2.0_如何使用Web3j库管理Java中的ERC20令牌
ERC20是以太坊智能合约标准,用于以兼容的方式实现令牌,因此很容易与任何应用程序(DAPP、钱包、交换等)交互和集成令牌。
先决条件
要学习本教程,您需要在计算机上安装以下软件:
·Java编程语言(>8)
·包和依赖关系管理器,例如Maven或Gradle
·一个集成开发环境,对于本教程,我们使用Eclipse
·Truffle:开发、测试和部署以太坊智能合约的开发框架
·Ganache-cli:以太坊开发的本地个人区块链。
·通过运行以下命令启动GANACHE:
ganache-cli
合约部署
在开始之前,我们需要在以太坊区块链上部署一个ERC20代币合约(在我们的例子中是Ganache)。为了本教程的目的,我们使用最简单的解决方案,使用OpenZeppelin可重用合同,Truffle和Ganache。
1.首先为我们的ERC20创建一个名为JVM的项目文件夹,并初始化一个Truffle项目
$ mkdir JVM
$ cd JVM
$ truffle init
2.然后我们安装Open-Zeppelin Solidity库,其中包含大量高质量,经过全面测试和审核的可重用智能合约。
使用npm包导入OpenZeppelin智能合约。
$ npm init -y
$ npm install openzeppelin-solidity --save-exact
3.创建合同文件。/contracts/JavaToken.sol
智能合约继承了可重用的OpenZeppelin合约ERC20Mintable的所有功能和规则。我们只需要配置以下常量变量,如下所示:
// JavaToken.sol
pragma solidity ^0.5.8;
import “openzeppelin-solidity/contracts/token/ERC20/ERC20Mintable.sol”;
contract JavaToken is ERC20Mintable {
string public constant name = “Java Token”;
string public constant symbol = “JVM”;
uint8 public constant decimals = 18;
}
4.在我们本地的Ganache网络上部署智能合约
我们需要先完成迁移脚本。创建一个名为。/migrations/2_deploy_contract.js的文件,并将以下代码添加到该文件中:
// 2_deploy_contract.js
const JavaToken = artifacts.require(“。/JavaToken.sol”);
module.exports = funcTIon(deployer, network, accounts) {
// Deploy the smart contract
deployer.deploy(JavaToken, {from: accounts[0]}).then(funcTIon(instance) {
// Mint 100 tokens
return instance.mint(accounts[0], web3.uTIls.toBN(“100”), {from: accounts[0]});
});
};
迁移脚本部署合约,mints并将100个JVM令牌分发到部署者帐户(Ganache第一个帐户)。
下一步是配置与Ganache网络的连接以部署智能合约。更改文件。/truffle-config.jsto代码如下:
// truffle-config.js
module.exports = {
networks: {
development: {
host: “localhost”,
port: 8545,
network_id: “*”
}
}
};
要在GANACHE网络上部署智能合约,请运行以下命令(不要忘记预先启动GANACHE CLI):
$ truffle migrate --network development
Compiling your contracts.。.
===========================
》 Compiling 。/contracts/JavaToken.sol
》 Compiling 。/contracts/MigraTIons.sol
》 Compiling openzeppelin-solidity/contracts/access/Roles.sol
》 Compiling openzeppelin-solidity/contracts/access/roles/MinterRole.sol
》 Compiling openzeppelin-solidity/contracts/math/SafeMath.sol
》 Compiling openzeppelin-solidity/contracts/token/ERC20/ERC20.sol
》 Compiling openzeppelin-solidity/contracts/token/ERC20/ERC20Mintable.sol
》 Compiling openzeppelin-solidity/contracts/token/ERC20/IERC20.sol
》 Artifacts written to /home/gjeanmart/workspace/tutorials/kauri-content/java-erc20/JVM/build/contracts
》 Compiled successfully using:
- solc: 0.5.8+commit.23d335f2.Emscripten.clang
Starting migrations.。.
======================
》 Network name: ‘development’
》 Network id: 1565778588423
》 Block gas limit: 0x6691b7
1_initial_migration.js
======================
Deploying ‘Migrations’
----------------------
》 transaction hash: 0x6161e15461a5c748a532b2191600986b8798be4842e78791238e9e77af5e1310
》 Blocks: 0 Seconds: 0
》 contract address: 0xC59fC6035859Dd35871c5d9211a0713ed608d59D
》 block number: 6
》 block timestamp: 1565778631
》 account: 0xB0C24796Fc9212AB371c8Caf1ea3F33cC1d4c8a0
》 balance: 99.95438236
》 gas used: 261393
》 gas price: 20 gwei
》 value sent: 0 ETH
》 total cost: 0.00522786 ETH
》 Saving migration to chain.
》 Saving artifacts
-------------------------------------
》 Total cost: 0.00522786 ETH
2_deploy_contract.js
====================
Deploying ‘JavaToken’
---------------------
》 transaction hash: 0xfc5b214cbd56ecd4d24795aacefe1fdaf27b1b223ebff78299fd47f302cb374c
》 Blocks: 0 Seconds: 0
》 contract address: 0x9339a071cB9C1E3BbBA50E5E298f234c5095f012
》 block number: 8
》 block timestamp: 1565778631
》 account: 0xB0C24796Fc9212AB371c8Caf1ea3F33cC1d4c8a0
》 balance: 99.92109908
》 gas used: 1622141
》 gas price: 20 gwei
》 value sent: 0 ETH
》 total cost: 0.03244282 ETH
》 Saving migration to chain.
》 Saving artifacts
-------------------------------------
》 Total cost: 0.03244282 ETH
Summary
=======
》 Total deployments: 2
》 Final cost: 0.03767068 ETH
注意命令完成后的合同地址。
如果您想了解更多有关此步骤的信息,我建议阅读以下有关Truffle和Ganache部署智能合约的文章:Truffle:智能合约编译和部署和Truffle 101-智能合约开发工具
使用web3j加载合同
现在我们已经在我们的GANACH本地块链上部署了一个Erc20智能合同,并且我们可以使用Web3J Erc20实用程序类在Java中与它进行交互。
1.创建一个新项目并导入Web3j依赖项
在您喜欢的IDE中创建一个新的Maven项目并导入Web3j依赖项(EIP支持的核心和合同):
《project xmlns=“http://maven.apache.org/POM/4.0.0” xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation=“http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”》
《modelVersion》4.0.0《/modelVersion》
《groupId》io.kauri.tutorials.java-ethereum《/groupId》
《artifactId》java-erc20《/artifactId》
《version》0.0.1-SNAPSHOT《/version》
《properties》
《maven.compiler.target》1.8《/maven.compiler.target》
《maven.compiler.source》1.8《/maven.compiler.source》
《web3j.version》4.2.0《/web3j.version》
《/properties》
《dependencies》
《dependency》
《groupId》org.web3j《/groupId》
《artifactId》core《/artifactId》
《version》${web3j.version}《/version》
《/dependency》
《dependency》
《groupId》org.web3j《/groupId》
《artifactId》contracts《/artifactId》
《version》${web3j.version}《/version》
《/dependency》
《/dependencies》
《/project》
2.创建一个新类以加载erc20智能合约wrapper
erc20是一个标准,因此不需要手动生成智能合约wrapper,web3j默认包含它。
但是,您需要将Web3j连接到以太坊区块链并配置钱包以签署交易。
在本文中,我们连接到本地Ganache区块链(默认情况下在http:// localhost:8545上公开)并使用第一个Ganache测试帐户(读取Ganache启动日志来查找此信息),在部署期间收到100个JVM令牌。
// Connect Web3j to the Blockchain
String rpcEndpoint = “http://localhost:8545”;
Web3j web3j = Web3j.build(new HttpService(rpcEndpoint));
// Prepare a wallet
String pk = “0x5bbbef76458bf30511c9ee6ed56783644eb339258d02656755c68098c4809130”;
// Account address: 0x1583c05d6304b6651a7d9d723a5c32830f53a12f
Credentials credentials = Credentials.create(pk);
// Load the contract
String contractAddress = “0xe4F275cE131eF87Cb8bF425E02D9215055e9F875”;
ERC20 javaToken = ERC20.load(contractAddress, web3j, credentials, new DefaultGasProvider());
对于更复杂的方案,您可以使用ERC20.load(contractAddress,web3j,transactionManager,gasPrice,gasLimit)加载具有特定TransactionManager和Gas参数的合同。
3.获取令牌信息
一旦我们加载了ERC20令牌合约,我们就可以开始请求存储在此合约上的信息,例如JVM令牌中的小数或余额。
以下代码检索我们之前在合约中配置的信息。
String symbol = javaToken.symbol().send();
String name = javaToken.name().send();
BigInteger decimal = javaToken.decimals().send();
System.out.println(“symbol: ” + symbol);
System.out.println(“name: ” + name);
System.out.println(“decimal: ” + decimal.intValueExact());
更重要的是,我们可以检索帐户的令牌余额。
BigInteger balance1 = javaToken.balanceOf(“0x1583c05d6304b6651a7d9d723a5c32830f53a12f”).send();
System.out.println(“balance (0x1583c05d6304b6651a7d9d723a5c32830f53a12f)=”+balance1.toString());
BigInteger balance2 = javaToken.balanceOf(“0x0db6b797e64666d4b36b13e5dc6fcd4661893ac8”).send();
System.out.println(“balance (0x0db6b797e64666d4b36b13e5dc6fcd4661893ac8)=”+balance2.toString());
帐户0x1583c05d6304b6651a7d9d723a5c32830f53a12f是Ganache的第一个帐户,即部署合约并在部署期间收到100个令牌的帐户。而0x0db6b797e64666d4b36b13e5dc6fcd4661893ac8代表Ganache的第二个帐户没有收到任何令牌。
转移代币
为了与令牌交互,ERC20类提供了所需的所有功能,如transfer,transferFrom和approve。
例如,我们可以通过从配置为凭据的帐户(0x1583c05d6304b6651a7d9d723a5c32830f53a12f)签名并发送一个事务,将25个JVM令牌传输到0x0db6b797e64666d4b36b13e5dc6fcd4661893ac8。
TransactionReceipt receipt = javaToken.transfer(“0x0db6b797e64666d4b36b13e5dc6fcd4661893ac8”, new BigInteger(“25”)).send();
System.out.println(“Transaction hash: ”+receipt.getTransactionHash());
BigInteger balance1 = javaToken.balanceOf(“0x1583c05d6304b6651a7d9d723a5c32830f53a12f”).send();
System.out.println(“balance (0x1583c05d6304b6651a7d9d723a5c32830f53a12f)=”+balance1.toString());
BigInteger balance2 = javaToken.balanceOf(“0x0db6b797e64666d4b36b13e5dc6fcd4661893ac8”).send();
System.out.println(“balance (0x0db6b797e64666d4b36b13e5dc6fcd4661893ac8)=”+balance2.toString());
收到传输事务的通知
最后,我们将介绍如何订阅ERC20合约生成的特定事件,以便我们可以对其中的任何活动做出反应。
您可以通过getTransferEvents方法检索给定事务的特定事件:
List《ERC20.TransferEventResponse》 events = javaToken.getTransferEvents(receipt);
events.forEach(event
-》 System.out.println(“from: ” + event._from + “, to: ” + event._to + “, value: ” + event._value));
我们还可以添加RxJava作为依赖项,通过transferEventFlowable连续订阅任何新事务。
javaToken.transferEventFlowable(DefaultBlockParameterName.EARLIEST, DefaultBlockParameterName.LATEST)
.subscribe(event
-》 System.out.println(“from: ” + event._from + “, to: ” + event._to + “, value: ” + event._value));
java erc 2.0_如何使用Web3j库管理Java中的ERC20令牌相关推荐
- java erc 2.0_如何使用java监听Erc20Token交易
你可以在web3j库的帮助下使用 java 轻松监听以太坊交易,但此库无法监听Erc20 Token交易. 要监听Erc20Token交易,你必须使用在合约(token)创建时的 token 封装类. ...
- java n%9==0_用C++实现求N!中末尾0的个数的方法详解
题目描述: 输入一个正整数n,求n!(即阶乘)末尾有多少个0? 比如: n = 10; n! = 3628800,所以答案为2 输入描述: 输入为1行,n(1≤n≤1000) 输出描述: 输出一个整数 ...
- 以太坊java接口_java以太坊库web3j文档
通过java打包以太坊智能合约 Web3j可以自动打包智能合同代码,以便在不脱离JVM的情况下进行以太坊智能合同部署和交互. 要打包代码,需要先编译智能合同: $ solc .sol --bin -- ...
- java erc 2.0_java 监听 ERC20 Token 交易
你可以在web3j库的帮助下使用java轻松监听以太坊交易,但此库无法监听Erc20 Token交易. 要监听Erc20Token交易,你必须使用在合约(token)创建时的token封装类.我假设你 ...
- java毕业设计东方水处理厂原材料仓库管理系统Mybatis+系统+数据库+调试部署
java毕业设计东方水处理厂原材料仓库管理系统Mybatis+系统+数据库+调试部署 java毕业设计东方水处理厂原材料仓库管理系统Mybatis+系统+数据库+调试部署 本源码技术栈: 项目架构:B ...
- 微信支付java版v2.0_刷卡支付-翟东平-专题视频课程
微信支付java版v2.0_刷卡支付-1814人已学习 课程介绍 微信支付系列课程将讲解"刷卡支付"."扫码支付"."公众号支付&qu ...
- 【区块链】以太坊 web3j for java 使用 - 部署和调用合约 3
web3j 部署合约 环境:mac os & android studio 官网:here 以太坊 web3j for java 配置和使用<1>: here 以太坊 web3j ...
- 【区块链】以太坊 web3j for java 配置和使用 1
以太坊 web3j for java 配置和使用 <1> 官网:here 环境: mac & android studio 一. 导入包 在app/build.gradle中:co ...
- java管理从程序员到CTO的Java技术路线图
查了好多资料,发现还是不全,干脆自己整理吧,至少保证在我的做法正确的,以免误导读者,也是给自己做个记录吧! 在技巧方面无论我们怎么学习,总感觉需要晋升自已不知道自己处于什么水平了.但如果有清晰的指示图 ...
最新文章
- 蜜糖变砒霜:90%美国公司区块链项目将不再重启
- DARPA发布产业振兴计划,继承摩尔智慧
- 每个java程序都至少有一个线程给主线程,java程序在主线程中判断各个子线程状态的操作,该如何解决...
- python消找出img中的src标签_使用beautifulsoup从img标签获取src
- matlab调用opencv的函数
- java headless_使用Chrome Headless 快速实现java版数据的抓取
- 计算机老师开场白试讲视频,教师招考试讲模版之开场白
- HDU - 7029 Median 思维
- html 基本布局介绍
- gentoo ffmpeg+mencoder快速搭建视频处理系统笔记
- 18_python基础—面向对象-多态
- Qt第一印象——Qte与Qt
- 11.7动手动脑作业
- 简单的Wifi密码破解
- 据说中国电信将ADSL的80端口给封了
- JQuery Smart UI 简介(四) — 强大的适用性存在问题【项目使用性介绍】
- android手机更新后变卡,你的安卓手机变卡了,越来越不流畅?这五招可轻松“提速”!...
- 一文带你吃透计算机网络(下)
- 什么是RNN?一文看懂强大的循环神经网络(Recurrent Neural Network, RNN)
- 负载调整率和交叉调整率
热门文章
- np.meshgrid plt.contourf
- 享受知识饕餮盛宴,尽在2014年课程
- 辨析三种一致性:缓存一致、内存一致、数据一致
- java用友eai_用友EAI接口开发的问题
- AWS白皮书 中文版(中英对照版) - 001 概述
- php_curl.dll下载,php_curl.dll,下载,简介,描述,修复,等相关问题一站搞定_DLL之家
- 玄幻:开局选择瑶池,我只想默默签到!(一)
- 解决tomcat运行报错java.lang.UnsatisfiedLinkError: apache-tomcat-7.0.37\bin\tcnative-1.dll:Can load AMD 64
- 很齐全的怀孕须知.不认真看不配做妈妈.
- 浙江杭州工程师职称评审论文要求