日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ERC20标准

發布時間:2023/12/20 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ERC20标准 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? 今天我來認識ERC20標準。

?

? 以太坊是一個分布式的智能合約平臺,可以分發代幣(Token)。目前以太坊上有超過2萬個代幣的智能合約,我們可以在以太坊區塊鏈瀏覽器中查看:https://www.etherscan.io ???

?

? 如果這么多代幣的標準不統一,對于其他人來查看代碼是相當痛苦的,眾籌的人也就沒有辦法來檢查代幣分發的是否合理,也沒有辦法做到多種錢包的兼容。

?

? 所以才推出了一種以太坊代幣的標準:ERC20標準。

?

ERC20標準涵蓋了哪些內容?

?

? 我們可以在https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md查看ERC20代幣的標準API。

?

? ERC實際上就是 以太坊請求協議。后面的20相當于是個編號,類似的還有ERC721、ERC827等等協議。

?

Method

在Method目錄下面我們可以看到一些方法,所有的ERC20代幣都是按照下面這些方法來定義的。下面我們講解一下每個方法的作用。

?

1.name

function name() constant returns (string name)

返回string類型的ERC20代幣的名字,例如:StatusNetwork

?

2.symbol(符號)

function symbol() constant returns (string symbol)

返回string類型的ERC20代幣的符號,也就是代幣的簡稱,例如:SNT。

?

3.decimals(小數)

function decimals() constant returns (uint8 decimals)

支持幾位小數點后幾位。如果設置為3。也就是支持0.001表示。

?

4.totalSupply

function totalSupply() constant returns (uint256 totalSupply)

發行代幣的總量,可以通過這個函數來獲取。所有智能合約發行的代幣總量是一定的,totalSupply必須設置初始值。如果不設置初始值,這個代幣發行就說明有問題。

?

5.balanceOf

function balanceOf(address _owner) constant returns (uint256 balance)

輸入地址,可以獲取該地址代幣的余額,注意不是以太幣的余額。

?

6.transfer

function transfer(address _to, uint256 _value) returns (bool success)

轉賬功能,調用者調用transfer函數將自己_value數量的token轉賬給 _to

?

7.approve(批準)

function approve(address _spender, uint256 _value) returns (bool success)

批準_spender賬戶從自己的賬戶轉移_value個token。可以分多次轉移。

?

8.transferFrom

function transferFrom(address _from, address _to, uint256 _value) returns (bool success)

與approve搭配使用,approve批準之后,_spender調用transferFrom函數來轉移_value個token到 _to的賬戶中。

?

9.allowance(限額)

function allowance(address _owner, address _spender) constant returns (uint256 remaining)

查看_owner授權給_spender的剩余token數量。

(owner:主人;所有者? ? ? ? spender:花錢者)

?

approve、transferFrom及allowance解釋:

賬戶A有1000個ETH,想允許B賬戶隨意調用100個ETH。

A賬戶按照以下形式調用approve函數approve(B,100)。

當B賬戶想用這100個ETH中的10個ETH給C賬戶時,則調用transferFrom(A, C, 10)。

這時調用allowance(A, B)可以查看B賬戶還能夠調用A賬戶多少個token。

?

Events

1.Transfer

event Transfer(address indexed _from, address indexed _to, uint256 _value)

當成功轉移token時,一定要觸發Transfer事件

?

2.Approval

event Approval(address indexed _owner, address indexed _spender, uint256 _value)

當調用approval函數成功時,一定要觸發Approval事件

?

簡易ERC20代碼示例:

pragma solidity ^0.4.17;?contract simpletokenstruct{ string public name; //定義公開 字符串類型 name string public simple; //定義公開 字符串類型 simple uint8 public decimals; //定義公開 8字節無符號整型 simple uint256 public totalSupply; //定義公開 256字節無符號整型 totalSupply //function balanceOf(address _owner) public view returns (uint256 balance){ // //} function transfer(address _to, uint256 _value) public returns (bool success){ } //定義函數transfer 接受地址_to和 256字節無符號整型_value傳參 并返回成功 function transferFrom(address _from, address _to, uint256 _value) public returns (bool success){ } //定義函數transferFrom 接受地址_from,地址_to和256字節無符號整型_value傳參 并返回成功 function approve(address _spender, uint256 _value) public returns (bool success){ } //定義函數approve 接受地址_spender,和256字節無符號整型_value傳參 并返回成功 function allowance(address _owner, address _spender) public view returns (uint256 remaining){ } //定義函數allowance 接受地址_owner,和地址_spender傳參 并返回256字節無符號整型 remaining event Transfer(address indexed _from, address indexed _to, uint256 _value); //定義時間Transfer 當出現地地址_from,_to和256字節無符號整型 _value觸發 event Approval(address indexed _owner, address indexed _spender, uint256 _value); //定義時間Transfer 當出現地地址_owner,_spender和256字節無符號整型 _value觸發}?contract simpletoken is simpletokenstruct{//合約 simpletoken繼承合約simpletokenstruct內容 constructor() public{ name='xiong'; //將'xiong'賦值給name simple='XIO'; //將'XIO'賦值給simple decimals=1; //將1賦值給decimals totalSupply=1000; //將1000賦值給totalSupply balanceOf[msg.sender]=totalSupply; //將totalSupply的值賦值給上個發送方 } mapping(address=>uint256) public balanceOf; //定義一個映射balanceOf 地址=>無符號整型 mapping(address=>mapping(address=>uint256)) internal approvemapping; //定義一個映射approvemapping 地址=>映射(地址=>無符號整型) function transfer(address _to, uint256 _value) public returns (bool success){ //定義函數transfer 接受地址_to和 256字節無符號整型_value傳參 并返回成功 require(_to != address(0)); //判斷_to是否為空地址 是結束執行 否繼續執行 require(balanceOf[msg.sender]>=_value);//判斷_value值是否小于等于1000 require(balanceOf[_to]+_value>=balanceOf[_to]);//判斷傳參地址余額+傳參值是否大于等于參地址余額 //判斷完成 balanceOf[msg.sender]-=_value; //將balanceOf[msg.sender]減去傳參值_value balanceOf[_to]+=_value; //將傳參_to地址余額加上傳參值_value emit Transfer(msg.sender,_to,_value);//觸發事件 success = true; } function transferFrom(address _from, address _to, uint256 _value) public returns (bool success){ //定義函數transferFrom 接受地址_from,地址_to和256字節無符號整型_value傳參 并返回成功 require(_to != address(0));//判斷_to是否為空地址 是結束執行 否繼續執行 require(balanceOf[_from]>=_value);//判斷_value值是否小于等于地址_from余額 require(approvemapping[_from][msg.sender]>=_value);//判斷_value值是否小于等于地址_from對應的地址msg.sender對應的值 require(balanceOf[_to]+_value>=balanceOf[_to]);//判斷傳參地址_to對應的余額是否小等于_value傳參的值+傳參地址_to對應的余額 balanceOf[_from]-=_value;//傳參地址_from的余額-傳參_value的值 balanceOf[_to]+=_value;//傳參地址_to的余額+傳參_value的值 success = true; } function approve(address _spender, uint256 _value) public returns (bool success){ //定義函數approve接受地址_spender和256字節無符號整型_value傳參 返回success approvemapping[msg.sender][_spender]=_value;//將傳參的_value值賦值給msg.sender對應的_spender對應的地址 emit Approval(msg.sender,_spender,_value);//觸發事件 success = true; } function allowance(address _owner, address _spender) public view returns (uint256 remaining){ //定義函數allowance接受地址 _owner和地址 _spender傳參 返回256字節無符號整型remaining return approvemapping[_owner][_spender];//返回owner對應的_spender對應的值 } event Transfer(address indexed _from, address indexed _to, uint256 _value);//觸發事件 event Approval(address indexed _owner, address indexed _spender, uint256 _value);//觸發事件 }

擁有erc20代幣——在測試網絡上發布

?

使用metamask發布自己的代幣

1.在Chrome中安裝metamask插件

2.注冊之后可以看到自己的以太坊主網賬號了,但是我們不用這個

3.切換到Kovan測試網絡

3.沒錢時,點

存入->

測試水管獲取ether->

?

4.在remix里選擇injected web3,會自動關聯metamask

可以看到賬戶變成了我們自己的賬戶

5.再部署時就會彈出metamask對話框,選擇一下gas fee然后確認即可

gas fee 就是付給礦工的錢讓他記錄數據,太低了沒人干活。但是這里是測試網絡錢不是錢,所以低一點也無所謂

6.等待發布

7.之后,便可以看到我們的交易哈希等等了。

?

總結

以上是生活随笔為你收集整理的ERC20标准的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。