7月12日に開催された「TOKYO BLOCKCHAIN TECH MEETUP 2022」の“ブロックチェーンエンジニア勉強会”について3部に分けてレポートします。
森下 真敬(もりした まさたか)氏
株式会社Ginco CTO
岐阜工業高等専門学校にて、電気・電子回路の知識を学び、その後の豊橋技術科学大学・大学院では自然言語処理,人工知能, Deep Learningについて研究。卒業後は株式会社アカツキに入社し、ゲームサーバーのインフラ開発に従事した。2017年に株式会社Gincoを共同創業し最高技術責任者として、主にブロックチェーンインフラの開発を担当している。
荒川 貴将(あらかわ たかまさ)氏
株式会社メルカリ Tech Lead / Flow Tech Ambassador
大阪大学大学院修了後、富士ゼロックス株式会社へ入社。複合機と連携するアプリケーションや文書管理サービスの開発に携わる。2019年 株式会社メタップスへ入社。デジタルアイテムのマーケットプレイス miime を開発。2021年 コインチェック株式会社による miime 買収後、SRE と新規事業開発に従事。2021年8月 株式会社メルカリへ入社し、現在に至る。
垣谷 昌孝(かきや まさたか)氏
ConsenSys Inc Strategic Sales Director – Japan
ING生命保険(現:NN生命保険)でキャリアを始め、その後ICAPでFXブローカーの道に進む。ヘッジファンドのセールスマネージャーの経験を持ち、ICE(Intercontinental Exchange-SuperD)の日本オペレーションの運営を指揮した後、Murex社で大手銀行/証券会社向けにリスク管理システムの販売に着手。直近では、オラクル社で金融機関向けの基幹システムを推進、暗号通貨に特化したファンドなど立ち上げ、ブロックチェーン市場の更なる探究心を追求し、ConsenSys社に入社。
ブロックチェーンノードの運用について
森下氏:株式会社Gincoの取締役の森下と申します。よろしくお願いいたします。
我々Gincoはブロックチェーンのインフラサービスを提供している会社です。簡単にご説明させていただきますと、開発プラットフォームでblockchainBASEというものがあり、その上側にエンタープライズサービスというものが乗っています。
主なユーザーは暗号資産業界です。暗号資産交換業者などにエンタープライズウォレットを提供したり、NFTを扱う業者、ゲーム会社や出版社、音楽業界の方々にNFTBaseという開発プラットフォーム部分を提供しております。
あとはセキュリティトークン周りです。不動産や、債券、そういったところが扱うウォレットやインフラというものを提供しております。元々はコンシューマ向けのウォレットでGinco Walletというものをやっていて、今後コンシューマ向けも拡げていく予定です。ブロックチェーンに関しては、かなり様々なものを開発しております。
本日は『ブロックチェーンノードの運用について』です。今日の皆さんは手慣れていらっしゃるようですので初歩的な部分は割愛させていただき、『ブロックチェーンノード運用のつらいところ』についてお話させていただきます。
我々はいろいろな会社からブロックチェーンノードの運用委託を受けております。大体100ノードぐらい運用しておりまして、まずインスタンスのスペックですが、とても必要なスペックが高くてお金がかかります。CPUでいくと16〜32コア、バリデータノードになるとさらに64コアぐらい必要な場合もあります。メモリは32〜64GBで、キャッシュで使い潰してしまうので、あればあるほど早くリクエストできるのですが、その分お金がかかります。ディスクに関しては、チェーンによっては10TBなど、フルアーカイブのノードを立てるとそれに応じて必要になります。常にデータが増えていくので、定期的にサイズを増加させないといけないというのが手間なところです。1ノードあたり大体8〜16万円程度で、今円安でめちゃくちゃ価格が上がっているので、すごくつらい状態です。
あとはバージョンのアップデートです。先程のセッションでも話題に挙がりましたが、常に見続けていないといけないというのがあります。特にAction Requiredなアップデートが不定期で起こるというのは大変で、ブロックチェーンノードは基本的には後方互換がないバージョンアップが多くてハードフォークが起きます。
また、パッチリリースも多くて、大規模なアップデート後には結構バグが含まれています。「ここを間違えていたよ」という感じでパッチリリースがすぐに出てくるので、その準備をしたりもします。あとはマイナーなプロジェクトになってくると、サイレントアップデートがあります。Action Requiredなアップデートなのに全然リリースノートもなくて「これ必要だったんだ」といったようなものが、あとになって分かるということもあります。
特徴的なのはステートフルなアプリケーションであるため、サーバーレスにできないところがあると思います。アプリケーションとDBの部分が密結合になっているので、サーバーレスアーキテクチャが使えないところがつらいところです。あとは一般的なロードバランサーが使えないところです。ノードごとに返す値は変わりますので、同期状況が違います。その場合に同じクライアントからのリクエストは同じノードに振り分け続けないと取れるデータが変わってくるので大変なことになります。
あとは同期問題です。これが一番大変ですが、最新まで同期されないということがよくあります。なぜかは大体分からないのですが、ピアシードにつながっているかどうか、ピアシードがそもそも生きているかどうかが重要です。マイナーなプロジェクトだとピアシードが死んでいることも多いので、その辺りは運営者にこのシードは生きているのか聞く必要があります。
次は「同期が止まる」です。これもなぜか同期が止まります。なぜかは分からないですが、何もしなくても同期再開する場合もありますが、再起動したり、ピアの追加をしなければいけません。
あとは「同期が巻き戻される」場合です。再起動をした場合にデータの不整合があると、スナップショットまで巻き戻されてしまって、あまり上手くできていないところだと、また0から再同期みたいなこともあります。
『Gincoでのノード運用』をどのように行っているかを説明します。弊社ではGoogle Cloud、Azureを使っていまして、その中でKubernetesやIstioを使ってブロックチェーンノードの運用をしております。
アーキテクチャの例では、WAFのクラウドフロントが入っていて、その後ろにIngressのような一般的なWebサーバーがあって、その後ろにGOでoceanusと書いてありますが、これが弊社で自作しているロードバランサーです。これはノードの同期状況を確認したり、リクエストの量を制限してうまくロードバランシングしてくれるものを自作しています。それぞれがネットワークごとにあって、認証情報はCosmos DBにあります。これはアーキテクチャの1つの例ですが、最近であればGCP(Google Cloud Platform)やAWSを利用してマルチクラウドにして運用しています。
ノード運用Tipsとしては、Infrastructure as Codeがとても必要だと思います。ノードのビルドはDockerfileで管理し、ブロックチェーンごとにChartを用意して、環境ごとの設定を管理しています。あとはSingle Source of Truth(GitOps)で、CI/CDというのはGitをベースとして実行できる環境を心がけることで、新しいブロックチェーンに対応する時も簡単に再現が可能になります。弊社では今20種類以上のブロックチェーンノードを立てていますが、このようなことが可能になります。あとはリリースされたノードクライアントのバージョンを指定するだけで自動的にビルドされたり、コンテナにpushされたり、CI/CDが重要になってくると思います。
最後にGincoでは今、各プロダクトのエンジニアを募集しております。どのように開発しているのかWantedlyのストーリーにまとめて記事を出しておりますので、ご覧いただけると我々の開発の哲学を知っていただけると思います。
Flowのプログラミング言語 Cadence
荒川氏:『Flowのプログラミング言語 Cadence』というタイトルで発表させていただきます。私はAraと言います。現在FlowブロックチェーンのTech Ambassadorという立場で活動しています。また、メルカリ/メルコインという会社でブロックチェーンエンジニアとしても活動しています。最近触っている技術スタックをざっと紹介すると、GCPやGo言語、Next.jsなどを触ったりしており、あとはFlowブロックチェーンのスマートコントラクトのCadence言語やSolidity、最近ではp5.jsとかSolana、WalletConnect V2.0を触っています。
早速ですが「Cadenceとは?」です。CadenceはFlowというブロックチェーンのスマートコントラクト用のプログラミング言語で、現在のところFlowのみで使われている言語です。
ここで皆さんに「ケイデンス」という読み方と意味をぜひ覚えていただきたいと思います。Cadenceというのは抑揚やリズムをつける、リズミカルに動く、という意味の単語です。Flowという波の上に乗っている、その波を乗りこなすようなイメージだと思っています。Cadenceのロゴが今はなくて、最近コミュニティで自分が作ってみたものがこちらです。よろしければ、これを皆さんも使っていただきたいと思います。
Cadenceの特徴ですが、Cadenceというのは新しく作られた言語です。文法はiOSアプリなどを作るときのSwiftの言語に影響を受けていて、その言語の思想や考え方がRustだったり、今はないのですが、旧Libraというブロックチェーンで開発されていたMoveという言語から影響を受けています。Cadenceの特徴として、開発者体験を重視しているところが一番大きいです。コードを安全・セキュア・親しみやすくする工夫がたくさん盛り込まれている言語です。Cadenceは、もともとCryptoKittiesを作っていたチームのSolidity言語を深く知っている開発者が設計しています。彼らが本当に言語に触れていて、いろいろなところに工夫を感じます。
FlowブロックチェーンとCadence言語でよくある誤解で、ぜひとも皆さんに覚えて帰ってもらいたいことがあります。
1つ目がFlowのCadence言語を使ってスマートコントラクトを作ると「NFTに特化している」、「NFTしか扱えない」という誤解をよくされますが、これは間違いです。Solidity言語でできることはほぼほぼCadence言語でもできます。少しやり方を変えないといけないのですが、汎用的なコードを作れます。しかも簡潔に作れるというところが特徴です。
2つ目はFlowがプライベートブロックチェーンや、コンソーシアムチェーンと思われている方が多いことです。1つ例を挙げると、現在Flowのチームが動かしているコンセンサスノードは1/3以下です。Flowのブロックチェーン開発のDiscordやフォーラムのやり取りを見るとよく分かりますが、Flowの開発者の人たちは分権化を重要視しています。これをメインストリームに適用していくために時間をかけて徐々に分権化していくことを選択したチェーンです。この部分の思想は本当に強いというところを、ぜひとも知っていただきたいのです。
3つ目がこれも2番目に関係しています。FlowにはMetaMaskみたいなノンカストディアルのウォレットがないとよく言われます。これもウォレットの仕様が徐々に標準化が進んでいて、最近だとLilicoというウォレットや、今後もいろいろなウォレットが出てくるということが想定されます。
折角ですのでCadenceという言語のコードが実際どんなものかを見ていただきたいと思います。ここに示した上の方にあるのがスマートコントラクトのコードで、下がこのスマートコントラクトを操作するためのトランザクションのコードです。
Cadenceはトランザクションにも自分でコードを書く性質の言語になっています。Contractの中で面白いのが「pub resource NFT{}」と書いてあるところです。このリソースを自分で定義しますが、これはクラスみたいなイメージで定義をして、今は中身は何も書いていませんが、いろいろなプロパティを入れることができます。これをcreateという命令を使うと、このリソースをインスタンス化することができます。そうすると、このブロックチェーンの中に1つだけリソースのオブジェクトが存在することになります。この下のトランザクションでは、このコントラクトの中のリソースをcreateする関数を呼び出して、リソースのオブジェクトを受け取ります。トランザクションを実行している人のアカウントのストレージ領域というのが用意されていますので、この中にリソース・オブジェクトを保存するというコードです。
最後にCadenceとSolidityの違いについて、大きなところを説明したいと思います。端的に言うとここに示した図のような違いがあります。左の方がCadence言語でNFTやブロックチェーン上のリソースを表現したものです。1人1人のアカウントの領域の中にNFTやその他いろいろなアセットのリソースのオブジェクトが保存されている構造になっています。Solidityはマップが1つあり、NFTの場合であれば番号と、どの人が持っているかというアドレスがマップに書かれている、このような違いがあります。Cadenceのほうが直感的ということがよく分かるかと思います。特にこれは普通のNFTを1個作るだけならば、どちらでも良いような気がしますが、こういうものを組み合わせてより複雑なコントラクトを作っていこうと思った時に、直感的であるということがよりコードをシンプルにしてバグや脆弱性をなるべく生まないようなものにできるというところが大きいと思います。
まとめですが、Cadenceがスマートコントラクトプログラミングの課題を解決するために新しく作られた言語であるということ。Flowはパブリックチェーンで徐々に分権化していっているということ。最後にCadenceを使うと直感的なコードが書けるということです。もっと知りたい方の資料のリンクを共有いたしますので、ぜひご覧ください。ありがとうございました。
【参考URL】
登壇資料:https://docs.google.com/presentation/d/1XkDDKwr2QHzrqRHbHZjoxMSwekNHGPiXikQ41gqltuM/edit#slide=id.g1365ffb9f14_0_0
Flow:分権化が進む一般人のためのブロックチェーン | https://medium.com/flow-japan/flow-normie-blockchain-db055030518f
Cadence チュートリアル「Hello World」解説 | YouTube
https://www.youtube.com/watch?v=i6q94kIi9kQ
Beginner Cadence Course(日本語 翻訳中)
https://github.com/flow-japan/beginner-cadence-course-ja
Consensys Trusted systems Powered by Ethereum
垣谷氏:こんばんは。ConsenSysの垣谷と申します。本日はお招きいただきまして、ありがとうございます。皆さん、本当に新しく面白い取り組みをされているので、もしかしたら私のプレゼンはあまりテクニカルではないのでつまらないかもしれないですが『ConsenSysとは何をやっているか』を説明をさせていただければと思います。
まずConsenSysとは、お馴染みの図の上の方にアプリケーションレイヤーとしてウォレット、MetaMaskを運営している会社でございます。左下にQuorum。これは元々JPモルガンが金融機関向けに作ったプライベートチェーンで、私どもがIPを取得して、これをHyperledger Besuと合わせて、今財団に運用を任せています。これは完全オープンソースでIPは持っていない状態です。
私達のもう1つのフラグシップの「Infura」についてお話します。ブロックチェーンの読み書き全てブロックチェーンで何かしらMetaDataやデータのトランザクションがある時に、開発者がInfuraを使っていると思いますが、ノードの管理、ノードマネージメントあとはいわゆるJSONとかRPCのエンドポイントを繋げてネットワークを構築するような取り組みもしくは、IPFSを活用してFilecoin、Protocol Labsが展開しているような分散型のデータストレージもInfuraの中に入っております。
先程もInfuraかAlchemyという完全な覇権争いがありました。弊社で差別化できるところは、コミュニティの多さと2017年からやっているパイオニア的な存在であることです。40万人ほどのコミュニティを持っておりますので、その都度例えばSLAとかクエリを上げる時にはQAのレスポンスや、何かしらお困りのときにサポート体制が潤沢に完備しているという点です。
ここはもう忘れていただきたいのですが、以前はSTOプラットフォームであればCBDC(中央銀行デジタル通貨)やいろいろな取り組みをしていました。今は完全にプライベートでしたり、サイドチェーンの取り組みはやっていないので基本メインネットのパブリックチェーンに特化したビジネスモデルと考えていただければと思います。
上にDiligence、OpenZeppelin同様の行動監査やTRUFFLE、Hardhatと似たようなサンドボックス環境でスマートコントラクトPoC(概念実証)で展開していくなど、新しくDeFi向けの機関投資家向けの青い表記のMetaMaskも展開しております。これにはKYC(本人確認)やAML(アンチマネーロンダリング)が入っており、後ほどご紹介しますが、NFTを保管してポートフォリオ運営できるような機関投資家向けのMetaMaskも展開しています。
弊社ではいろいろなユースケースをやっています。トレーサビリティの案件でLVMHやPRADAとも実績があります。主に金融機関が多いですが、CBDCの発行を政府と共同でやっていたりもします。いろいろな取り組みでこういったパートナーを組んでいて、Microsoftとは特に非常に良好な関係を築いています。QuorumというのもQBSというblockchain as a service、BaaSです。これをMicrosoftのAzureベースで展開しておりまして、Microsoftから完全にIPを取得して展開しているのでQBSが唯一プライベートチェーンのソリューションとして残っているイメージです。先ほど申し上げたコミュニティの数は圧倒的にAlchemyと比べて多いので、Alchemyは使わないでください(笑)
こちらは数字の羅列でこれだけのことをやってきましたという自慢話です(笑)
私どもの創業者のJoseph Lubinは、2014年からConsenSysを立ち上げているのですが、もともとVitalik氏と一緒のコー・ファウンダーの1人です。約10名でイーサリアムを立ち上げたので、非常にイーサリアムに偏っている会社です。世界最大手のイーサリアムプロトコルベースのソフトウェア会社と認識していただければと思います。トークン発行も1,000億以上です。
今回ご紹介したい新しい取り組みがありまして、先日のNFT.NYCへ行かれた方はいらっしゃいますか?実はここで発表していまして、NFTのSDKです。Infura上でNFTを、開発者向けに作ったものですが、書くときにはJSON APIを作り、デプロイするスマートコントラクトを作り、mint用のスマートコントラクトを作ります。データのやり取りや、NFTとのインターアクションが非常に煩雑になってしまう、ボイラープレートコードと呼びますが、ローコードとは真逆で「非常に最小限のタスクなのにものすごいコードが多くなってしまう」といったこと軽減するために、Infura上でNFT APIの開発者向けの柔軟性を担保したものを確立しました。既にBeta版が走っております。これはMMI(MetaMask Institutional)という青い方の機関投資家向けのものです。ポートフォリオでNFTをこのような形で管理できるものとInfura NFTをドッキングしています。
あとはMetaMask上でSnapsという、開発者向けにいろいろなツールを展開していますが、大手企業の実証実験は全くやっていません。本当に技術者向けの、より一層Web3.0のコミュニティを作り上げるためにこういった取り組みをしているので、ぜひ覚えていただきたいと思います。MetaMask Snapsは独自のAPIを構築して新しいマイクロサービスや、アプリケーションレイヤーを構築できる開発者向けに作ったものです。
実例では最近勢いがあるStarkNetと共同で、ERC20トークンをStarkNet上で送受信できたり、ミラーサイトDeep Linkingといい、元々持っているアカウントをトランザクションベースでサポートできるようなものです。シームレスな、インタラクションができる、もしくはFilecoinのトランザクションを受信できたり、Filecoinのキーを使用してクリプトグラフィの署名とメッセージを展開したりできる、このようなカスタマイゼーションができるものです。ぜひ皆様もMetaMask上で何かしらセキュリティを完備したり、先ほども保険を作られている会社がいらっしゃいましたが、最大手の保険会社と今共同でMetaMask上のDeFiのヘッジのインシュアランスプロトコル、インシュアランスなどを展開しようと思っています。いろいろな取り組みが実現可能だと思います。
最後に締めたいのはWeb3.0。皆さんBridgeやマルチチェーンなど色々と触れられていましたが、やはり一番はInteroperablility、Connectivity、Composabilityだと思います。皆でハーモナイゼーションしてユニティを組んでWeb3.0を構築していくと、やはりコミュニティが大事です。技術者なくしてWeb3.0は確立しないので、皆様ご支援いただければと思います。
Web掲載のない非公開求人もございます。詳細は以下の転職相談よりお問い合わせください。