見出し画像

FlowとCadenceによるスマートコントラクトについて解説してきました

先日GDMVol49の中で、ブロックチェーンのインターオペラビリティによって生み出される新しいゲームのカタチというタイトルでお話をさせていただきました。NFTというワードが非常に注目されている今、ブロックチェーンというテクノロジーを利用する理由を再度考えてもらうことをコンセプトとしてインターオペラビリティを軸として話をしました。後半、NBATopShotで利用されているFlowというブロックチェーン基盤のCadenceという言語についてハンズオン形式で、説明を行いましたが時間があまり足りず説明が不足してしまったことがあるため、ここに改めて掲載したいと思います。(エンジニアだけではなく、ビジネスの方でも優しく読めるように書いていきますので、最後まで読んでいただけると嬉しいです。)

FlowブロックチェーンとCadenceという言語

Flowはオープンワールド向けの次世代ブロックチェーンです。FlowのスマートコントラクトはCadenceというプログラミング言語を用いて書かれています。Ethereumでは、Solidity、LibraではMoveという言語によって書かれていますが、ブロックチェーン基盤によってコントラクトに利用されている言語やそれに付随するSDKもバラバラで、最初は全てを網羅的に学習することは非常に難しいと感じられるかと思います。しかしながら、いくつかの項目によって、分類分けをしながら進めていくと、共通である部分や逆に異なることのよってチェーン独自の特徴や思想が見えてくるなど、様々な発見があります。
例えば、共通という意味では、ERCの話題があります。ERCはEthereum Request for Commentsのことで、本来はEthereumに設計された規格のことですが、多くのコントラクトでERC20やERC721と同じような規格設計が成されています。このようなことを見ると、Ethereumが思考錯誤しながら辿った道筋が、様々なサービスを実現する上での定石となっており、過去のノウハウがERCという規格という形によって様々なチェーンに活かされていると捉えることができます。逆にEthereumとは異なる設計や思想によって、過去の課題を解決しようとしている動きも、新しいチェーンを触ることで見えてくることがあります。

DApperLabsという会社は、数年前に、CryptoKittiesという大ヒットゲームをEthereumという基盤をベースに作成しましたが、取引時の手数料が高いことや、一定時間内に捌けるトランザクションの量が非常に少ないという制約があるなどリリース当時から様々な壁にぶち当たってきました。


CryptoKittiesの開発チーム”Dapper Labs“社は、イーサリアムに技術的な限界を感じ、2019年11月Warner Music Group, Union Square Ventures, a16zらから1120万USD相当の出資を受け、独自ブロックチェーンであるFlowの開発を始めたと言われたとされており、FlowとEthereumを比較することによって、様々な特徴が見えてきます。

シャーディングに頼らない、マルチロール型のノード設計によりスケーラビリティや、アップグレード可能なスマートコントラクト、高速かつ決定論的なファイナリティなどFlowにはここには書き切れないほど、様々な特徴がありますが、ここではCadenceという言語から違いを紹介したいと思います。

多くの人は、新しいチェーンの新しい言語に挑戦する場合Ethereumを参考にするであろうことは先に書いた通りで、ERCなどの規格や、お作法などについてはそのイメージをすることが多いと思います。FlowにおいてSolidityを書いていた人が、最も混乱するであろうEthereumと大きく異なる特徴の一つが、Flowにおけるアカウントモデルです。Flowをブラウザで簡単に実行できるFlowPlaygroundというものがあります。

ぜひ、このリンクから、flow docsを開いて > 左側の一覧にあるFlow Playgroundを開いてみてください。インストールなどは不要で、ブラウザを開くだけでFlowのコントラクトを書く準備が整います。

スクリーンショット 2021-07-15 17.12.35

Playgroundの左側に可愛らしいキャラクターが何個か表現されているのが一番先に目に飛び込んでくると思いますが、まさにこれがFlowの大きな特等であるアカウントモデルを表現しているのではないかと思います。

スクリーンショット 2021-07-15 16.56.35

Ethereumではもともと所有者の情報をひとつのスマートコントラクトの台帳で管理しているため、コントラクトのデータ自体の肥大化、トランザクション肥大など大きな課題がありました。Flowではそれを改め、コントラクトが管理されるのは中央ではなく各アカウントのコントラクト領域であり、ユーザーが自由にNFTにおけるやり取りや、操作を行えるように設計されています。アカウントは、特定のコントラクトを利用したい場合、都度、アカウントが所有するオブジェクトとそのアクセスを制御する Capabilities(実行可能な関数の一覧)を格納し、さらに、その制御について匿名性の高いものはprivate、そうではないものはpublicにリンクを貼ることによって外部から呼び出すことが可能となります。例えば、ゲームのスコアなどゲーム側からユーザーに対してアクセスする場合、ユーザーがCapabilitiesをpublic領域にリンクすることで初めて、運営側から値を確認することが可能となります。Ethereumの場合では、アカウントのアドレスさえ判明すれば、勝手にTokenを付与することが可能でした。過去には、AirDropという仕組みによって、保有しているWalletに謎のトークンやコインを受け取った人もいるのではないでしょうか。Flowでは、事前にSetupAccountの処理の中で、Capabilitiesの格納とリンクの制御を行う必要があり、アカウントに準備を生ない状況では勝手にトークンを受け取るといった操作はできません。

FlowPlaygroundを通じて、fungebleやnon-fungebleトークンの発行から、ユーザー間の送受信など基本的なところまでを試すことが可能となっています。トークンをVaultに包んで渡すなど独自のお作法が存在することによって少しわかりにくく感じる部分もあるのですが、少しずつ読んでいくことである程度全体を把握することはできると思います。

オレオレTopshotを作る

CryptoKitteisが登場した時、そのソースコードがオープンにされたことで多くの人はそれを真似て、CryptoDogsとかCryptoHogehogeを作成することがブームとなりました。今回もNBATopshotのコードはgithubにて公開されており誰でもその構造を真似て自分のTopshotを作成することができる点も非常に嬉しいと思います。

CryptoKittiesのアイテムをFlow上でやりとりするkitty-itemsなども非常に参考になります。

WalletなどについてもDapperが提供するWalletなど使いやすそうです。

Composability(構成可能性)とInteroperability(相互運用性)

NFTというワードが非常に話題になって、技術基盤としても今様々な選択肢が出てきており、ブロックチェーン戦国時代とも言えるほどではないでしょうか。EthereumのLayer2ソリューションであるPolygonやImmutableXなどはEthereumのガス代やスケーラビリティの問題に対して非常に期待されています。一方で、レイヤーが異なるブロックチェーンでは、Composability(構成可能性)の実現が難しいため、高いスケーラビリティを実現しながらも、Composabilityを損なわない設計であるFlowなどはインターオペラビリティという観点では特に重要な意味を持ってくるのではないかと思います。他にも、日本というマーケットではLINEBlockchainなどもマーケットをはじめとした様々な開発が進んでおり、ブロックチェーン基盤の戦いにおいては全くの余談が許さない状況でもあると言えますが、ブロックチェーンでは、いろいろなトレードオフがあるため、不動産で言うところの、安くて、広くて、日当たりの良い部屋というものは存在しません。自身がブロックチェーンのどのような特徴を生かしていプロダクトを作っていくか、何を解決しようとしているかによって、様々な選択肢を持っておく必要があると思います。

この記事が気に入ったらサポートをしてみませんか?