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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

ERC20标准代码

發(fā)布時間:2023/12/20 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ERC20标准代码 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
pragma solidity ^0.4.16;//版本號//接口:tokenRecipient interface tokenRecipient {function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public;}contract TokenERC20 {string public name;//幣種的名字string public symbol;//幣種名的簡稱,比如:比特幣就是BTC// 位數(shù)18是建議的默認值。ether和wei的轉(zhuǎn)換是10^18//如果設(shè)置為0,那么就代幣就不可分割。這樣就相當于:比特幣里面只可以一個幣一個幣來交易uint8 public decimals = 18;uint256 public totalSupply;//設(shè)置的總發(fā)幣量//你本人給別人轉(zhuǎn)幣:每一個地址對應(yīng)一個余額mapping (address => uint256) public balanceOf;//發(fā)你授權(quán)給A,A就有權(quán)利把你的錢轉(zhuǎn)給其他人,allowance是授權(quán)額度//你是第一個address,然后你對所有人的授權(quán)【mapping (address => uint256)】//【mapping (address => uint256)】相當于一個授權(quán)表,記錄你的授權(quán)情況mapping (address => mapping (address => uint256)) public allowance;//事件:轉(zhuǎn)賬情況event Transfer(address indexed from, address indexed to, uint256 value);//事件:授權(quán)情況event Approval(address indexed owner, address indexed spender, uint256 value);//事件:銷毀幣情況event Burn(address indexed from, uint256 value);//構(gòu)造器:確定總幣數(shù),幣種的名字,幣種的簡稱function TokenERC20(uint256 initialSupply, string tokenName, string tokenSymbol) public {totalSupply = initialSupply * 10 ** uint256(decimals);balanceOf[msg.sender] = totalSupply;name = tokenName;symbol = tokenSymbol;}//合約內(nèi)部:轉(zhuǎn)幣function _transfer(address _from, address _to, uint _value) internal {require(_to != 0x0);//不可以是轉(zhuǎn)到0地址(相當于銷毀幣)require(balanceOf[_from] >= _value);//要有足夠的幣轉(zhuǎn)出require(balanceOf[_to] + _value > balanceOf[_to]);//防止向上溢出//(*)代碼的目的:轉(zhuǎn)賬前后,轉(zhuǎn)賬兩者的錢數(shù)量不變,這是為了安全考慮uint previousBalances = balanceOf[_from] + balanceOf[_to];(*)balanceOf[_from] -= _value;//轉(zhuǎn)出錢balanceOf[_to] += _value;//轉(zhuǎn)進錢emit Transfer(_from, _to, _value);//記錄事件assert(balanceOf[_from] + balanceOf[_to] == previousBalances);(*)}//外部調(diào)用:轉(zhuǎn)幣function transfer(address _to, uint256 _value) public returns (bool) {_transfer(msg.sender, _to, _value);return true;}//用戶授權(quán)轉(zhuǎn)出:_from是委托人(授權(quán)人),msg.sender是被委托人function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) {//保證要轉(zhuǎn)出的錢小于等于授權(quán)的錢require(_value <= allowance[_from][msg.sender]);allowance[_from][msg.sender] -= _value;_transfer(_from, _to, _value);return true;}//授權(quán):委托人給被委托人一個授權(quán)金額function approve(address _spender, uint256 _value) publicreturns (bool success) {allowance[msg.sender][_spender] = _value;//委托人給被委托人一個金額授權(quán)值emit Approval(msg.sender, _spender, _value);//記錄事件:授權(quán)情況return true;}//實現(xiàn)接口:授權(quán)并且調(diào)用:授權(quán)人msg.sender,授權(quán)給_spender,function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) {tokenRecipient spender = tokenRecipient(_spender);if (approve(_spender, _value)) {spender.receiveApproval(msg.sender, _value, this, _extraData);return true;}}//銷毀幣function burn(uint256 _value) public returns (bool success) {require(balanceOf[msg.sender] >= _value);//你要有足夠的幣銷毀balanceOf[msg.sender] -= _value;//將幣置為0totalSupply -= _value;//發(fā)行幣的量置為0emit Burn(msg.sender, _value);//記錄毀幣事件return true;}//授權(quán)給別人去毀幣function burnFrom(address _from, uint256 _value) public returns (bool success) {require(balanceOf[_from] >= _value);//毀幣數(shù)量足夠require(_value <= allowance[_from][msg.sender]);//授權(quán)的毀幣數(shù)滿足在授權(quán)范圍內(nèi)balanceOf[_from] -= _value;allowance[_from][msg.sender] -= _value;totalSupply -= _value;emit Burn(_from, _value);//記錄事件return true;} }

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。