生活随笔
收集整理的這篇文章主要介紹了
使用以太坊发布属于你自己的虚拟代币
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
使用以太坊發布屬于你自己的虛擬代幣
2018年04月22日 10:54:32閱讀數:98
本文從技術角度詳細介紹如何基于以太坊ERC20創建代幣的流程。關于以太坊的編程語言Solidity的教學我就不做了(懶。。),Solidity教程在網上就能找到,我盡量做到,你們跟著我的魔鬼的步伐,一步一步就把代幣做出來。
關于ERC20:也許你經常看到ERC20和代幣一同出現, ERC20是以太坊定義的一個代幣標準。
要求我們在實現代幣的時候必須要遵守的協議,如指定代幣名稱、總量、實現代幣交易函數等,只有支持了協議才能被以太坊錢包支持。
其接口如下:[plain] view plaincopy
contract?ERC20Interface?{????????string?public?constant?name?=?"Token?Name";??????string?public?constant?symbol?=?"SYM";??????uint8?public?constant?decimals?=?18;??//?18?is?the?most?common?number?of?decimal?places????????function?totalSupply()?public?constant?returns?(uint);??????function?balanceOf(address?tokenOwner)?public?constant?returns?(uint?balance);??????function?allowance(address?tokenOwner,?address?spender)?public?constant?returns?(uint?remaining);??????function?transfer(address?to,?uint?tokens)?public?returns?(bool?success);??????function?approve(address?spender,?uint?tokens)?public?returns?(bool?success);??????function?transferFrom(address?from,?address?to,?uint?tokens)?public?returns?(bool?success);????????event?Transfer(address?indexed?from,?address?indexed?to,?uint?tokens);??????event?Approval(address?indexed?tokenOwner,?address?indexed?spender,?uint?tokens);??}??簡單說明一下:name : 代幣名稱symbol: 代幣符號decimals: 代幣小數點位數,代幣的最小單位, 18表示我們可以擁有 .0000000000000000001單位個代幣。totalSupply() : 發行代幣總量。balanceOf(): 查看對應賬號的代幣余額。transfer(): 實現代幣交易,用于給用戶發送代幣(從我們的賬戶里)。transferFrom(): 實現代幣用戶之間的交易。allowance(): 控制代幣的交易,如可交易賬號及資產。approve(): 允許用戶可花費的代幣數。基本介紹完畢,現在你的電腦上至少有chrome,火狐或者opera瀏覽器中的一個,然后在以上瀏覽器中安裝
MetaMask插件這樣我們就可以在任何系統和平臺上進行以太坊的開發了
其他那些怎么注冊怎么收好助記詞你們這么聰明,肯定懂。我猜你們不會直接用真以太坊代幣進行合約部署,所以我們先在以太坊官方給的測試以太坊中部署合約,上圖的Rinkeby測試網絡,然后點擊BUY進入免費獲取測試以太坊的界面
不過這里要免費獲取測試以太坊的方法比較奇怪,有三種,不過都是把你的以太坊錢包地址復制到推特或者臉譜或者google+中發布,然后在把帶有你以太坊錢包地址的消息的鏈接復制到Rinkeby的輸入框中,如果復制鏈接后網頁沒有變化,那就刷新一下頁面,然后就會看到funded的變化了,上圖就是我在推特發的錢包地址復制到Rinkeby獲取測試以太坊。
當你獲取到測試以太坊后,我們就可以進行代幣開發了。我們在
Remix Solidity IDE上開發,
Remix Solidity IDE同樣,是一個網頁開發非常方便,
Remix Solidity IDE開發界面是這樣的:關于發代幣的代碼,直接復制一下代碼即可:
[plain] view plaincopy
pragma?solidity?^0.4.16;??interface?tokenRecipient?{?function?receiveApproval(address?_from,?uint256?_value,?address?_token,?bytes?_extraData)?public;?}????contract?TokenERC20?{??????string?public?name;??????string?public?symbol;??????uint8?public?decimals?=?18;??//?18?是建議的默認值??????uint256?public?totalSupply;????????mapping?(address?=>?uint256)?public?balanceOf;??//???????mapping?(address?=>?mapping?(address?=>?uint256))?public?allowance;????????event?Transfer(address?indexed?from,?address?indexed?to,?uint256?value);????????event?Burn(address?indexed?from,?uint256?value);??????????function?TokenERC20(uint256?initialSupply,?string?tokenName,?string?tokenSymbol)?public?{??????????totalSupply?=?initialSupply?*?10?**?uint256(decimals);??????????balanceOf[msg.sender]?=?totalSupply;??????????name?=?tokenName;??????????symbol?=?tokenSymbol;??????}??????????function?_transfer(address?_from,?address?_to,?uint?_value)?internal?{??????????require(_to?!=?0x0);??????????require(balanceOf[_from]?>=?_value);??????????require(balanceOf[_to]?+?_value?>?balanceOf[_to]);??????????uint?previousBalances?=?balanceOf[_from]?+?balanceOf[_to];??????????balanceOf[_from]?-=?_value;??????????balanceOf[_to]?+=?_value;??????????Transfer(_from,?_to,?_value);??????????assert(balanceOf[_from]?+?balanceOf[_to]?==?previousBalances);??????}????????function?transfer(address?_to,?uint256?_value)?public?{??????????_transfer(msg.sender,?_to,?_value);??????}????????function?transferFrom(address?_from,?address?_to,?uint256?_value)?public?returns?(bool?success)?{??????????require(_value?<=?allowance[_from][msg.sender]);?????//?Check?allowance??????????allowance[_from][msg.sender]?-=?_value;??????????_transfer(_from,?_to,?_value);??????????return?true;??????}????????function?approve(address?_spender,?uint256?_value)?public??????????returns?(bool?success)?{??????????allowance[msg.sender][_spender]?=?_value;??????????return?true;??????}????????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;??????????totalSupply?-=?_value;??????????Burn(msg.sender,?_value);??????????return?true;??????}????????function?burnFrom(address?_from,?uint256?_value)?public?returns?(bool?success)?{??????????require(balanceOf[_from]?>=?_value);??????????require(_value?<=?allowance[_from][msg.sender]);??????????balanceOf[_from]?-=?_value;??????????allowance[_from][msg.sender]?-=?_value;??????????totalSupply?-=?_value;??????????Burn(_from,?_value);??????????return?true;??????}??}??然后點擊右邊的RUN,進行設置:在TokenERC20下面的那一行,第一個數字是代幣的數量,第二個字符是代幣的名稱,第三個字符是代幣的符號。上面的Account是你以太坊的錢包地址,Environment選擇Rinkeby。然后create一下就懷孕,啊不,是發幣了。
然后選submit提交即可。提交后,點開
Metamask界面,切換到TOKENS,點添加合約,出現如下對話框:輸入合約地址,代幣符號和代幣小數點后面的位數,默認18,填18就好。
最后成功發布了你自己的代幣:
總結
以上是生活随笔為你收集整理的使用以太坊发布属于你自己的虚拟代币的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。