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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

以太坊发token教程

發(fā)布時間:2025/3/21 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 以太坊发token教程 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

以太坊發(fā)token教程

如果需要幣的話,請留下聯(lián)系方式!!!

在發(fā)Token前,你先的確定一下幾點:

  • Token的名稱
  • Token的標(biāo)識
  • Token的小數(shù)位
  • Token發(fā)型量
  • 我的選擇是:

  • 名稱:MyFreeCoin
  • 標(biāo)識:MFC
  • 小數(shù)位: 18
  • 發(fā)行量: 10000
  • 小數(shù)位是18位,表示MFC這個Token最小可以到 .0000000000000000001。

    編寫 MFC的智能合約:

    Token的合約代碼我們參考Token-Factory的代碼。

    pragma solidity ^0.4.4;contract Token {/// @return 返回token的發(fā)行量function totalSupply() constant returns (uint256 supply) {}/// @param _owner 查詢以太坊地址token余額/// @return The balance 返回余額function balanceOf(address _owner) constant returns (uint256 balance) {}/// @notice msg.sender(交易發(fā)送者)發(fā)送 _value(一定數(shù)量)的 token 到 _to(接受者) /// @param _to 接收者的地址/// @param _value 發(fā)送token的數(shù)量/// @return 是否成功function transfer(address _to, uint256 _value) returns (bool success) {}/// @notice 發(fā)送者 發(fā)送 _value(一定數(shù)量)的 token 到 _to(接受者) /// @param _from 發(fā)送者的地址/// @param _to 接收者的地址/// @param _value 發(fā)送的數(shù)量/// @return 是否成功function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {}/// @notice 發(fā)行方 批準(zhǔn) 一個地址發(fā)送一定數(shù)量的token/// @param _spender 需要發(fā)送token的地址/// @param _value 發(fā)送token的數(shù)量/// @return 是否成功function approve(address _spender, uint256 _value) returns (bool success) {}/// @param _owner 擁有token的地址/// @param _spender 可以發(fā)送token的地址/// @return 還允許發(fā)送的token的數(shù)量function allowance(address _owner, address _spender) constant returns (uint256 remaining) {}/// 發(fā)送Token事件event Transfer(address indexed _from, address indexed _to, uint256 _value);/// 批準(zhǔn)事件event Approval(address indexed _owner, address indexed _spender, uint256 _value); } /* This implements ONLY the standard functions and NOTHING else. For a token like you would want to deploy in something like Mist, see HumanStandardToken.sol.If you deploy this, you won't have anything useful.Implements ERC 20 Token standard: https://github.com/ethereum/EIPs/issues/20實現(xiàn)ERC20標(biāo)準(zhǔn) .*/pragma solidity ^0.4.4;import "./Token.sol";contract StandardToken is Token {function transfer(address _to, uint256 _value) returns (bool success) {//默認token發(fā)行量不能超過(2^256 - 1)//如果你不設(shè)置發(fā)行量,并且隨著時間的發(fā)型更多的token,需要確保沒有超過最大值,使用下面的 if 語句//if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) {if (balances[msg.sender] >= _value && _value > 0) {balances[msg.sender] -= _value;balances[_to] += _value;Transfer(msg.sender, _to, _value);return true;} else { return false; }}function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {//向上面的方法一樣,如果你想確保發(fā)行量不超過最大值//if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) {if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) {balances[_to] += _value;balances[_from] -= _value;allowed[_from][msg.sender] -= _value;Transfer(_from, _to, _value);return true;} else { return false; }}function balanceOf(address _owner) constant returns (uint256 balance) {return balances[_owner];}function approve(address _spender, uint256 _value) returns (bool success) {allowed[msg.sender][_spender] = _value;Approval(msg.sender, _spender, _value);return true;}function allowance(address _owner, address _spender) constant returns (uint256 remaining) {return allowed[_owner][_spender];}mapping (address => uint256) balances;mapping (address => mapping (address => uint256)) allowed;uint256 public totalSupply; } /* This Token Contract implements the standard token functionality (https://github.com/ethereum/EIPs/issues/20) as well as the following OPTIONAL extras intended for use by humans.In other words. This is intended for deployment in something like a Token Factory or Mist wallet, and then used by humans. Imagine coins, currencies, shares, voting weight, etc. Machine-based, rapid creation of many tokens would not necessarily need these extra features or will be minted in other manners.1) Initial Finite Supply (upon creation one specifies how much is minted). 2) In the absence of a token registry: Optional Decimal, Symbol & Name. 3) Optional approveAndCall() functionality to notify a contract if an approval() has occurred..*/ pragma solidity ^0.4.4;import "./StandardToken.sol";contract MyFreeCoin is StandardToken {function () {//if ether is sent to this address, send it back.throw;}/* Public variables of the token *//*NOTE: The following variables are OPTIONAL vanities. One does not have to include them.They allow one to customise the token contract & in no way influences the core functionality.Some wallets/interfaces might not even bother to look at this information.*/string public name; //token名稱: MyFreeCoin uint8 public decimals; //小數(shù)位string public symbol; //標(biāo)識string public version = 'H0.1'; //版本號function MyFreeCoin(uint256 _initialAmount,string _tokenName,uint8 _decimalUnits,string _tokenSymbol) {balances[msg.sender] = _initialAmount; // 合約發(fā)布者的余額是發(fā)行數(shù)量totalSupply = _initialAmount; // 發(fā)行量name = _tokenName; // token名稱decimals = _decimalUnits; // token小數(shù)位symbol = _tokenSymbol; // token標(biāo)識}/* 批準(zhǔn)然后調(diào)用接收合約 */function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) {allowed[msg.sender][_spender] = _value;Approval(msg.sender, _spender, _value);//調(diào)用你想要通知合約的 receiveApprovalcall 方法 ,這個方法是可以不需要包含在這個合約里的。//receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData)//假設(shè)這么做是可以成功,不然應(yīng)該調(diào)用vanilla approve。if(!_spender.call(bytes4(bytes32(sha3("receiveApproval(address,uint256,address,bytes)"))), msg.sender, _value, this, _extraData)) { throw; }return true;} }

    如果想要發(fā)行自己的token,只需要把 MyFreeCoin出現(xiàn)的地方替換為你的token名稱。

    需要注意的一點是,你發(fā)行的數(shù)量需要相對token小數(shù)點來設(shè)置。例如如果token的小數(shù)點是0,而你要發(fā)行1000個token,那么發(fā)行數(shù)量的值1000。但是如果token的小數(shù)點是18位,你要發(fā)行1000個token,那么發(fā)行數(shù)量的值是1000000000000000000000(1000后面加上18個0)。

    balances[msg.sender] = _initialAmount;
    這行代碼,我們把合約的發(fā)布者的余額設(shè)置為發(fā)行量的數(shù)量。

    在測試網(wǎng)絡(luò)上發(fā)行我們的token:

  • 安裝MetaMask錢包。
  • 安裝MetaMask之后,登陸Metamask, 左上角選擇Ropsten。如下圖:


    1.jpg
  • 這個賬號將會是我們的智能合約的所有者,也就是說token發(fā)行數(shù)量都是存入到這個賬號。

  • 打開Solidity Remix Compiler ,remix 是一個在線編譯器可以幫我們把智能合約直接發(fā)布到以太坊上。

  • 把上面三個文件代碼復(fù)制到remix編輯器中。可以先刪除remix中默認ballot.sol 文件,在新建 Token.sol , StandardToken.sol, MyFreeCoin.sol 三個文件, 相應(yīng)的把代碼復(fù)制到文件中,如下圖:


    2.jpg
  • 點擊 start to compile 編譯代碼文件。

  • 給我們的測試賬號申請點 eth來測試,如下圖點擊 buy按鈕,再點擊ropsten test faucet

    3.jpg
    4.jpg

  • 會打開 faucet metamask 網(wǎng)站,點擊
    request 1 eth from faucet。成功后會生成 交易記錄。

    5.jpg
    6.jpg

  • 可以查看到我們的測試賬戶上已經(jīng)有了eth可以用了。


    7.jpg
  • 選中remix中的run 菜單,下拉框中選擇MyFreeCoin, 在create按鈕的左邊輸入框中輸入 "10000000000000000000000","MyFreeCoin",18,"MFC", 如下圖

    8.jpg

  • 點擊create 按鈕,需要注意的是發(fā)行量需要包含在 "" 中。 metamask會彈出確認框。如下圖:


    9.jpg
  • 確定后,會進入掛起狀態(tài),等待曠工打包。

  • 等一段時間后,交易完成,會顯示MyFreeCoin 合約。


    10.jpg
  • 點擊MyFreeCoin 的復(fù)制按鈕,復(fù)制合約地址在 ropsten etherscan中查詢,可以查詢到我們的合約情況,如下圖:

    11.jpg

  • 驗證我們發(fā)布的token。在metamask的token中點擊 add token 按鈕。如下圖:


    12.jpg
  • 在add token 的地址填入我們剛才復(fù)制的合約地址,如下圖:


    13.jpg
  • 可以在token中看到我們新創(chuàng)建的token。如下圖:


    14.jpg
  • 認證我們的合約代碼。 在剛才ropsten ethscan 的合約地址頁面中,點擊Contract code, 如下圖:


    15.jpg
  • 點擊Verify and Publish, 會進入如下頁面:


    16.jpg
  • Contract name: 的輸入框輸入token 名稱MyFreeCoin, Compiler 選擇在remix的sttings 中Solidity version 顯示的版本號。Optimization 選擇 No。 然后在Enter the Solidity Contract Code below 下面的輸入框中填入代碼,我們的代碼有三個文件,需要把它們合并成一個文件,合并的格式是這樣:
  • pragma solidity ^0.4.4; contract Token { } contract StandardToken is Token { } contract MyFreeCoin is StandardToken { }

    去掉原來代碼文件中的 import語句。最后提交。成功后,會顯示下面的頁面表示驗證成功:


    17.jpg

    最后讓我們在不同地址之間流通這個token。我們第一個賬戶已經(jīng)有1000的MFC了。

    先讓我們在創(chuàng)建一個新的賬戶,如下圖:


    18.jpg

    可以看到我們新創(chuàng)建的賬戶 MFC的值是0.


    19.jpg

    在切回我們的第一個賬戶,在transfer 中填入第二賬戶的地址和轉(zhuǎn)入的數(shù)量("0xe4da4CBC744708A6656BeD252f49DF5exxxxxxC97","1000000000000000000")。如下圖:


    20.jpg

    點擊transfer 會彈出彈框讓你確定,點擊sumbit,等待區(qū)塊打包。切換到第二個賬戶,查看MFC余額。可以看到已經(jīng)到轉(zhuǎn)過來的1MFC了。


    21.jpg

    最終我們的發(fā)token的流程已經(jīng)結(jié)束了。但是這還只是第一步,后面我們還需要程序化的執(zhí)行token的充幣,提幣操作。也是一個應(yīng)用若想引入token進來必須要有的功能。后面我會繼續(xù)研究下去,實現(xiàn)用程序來操作token的轉(zhuǎn)讓。

    總結(jié)

    以上是生活随笔為你收集整理的以太坊发token教程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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