エーテル坊財布で自分のデジタル通貨を発行する


以太坊財布には契約開発機能が付いており、これは最も簡単なスマート契約開発方式であるはずだ.
しかし、エーテル坊財布を初めて起動すると、ネットワークを同期してテストするblockが必要で、これは時間がかかります.エーテル坊財布にはメインネット以外の3つのテストネットがリストされていますが、Rinkebyだけが使えます(RopstenとSoloネットの正しい起動方法を探していないのかもしれません).
Rinkebyテストネットワークは、まずテストコインを取得する必要があります.テストコインを取得するサイト接続は、次のとおりです.https://faucet.rinkeby.io/
コインを取得する方法は、自分のアドレスをGoogle+またはフェイスブック(必要)の文章に送り、この文章のアドレスを上のURLに入力してコイン額を選択すると、自動的に贈られます.
テストコインを手に入れると、自分のデジタル通貨を発行することができます.エーテル坊のデジタル通貨もスマート契約です.公式文書を参照:
https://www.ethereum.org/token#the-code
コンパイラが更新されたため、公式ドキュメントのスマート契約コードが正常にコンパイルできません.以下は私が修正してコンパイルできるものです(今日は2018.1.12ですが、後でコンパイラがアップグレードされてもコンパイルできない可能性があります):
pragma solidity ^0.4.17;

contract MyToken {
    /* This creates an array with all balances */
    mapping (address => uint256) public balanceOf;
    
    string public name;
	string public symbol;
	uint8 public decimals;
    
    event Transfer(address indexed from, address indexed to, uint256 value);
        
    /* Initializes contract with initial supply tokens to the creator of the contract */
    function MyToken(uint256 initialSupply, string tokenName, string tokenSymbol, uint8 decimalUnits) public {
        balanceOf[msg.sender] = initialSupply;              // Give the creator all initial tokens
        name = tokenName;                                   // Set the name for display purposes
        symbol = tokenSymbol;                               // Set the symbol for display purposes
        decimals = decimalUnits;                            // Amount of decimals for display purposes
    }
        
    function transfer(address _to, uint256 _value) public {
        /* Check if sender has balance and for overflows */
        require(balanceOf[msg.sender] >= _value && balanceOf[_to] + _value >= balanceOf[_to]);

        /* Add and subtract new balances */
        balanceOf[msg.sender] -= _value;
        balanceOf[_to] += _value;
        
        /* Notify anyone listening that this transfer took place */
        Transfer(msg.sender, _to, _value);        
    }
}
    

注意公式ドキュメントreturnとthrowの違いについて説明します.
To stop a contract execution mid execution you can either return or throw The former will cost less gas but it can be more headache as any changes you did to the contract so far will be kept. In the other hand, 'throw' will cancel all contract execution, revert any changes that transaction could have made and the sender will lose all ether he sent for gas. But since the Wallet can detect that a contract will throw, it always shows an alert, therefore preventing any ether to be spent at all.