スマートコントラクトの中身を確認する方法を調べてみた
スマートコントラクトの契約内容を確認したいと思ったんですが方法がわかりませんでした。
[スマートコントラクト 内容確認]などとgoogle先生に聞いてみてもヒットしません。[スマートコントラクトとは]みたいなサイトばかりヒットします。
なので地道に色々と調べてみました。
スマートコントラクトとは
いろんな定義があって混乱しているようです。
スマートコントラクトとは何か? Smart Contractの定義 - Qiita
ここでは以下の解釈で話を進めます。
- BitcoinはBTCという仮想通貨を送信することができる
- 全ての送信履歴は10分ごとにブロックに記録され、それが連なっていく(チェーン)
- 履歴の内容は[AさんからBさんにxBTCを送った]というようなもの
- スマートコントラクト = 上記の仕組みに契約(または合意)を付与したもの、またはその契約内容
- 契約内容はブロックに記録されており、誰でも確認する事ができる
ICOに見るスマートコントラクト
ICOとは、Initial Coin Offeringの略称であり、新たに仮想通貨(暗号通貨)を発行し、それを世界中の投資家に向けて販売することで資金調達を行うものだ。クラウドファンディングの新たな形態とも言える。
ALISのICOに参加する方法をすっごくカンタンに言うと、以下のようになります。
- ERC20準拠のウォレットからALIS発行者へ(直接)イーサリアム(ETH)を送信する
- 条件に合致すればすぐにALISトークンが送り返されてくる
この条件とは[ICO受付時間中である事]と[ICO申し込み総数が上限に達していない]というくらい。
[ERC20準拠のウォレット]でなければトークンを自動で送り返す機能が実行されない。
つまりこの[条件]に合致すれば[トークンを送り返す]という[契約]が実装されており、それがスマートコントラクトという技術で実現されている。
Solidity
Solidityとはイーサリアムのスマートコントラクトを実装するためのプログラム言語です。
この言語で契約内容が記されています。
なぜ契約内容をプログラム言語で書く必要があるのでしょうか。
これは僕の想像ですが以下のような理由だと思います。
いわゆる契約書に記すように平文テキストで書いたら良さそうなものですが、それではコンピューターが理解できないので自動化できません。
そしてプログラムにすることで内容を厳格化できます。
契約書には曖昧な表現や真偽のわからない表現が入り込みがちですが、プログラムなら重要な項目が真なのか偽なのかハッキリさせることができ、どちらでもないという値はエラーになります。(実装内容による)
プログラムをテストすることで契約内容の書き洩らしを防ぐこともできて、適正な契約内容を記述できるというわけです。
(あくまで想像です)
契約内容を確認する
さて、スマートコントラクトの肝は[誰でも確認できる]という所です。
そこでALISの契約内容を確認してみましょう。
ALIS公式によるとgithubに書いてあるそうです。
https://github.com/AlisProject/contracts
GitHub(ギットハブ)はソフトウェア開発プロジェクトのための共有ウェブサービスであり、Gitバージョン管理システムを使用する。(中略)2009年のユーザー調査によると、GitHubは最もポピュラーなGitホスティングサイトとなった。
githubを簡単に説明すると、プログラマの為の[公開ファイル置き場]です。
ここに[AlisCrowdsale.sol]というファイルがあるので見てみます。(solはSolidityのファイルであることを示す拡張子です)
(21行目から) /* * Token exchange rates of ETH and ALIS. * Could not add to Crowdsale.json because of EVM said stack too deep. */ uint256 constant RATE_PRE_SALE = 20000; uint256 constant RATE_WEEK_1 = 2900; uint256 constant RATE_WEEK_2 = 2600; uint256 constant RATE_WEEK_3 = 2300; (略) uint256 currentRate = rate if (isPresale()) { // before 2017/09/01 02:00 UTC currentRate = RATE_PRE_SALE; } else if (now <= icoStartTime.add(1 weeks)) { // before 2017/09/08 02:00 UTC currentRate = RATE_WEEK_1; } else if (now <= icoStartTime.add(2 weeks)) { // before 2017/09/15 02:00 UTC currentRate = RATE_WEEK_2; } else if (now <= icoStartTime.add(3 weeks)) { // before 2017/09/21 02:00 UTC currentRate = RATE_WEEK_3; } (以下略)
ICO開始後1週目は(1ETH=)2900ALISというレートになるよ、という感じでしょうか。
どうやらこれがスマートコントラクトの内容みたいですね。
と、ここまで調べてふと思いました。これgithubに書いてあるんですよね。
スマートコントラクトの内容はイーサリアム(ETH)に書いてあるはずです。githubに書いててもそれがイーサリアムと紐づけられているという証拠にはなりません。イーサリアムのサーバーにでもこのファイルを置いているのでしょうか。というかブロックチェーンなのでブロックに書いてあるはずですよね。
ブロックを調べるには…どうすればいいのでしょうか。
ALIS公式はICOの手順をこちらにまとめています。
ALISトークンをMyEtherWalletで購入する方法について
この中にICOで送信先となるイーサリアムのアドレスが書いてあります。これを調べてみましょう。
[(通貨名) Explorer]と検索したら仮想通貨のブロックを確認できるサービスがヒットします。
今回はetherscan.ioで調べてみました。サイトの右上にある検索窓にイーサリアムのアドレスを入れると参照できます。
ALISのアドレスを入力して出てきたのがこちらです。
Ethereum Account 0xEA610B1153477720748DC13ED378003941d84fAB Info
[Contract Source Code]の所にsolidityのコードが書いてあります。
「これがスマートコントラクトの実装やー!本丸やー!」と御馳走を前にした彦摩呂のようにテンション高くなったんですが…
RATE_WEEK_1 = 2900
の部分がどこにも見当たりません
[ Contract ABI]も[Contract Creation Code]も探してみたのですが、どこにも[2900]の文字は見当たりません。
あと残るは[Swarm Source]の部分。
bzzr://6632ee91760d9835df23b8f4db74eb3d71b0065f283ecc8bdb9de6ca66e9e3dd
という謎のURLみたいなものが書いてあります。
Swarmとは
結論から言うとわかりませんでした。ただ検索して以下のサイトが見つかりました。
Welcome to the swarm documentation! — swarm 0.2rc5 documentation
どうやらイーサリアムのブロックに入りきらない情報を置く場所のようです。
それがサーバーなのかブロックチェーンなのかはわかりませんが、[bzzr://]で始まるURLのようなもので検索することができ、そこにスマートコントラクトの詳細が書いてある、ということのようです。
このURLみたいなものがイーサリアムのブロックに記録されているので内容を保証する、ということのようです。
(あくまで僕の想像です)
結論
[スマートコントラクトの中身は誰でも見ることができる]ということなのですが、敷居は高いです。
今回は[1ETH=2900ALIS]という[契約]を確認することができませんでした。
しかし逆に考えればこの敷居の高さが現状であり、これからどんどん敷居が下がってくることによって仮想通貨が身近なものになる = 仮想通過の価値が上がる、と解釈(期待)することもできます。
僕は仮想通貨には懐疑的でありますが、今回の調査で少しだけ仮想通貨との距離が近づいたような気がします。
と、謎のポエムを書いたところで終わります。
おまけ
Swarmについて調べてる時に以下のICOを見つけたんだけど、これ関係あるんですかね?