2017-07-16 103 views
2

我要創造我自己的Eth令牌,使用復仇錢包,從這個簡單的教程中的代碼given in the ethereum.org website.創建自定義復仇令牌

我沒有編程背景,只知道大約JS基本信息,並需要大量的的幫助。

例如,使用自定義ETH令牌作爲ICO資助基於技術的團隊。如果我理解正確,當某個地址收到ETH(由某人發送給ICO)時,本ICO發出的「合同」會將他的一部分定製令牌發回給他。

這是出現在下面的代碼? 如何編輯ETH和自定義令牌之間的「比率」(例如:您發送1個ETH並接收588個c.tokens - 比例1:588)?

pragma solidity ^0.4.8; 
 
contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } 
 

 
contract MyToken { 
 
    /* Public variables of the token */ 
 
    string public standard = 'Token 0.1'; 
 
    string public name; 
 
    string public symbol; 
 
    uint8 public decimals; 
 
    uint256 public totalSupply; 
 

 
    /* This creates an array with all balances */ 
 
    mapping (address => uint256) public balanceOf; 
 
    mapping (address => mapping (address => uint256)) public allowance; 
 

 
    /* This generates a public event on the blockchain that will notify clients */ 
 
    event Transfer(address indexed from, address indexed to, uint256 value); 
 

 
    /* This notifies clients about the amount burnt */ 
 
    event Burn(address indexed from, uint256 value); 
 

 
    /* Initializes contract with initial supply tokens to the creator of the contract */ 
 
    function MyToken(
 
     uint256 initialSupply, 
 
     string tokenName, 
 
     uint8 decimalUnits, 
 
     string tokenSymbol 
 
     ) { 
 
     balanceOf[msg.sender] = initialSupply;    // Give the creator all initial tokens 
 
     totalSupply = initialSupply;      // Update total supply 
 
     name = tokenName;         // Set the name for display purposes 
 
     symbol = tokenSymbol;        // Set the symbol for display purposes 
 
     decimals = decimalUnits;       // Amount of decimals for display purposes 
 
    } 
 

 
    /* Send coins */ 
 
    function transfer(address _to, uint256 _value) { 
 
     if (_to == 0x0) throw;        // Prevent transfer to 0x0 address. Use burn() instead 
 
     if (balanceOf[msg.sender] < _value) throw;   // Check if the sender has enough 
 
     if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows 
 
     balanceOf[msg.sender] -= _value;      // Subtract from the sender 
 
     balanceOf[_to] += _value;       // Add the same to the recipient 
 
     Transfer(msg.sender, _to, _value);     // Notify anyone listening that this transfer took place 
 
    } 
 

 
    /* Allow another contract to spend some tokens in your behalf */ 
 
    function approve(address _spender, uint256 _value) 
 
     returns (bool success) { 
 
     allowance[msg.sender][_spender] = _value; 
 
     return true; 
 
    } 
 

 
    /* Approve and then communicate the approved contract in a single tx */ 
 
    function approveAndCall(address _spender, uint256 _value, bytes _extraData) 
 
     returns (bool success) { 
 
     tokenRecipient spender = tokenRecipient(_spender); 
 
     if (approve(_spender, _value)) { 
 
      spender.receiveApproval(msg.sender, _value, this, _extraData); 
 
      return true; 
 
     } 
 
    }   
 

 
    /* A contract attempts to get the coins */ 
 
    function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { 
 
     if (_to == 0x0) throw;        // Prevent transfer to 0x0 address. Use burn() instead 
 
     if (balanceOf[_from] < _value) throw;     // Check if the sender has enough 
 
     if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows 
 
     if (_value > allowance[_from][msg.sender]) throw;  // Check allowance 
 
     balanceOf[_from] -= _value;       // Subtract from the sender 
 
     balanceOf[_to] += _value;        // Add the same to the recipient 
 
     allowance[_from][msg.sender] -= _value; 
 
     Transfer(_from, _to, _value); 
 
     return true; 
 
    } 
 

 
    function burn(uint256 _value) returns (bool success) { 
 
     if (balanceOf[msg.sender] < _value) throw;   // Check if the sender has enough 
 
     balanceOf[msg.sender] -= _value;      // Subtract from the sender 
 
     totalSupply -= _value;        // Updates totalSupply 
 
     Burn(msg.sender, _value); 
 
     return true; 
 
    } 
 

 
    function burnFrom(address _from, uint256 _value) returns (bool success) { 
 
     if (balanceOf[_from] < _value) throw;    // Check if the sender has enough 
 
     if (_value > allowance[_from][msg.sender]) throw; // Check allowance 
 
     balanceOf[_from] -= _value;       // Subtract from the sender 
 
     totalSupply -= _value;        // Updates totalSupply 
 
     Burn(_from, _value); 
 
     return true; 
 
    } 
 
}

回答

0

1)獲得定製憑證(金額msg.value/ratioAmount)

2)量傳遞給請求者

你必須使用一個後備支付函數,你應該調用一個函數來處理上面提到的兩個活動。

Send()將調用應付回退函數,後者又調用您將執行實際工作的自定義函數。

檢查solidity文檔中的回退函數。

在DAO事件發生後,必須支付send()。