ⓘ このドキュメントは、Flow blockchainによるDApp(分散型アプリケーション)構築の始め方ドキュメントの完全翻訳ページです。
flow developers
Flow blockchainは、Crypto Kitties、NFT(ERC-721)を開発してきた日本にも馴染み深いDieter Shirleyという人が新たに開発したブロックチェーンであり、Flow blockchainのスマートコントラクトを作成するプログラミング言語の事をCadenceといいます。
米金融大手VISAは、NFTの人気が最も高かった2021年に出したホワイトペーパーの中で、NFTに相応しいブロックチェーンとしてイーサリアムとFlowを挙げています。今も「Visa whitepaper for NFT in 2021」でGoogle検索するとその資料[1]が出てきます。
ESportsで参考になるスマートコントラクトは?
それだったらaiSportsさんのです。aiSports創立者は実力派のCadenceエンジニアで、Flow公式がコンクールなどで優秀と取り上げています。Flow公式が優秀と取り上げているので、Discordで問い合わせ時もこちらのスマートコントラクトを引用するといいかもしれません。
aiSportsのスマートコントラクト(の一つ)はこちら: https://contractbrowser.com/A.4fdb077419808080.aiSportsEscrow
このURLはスマートコントラクトのコードを閲覧できるサイトで、検索する場所にaiSportsと入れると以下画像のように7つ出てきます。どれもESportsの参考になるコントラクトだと思います。
クリックすると各ページに飛びます
- Why Flow
- Differences vs. EVM
- Flow Protocol
- Advanced Concepts
- FLIX (Flow Interaction Templates) (トランザクションの安全強化を行う)
- Guides
-
Account Linking (スマートコントラクトを活用して親子アカウントの関係を作る)
- Building Walletless Applications Using Child Accounts
- Working With Parent Accounts (親子アカウントを作成した後のクエリー一覧)
-
Account Linking (スマートコントラクトを活用して親子アカウントの関係を作る)
-
Core Smart Contracts
- Fungible Token
- Flow Token
- Service Account (Flowの運営オペレーター用アカウント)
- Flow Fees
- Staking Table
- Epoch Contracts (エポックのコード)
- Non-Fungible Token
- NFT Metadata (ViewResolver, MetadataViews, NFTカタログの説明)
- NFT Storefront (OpenSeaのようなマーケットプレイスシステムを作れる)
- Staking Collection
- Account Linking
- EVM
- Burner
Cadenceの言語仕様を学ぶ
Cadence(version1.0) は、Flow blockchain 上でスマートコントラクトを作る際の現行のプログラミング言語です。ブロックチェーン上で作成したアカウントに紐づくストレージに、Pathという論理パスを作り、そこにスマートコントラクトから作成したリソースやCapabilityを保存し、スマートコントラクトに対してリソース経由でアクセスすることで、デジタル通貨などを条件に沿ってやり取りできるようになります。
Flow blockchainの特徴は"easy to build" です。スマートコントラクト言語をjQueryみたいにスラスラとブロックチェーンに繋がるコードを書けて、ウォレットとの繋がり方やコマンドラインツールも、一貫して一つの理念のもとに開発の手が止まらないように書きやすく作られています。一度コードを書いてみるとその美しい文法スタイルから何て書きやすいプログラミング言語なんだ、と感じるはずです。Swift言語に酷似していますが、JavaScript(TypeScript)エンジニアとも相性が良いスマートコントラクト言語です。
ウォレットで作成したアカウントには無料でストレージが割り振られており、自由に保存できます。そこに保存されるのは、コインやNFTなどの資産、スマートコントラクト、そして鍵です。ストレージの持ち主にしかこれらを移動させることができませんが、その内容を変更するトランザクションというのがあり、これを安全にプログラミングしてシステムを構築することができます。そして実際に移動します。コピーは不可能です。スマートコントラクトのデプロイ者はこの仕組みを使って世界中で事業を行うことができます。
Cadence v1.0のコードサンプルについては開発方法をご覧ください
- Introduction
- Why Use Cadence?
- Tutorial
- 1. First Steps
- 2. Hello World
- 3. Resource Contract Tutorial
- 4. Capability Tutorial
- 5.1 Non-Fungible Token Tutorial Part 1
- 5.2 Non-Fungible Token Tutorial Part 2
- 6. Fungible Token Tutorial (トークン送金方法のサンプル)
- 7. Marketplace Setup
- 8. Marketplace (⇦Capability削除に関する説明はここ)
- 9. Voting Contract
- 10. Composable Resources
-
Language Reference
- Syntax
- Constants and Variable Declarations
- Type Annotations
- Values and Types(⇦組み込み型の全関数およびプロパティ)
- Operators
- Functions(⇦関数)
- Control Flow
- Scope
- Type Safety
- Type Inference(⇦型推論)
- Composite Types (⇦構造体はここ)
- Resources
- Access control (⇦Entitlementはここ)
- Capabilities
- Interfaces
- Enumerations
- Intersection Types (⇦インタフェースを型にします)
- References
- Imports
-
Accounts(⇦アカウント)
- Paths
- Storage(⇦アカウントストレージ) (Storage操作のEntitlementの説明)
- Capabilities (Capability操作のEntitlementの説明)
- Keys (Key操作のEntitlementの説明)
- Contracts (Contract操作のEntitlementの説明)
- Inbox (⇦Capabilityを譲渡します)
- Attachments
- Contracts(⇦スマートコントラクト)
- Contract Updatability
- Transactions(⇦トランザクション)
- Events
- Core Events
- Run-time Types
- Built-in Functions(⇦疑似乱数の生成はここ)
- Environment Information
- Crypto (Flowで使われている暗号の詳細説明)
- Type Hierarchy
- Glossary(⇦記号)
- Design Patterns
- Cadence Anti-Patterns
-
Development Standards (
///
ドキュメントコメントの説明) - Cadence Security Best Practices
- Guide for Solidity Developers
- Contract Upgrades with Incompatible Changes
- JSON-Cadence format
- Measuring Time In Cadence(⇦現在時刻取得はここ)
- Testing
Flow CLI と FCL
WebブラウザーやNode.jsからブロックチェーンに対してトランザクションを実行するには Flow Client Library(fcl) を使用します。アカウントやキーを作成したりスマートコントラクトをデプロイする時には Flow CLI を使用することができます。
-
Flow CLI
- Install Instructions
- Super Commands
- Accounts
- Get an Account
- Create an Account
- Deploy a Contract
- Update a Contract
- Remove a Contract (エミュレータのみの便利機能。テストネットでは削除不可能)
- Account Staking Info (ステーキング情報の取得)
- Funding a Testnet Account (Faucetからテスト用のFLOWトークンをもらう)
- Keys
- Deploy Project
- Start Emulator
- Add Project Contracts (flow.initにデプロイしたいコントラクトを設定する)
- Deploy a Project (initに引数を渡すなど、高度なスマートコントラクトのデプロイ)
- Create Emulator Snapshot
- Scripts
- Transactions
- Flow.json
- Initialize Configuration (flow.json作成)
- Configuration (エイリアス設定やGCP/KMSによるキー管理など)
- Manage Configuration (設定の追加と削除)
- Security (Dotenvファイルがデフォルトで使えます)
- Flow Entities
- Get Block
- Get Events
- Get Collection (1blockに含まれているtxの塊の取得)
- Network Status (ブロックチェーンの状態を知れます)
- Utils
- Generate a Signature (メッセージに署名します)
- Verify Signature (署名の有効性確認)
- Snapshot Save (スナップショットの保存)
- Development Tools (エミュレータ用ウォレット)
- Dependency Manager (依存コントラクトを簡単にインストール)
- Running Cadence Tests (テスト実行/カバレッジレポート)
- Cadence Linter
- Flow Interaction Templates (FLIX) (Interaction Templatesの操作周り)
- Cadence Boilerplate (ボイラーテンプレート)
- Data Collection
- Flow Emulator
-
Clients
-
Flow Client Library (FCL)
- FCL API Reference (FCL全リファレンス)
- FCL SDK Reference (FCL経由のSDKの仕様詳細)
- Authentication (ウォレット認証)
- How to Configure FCL (APIリファレンスのConfiguration(設定)と同等)
- Wallet Discovery (ウォレット認証画面の設定)
- Installation (FCLのインストール)
- Interaction Templates (ウォレットの安全強化の仕組み)
- Proving Ownership of a Flow Account (ユーザーがFlowアカウント管理証明)
- Scripts (スクリプトをFCLを使って実行)
- Transactions (トランザクションをFCLを使って実行)
- Signing and Verifying Arbitrary Data (署名したメッセージの検証)
- WalletConnect 2.0 Manual Configuration (WalletConnect2.0をDiscoveryに)
-
Flow Go SDK (Flowの仕様詳細)
- Migration Guide v0.25.0 (新しいGoSDKの使い方)
- Flow Dev Wallet (エミュレータを使った初心者向け開発流れ, Flow残高取得)
- Cadence VS Code Extension
-
Wallet Provider Spec (FCLを駆使してウォレットプロバイダになるには)
- Authorization Function (認証関数はどう作るのか)
- Introduction (ウォレット認証とは何かの仕様の言及)
- Provable Authn
- User Signature
-
Flow Client Library (FCL)
開発方法
ブロックチェーンには値を変更しない Scripts と値を変更する Transactions という2種類のブロックチェーンノードに対するAPI Callがあります。これらを駆使してdappを作成していきます。
以下の記事は、X上で紹介され、Flow公式にリポストされました。
- ブロックチェーンゲームの作り方1 - 基本編Part1
- ブロックチェーンゲームの作り方2 - 基本編Part2
- ブロックチェーンゲームの作り方3 - 基本編Part3
- ブロックチェーンゲームの作り方4 - 基本編Part4
- ブロックチェーンゲームの作り方5 - 所持金表示
- ブロックチェーンゲームの作り方6 - プレイヤー登録
- ブロックチェーンゲームの作り方7 - ゲーム内通貨購入
- ブロックチェーンゲームの作り方8 - デッキ編集
- ブロックチェーンゲームの作り方9 - 対戦相手とのマッチング
- ブロックチェーンゲームの作り方10 - マリガンおよびゲーム開始
- ブロックチェーンゲームの作り方11 - ターンチェンジ
- ブロックチェーンゲームの作り方12 - 勝敗と賞金送付、ランキング
ブロックチェーンウォレットにはローンチ時からウォレットSDKで実績のある Blocto があります。JavaScriptで簡単にBloctoウォレットを呼び出す事ができ、トランザクションもJavaScript で簡単に行う事が出来ます。バックエンドではNode.jsでトランザクションを実行することが出来ます。
Blockエクスプローラには Flow Diver↗︎ があり、トランザクション結果を素早く確認する事が出来ます。 Contract Browser↗︎ ではスマートコントラクトやトークンなどを確認したり、直接スマートコントラクトをデプロイすることが出来ます。 flowview↗︎ ではトークンやステーキング、保存したリソースなどのアカウント情報を簡単に確認することができます。
ハンヅオンで学べる書籍もあります。 こちら↗︎ (Version1.0ではないですが、先端技術を使用します!)
特色: ブロックチェーンのトランザクションは送信から情報取得までに7-10秒かかります。それを時間を感じさせなくする為には、バックエンドにGraphQLサーバーを採用することが考えられます。GraphQLは大人数による同時接続通信が可能なので、ゲームで何をしたのかを対戦相手に前もって通知することができるからです。(YouTube動画の右下部分、またはここ。)
GraphQL はAWS Lambdaと相性が良く(特に金銭面で)、ブロックチェーンにもスムーズにトランザクションを送れるという利点があります。GraphQLはNode.jsで動作し、そのためAWS Lambdaで動きます。そしてAWS Lambdaがreturnする値を現在ブラウザに接続しているすべての端末に対して、Push送信することができます。Svelteに関しては他にも良い書籍がありますが、AWS LambdaをGraphQLサーバーとして立ち上げる方法をきちんと図説している情報媒体は少ないはずです(僕は英語でAWSの開発陣から知りました)。インフラを自分で立ち上げたことがある人なら、この本を読みながら簡単に低コストのバックエンドをセットアップすることができます。
(個人出版ですので帯とかはありませんが、GraphQLの概念や実装はシンプルですので、ブロックチェーンゲームを誰でも作れるようになります。レビューは極甘で...お願いします🙇🙇♂️)
(入門書もあります。入門書以外は実務書ですのでご注意ください。)
こちらのQiitaアカウント<@flowcadence>のドキュメントは無断転載OKです。
脚注
1: https://usa.visa.com/dam/VCOM/regional/na/us/Solutions/documents/visa-nft-whitepaper.pdf ↩