日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > 物聯(lián)網(wǎng) > 區(qū)塊鏈
[導(dǎo)讀] ERC20是以太坊智能合約標(biāo)準(zhǔn),用于以兼容的方式實(shí)現(xiàn)令牌,因此很容易與任何應(yīng)用程序(DAPP、錢包、交換等)交互和集成令牌。 ? 先決條件 要學(xué)習(xí)本教程,您需要在計(jì)

ERC20是以太坊智能合約標(biāo)準(zhǔn),用于以兼容的方式實(shí)現(xiàn)令牌,因此很容易與任何應(yīng)用程序(DAPP、錢包、交換等)交互和集成令牌。
?

先決條件

要學(xué)習(xí)本教程,您需要在計(jì)算機(jī)上安裝以下軟件:

·Java編程語(yǔ)言(>8)

·包和依賴關(guān)系管理器,例如Maven或Gradle

·一個(gè)集成開發(fā)環(huán)境,對(duì)于本教程,我們使用Eclipse

·Truffle:開發(fā)、測(cè)試和部署以太坊智能合約的開發(fā)框架

·Ganache-cli:以太坊開發(fā)的本地個(gè)人區(qū)塊鏈。

·通過(guò)運(yùn)行以下命令啟動(dòng)GANACHE:

ganache-cli

合約部署

在開始之前,我們需要在以太坊區(qū)塊鏈上部署一個(gè)ERC20代幣合約(在我們的例子中是Ganache)。為了本教程的目的,我們使用最簡(jiǎn)單的解決方案,使用OpenZeppelin可重用合同,Truffle和Ganache。

1.首先為我們的ERC20創(chuàng)建一個(gè)名為JVM的項(xiàng)目文件夾,并初始化一個(gè)Truffle項(xiàng)目

$ mkdir JVM

$ cd JVM

$ truffle init

2.然后我們安裝Open-Zeppelin Solidity庫(kù),其中包含大量高質(zhì)量,經(jīng)過(guò)全面測(cè)試和審核的可重用智能合約。

使用npm包導(dǎo)入OpenZeppelin智能合約。

$ npm init -y

$ npm install openzeppelin-solidity --save-exact

3.創(chuàng)建合同文件。/contracts/JavaToken.sol

智能合約繼承了可重用的OpenZeppelin合約ERC20Mintable的所有功能和規(guī)則。我們只需要配置以下常量變量,如下所示:

// 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網(wǎng)絡(luò)上部署智能合約

我們需要先完成遷移腳本。創(chuàng)建一個(gè)名為。/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個(gè)JVM令牌分發(fā)到部署者帳戶(Ganache第一個(gè)帳戶)。

下一步是配置與Ganache網(wǎng)絡(luò)的連接以部署智能合約。更改文件。/truffle-config.jsto代碼如下:

// truffle-config.js

module.exports = {

networks: {

development: {

host: “l(fā)ocalhost”,

port: 8545,

network_id: “*”

}

}

};

要在GANACHE網(wǎng)絡(luò)上部署智能合約,請(qǐng)運(yùn)行以下命令(不要忘記預(yù)先啟動(dòng)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

注意命令完成后的合同地址。

如果您想了解更多有關(guān)此步驟的信息,我建議閱讀以下有關(guān)Truffle和Ganache部署智能合約的文章:Truffle:智能合約編譯和部署和Truffle 101-智能合約開發(fā)工具

使用web3j加載合同

現(xiàn)在我們已經(jīng)在我們的GANACH本地塊鏈上部署了一個(gè)Erc20智能合同,并且我們可以使用Web3J Erc20實(shí)用程序類在Java中與它進(jìn)行交互。

1.創(chuàng)建一個(gè)新項(xiàng)目并導(dǎo)入Web3j依賴項(xiàng)

在您喜歡的IDE中創(chuàng)建一個(gè)新的Maven項(xiàng)目并導(dǎo)入Web3j依賴項(xiàng)(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.創(chuàng)建一個(gè)新類以加載erc20智能合約wrapper

erc20是一個(gè)標(biāo)準(zhǔn),因此不需要手動(dòng)生成智能合約wrapper,web3j默認(rèn)包含它。

但是,您需要將Web3j連接到以太坊區(qū)塊鏈并配置錢包以簽署交易。

在本文中,我們連接到本地Ganache區(qū)塊鏈(默認(rèn)情況下在http:// localhost:8545上公開)并使用第一個(gè)Ganache測(cè)試帳戶(讀取Ganache啟動(dòng)日志來(lái)查找此信息),在部署期間收到100個(gè)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());

對(duì)于更復(fù)雜的方案,您可以使用ERC20.load(contractAddress,web3j,transactionManager,gasPrice,gasLimit)加載具有特定TransactionManager和Gas參數(shù)的合同。

3.獲取令牌信息

一旦我們加載了ERC20令牌合約,我們就可以開始請(qǐng)求存儲(chǔ)在此合約上的信息,例如JVM令牌中的小數(shù)或余額。

以下代碼檢索我們之前在合約中配置的信息。

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的第一個(gè)帳戶,即部署合約并在部署期間收到100個(gè)令牌的帳戶。而0x0db6b797e64666d4b36b13e5dc6fcd4661893ac8代表Ganache的第二個(gè)帳戶沒(méi)有收到任何令牌。

轉(zhuǎn)移代幣

為了與令牌交互,ERC20類提供了所需的所有功能,如transfer,transferFrom和approve。

例如,我們可以通過(guò)從配置為憑據(jù)的帳戶(0x1583c05d6304b6651a7d9d723a5c32830f53a12f)簽名并發(fā)送一個(gè)事務(wù),將25個(gè)JVM令牌傳輸?shù)?x0db6b797e64666d4b36b13e5dc6fcd4661893ac8。

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());

收到傳輸事務(wù)的通知

最后,我們將介紹如何訂閱ERC20合約生成的特定事件,以便我們可以對(duì)其中的任何活動(dòng)做出反應(yīng)。

您可以通過(guò)getTransferEvents方法檢索給定事務(wù)的特定事件:

List《ERC20.TransferEventResponse》 events = javaToken.getTransferEvents(receipt);

events.forEach(event

-》 System.out.println(“from: ” + event._from + “, to: ” + event._to + “, value: ” + event._value));

我們還可以添加RxJava作為依賴項(xiàng),通過(guò)transferEventFlowable連續(xù)訂閱任何新事務(wù)。

javaToken.transferEventFlowable(DefaultBlockParameterName.EARLIEST, DefaultBlockParameterName.LATEST)

.subscribe(event

-》 System.out.println(“from: ” + event._from + “, to: ” + event._to + “, value: ” + event._value));

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動(dòng)電源

在工業(yè)自動(dòng)化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動(dòng)力設(shè)備,其驅(qū)動(dòng)電源的性能直接關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動(dòng)勢(shì)抑制與過(guò)流保護(hù)是驅(qū)動(dòng)電源設(shè)計(jì)中至關(guān)重要的兩個(gè)環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動(dòng)性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動(dòng)電源

LED 驅(qū)動(dòng)電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個(gè)照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動(dòng)電源易損壞的問(wèn)題卻十分常見(jiàn),不僅增加了維護(hù)成本,還影響了用戶體驗(yàn)。要解決這一問(wèn)題,需從設(shè)計(jì)、生...

關(guān)鍵字: 驅(qū)動(dòng)電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動(dòng)電源的公式,電感內(nèi)電流波動(dòng)大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動(dòng)電源

電動(dòng)汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動(dòng)汽車的核心技術(shù)之一是電機(jī)驅(qū)動(dòng)控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動(dòng)系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動(dòng)汽車的動(dòng)力性能和...

關(guān)鍵字: 電動(dòng)汽車 新能源 驅(qū)動(dòng)電源

在現(xiàn)代城市建設(shè)中,街道及停車場(chǎng)照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢(shì)逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動(dòng)電源 LED

LED通用照明設(shè)計(jì)工程師會(huì)遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動(dòng)電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動(dòng)電源的電磁干擾(EMI)問(wèn)題成為了一個(gè)不可忽視的挑戰(zhàn)。電磁干擾不僅會(huì)影響LED燈具的正常工作,還可能對(duì)周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來(lái)解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動(dòng)電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動(dòng)電源

關(guān)鍵字: LED 驅(qū)動(dòng)電源 開關(guān)電源

LED驅(qū)動(dòng)電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動(dòng)LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動(dòng)電源
關(guān)閉