コントラクトのセキュリティ
週末にブロックチェーン勉強仲間とのもくもく会があり、コントラクトのセキュリティに関して、Ethereum Smart Contract Best Practicesを読み学習しました。
※この記事では特に気になった部分のみ載せておりますので、Solidity開発者の方は本家サイトの一読をオススメします。
Ethereum Smart Contract Best Practicesとは
『Ethereum Smart Contract Best Practices』は、ConsenSys社によって維持管理されているEthererumのSolidity開発者向けのセキュリティに関するドキュメントです。
日本語訳もあります。
Ethereum Smart Contract Best Practices(日本語訳)
また内容としては、少しでもブロックチェーンやEthereumのSolidityに関する知識をもっている方向けの内容となっていると思いますので、初学者の方には下記の書籍をオススメします。
こちらにもベストプラクティスで謳われているセキュリティに関して、攻撃者のコードなど、実演コードレベルで記載してありオススメです。
僕はこの書籍を先に読んでいましたので、より理解が進みました。
推奨される実装について
・関数名に信頼性を明記する(外部呼び出しする関数等にはUntrustedを)
・Transferよりもwithdraw型を推奨する
・pragmaのハットは外してバージョンをロックする
・コントラクトから呼び出されることを意識する
既知の攻撃方法について
・call.value()による送金後に残高を更新している(The Dao事件)
・nowはブロック生成時間となる為、Minerによって操作される恐れがある
・uintが大きな値に近づくか検討する必要がある
・ガスLimitを考慮してもループ処理は危険(複数ブロックに分かれる場合もあり)
リスクの備えについて
・失敗に備える(一般的なアプリ開発と同じ)
・防止策としてサーキットブレーカー等の実装(Paused実装)
・更新可能なコントラクト(decentralaizedとの兼ね合いで議論が必要)
診断ツール
・Mythrilが一番使いやすそう
https://consensys.net/diligence/mythril.html
インストールしてすぐに使えました。
(GithubにはDockerfileがあるのでDockerも可能です。)
$ brew update
$ brew upgrade
$ brew tap ethereum/ethereum
$ brew install leveldb
$ brew install solidity
$ pip3 install mythril
診断用に継承元も含めて一纏めにしたコントラクト.solが必要ですが、
こちらもtruffle-flattenerを使って作成できます。
$ npm install truffle-flattener -g
$ truffle-flattener contracts/JunoToken.sol > Combined.sol
Mythrilでの検証も簡単です。
$ myth -x Combined.sol:JunoToken > analysis.txt
実際に僕が作成したコントラクトで検証しましたが、Orverflowに関する指摘がいくつかありました。。精進します。。
その他
まだ読めていませんが、Loom Networkさんもコントラクトのセキュリティに関して纏めておりましたので要チェックです。
以下、検証ツールのところで参考にさせていただきました。
http:// http://www.blockchainengineer.tokyo/entry/security-mythril-erc20
ブロックチェーン活動を振り返る
先週末にブログを週末に更新しますって言っておきながら、
更新できておりませんでした。(反省)
週末は完全にDApps開発に没頭していました。
さて、僕の空白の時間、だいたい3月くらいからですが、何をしていたかをカレンダーを見て振り返ってみました。
まず、参加した勉強会やイベントがこちら。
3月
・13日 Blockchain EXE #10 ブロックチェーンによるモビリティの進化
・16日 blockchain.tokyo #6
・23日〜25日 Startup Weekend Tokyo Blockchain
4月
・4日 Proof of Tokyo #1
・11日 CryptoAge x Loom Network Solidity Meetup
・13日 Hi-Ether #2
・16日 Ethereum Meetup
・23日 ALIS クローズドβ版公開記念イベント
・25日 Startup Weekend Tokyo Blockchain コミュニティナイト
・26日 Plasma #1
5月
・17日 Hi-Ether #3
・ビットコインとか勉強会 #18
その他に始めたこと。
3月24日 TechAcademy ブロックチェーンコース
5月 キヨスイさんのDappsサロン加入
平野さんの暗号通貨・ブロックチェーンサロン加入
振り返ってみると、いろいろなイベントへ参加していました。
気づけばEvernoteにメモが溜まっているわけです。
とても学んでいました。(なぜブログでアウトプットしなかった…)
そもそも僕のここ最近の僕のブロックチェーンへの熱量の発端はなんでしょうか。
振り返ってみれば、3月後半に参加した
Startup Weekend Tokyo Blockchainで間違いない。
このイベントでは、僕はあまりに何もできなかったのです。
最初の1分ピッチも何も伝えられなかったし、ブロックチェーンを使ったサービスで考えられることが少なすぎました。最後のピッチまでチームで頑張った、やれることはなんでもやりました。(急遽のアイコンデザインとか笑)
けれど、このイベントでの悔しさはとても火種になっています。
そして、このイベントで得た出会い、そしてブロックチェーンの可能性の大きさをとても感じました。これはとてつもない宝物になっています。
同時に、もっと知識をつけたいと思いました。
自分も何か作ってみたいと激しく思いました。
そして、もっと仲間がほしいとも思いました。(僕は内向的なので、とても意外)
というわけで、今に至るわけですが、とりあえずの目標は自分のプロダクトを何かつくってみること!そのために、時間があればDapps開発をしています。
(TechAcademyももうすぐ終わりなので、それまでに結構形にしたい..)
どんなDappsを作っているかというと、、せっかくなのでトークンを作ってみたく、ERC20は書籍を読んで作ったので、次はERC721だ!って、なかなかプロダクトのアイデアが浮かばずに苦しんだのですが、
結果として、『CryptoHaiku』(猫ではなく、俳句です!)を作っています。
最初は俳句って、歴史上で本当にあの人が詠んだのかな?って、僕は歴史に疑念をもっているのですが、日本の文化である俳句をしっかり残していきたいなと思いまして、ERC721で表現できるんじゃないかと思ったわけです。
ただ、俳句だけだとオリジナリティ無いなーって感じて、その俳句を詠んだ景色とかも一緒に載せられたら面白くないかなって思い作成に至りました。
僕はこれまでサーバーサイドをメインでやってきた人間です。フロントなんて、Silverlightっていうレガシーな技術しか使ったことありません。
モダンなJavascriptもReactとかReactNativeをすこしかじったくらいでして、
とても苦戦しています。
ちなみに、今回の開発言語は以下となっています。
フロントエンド:Nuxt.js、Bulma
ブロックチェーン:Solidity、Truffle、
その他:Ipfs
なぜNuxt.jsを選んだか?それはたまたま技術書店できなっていて、(ALISでも利用されている今熱いフロントエンド)って思っていたので、ぜひやってみようと思ったしだいです。
まだぜんぜん安定していなくて、デザインとか雑すぎるし、ひとさまにおみせできるレベルではないのですが、
近日中に公開できるように頑張ります!!
(近日っていつですかね?)
所属しているキヨサロに、ERC721でのDappsを超速で進めている方がいらっしゃるので、めっちゃ陰ながら自力で追いかけている感じです。
引き続きDapps作りながら、ブロックチェーン関連の勉強を進めていきます!
(ブロクでのアウトプットも忘れずにいきたい!)
ブロックチェーンに夢中です。
ブログのタイトルを変更しました。
前のタイトルが何だったのかもおぼえてませんが(え
『ブロックチェーンエンジニアを目指して』でいきたいと思います。
今年はアウトプットもするぞって言っておきながら、まったくブログを書けていなかったのですが、時間があればブロックチェーンアプリケーション(以下、Dapps)の開発を進めています。(できあがったら紹介したいです。)
ただやっぱり、学んだことはアウトプットしておきたいので、今週末はここ最近を振り返ってみたいと思います。
ということで今日はこのくらいでと行きたいところですが、
一昨日くらいの記事にすごく感銘を受けたので共有です。
やっぱりブロックチェーンはすごい、世界を変えていく技術だとあらためて感じています。
以前のブログにて、寄付事業に関しては共有しておりましたが、
寄付以外にも人道支援のプロジェクトが活発化しています。
本当にすごいことだと思います。
この流れは続いていくと思いますし、僕も学んでいるブロックチェーンを使って社会に役立てていけるようなサービス作りがしたいです。
ますます、ブロックチェーン、Ethereumのことを学びたくなってきました。
NPOとブロックチェーン
きっかけ
先日、プロブロガーのイケダハヤトさんが、『ブロックチェーンがNPO業界に与える5つの変化。』と言う記事を書いておりました。
僕自身、NPOとブロックチェーンの関わりに注目していたこともありとても共感を受けました。
僕がブロックチェーンに魅力を感じている部分は、どんなに立場が違ったり、過去の境遇に関係無く、それらの影響を受けずに平等にテクノロジーのパワーを分配できるポテンシャルがあると考えているからです。
そして、それはよりソーシャルな領域に生かすことができると考えています。
その1つが、NPOなどの寄付事業です。
ブロックチェーンの特徴である透明性は、寄付事業にとても効果的です。
寄付事業を透明にするメリット
現在の寄付事業における不透明性は、せっかく寄付したいと思っている人の気持ちにブレーキをかけてしまっているのが現状です。
実際に寄付したお金が本当に正しく使われているのか、寄付したお金にトレーサビリティが無いことで寄付したい気持ちがあったとしても躊躇してしまいます。
すべてが悪意のある慈善では無いと思いますが、ほんの一握りでも悪意に寄付金を集めている団体があるだけで、寄付する側としても不安にかられてしまいます。
これに対して、ブロックチェーンの透明性は有力な解決策となります。
ブロックチェーンの代表格であるBitcoinは、通貨の取引が公開されており、不正な取引が無いか参加者同士で取引の検証を行うことができます。
この特徴を寄付事業に関しても適用することで、寄付事業に対して信頼を持つことができると考えています。(悪意のある事業を検証により淘汰できます。)
寄付したことが公開され、寄付金にトレーサビリティが備わることで、寄付金が正しく使われたかを確認できるようになります。
また、寄付金により支援先に効果があったことが共有されれば、寄付を行なっていない方に対しても、寄付に興味を促す機会を増やすことになります。
それは、NPOにおけるマーケティング費を抑えることに繋がります。
ブロックチェーンを利用した寄付事業
既に寄付事業をブロックチェーンで解決しようというプロジェクトはかなりの数が立ち上がっています。(海外含めて)
寄付プラットフォーム「dona」 - 世界をちょっとよくするコイン
AidCoin - The token for the new era of giving
特にデジタル通貨を利用した寄付金を募るプロジェクトが多いですが、
これはブロックチェーンが今のところはデジタル資産に対してのみ有力とされているからでしょうか?
たしかに、リアルなモノに対して透明性や非改ざん性を保つことは難しいと思います。モノに対してIDを貼り、そのIDをネットワークにて管理するのが一つの方法だと思いますが、ネットワークの先にあるモノが見えるわけではないので…。
ただ、100パーセント防ぐことは難しいですが、そのネットワークをコミュニティとして管理することで、悪意のある行為は減らせるのではないかと思います。
ブロックチェーンと寄付事業への期待
僕が期待するブロックチェーンを活用できる寄付事業は献血です。
恥ずかしながら先日久しぶりに献血へ行ったわけですが、献血することでアニメのキャラクターグッズが貰えたり、お菓子やキャンペーン?品をもらえたり、マーケティング費用がものすごく掛かっているのではないかと感じました。
このマーケティング費を落としつつ、献血を募集するには何かしらのゲーミフィケーション的な要素も必要ではと感じています。
その有効な手段としてブロックチェーンがあると思います。
献血に行ったらトークンがもらえて、トークンを使って支援もできるし、別用途として自分の娯楽に使えるなど。
今なら話題性もあるので、献血に望む人をかなり増やせるのではないかと思いますが、投機的になりすぎてしまっては寄付事業の目的自体が異なってきてしまうため、その兼ね合いは難しいと感じています。
ただ寄付事業にブロックチェーンを活用することで得られるメリットは、とても大きいということは確かだと思います。
Blockchain EXE Code #2 Hyperledger Composerの回に参加しました。
本日、Blockchain EXE Code #2
『Hyperledger Composer を使ったブロックチェーン実装』に参加してきました。
これまで僕が経験があるブロックチェーンは、Ethereum で Solidity だけです。
その為、今回の目的としては、Hyperledger Composer の入門知識を取得、
Hyperledger と Ethereum の適用領域の違いを把握ができることをゴールとしました。
まず、勉強会のメインである Hyperledger Composer ですが、
ブラウザ上で Hyperledger を簡単に実行できる環境となっており、ボタンをポチポチするだけで必要なオブジェクト郡が自動作成され、ブロックチェーン環境が簡単に作れます。
ブラウザ画面内で雛形もいくつか用意されているので、実用モデルを学びながらコーディングすることが可能です。
Ethereum もブラウザ上の開発環境として Remix がありますが、
たしか雛形までは無かったような‥?
Hyperledger を簡単に学ぶ環境として、とても整っている印象を受けました。
composer-playground.mybluemix.net
次に Hyperledger と Ethereum の適応領域に関してですが、参加者の方からの質問のやり取りでわかったことがあります。
Hyperledger の場合、実際のブロックチェーン稼働レベルまで行った場合に環境面の敷居が高いそうで、そこにはIBMクラウド環境が必要だったりと、エンタープライズ向け感がとてもでています。
(そもそもブロックチェーンのメリットが欠けるのではないかと思いましたが。。)
ただ、それはあくまでもエンタープライズ向けにセキュアな利用を目的としている為なんですよね!
実際、Hyperledger に通貨は無く、ネットワークへの参加者も制限される仕組みです。
その為、ブロックチェーン自体の非改ざん性も合わせることでこれまで以上に堅牢なアプリケーションを構築できるのだそうです。
まさに銀行など高セキュリティが必要なエンタープライズには最適ではないかと思います。
対して Ethereum は、トランザクションには通貨がかかり、誰もが参加することが可能なパブリックなネットワークです。それ故に構築されるアプリケーションは一種の経済圏の構築に似ているんじゃないかと思っています。経済圏で利用される通貨が、パブリックが故に外界へもどんどん広がり、時にゲーミフィケーション的な要素を含んだ利用を通して、一層の価値を生み出していきます。
まさにコミュニティ向けになっているのだと思います。
今回、Hyperledger に触れたことで、エンタープライズにおけるブロックチェーンのメリットってなんだろうっていう疑問が少し溶けた気がします。
そもそも概念的にそれってブロックチェーンって呼べるのかという考えもありますが、
適材適所にブロックチェーンが広まることで、新しい応用も今後出てくるのではないかと思います。
BlockchainEXEイベントに参加しました。
昨日、初のBlockchainEXEイベントに参加してきました。
『Blockchain EXE #9 ブロックチェーンが築く経済圏 将来展望と課題』
過去いろいろなイベントに参加しましたが、かなり学びのあるイベントでした!
都合が合えば懇親会参加したかったが、今回は残念。。
LTがあったみたい?なので、公式ブログで掲載されたら嬉しいです。
今回最も学びになったのは、株式会社アイリッジ川田さんによるお話で、
「飛騨信用組合さるほぼコイン」など地域や特定領域における通貨のお話でした。
さるほぼコインは、以前WBSで拝見したことがありましたが、今回詳しくお話をお聞き出来て本当に素晴らしいものだと改めて感じました。
さるほぼコインの利用にあたり、コインのチャージはまだ窓口での入金にとどまるなど、クレジットカード等は今後対応とのことですが、逆にその段階性が地域にはあっているのかもしれないと感じました。
というのも、たしかにテクノロジーが好きな方からすれば、スマホで入金できるやブロックチェーン利用って言葉は馴染み深いし、インパクトが有ってぜひ使いたい!という気持ちになるかもしれません。
しかし、テクノロジーをあまり知らない方々(なんて表現したらいいかわからないので、失礼な言葉になってしまったら申し訳ないのですが、、)の場合、いきなり決済の方法が極端に変わってしまったり、使われているテクノロジーがという話は知ったことではないし、逆に受け入れがたいものとなってしまうと思います。
前に、地域にテクノロジーを導入する場合は、とことんシンプルなインターフェースが好ましいという話しも聞いたことがあるのですが、やはりそうなのかなとも改めて感じました。行き過ぎたテクノロジーは逆にインターフェースを複雑化させてしまいます。
僕は学生の頃の研究にて、電子通貨に興味があり、中でも地域通貨があれば一定内の地域にとって外部との差別化を図れ、身内を盛り上げることができるのではないかと考えたことがありました。(どこかの教習所?合宿では、合宿中にいいことをすると専用紙幣がもらえたような話を思い出しました。)
今回のさるほぼコインのお話を聞いて思ったのは、テクノロジーの発展で域内の方以外も味方にすることができるようになったため、より地域を盛り上げる意識にもつながったのかなと思いました。
外部からすれば、「なんかあの地域盛り上がっているな」って感じで、気になる=何かしたくなるような気持ちになるのではないかと。ある意味嫉妬的な。
話はブロックチェーンの話に変わりますが、
この外部からすれば嫉妬したくなるような地域を作ることで、そのタイミングこそブロックチェーンの活かすことができる機会なのかなと思います。
ブロックチェーンでは、特定のコミュニティでトークンを盛り上げる、いわゆるトークンエコノミーを作ることが有力な力だと思いますが、これはそのコミュニティ内だけが盛り上がっているだけではあまり意味がなくて、外部にもファンが居るからこそブロックチェーンを使ったトークンエコノミーを活性化させることができるのではないかと思います。
つまり、、ブロックチェーンの技術って、特定のコミュニティ内だけで活かせるかというと、それではそのコミュニティが崩れたら終わり(全チェーンの崩壊)なわけで、外部にもそのコミュニティに共感してくれる方がいるからこそ、チェーンが途切れずコミュニティの外へも繋がって行き、コミュニティが崩れたとしても、外部のファンの力(外部へ繋がっていたブロック)を得て、コミュニティの絆は途切れずに本当の繋がりの連鎖を生じさせることができるのではないかと思います。
それにしてもオフィスコインは、僕の会社にもぜひ導入して欲しいと思いました。
自社ではオフィスグリコを導入していますが、意外と100円って財布に無いんですよね!他でカード決済が多くなったせいか、余計に小銭が作りづらいのです!!
ブロックチェーン学習の始め方
ブロックチェーン学習ですが、じわじわと進めています!
学習を始めていく中でいくつか課題が発生しましたが、今回は"学習の始め方"に関してです。
まず学習の取っ掛かりですが、人によっては最初からプログラミングしてイメージを広げる方もいるかもしれませんが、僕の場合は実装のイメージが沸かないと混乱しそうだった為、まずはブロックチェーンの実装イメージの把握から入りました。
イメージ把握にあたり、いくつか書籍だったり適用事例を読みましたが、一番役に立ったのはスタートアップウィークエンド主催のブロックチェーン・アイデアワークショップです。
ワークショップとして、数人のグループに分かれて、『◯◯×ブロックチェーン』のアイデアを議論し、アイデアピッチに臨みます。
皆さん、それぞれブロックチェーンに対する思いも違う為、自分と違った考えを持っている方もいらっしゃり、自分に無い観点でブロックチェーンを考えられました。
また、思いもよらなかったアイデアにも出会えて、余計にブロックチェーンに対する期待が高まりました。
僕の場合、同じグループの方で、ブロックチェーン・アプリケーションで、既存のビジネス向けアプリケーションを置き換えられるか、そのメリットは何かという考えを持っている方もおり、そこまでの観点を持っていなかった僕としてはとても勉強になる機会でした。
今月も開催されるようですので、実際に実用アイデアから考えてみたいって方は是非参加してみてください。
また、いろいろとブロックチェーンとは何かが腑に落ちてきたところで、実際にアプリケーションに触れてみたいと思い、ようやくスマートコントラクト開発を学習しています。
今はSolidityを触っていますが、ブロックチェーンの仕組みから丁寧に説明してくれているので、『ブロックチェーンアプリケーション開発の教科書』はとてもオススメだと思います。