イーサリアムの独自の暗号通貨





過去1年間の世界の暗号通貨市場の時価総額は、60億ドル(2016年1月)から280億ドル(現在)に成長しました。 2017年の初め以来、暗号通貨市場は約1.5倍に成長しています。 すでに100を超える異なる暗号通貨が取引所で取引されています。 独自の通貨を発行する大規模な組織コンソーシアム。 国家でさえ、国家の暗号通貨を作っています。 ブロックチェーン技術は、ほぼ誰でも独自の暗号通貨を起動できるレベルに達しているため、この記事ではこれを行います。 コインを作成する最も簡単な方法は、イーサリアムベースのスマートコントラクトです。







現時点で最大の暗号通貨取引所を訪れた場合、リストの一番上には、GNT(ゴーレム)、REP(Augur)などの通貨があります。











ビットコイン(最初で最も有名な暗号通貨)とイーサリアム(2番目に人気があり、資本化された通貨)と同じリストに載っていますが、それらは古典的な意味での独立した暗号通貨ではありません。 これらは、イーサリアムブロックチェーンに基づいた暗号トークン(トークンまたはアセット)です。







そのようなトークンのリストを見つけることができます。たとえば、 ここでは 、それらの統計を見つけることができます。







通常、このようなトークンは次の場合に必要です。一部の企業は、内部通貨を必要とする製品をリリースしたいと考えています。 この会社は、ICO(Initial Coin Offering)も実施したいと考えています。 トークンを投資家に事前販売して、プロジェクトの資金を調達します。 そして、これらのトークンが表示されます。 ここでの利点は、ブロックチェーンとスマートコントラクトの利点である透明性、セキュリティ、配布から直接生じます。







たとえば、そのような最初のゴーレム企業の1つを見てください。 その本質は次のとおりです:コンピューティングパワーが必要な場合、Amazon(Azure、Googleなど)に行くことはできませんが、別のネットワークメンバーからコンピューターをレンタルし、GNTトークンを支払います。 したがって、コンピューターをレンタルしてGNTを入手することもできます。 さらに、これらのトークンは、ネットワーク内で使用することも、取引所で販売することもできます。 一部のトークンは、配当をもたらすか、会社の製品に関連する問題についての選挙で投票権を与えることができます(これはスマートコントラクトで実装されます)。







1,000,000,000トークンを発行するゴーレムは、現在のレートで約32,800,000ドルである820,000 ETHを引き付けることができましたが、ICOの時点でレートは3倍悪化していました。







次に、イーサリアムに基づいて、同様の暗号通貨(トークン)を作成する方法を説明します。







現在、 ここで説明されているERC20は標準と見なされています。







通常、インターフェイスは次のようになります。







/* * ERC20 interface * see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 { uint public totalSupply; function balanceOf(address who) constant returns (uint); function transfer(address to, uint value); function allowance(address owner, address spender) constant returns (uint); function transferFrom(address from, address to, uint value); function approve(address spender, uint value); event Transfer(address indexed from, address indexed to, uint value); event Approval(address indexed owner, address indexed spender, uint value); }
      
      





そして、実装は次のようなものです。







 contract StandardToken is ERC20 { string public constant name = "Token Name"; string public constant symbol = "TKN"; uint8 public constant decimals = 18; mapping (address => mapping (address => uint)) allowed; mapping (address => uint) balances; function transferFrom(address _from, address _to, uint _value) { var _allowance = allowed[_from][msg.sender]; // Check is not needed because safeSub(_allowance, _value) will already throw if this condition is not met // if (_value > _allowance) throw; balances[_to] +=_value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); } function approve(address _spender, uint _value) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); } function allowance(address _owner, address _spender) constant returns (uint remaining) { return allowed[_owner][_spender]; } function transfer(address _to, uint _value) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); } function balanceOf(address _owner) constant returns (uint balance) { return balances[_owner]; } }
      
      





さらに詳細に分析します。







これは現在発行されているコインの数です:







 uint public totalSupply;
      
      





残高については次をご覧ください。







 function balanceOf(address who) constant returns (uint);
      
      





トークンを他の誰かに転送します。







 function transfer(address to, uint value);
      
      





私たちは、他の誰かのアカウントから使うことができるコインの数を調べます。 これらの権限は、以下で説明する承認機能によって管理されます。







 function allowance(address owner, address spender) constant returns (uint);
      
      





私たちは他のトークンを翻訳しますが、他の誰かが利用できます:







 function transferFrom(address from, address to, uint value);
      
      





誰かがトークンを使用できるようにします。 ただし、これらのトークンは残ります。 トークンの使用を許可されるアカウントの数に制限はありません。







 function approve(address spender, uint value);
      
      





誰かがトークンを翻訳し、誰かがトークンの使用を許可したイベント:







 event Transfer(address indexed from, address indexed to, uint value); event Approval(address indexed owner, address indexed spender, uint value);
      
      





トークンのフルネーム:







 string public constant name = "Token Name";
      
      





トークンの短い名前:







 string public constant symbol = "TKN";
      
      





小数点以下の桁数。 ETHには18個ありますが、異なる番号を付けることができます







 uint8 public constant decimals = 18;
      
      





辞書アドレス->トークンの数:







 mapping (address => uint) balances;
      
      





他の誰かが利用できるトークンの辞書:







 mapping (address => mapping (address => uint)) allowed;
      
      





基本的には以上です。 しかし、この形式では、スマートコントラクトは役に立ちません。 現在では、トークンの作成は提供されず、トークンの数は常にゼロになります。







1,000,000トークンを作成し、スマートコントラクトの所有者に転送するコンストラクターを追加します。 また、すべての数学演算にオーバーフローチェックを伴うことは害になりませんが、ここでは見逃します。







 function StandardToken(){ balances[msg.sender] = 1000000; }
      
      





トークンを購入できる機能を追加しても問題ありません。 簡単にするために、トークンを1対1のレートでミントします。 1 ETHに対して、トークンを1つ請求します。

次のようになります。







 function mint() payable external { if (msg.value == 0) throw; var numTokens = msg.value; totalSupply += numTokens; balances[msg.sender] += numTokens; Transfer(0, msg.sender, numTokens); }
      
      





これをブロックチェーンで公開することは残っています。 その後、これらのトークンを他のアカウントに転送することが可能になります。







トピックに関する役立つリンク:







トークンの統計

アクティブおよび今後のICOのリスト








All Articles