クリプト

ALISのICOスマートコントラクトを読む①

kenjiszk's icon'
  • kenjiszk
  • 2018/05/06 14:41
Content image

ALISがβ版公開ということで何か書きたいなあと思いネタを探していたのですが、ALISといえば全てのプロジェクト進捗を公開していることが有名ですので、公開されているソースコードのICO用に書かれているスマートコントラクト部分を読んでみることにしました。

github : https://github.com/AlisProject/ico-contracts


ALISトークン実装部分

まずはトークン実装部分から。

ico-contractsはtruffleを使用しているようなので、contracts以下にsolidityで書かれたスマートコントラクトがあります。

https://github.com/AlisProject/ico-contracts/tree/master/contracts

この中の、AlisToken.solがトークンの本体ですが、実体は16行(2018.5現在)。

https://github.com/AlisProject/ico-contracts/blob/master/contracts/AlisToken.sol

ポイントになるのは、MintableTokenとBurnableTokenを継承しているところでしょうか。

contract AlisToken is MintableToken, BurnableToken {

MintableToken

Mintは造幣局と訳されたりしますが、文字通りトークンを後から増やすことができる仕組みです。

import 'zeppelin/contracts/token/MintableToken.sol';

openzeppelin-solidityに書かれていますのでちょっとのぞいてみます。

https://github.com/OpenZeppelin/openzeppelin-solidity/blob/master/contracts/token/ERC20/MintableToken.sol

StandardTokenを継承していますので、ERC20に準拠したトークンであることがわかります(ERC20の説明は省略)。

実装自体はかなり単純で、mint関数にトークンを追加数アドレスと追加量を渡すと、トータルトークン数(totalSupply)、追加したアドレス(balances[_to])にトークンを追加、イベントの発火(アプリケーション側にmintしたことを伝える)をしているだけです。

function mint(address _to, uint256 _amount) onlyOwner canMint public returns (bool) {
  totalSupply_ = totalSupply_.add(_amount);
  balances[_to] = balances[_to].add(_amount);
  emit Mint(_to, _amount);
  emit Transfer(address(0), _to, _amount);
  return true;
}

onlyOwnerはトークンの作成者のみがこのトークンを増やせるというためのもので、これがないと誰でもトークンが増やせるのでトークンが無価値になります。

canMintはトークンの作成者がもうトークンは増やさないと決めた時に立てるフラグのようです。finishMinting()を呼び出すことでフラグが立てられます。これも間違えて実行してしまうとトークンが一生増やせないので相当実行前には検証が必要なものになります。

modifier canMint() {
  require(!mintingFinished);
  _;
}
function finishMinting() onlyOwner canMint public returns (bool) {
  mintingFinished = true;
  emit MintFinished();
  return true;
}

BurnableToken

BurnableTokenの方は、独自で実装されているようです。(つまり、openzeppelin-solidityには実装がないということでしょうか?)

https://github.com/AlisProject/ico-contracts/blob/master/contracts/lib/BurnableToken.sol

Burnは文字通り燃やすことですので、トークンを消滅させるということですね。これも当たり前ですが一度燃やすと一生返って来ません。

Burn部分だけ取り出すと、Burnしたい量をインプットにして、インプットが正の数であれば(ここで負の数が通ってしまったら逆にトークンが増えてしまうので)、このコントラクを実行している人のアドレスから指定した量だけトークンを減算しています。ちなみにこれはonlyOwnerになっていませんが、まあ好き好んで自分のトークンをBurnする人もいないから必要ないという判断でしょうか。

function burn(uint _value) public {
  require(_value > 0);
  address burner = msg.sender;
  balances[burner] = balances[burner].sub(_value);
  totalSupply = totalSupply.sub(_value);
  Burn(burner, _value);
}

ちなみに、イーサリアムのようにアカウントベースで残高を記録している場合には、上記のようにbalancesから値を引くだけで良いですが、ビットコインのようにUTXOベースの場合、Burnしたい UTXOを誰も秘密鍵をもっていないアドレスに送るみたいなことが必要になります。


ということで、AlisTokenはトークン発行者がトークンを増やせる仕様になっていて、かつ、トークンを指定した分だけ消せる仕様になっていることがわかりました。

次回は、クラウドセール部分を読みます。

ALISのICOスマートコントラクトを読む②

公開日:2018/05/06
獲得ALIS:57.89
kenjiszk's icon'
  • kenjiszk
  • @kenjiszk
エンジニア。ブロックチェーン勉強中。

投稿者の人気記事
コメントする
コメントする
こちらもおすすめ!
Eye catch
クリプト

Uniswap v3を完全に理解した

Like token Tip token
18.92 ALIS
Eye catch
クリプト

【第8回】あの仮想通貨はいま「テレグラム-TON/Gram」

Like token Tip token
69.90 ALIS
Eye catch
クリプト

コインチェックに上場が決まったEnjin Coin(エンジンコイン)コインを解説

Like token Tip token
21.49 ALIS
Eye catch
クリプト

UNISWAPでALISをETHに交換してみた

Like token Tip token
19.40 ALIS
Eye catch
クリプト

ブロックチェーンの51%攻撃ってなに

Like token Tip token
0.00 ALIS
Eye catch
クリプト

Uniswap(ユニスワップ)で$ALISのイールドファーミング(流動性提供)してみた

Like token Tip token
59.99 ALIS
Eye catch
クリプト

Polygon(Matic)で、よく使うサイト(DeFi,Dapps)をまとめてみた

Like token Tip token
235.30 ALIS
Eye catch
クリプト

2021年1月以降バイナンスに上場した銘柄を140文字以内でざっくりレビュー(Twitter向け情報まとめ)

Like token Tip token
38.10 ALIS
Eye catch
クリプト

スーパーコンピュータ「京」でマイニングしたら

Like token Tip token
1.06k ALIS
Eye catch
クリプト

Eth2.0のステークによるDeFiへの影響を考える。

Like token Tip token
43.10 ALIS
Eye catch
クリプト

【DeFi】複利でトークンを運用してくれるサイト

Like token Tip token
41.81 ALIS
Eye catch
クリプト

クリプトスペルズで入手したMCHCを引き出す方法

Like token Tip token
196.20 ALIS