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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

一步步教你在以太坊发行自己的数字货币

發布時間:2025/3/21 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一步步教你在以太坊发行自己的数字货币 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一步步教你在以太坊發行自己的數字貨幣
置頂 2018年03月21日 15:31:04 閱讀數:1239

什么是代幣

如果不那么追求精確的定義,代幣就是數字貨幣,比特幣、以太幣就是一個代幣。
利用以太坊的智能合約可以輕松編寫出屬于自己的代幣,代幣可以代表任何可以交易的東西,如:積分、財產、證書等等。
因此不管是出于商業,還是學習很多人想創建一個自己的代幣,先貼一個圖看看創建的代幣是什么樣子。

ERC20 Token

也許你經??吹紼RC20和代幣一同出現, ERC20是以太坊定義的一個代幣標準
要求我們在實現代幣的時候必須要遵守的協議,如指定代幣名稱、總量、實現代幣交易函數等,只有支持了協議才能被以太坊錢包支持。
其接口如下:

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 placesfunction 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); }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

簡單說明一下:

name : 代幣名稱 symbol: 代幣符號 decimals: 代幣小數點位數,代幣的最小單位, 18表示我們可以擁有 .0000000000000000001單位個代幣。 totalSupply() : 發行代幣總量。 balanceOf(): 查看對應賬號的代幣余額。 transfer(): 實現代幣交易,用于給用戶發送代幣(從我們的賬戶里)。 transferFrom(): 實現代幣用戶之間的交易。 allowance(): 控制代幣的交易,如可交易賬號及資產。 approve(): 允許用戶可花費的代幣數。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

編寫代幣合約代碼

代幣合約代碼:

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 allowanceallowance[_from][msg.sender] -= _value;_transfer(_from, _to, _value);return true;}function approve(address _spender, uint256 _value) publicreturns (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;} }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80

部署

在開發測試智能合約時,MetaMaskRemix Solidity IDE是兩個非常好用的工具,今天就用他們來完成部署。

安裝和配置MetaMask請參考開發、部署第一個去中心化應用,不同的上本文選擇了以太坊的測試網絡Ropsten,如果你沒有余額請點擊購買buy,進入的網站可以送一些測試以太幣給你,配置好之后,界面應該如下:

瀏覽器打開Remix Solidity IDE,復制以上源碼粘貼上,在右側選項參考如圖的設置:

注意Environment和Account和MetaMask保持一致,然后選擇合約TokenERC20,填入你想要的發行量,名稱及代號,就可以創建合約了。
這時MetaMask會彈出一個交易確認框,點SUBMIT。待合約部署交易確認之后,點擊交易詳情如下圖,復制合約地址(下圖中紅色框內)。

打開Metamask界面,切換到TOKENS,點添加合約,出現如下對話框:

填入剛剛復制的地址,點ADD,這時你就可以看到你創建的代幣了,如圖:

你已經完成了代幣的創建和部署(正式網絡和測試網絡部署方法一樣),可以在Etherscan查詢到我們剛剛部署的代幣,如文章開頭的圖片,代幣發行量為10000,單位為SB。

代幣交易

由于MetaMask插件沒有提供代幣交易功能,同時考慮到很多人并沒有以太坊錢包或是被以太坊錢包網絡同步問題折磨,今天我用網頁錢包來講解代幣交易。

進入網頁錢包地址, 第一次進入有一些安全提示需要用戶確認。
進入之后,按照下圖進行設置:

添加代幣
點擊右下Add Custom Token

進行代幣轉賬交易

代幣的發行和交易就是這么簡單,在正式的以太坊網絡上發行的方式一樣,然后就可以去ICO啦!

參考文章:
ERC20代幣標準
Create your own crypto-currency with ethereum

總結

以上是生活随笔為你收集整理的一步步教你在以太坊发行自己的数字货币的全部內容,希望文章能夠幫你解決所遇到的問題。

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