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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

使用以太坊发布属于你自己的虚拟代币

發(fā)布時(shí)間:2025/3/21 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用以太坊发布属于你自己的虚拟代币 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
使用以太坊發(fā)布屬于你自己的虛擬代幣
2018年04月22日 10:54:32閱讀數(shù):98

本文從技術(shù)角度詳細(xì)介紹如何基于以太坊ERC20創(chuàng)建代幣的流程。

關(guān)于以太坊的編程語(yǔ)言Solidity的教學(xué)我就不做了(懶。。),Solidity教程在網(wǎng)上就能找到,我盡量做到,你們跟著我的魔鬼的步伐,一步一步就把代幣做出來。

關(guān)于ERC20也許你經(jīng)??吹紼RC20和代幣一同出現(xiàn), ERC20是以太坊定義的一個(gè)代幣標(biāo)準(zhǔn)。
要求我們?cè)趯?shí)現(xiàn)代幣的時(shí)候必須要遵守的協(xié)議,如指定代幣名稱、總量、實(shí)現(xiàn)代幣交易函數(shù)等,只有支持了協(xié)議才能被以太坊錢包支持。
其接口如下:
[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);??
  • }??
  • 簡(jiǎn)單說明一下:
    name : 代幣名稱
    symbol: 代幣符號(hào)
    decimals: 代幣小數(shù)點(diǎn)位數(shù),代幣的最小單位, 18表示我們可以擁有 .0000000000000000001單位個(gè)代幣。
    totalSupply() : 發(fā)行代幣總量。
    balanceOf(): 查看對(duì)應(yīng)賬號(hào)的代幣余額。
    transfer(): 實(shí)現(xiàn)代幣交易,用于給用戶發(fā)送代幣(從我們的賬戶里)。
    transferFrom(): 實(shí)現(xiàn)代幣用戶之間的交易。
    allowance(): 控制代幣的交易,如可交易賬號(hào)及資產(chǎn)。
    approve(): 允許用戶可花費(fèi)的代幣數(shù)。基本介紹完畢,現(xiàn)在你的電腦上至少有chrome,火狐或者opera瀏覽器中的一個(gè),然后在以上瀏覽器中安裝MetaMask插件這樣我們就可以在任何系統(tǒng)和平臺(tái)上進(jìn)行以太坊的開發(fā)了

    其他那些怎么注冊(cè)怎么收好助記詞你們這么聰明,肯定懂。我猜你們不會(huì)直接用真以太坊代幣進(jìn)行合約部署,所以我們先在以太坊官方給的測(cè)試以太坊中部署合約,上圖的Rinkeby測(cè)試網(wǎng)絡(luò),然后點(diǎn)擊BUY進(jìn)入免費(fèi)獲取測(cè)試以太坊的界面

    不過這里要免費(fèi)獲取測(cè)試以太坊的方法比較奇怪,有三種,不過都是把你的以太坊錢包地址復(fù)制到推特或者臉譜或者google+中發(fā)布,然后在把帶有你以太坊錢包地址的消息的鏈接復(fù)制到Rinkeby的輸入框中,如果復(fù)制鏈接后網(wǎng)頁(yè)沒有變化,那就刷新一下頁(yè)面,然后就會(huì)看到funded的變化了,上圖就是我在推特發(fā)的錢包地址復(fù)制到Rinkeby獲取測(cè)試以太坊。

    當(dāng)你獲取到測(cè)試以太坊后,我們就可以進(jìn)行代幣開發(fā)了。我們?cè)?span style="background-color:transparent;color:rgb(62,62,62);float:none;font-size:16px;font-style:normal;font-variant:normal;font-weight:400;letter-spacing:normal;text-align:left;text-decoration:none;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;">Remix Solidity IDE上開發(fā),Remix Solidity IDE同樣,是一個(gè)網(wǎng)頁(yè)開發(fā)非常方便,Remix Solidity IDE開發(fā)界面是這樣的:關(guān)于發(fā)代幣的代碼,直接復(fù)制一下代碼即可:[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?是建議的默認(rèn)值??
  • ????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;??
  • ????}??
  • }??
  • 然后點(diǎn)擊右邊的RUN,進(jìn)行設(shè)置:在TokenERC20下面的那一行,第一個(gè)數(shù)字是代幣的數(shù)量,第二個(gè)字符是代幣的名稱,第三個(gè)字符是代幣的符號(hào)。上面的Account是你以太坊的錢包地址,Environment選擇Rinkeby。然后create一下就懷孕,啊不,是發(fā)幣了。

    然后選submit提交即可。提交后,點(diǎn)開Metamask界面,切換到TOKENS,點(diǎn)添加合約,出現(xiàn)如下對(duì)話框:輸入合約地址,代幣符號(hào)和代幣小數(shù)點(diǎn)后面的位數(shù),默認(rèn)18,填18就好。

    最后成功發(fā)布了你自己的代幣:

    總結(jié)

    以上是生活随笔為你收集整理的使用以太坊发布属于你自己的虚拟代币的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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