使用 Java 和 web3j 进行 Token 开发[概述][译]

这篇文章主要介绍了使用 Java 和 web3j 进行 Token 开发[概述][译] ,文中通过代码以及文档配合进行讲解,很详细,它对在座的每个人的研究和工作具有很经典的参考价值。 如果需要,让我们与区块链资料网一起学习。

https://www.interchains.cc/22709.html

使用 Java 和 web3j 进行 Token 开发[概述][译]是很好的区块链资料,他说明了区块链当中的经典原理,可以给我们提供资料,使用 Java 和 web3j 进行 Token 开发[概述][译]学习起来其实是很简单的,

不多的几个较为抽象的概念也很容易理解,之所以很多人感觉使用 Java 和 web3j 进行 Token 开发[概述][译]比较复杂,一方面是因为大多数的文档没有做到由浅入深地讲解,概念上没有注意先后顺序,给读者的理解带来困难

使用 Java 和 web3j 进行 Token 开发[概述][译]

  • Web3j
  • ERC20

学习使用 web3j 部署ERC20 以及与合约进行交互。

题外话, 翻译这篇文章是因为看到 CSDN 公众号这篇外行翻译。 (get balance: 获取账号余额被翻译为取得平衡,transaction 交易翻译为事务 , 等等), CSDN 用自己的流量优势不知道坑了多少开发者。

为了创作本文,我们创建的名为JavaToken的基本ERC20智能合约,可以在此处找到代码。 我们将使用这个代码库进行演示,请先 Git Clone到本地进行后续操作! 我们使用Truffle创建的本地Ganache Testnet网络来部署和运行这个合约。

我(原作者)最近写了一篇有关开始使用Android进行以太坊eth开发的文章,其中演示了如何在Android中设置web3j以及如何进行以太币转账。发布后收到读者留言想看看如何使用web3j与自定义ERC20 Token进行交互,因此有了今天这篇文章。

步骤0.9: 生成智能合约Java包装(Wrapper)

这个0.9 步是获取智能合约的一个Java包装器。之所以是 0.9步,是因为从技术上讲,如果合约已经部署,则可以不需要,但在之后与合约进行交互时,使用Wrapper将使事情会更容易。

为了生成Wrapper, 需要先使用Solidity编译器编译Solidity合约。如果你使用的是Truffle,则只需在JavaToken代码库的Truffle目录中运行以下命令编译即可:

为此,请先使用Solidity编译器编译Solidity合约。如果你使用的是Truffle,则只需在JavaToken存储库的Truffle目录中运行以下命令即可:

truffle compile

接着,安装web3j命令行:

Mac/Linux平台用户:

curl -L get.web3j.io | sh

Windows平台用户:

Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://raw.githubusercontent.com/web3j/web3j-installer/master/installer.ps1'))

一切安装就绪之后,运行以下代码:

web3j truffle generate Truffle/build/contracts/JavaToken.json -o src -p com.javaToken

在JavaToken目录下,将为JavaToken智能合约生成一个Wrapper,让之后和以太坊eth交互时更加容易。

步骤 1: 合约部署

为了部署Token,需要进行一些配置,并调用deploy()方法。

// The Ganache TestNet listens at port 7545 Web3j w3 = Web3j.build(new HttpService("HTTP://127.0.0.1:7545")); String privateKey = "你的私钥"; Credentials credentials = Credentials.create(privateKey); // 初始发行量 BigInteger initialSupply = BigInteger.valueOf(100000);  JavaToken javaToken = JavaToken.deploy(w3, credentials, new DefaultGasProvider(), initialSupply).send() 

这样就部署好了一个全新的以太坊ethToken!

此外,如果你仅仅是需要和一个已经部署的合约交互, 只需要使用下面的代码加载它:

// The Ganache TestNet listens at port 7545 Web3j w3 = Web3j.build(new HttpService("HTTP://127.0.0.1:7545")); String privateKey = "你的私钥"; Credentials credentials = Credentials.create(privateKey); String contractAddress = "合约地址";  JavaToken javaToken = JavaToken.load(contractAddress,w3,credentials,new DefaultGasProvider());

步骤 2: 获取余额

根据合约的代买,合约的部署者拥有所有的发行的 token。让我们检查一下部署者账号余额时候正确。如果我们从0.9步开始使用Wrapper,那么很简单:

// With java wrapper BigInteger balance = javaToken.balanceOf(credentials.getAddress()).send()  // Without java wrapper String contractAddress = "YourDeployedContractAddress";  // Define the function we want to invoke from the smart contract Function function = new Function("balanceOf", Arrays.asList(new Address(credentials.getAddress())),                                  Arrays.asList(new TypeReference<Uint256>() {}));  // Encode it for the contract to understand String encodedFunction = FunctionEncoder.encode(function);  /* Send the request and wait for the response using eth call since it's a read only transaction with no cost associated */ EthCall response = w3.ethCall(   Transaction.createEthCallTransaction(credentials.getAddress(), contractAddress, encodedFunction),   DefaultBlockParameterName.LATEST).send();  balance = Numeric.toBigInt(response.getValue());

要不能,会有一点复杂:

  1. 首先需要手动输入调用合约函数的详细信息, 如这里函数名是balanceOf、账号地址作为参数,返回一个uint256类型的作为余额;
  2. 然后对这些数据进行一个编码连同调用信息(谁发起、调用哪个合约)一起打包为交易。
  3. 最后,我们将十六进制结果解码为一个BigInteger类型。

现在,我们有了100000个 JavaToken。让我们发送一些给朋友!

步骤 3: Token 转账

同样,使用 wrapper 和不使用 wrapper 之间的差异非常明显:

String addressTo = "YourFriendsAddress"; BigInteger amount = BigInteger.valueOf(500);  // 使用 wrapper TransactionReceipt receipt = javaToken.transfer(addressTo,amount).send();  // Without java wrapper  // 定义想要调用的函数 Function function = new Function("transfer", Arrays.asList(new Address(addressTo), new Uint256(amount)),  Collections.emptyList());  // 编码,以便合约可以理解调用哪个函数 String encodedFunction = FunctionEncoder.encode(function);  /* Need to use a TransactionManager here since transfer actually alters the state of the blockchain and credentials are therefore relevant */ TransactionManager transactionManager = new FastRawTransactionManager(w3, credentials);  // Send the transaction off using transactionManager and wait for the hash String transactionHash = transactionManager.sendTransaction(DefaultGasProvider.GAS_PRICE,                                                             DefaultGasProvider.GAS_LIMIT, contractAddress, encodedFunction,                                                             BigInteger.ZERO).getTransactionHash();  // 获取交易收据 Optional<TransactionReceipt> transactionReceipt =   w3.ethGetTransactionReceipt(transactionHash).send().getTransactionReceipt(); if(transactionReceipt.isEmpty())   receipt = null; else   receipt = transactionReceipt.get();

不是wrapper时,现在有一点不同,这次需要更改区块链blockchain状态而不仅仅是读取数据,因此需要证明是谁发起的交易。

以同样的方式创建一个函数对象。尽管智能合约transfer函数返回的是布尔值,但我们在这里不需要使用,因为得通过交易收据检查交易是否成功,因此我们将返回值指定为一个空列表。接下来,我们创建一个交易管理器(TransactionManager)。

这个区别很关键, 管理器使用签名作为参数,说明是我们发起的交易(和上面balanceOf不同),最后通过检查交易收据确认交易是否成功。

结论

通过这篇文章学习了使用 web3j 部署ERC20, 相关的所有代码在: https://github.com/nschapeler/JavaToken

英文原文

登链社区 – 高质量的区块链blockchain技术文章集中地。

部分转自网络,侵权联系删除www.interchains.cchttps://www.interchains.cc/22709.html

区块链毕设网(www.interchains.cc)全网最靠谱的原创区块链毕设代做网站 部分资料来自网络,侵权联系删除! 最全最大的区块链源码站 ! QQ3039046426
区块链知识分享网, 以太坊dapp资源网, 区块链教程, fabric教程下载, 区块链书籍下载, 区块链资料下载, 区块链视频教程下载, 区块链基础教程, 区块链入门教程, 区块链资源 » 使用 Java 和 web3j 进行 Token 开发[概述][译]

提供最优质的资源集合

立即查看 了解详情