NANJCOINのERC223トークンの作り方
NANJCOINはEthereum(イーサリアム)のERC223設計で作成されたトークンです。
コードはセキュリティも強固でエラーもなく完璧な設計になっています。最近は、NANJCOINをベースにしたトークンが沢山増えてきました。
皆が参考にするぐらい完成されたコードなのです。
機能としては、コントラクトアドレス誤送信防止やロックアップ、任意アドレス凍結、Burn(発行枚数減少)、Mint(発行枚数増加)、AirDrop機能、投票機能など多彩です。
NANJCOINのコードはEtherscanで公開されており、誰でも参照できます。また、MITライセンスのため、NANJCOINと同じコインが作成可能です。
この記事ではNANJCOINをベースとした独自トークンの作成方法を解説します。
NANJCOINの特徴
NANJCOINはERC223準拠のトークンですが、ERC20とも互換性があります。そのため、ERC20トークンでできる機能はNANJCOINでも可能です。
NANJCOINのコードがどのような設計か一つ一つ紹介していきます。実際のコード内容はEtherscanで見てください。
URL:NANJCoinコード
SafeMath
四則演算における予想外のエラーを防止するための機能です。
乗算、除算、減算、加算による安全な演算をサポートします。
Ownable
オーナー権限に関する項目です。オーナーだけが許可された内容を定義しています。
例えば、オーナーアドレスを移行する場合にも使えます。
address
コードには4つのウォレットアドレスが記述されています。
1 2 3 4 5 6 7 8 9 10 11 |
address public founder = 0x1B74~CA14f7; address public preSeasonGame = 0xAeC7cF1da~8E778ff8849ec49; address public activityFunds = 0x72889~241F17077bF; address public lockedFundsForthefuture = 0xB80~a5dabFF; ~中略~ balanceOf[founder] = totalSupply.mul(25).div(100); balanceOf[preSeasonGame] = totalSupply.mul(55).div(100); balanceOf[activityFunds] = totalSupply.mul(10).div(100); balanceOf[lockedFundsForthefuture] = totalSupply.mul(10).div(100); |
トークン発行時に4つのアドレスにそれぞれの%で自動で送られるようになっています。
- founder・・25%
- preSeasonGame・・55%
- activityFunds・・10%
- lockedFundsForthefuture・・10%
FreezeAccount
特定のアドレスを凍結させるための機能です。
例えば、迷惑や規約に違反したようなアドレスは凍結できます。
LookupAccount
一定時間特定のアドレスをロックアップさせる機能です。
これにより、トークンは時間が来るまで移動できなくなります。
運営者がロックアップをすると宣言すれば、実際にLookupAccount機能で正しく行われていることが証明できて、信頼性が増します。
burn
トークンの発行枚数を減らす機能です。
Mint
トークンの発行枚数を増やす機能です。
distributeAirdrop
AirDrop機能により、少ない送金手数料で沢山のアドレスへ一括送付できます。
2種類のAirDrop機能が装備されています。
- 設定したトークン枚数を複数のアドレスへ一括送付する機能
- 複数のアドレスへそれぞれ異なるトークン枚数を一括送付する機能
例えば、100人に1000枚づつ一括送金したり、それぞれ違う枚数を一括送金したりできます。
これはオーナーだけでなく、誰でも使うことができます。
collectToken
特定のアドレスからトークンを収集する機能です。
autoDistribute
他の人がガスを消費して運営者のアドレスからトークンを手に入れる機能です。
コード内ではdistributeAmount=0になっているため初期設定では機能はしません。
例えば、distributeAmount=1で、decimals=8(小数点の桁数が8)に設定した場合はトークンを0.00000001枚取り出せます。
どのように使うかと考えると投票機能のように応用できます。
このようにNANJCOINは様々なアイデアが沢山盛り込まれた優れたトークンです。
作成方法
作り方はトークン名や発行枚数を変えるだけで簡単に作成や発行ができます。
1.作成するには「Remix:browser-solidity」と「METAMASK」が必要になります。
Remix:browser-solidityの使い方は関連記事を参考にしてください。
2.Remixのバージョンを「0.4.18+commit.9cf6e910」に変更して、「Enable Optimization」にチェックを入れます。
Enable Optimizationはコードを最適化するための項目です。
3.Etherscanで公開されているNANJCOINのコードを貼り付けます。
4.コード内のアスキーアートは不要ですので削除します。
5.表記や「contract」、「function」の名前を変えます。 ここでは「Bitcoin」にしました。
1 2 3 4 5 6 7 |
/** * @title Bitcoin * @author Bitcoin * @dev Bitcoin is an ERC223 Token with ERC20 functions and events * Fully backward compatible with ERC20 */ contract Bitcoin is ERC223, Ownable { |
1 |
function Bitcoin() public { |
6.トークン名や発行枚数を変更します。
1 2 3 4 |
string public name = "BItcoin"; string public symbol = "BTC"; uint8 public decimals = 8; uint256 public totalSupply = 21e6 * 1e8; |
- name・・トークン名
- symbol・・トークンの略式記号
- string public constant AAcontributors・・アスキーアートを作った人という意味ですので不要です。削除しています。
- decimals・・小数点の桁数です。一般的にトークンは8か18が殆どです。初期設定では8にしていますが、この部分を変える場合は totalSupplyとdistributeAirdrop内に記述されている「1e8」を変える必要があります。例えば、decimalsを18にしたのであれば、「1e18」です。
- totalSupply・・発行枚数。「21e6」で2100万枚になります。eは0の数を意味します。例えば、1憶枚なら「1e8」です。
7.4つのアドレスに分配する機能は管理が大変なため削除します。必要な場合は削除せず使っても構いません。
1 2 3 4 |
address public founder = 0x~Cf7; address public preSeasonGame = 0xAa~8849ec49; address public activityFunds = 0x79~7077bF; address public lockedFundsForthefuture = 0x~bFF; |
1 2 3 4 5 6 7 8 |
function NANJCOIN() public { owner = activityFunds; balanceOf[founder] = totalSupply.mul(25).div(100); balanceOf[preSeasonGame] = totalSupply.mul(55).div(100); balanceOf[activityFunds] = totalSupply.mul(10).div(100); balanceOf[lockedFundsForthefuture] = totalSupply.mul(10).div(100); } |
削除後は次のようなコードになります。
1 2 3 |
function Bitcoin() public { balanceOf[msg.sender] = totalSupply; } |
トークンを発行時に全ての枚数をオーナに送る内容です。シンプルなコードになりました。
8.「decimals」の小数点の桁数を変更した場合は、AirDrop機能があるdistributeAirdrop内のコードを2か所変える必要があります。変更してない場合は不要です。
1 |
amounts[j] = amounts[j].mul(1e8); |
9.「autoDistribute」内にはactivityFundsが5か所あります。これはautoDistributeを実行をactivityFundsのウォレットアドレスに指定しています。「owner」に変えます。
1 2 3 4 5 6 7 8 9 10 11 |
function autoDistribute() payable public { require(distributeAmount > 0 && balanceOf[owner] >= distributeAmount && frozenAccount[msg.sender] == false && now > unlockUnixTime[msg.sender]); if(msg.value > 0) owner.transfer(msg.value); balanceOf[owner] = balanceOf[owner].sub(distributeAmount); balanceOf[msg.sender] = balanceOf[msg.sender].add(distributeAmount); Transfer(owner, msg.sender, distributeAmount); } |
以上でオリジナルのトークンが完成しました。後は、発行すれば完了です。
サンプルコードはGithubにあります。参考にしてください。
AirDrop機能の使い方
distributeAirdrop機能を使うと、一回の送金で沢山の人にトークンを送ることができて、送金手数料も節約になり便利です。
1.Remix:browser-solidityにトークンのコードを貼り付けます。「Start to compile」をクリックして、コードを更新します。
2.METAMASKと連携します。「At Address」内にトークンのコントラクトアドレスを記述してクリックします。
3.トークンの情報が表示されます。
4.AirDrop機能は2種類あります。
1つ目が複数のアドレスに同じ枚数を送金します。
2つ目が複数のアドレスにそれぞれ異なる枚数を送金します。
記述方法は次のようになります。ウォレットのアドレスはサンプルですので変えてください。
1 |
["0x312a803760212681e56425c9ed207bafca1a301d", "0x11fa3C05755c146B2216b00AbcBF8bC6569D3fec"], 1000 |
1 |
["0x312a803760212681e56425c9ed207bafca1a301d", "0x11fa3C05755c146B2216b00AbcBF8bC6569D3fec"], [1000, 2000] |
5.「distributeAirdrop」をクリックするとMETAMASKが立ち上がりますので、確認をクリックして送金が完了します。
*AirDrop機能で1度に発送できる最大数は約200アドレスです。それ以上の一括送金は失敗や処理されない場合があります。
カスタマイズ
NANJCOINを元にカスタマイズしたコードを解説します。
NANJCOINはERC223とERC20の両方とも機能を保有しています。しかし、ERC223により準拠するならば、必要のないERC20機能を削除するのも良いかと思います。
以下のような関数やイベントを削除します。
- function transferFrom
- function approve
- function allowance
- その他event
これで、より軽量化されたコードが完成します。サンプルコードは以下のURLを参考にしてください。
なお、トークン作成コードはオリジナル版でもカスタマイズ版でもどちでも問題なく動作します。
また、カスタマイズしたコード内では「totalSupply」だけではなく「initialSupply」も追加しています。 有ってもなくても良いのですが、「initialSupply」とは初めに発行した枚数を意味します。
発行後に枚数を増減する予定があるなら、「initialSupply」を記述しておくのも親切だと思います。
1 2 3 4 |
function Bitcoin() public { totalSupply = initialSupply; balances[msg.sender] = totalSupply; } |
作り方のまとめ
NANJCOINをサンプルにしてオリジナルトークンの作り方を解説しました。初心者の方でも簡単にできると思います。
NANJCOINの最大のメリットはERC223に準拠しつつ、旧来のERC20設計も合わせ持つハイブリット型のトークンである点です。つまり、どちらにも対応できるのです。
国内、海外問わずNANJCOINをベースにしたトークンが増えているのは様々な利点があるためです。
トークン自体はEOSでもNANJCOINでも作ることは簡単です。大切なことはどうやって価値を高めていくかです。NANJCOINの魅力はトークンだけでなく、コンセプトやコンプライアンスが優れており、運営機関の透明性も高いようです。
今後とも更なる技術の発展や将来性が見込めますね。
なお、トークンを発行する場合はガス価格が 5Gweiで0.02ETH程掛かります。
まずは、テストネットワークで試しながら、本番のメインネットワークで作成してください。