ガイド

はじめに

Flow, the blockchain for open worlds

Flow is a fast, decentralized, and developer-friendly blockchain, designed as the foundation for a new generation of games, apps, and the digital assets that power them. It is based on a unique, multi-role architecture, and designed to scale without sharding, allowing for massive improvements in speed and throughput while preserving a developer-friendly, ACID-compliant environment.

Flow empowers developers to build thriving crypto- and crypto-enabled businesses. Applications on Flow can keep consumers in control of their own data; create new kinds of digital assets tradable on open markets accessible from anywhere in the world; and build open economies owned by the users that help make them valuable. 

Smart contracts on Flow can be assembled like Lego blocks to power apps serving billions of people, from basketball fans to businesses with mission-critical requirements. 

There are four pillars that make Flow unique among existing blockchains:

  • 多機能構成:Flowの設計は他とは異なり、シャーディングすることなく、またはコンセンサスの分散化を妨げることなく、数十億人が利用するネットワークをスケールすることが可能です。
  • リソース指向プログラミング:Flowのスマートコントラクトには、暗号資産やアプリのための簡単で安全なプログラミング言語であるケイデンスが用いられています。
  • 開発者エルゴノミクス: アップグレード可能なスマートコントラクトやビルトインロギングサポートから、Flowエミュレータまで、このネットワークは効果を上げるために設計されています。
  • 消費者オンボーディング:Flowは、フィアットから仮想通貨へ、安全で摩擦の少ないオンランプを利用した決済により、メインストリームの消費者を対象に設計されています。

Flowはもともと、自社で利用するために構築を開始したのですが、あっと言う間に拡大しました。当社discordに参加している数百名の開発者や世界中数千名におよぶ人が、当社が特別な存在であるということに同意しています。一緒に未来を築きましょう!

マルチノード構成

従来のブロックチェーンでは、それぞれのノードが全ての状態(アカウント残高、スマートコントラクトコードなど)を保存し、チェーン内の各トランザクション処理に関する作業を全て実行します。これは、作業員が1人で車を組み立てることに似ています。

製造からCPU設計まで、パイプライン方式は、生産性を劇的にスケールする一般的なテクニックです。Flowでは、バリデータノードを4つの役割:収集、合意、実行、検証へ分類し、ブロックチェーンへパイプライン方式を導入しています。ノード間では並行(シャーディング同様、別々のトランザクション)ではなく、垂直(各トランザクションの様々な検証段階)に作業を分類しています。

つまり、各バリデータノードは、各トランザクションの検証に参加はしていますが、検証の一段階でのみの参加になります。このため、これらを特定のある段階向けに特化させ、さらに効率性を大幅に増加させることが可能です。

これによりFlowでは、ネットワーク上の全オペレーションに対し、共通の実行状態を維持しながら、何千倍も高いスループットと低コストを実現することが可能となります。データベースに関しては、Flowのスマートコントラクトおよびユーザーアカウントは、不可分性、一貫性、独立性および永続性(ACID)のあるトランザクションにおいて、常に相互に作用することが可能です。これにより、優れたユーザー体験および完全なコンポーザビリティを提供し、開発者が互いに作業した物にさらに構築していくことが可能になります。

シャーディングに伴う問題

ほとんどのプロポーザルでは、ブロックチェーンを相互接続ネットワーク(一般的にシャード)へ断片化することで、ブロックチェーンのスケーラビリティの向上を目的としていますが、サイドチェーンでも同様の問題が発生します。これらのアプローチは、データベースシステムでは一般的な直列化可能性(「ACID」)特性を除外します。

ACID特性がないと、断片全体のデータにアクセスする必要があるアプリの構築が非常に難しく、エラーが起こりやすくなります。スマートコントラクト間での作用は大変複雑になり、しかも個別の大規模なアプリケーションでは、レイテンシーの問題および高いトランザクション失敗率により、シャード全体をスケールするためには、複雑なメカニクスを利用しなければなりません。この組み合わせは、ネットワーク効果はもちろん、ネットワーク上で可能なアプリケーションの種類を大幅に制限することになります。シャーディングは、プロトコルレベルで解決するのではなく、ブロックチェーンのスケールにおいて、事実上最も困難な部分をアプリケーション開発者へ対し課します。

シンプルなユーザーアクション(TUSDなどのステーブルコインを使って、クリプトキティに帽子を買う)は、断片化されたブロックチェーンでは、トランザクション12件と7つのブロックが必要です。断片化されていないFlowのようなACID適応環境では、同じアクションやそれよりもより複雑なアクションは、1つのブロック内で、原始的なトランザクション1件により処理することが可能です。

アタック・サーフェスや複雑さが増すことは、より時間やコストがかかることよりも深刻です:設計、テストが非常に困難になり、断片化されたブロックチェーンにおけるスマートコントラクトコードも複雑になります

コンセンサスをコンピュートから分離する

The core insight that led to architecture of Flow is that we can separate non-deterministic processes from deterministic ones and assign each to different types of nodes based on their technical capabilities to dramatically increase the blockchain throughput and solve several  user- and developer experience problems with existing networks at the same time. Our realization was that tasks within a blockchain can be divided into two types: 

  • ブロックチェーンのトランザクションの有無を決定し、オーダーするなどの、非確定的(または「主観的」)タスク
  • 決定後、オーダー済みトランザクションの結果を計算するなどの、確定的(または「客観的」)タスク

Non-deterministic tasks require a coordinated consensus process (like Proof of Work or Proof of Stake). Deterministic tasks, on the other hand, always have a single, objectively-correct outcome. The critical insight behind Flow’s architecture was that the single biggest bottleneck to blockchain performance is the deterministic task of executing transactions after they’ve already been included into a block, and not the subjective process that requires consensus, i.e. the formation of the block itself. This insight is outlined in our first technical paper: Separating Consensus and Compute.

Flowの多機能構成

Flowでは、ステーキングが必要な4種類の役割全体で、ブロックチェーンマイナーまたはバリデータの仕事をパイプライン化し、懸念事項を分離することで不必要な努力を大幅に削減しています:

  • コンセンサスノードは、ブロックチェーン上のトランザクションの有無を決定し、オーダーします。
  • 検証ノードは、実行ノードを阻止します。
  • 実行ノードは、それぞれのトランザクションに関連した計算を行います。
  • コレクションノードは、Dappsへ対するネットワーク接続およびデータの有効性を強化します。

Flow is designed such that even a single honest node, of any role, can punish and trigger recovery from invalid data introduced by dishonest Collection or Execution Nodes. 

Consensus and Verification Nodes together are the foundation of security in the Flow network and leverage cryptoeconomic incentives to hold the rest of the network accountable.  These validators can optimize for security and decentralization: the roles of Consensus and Verification are streamlined to allow high levels of participation, even by individuals with consumer-grade hardware running on home internet connections. Consensus nodes run a variant of HotStuff, one of the most proven proof of stake algorithms.


実行およびコレクションノードはそれとは反対に、完全に確定的な作業を行うため、攻撃を受けにくくなります。これらのノードの作業は、その他の種類のノードにより検証され、責任が課されます。そのため、これらのノードの役割は、セキュリティおよびスケーラビリティに対し安全に最適化され、これによりネットワークを拡大することが可能となります。これらのノードのオペレーションには、データセンターで専門的に管理されている、専用のサーバーハードウェアが必要です。

機密情報の専用証明

機密情報の専用証明(SPoCKs)は、Flowチームが開発した新たな暗号技術であり、当社の技術手引書内で正式に定義されています。SPoCKsにより、証明者の数に関係なく、サードパーティーオブザーバーへ対し、それぞれに同一の機密情報へのアクセス権があるということを証明することができます。これらの証明は非対話型であるため、機密情報が明らかになることはありません。各証明者のSPoCKsは、証明者ごとに専用化されており、他の証明者が複製したり、偽造することはできません。

開発者のことを第一に考えた体験

クリプトキティやスマートコントラクトウォレットDapper など、ブロックチェーンアプリケーション開発における当社の実績により、Flowのプロトコル層で直接、開発者エルゴノミクスへ対し数々の改善を実現してきました。これについて、以下でいくつか説明いたします。

ケイデンス

まず最初のエルゴノミクスは、リソース指向のスマートコントラクトプログラミング言語であるケイデンスです。

既存のプログラミング環境は、資産の所有者を把握するために利用されますが、所有者を直接明確にするのではなく、所有者を反映しているシナリオ内で通常利用されています。 パブリックブロックチェーンは、希少性があり、完全にアクセスコントロールが可能なデジタル資産の所有者を管理するための目的で設計されているという点で他とは異なります。パブリックブロックチェーンのデジタル資産は、物的資産のような役割を果たしています:複製したり、偽造することはできず、移動することのみ可能です。

昨年、Flowチームでは、より良いスマートコントラクト言語に関する学術研究に続き、ブロックチェーンにおけるライナータイプの使用に関する調査を実施しました。ちょうど同じ頃、Libraチームでは、ライナータイプからインスピレーションを得、新たな所有者モデルを基にしたMoveのための新しいプログラミングモデル:リソースタイプを明らかにしました。リソースは、資産の所有者および暗号化に対応したデジタル資産のプロパティを直接、プログラミング言語内で表示するという新しい方法です。Moveに関する文書の導入部分によると:
カスタムリソースタイプを明確にすることができるのが、Moveの主な特徴です。リソースタイプは、豊かなプログラマビリティを持つデジタル資産を、安全にエンコードするために使用されます。

暗号化に対応したアプリケーションの新たなパラダイムのために設計されたプログラミング言語、ケイデンスの決定的な特徴である、リソース指向のプログラミングのパワーにひどく感銘を受けました。

リソース指向のプログラミングは、新たなパラダイムであり、安全かつ簡単に使用できるよう設計されています。開発者は初めて、所有者を言語そのものにより追跡したり、他には類を見ないほど耐久性のあるデジタルアーティファクトを作成することが可能となり、これによりアプリケーションにパワフルな新カテゴリーが生まれました。

最初の高度なリソース指向のプログラミング言語として、快適でエルゴノミックなシンタックスを持つケイデンスは、読みやすいという特徴があります。強力で静的タイプのシステムを使用することで、ランタイムエラーを最小限に抑え、全ての方法、インターフェース、トランザクションに、期待される動作を実行するための事前および事後条件を含むことができるようになります。これにより、覚えやすく、非常に監査のしやすい、そして現在存在している他のどの言語よりも生産性を高めることの可能な言語となりました。Flowのプレイグラウンドで、ケイデンスを学ぶことができます:play.onflow.org

Open source tooling

Flowチームは、開発者をサポートするため、一連のツールをオープンソース化してきました:

Flow Go SDK:Go SDKは、スケーラビリティを考慮したバックエンドの統合を求めている開発者にとって優れたツールです。Goは、パフォーマンスが最優先の場合には最もポピュラーなバックエンドプログラミング言語の1つであり、Dapper Labsの定番となっています。

Flow JavaScript SDK:フロントエンドの開発者向けである当社のJavaScript SDKは、Flowと簡単に統合し、作用します。ABIを必要としない開発、構成可能な相互作用を実現し、ユーザーを喜ばせることができるDappsを作成します。当社のJavaScript SDKを使用し、楽しく構築していたけること間違いなしです。

Visual Studio Code拡張機能:Flowと相互作用し、Visual Studio Codeでケイデンス言語をネイティブとして使用します。エラーに対するケイデンスコードを静的にチェックし、この業界トップのIDEの快適さを保ちながら、スマートコントラクトのテストを実施します。

FlowプレイグラウンドGUI:ユーザーがセットアップなしに、ケイデンススマートコントラクト言語を学習し、試すことが可能なホスティングされているブラウザ内の開発環境。経験の浅い開発者が、スマートコントラクト開発のためのパワフルかつ新しい言語であるケイデンスの感触を得るサポートを、当社がいたします。

規格案: FlowのFT(代替可トークン)およびNFT (代替不可トークン)はそれぞれ、イーサリアムの ERC-20およびERC-721と同等です。

Upgradable Smart Contracts

スマートコントラクトプラットフォームに関する最も重要な約束の1つに、ユーザーはスマートコントラクトの作成者ではなく、スマートコントラクトコードを信頼することができるという約束があります。ブロックチェーンのこの側面により、検討をし始めたばかりのユースケースを開発することが可能になり、最も影響力のあるユースケースとして、オープンサービスおよびコンポーザビリティの概念をあげることができます。

実現化された当初、スマートコントラクトプラットフォームでは、コントラクトコードリリース後の変更が不可能でした。これは、目標を達成するためには最も直接的な方法です:オリジナルの作者によるものであったとしても、コードの変更が不可能な場合には、コードが実行された後、作者を信頼する必要性が全くありません。

しかし残念ながら、ソフトウェアを最初から正しく動作させるのは困難です。非常に才能のあるチームやモチベーションの高いコミュニティであったとしても、些細な問題が資金の大幅な損失に繋がるというスマートコントラクトの実例は尽きません。

多くの開発者が、スマートコントラクトがデプロイされた後の修正または改善を望んでいました。さらには、多大な時間と手間をかけ、アップグレードや移行ができるよう、スマートコントラクトにメカニズムを構築した開発者も中にはいました。しかし、開発者が個別に、アップグレードの可能性のために自分のメカニズムを「巻き込む」ことで複雑さが増し、スマートコントラクトを信頼することが難しくなります。

Flowでは、スマートコントラクトを「ベータ状態」でメインネットへデプロイすることが可能であり、これにより、オリジナルの作成者がコードを徐々にアップデートすることができるようになります。ユーザーがこのコードが未完成だと気付いたときには、コードが確定するまで信頼しないということも可能です。コードが安全だと確信することができて初めて、作成者はコントラクトに関するコントロールを決定的にリリースすることができ、さらにそれはその先もずっと不変となります。

このシステムは、発送後、開発者が限られた期間内に、コードを微調整することができる一方で、アプリケーションまたはスマートコントラクトが本当にトラストレスであるか否かに関わらず、処理をしているコードの種類に関する情報を得たいというユーザーのニーズのバランスを取っています。

高速かつ決定的なファイナリティ

エンドユーザーの立場からすると、ブロックチェーンのスピードは、トランザクションが永久的にチェーン内に含まれたことを、エンドユーザー(またはクライアントソフトウェア)が確信できるまでにかかった時間により、実際に測定することが可能です。これを一般的に「ファイナリティ」と呼びます。ビットコインでは、ほとんどの人が、6つのブロックが承認されることをファイナリティとして捉えていますが、これには1時間以上かかります。イーサリアムは、確率的ファイナリティを約6分で実現することで、これを改善しています。

Flowでは、確定的ファイナリティが数秒以内に実現可能です:コンセンサスノードがトランザクションが含まれるブロックを決定すると、ユーザーエージェントは、ほとんどのケースにおいてローカルでトランザクションを実行し、ユーザーへほぼ瞬間的にフィードバックを提供することが可能です。ネットワーク内のその他のトランザクションの影響を受ける可能性があるケースでは、ユーザーは、実行ノードを信頼し、最新のAPIを使い数秒以内にフィードバックを取得するか、またはトランザクションの結果が、関連する他の実行および検証レシートとともに、ブロックチェーン内に密閉されるまで待つことになります。このブロック密閉および正式な監視プロセスには、10ブロック、開始から約10秒かかります。

ビルトインロギングサポート

ソフトウェアの複雑な部分が、期待通りに動作しているかを確認するには、ソフトウェアの動作を詳細に、長期間にわたって記録する方法しかないということがあります。既存のスマートコントラクトプラットフォームには、ブロックチェーン全体のログ記録を保存することは困難であるというシンプルな理由から、ロギングファシリティが含まれていません。データが多すぎるのです!

Flowは、全てのスマートコントラクトトランザクションは確定的であり、ネットワーク内にあるトランザクション全ての実際のログを保存する必要はないということを認識しています。 代わりにFlowでは、どのトランザクションが、どのトピックへ対しログを生成するかを記録します。ログを「調査」したい人がいる場合、特定のトピックがタグ付けされたトランザクションのサブセットについて、ブロックチェーンへ問い合わせ、その後、これらのログを分析用に生成するため、トランザクションをローカルで再度実行することが可能です。この技術により、イベントロギングを劇的に効率よく行うことができるようにもなります。

消費者のことを第一に考えたオンボーディング

メインストリームに対応した(法定通貨やその他の暗号トークンからの)決済オンランプに加え、Flowのネットワークでは、使いたいと思ってもらえるアプリケーションを構築することが簡単になります:

ヒューマンリーダブルなセキュリティ

現在のネットワークでは、アプリまたはウォレットソフトウェアが、トランザクション承認時に与えられる許可について明確に概説している、ヒューマンリーダブルなメッセージを送信することはほぼ不可能に近いです。Flowのトランザクションフォーマットは、トランザクションにより可能および不可能な変更の種類について、確実に保証しています。これにより、ユーザーが承認しようとしていることに関し、情報に基づいた決定をしていることをウォレットが確認することが簡単になります。

この情報をユーザーへ表示するかは、ウォレットソフトウェア次第ですが、Flowのトランザクションフォーマットを静的に分析しやすくすることで、より透過的なトランザクションの承認プロセスを作り出すことが可能となりました。.

スマートユーザーアカウント:シードワードや紛失鍵はもういりません

Flowは、フレキシビリティを考慮して設計されています。過去数年にわたり、Dapper Labsでは、Dapperスマートコントラクトウォレットの一環として、イーサリアムアカウントモデルに対し、様々なユーザビリティ強化機能の開発を行ってきました。Flowのネイティブアカウントモデルの一部にも、これらの強化機能を取り入れています:

  • 任意かつモジュラー式のスマートコントラクト機能は、全てのFlowウォレットに搭載されています
  • これは自動化されたプロセスまたは、より高度な承認コントロールをサポートし、それにより優れたユーザー体験を可能としています。例えば、消費者が自身の資産を紛失しないようにしたり、またはアカウントへアクセスすることが、安全なアカウントリカバリーフローにより、Dappsで簡単に行えるようになります。
  • セキュリティリークを防止するため、古い鍵を定期的に排除する機能により、任意かつ複数の署名サポート全体を通し、セキュリティを追加しました。

Community

Flowは、オープンエコシステムの世界:ソフトウェア開発者、コンテンツクリエイターや消費者が同じように適切に刺激を受け、ネットワークに貢献した価値に対する報酬を得ることができる世界に深く関わっています。

技術アーキテクチャは、Flowが参加性やプロトコルレベルでのを参加を確保する方法のほんの一例にしか過ぎません。ガバナンスに向けた、私たちのコミュニティにおける熱情や努力は等しく、またはそれ以上に重要です。

ノードオペレーター費用および報酬

Flowでは、ネットワークをサポートする検証ノードオペレーターへ対し、作業および関連するステークに比例し、システムを通過したトランザクション手数用の一部を付与しています。他のブロックチェーンのマイナーやバリデータとは異なり、幅広く公平な参加および分散化を確保するため、Flowのバリデータは、比較的安価なハードウェアを使用し、コンセンサスまたは検証ノードから開始することが可能です。

費用があまりかからない、ネットワーク初期においては、ノードオペレーターの労力や関連ステークに比例した報酬を追加で影響する予定です。

Developer Ecosystem

A healthy and vibrant ecosystem is the most important long-term determinant of success for a blockchain. It is a fundamental requirement that Flow engages with a large and diverse set of stakeholders. Most importantly, this extends beyond the investor base and includes the developers and ecosystem partners that choose to build on top of the network. 

In addition to a technical design optimized for developer experience and performance, the Flow team is taking additional steps to ensure a healthy ecosystem:

  • Developer Alpha Program: over the coming months, the Flow team will begin demonstrating the capabilities of the network to interested blockchain developers for technical feedback. Whether you’re an independent hobbyist or a venture-backed powerhouse, the Flow team wants to hear from you.

  • エコシステムの開発: Flowトークンの一部は、ブーストラップ導入に向けたエコシステムの開発およびネットワークの早期参加者へ対する報酬として利用されます。こういった参加報酬は、コンペティション、ハッカソン、オープンソース開発への貢献など、様々なプログラムを通じ配布される予定です。導入の加速を促すだけでなく、長期的なエコシステムを開発するために利用されるトークンの一部は、様々な参加者が世界中からアクセスできるよう、ネットワーク参加者およびガバナンスを多様化し、分散化するための道ともなります。

Content Partners

ブロックチェーンでは、新たな方法により、ブランドやインフルエンサーがファンと繋がることが可能になります。デジタルの希少性および資産の真の所有者は、個々のアプリを超え、ゲーム化された社会経験を構築し、全ての固有IPに関し、コレクターエコノミーを構築することができます。Flowでは、世界大手のエンターテイメントスタジオ、IP保持者、パブリッシャーはもちろん、型破りな独立者たちとも連携し、当社のプラットフォームが彼らのニーズを満たすよう努力しています。

Flowでは、グローバルIP保持者、ゲームパブリッシャー、エンターテイメントスタジオや文化的インフルエンサーを経営幹部とした、エンターテイメント産業評議会を開催する予定です。評議会は、リスクや機会の把握、消費者採用の妨げとなる物の排除、健全なグローバルエンターテイメントエコシステムの促進に貢献します。  

コミュニティへの参加

コミュニティとともに、Flowでは、数十億という消費者に向けたオープンで信頼性の高いインターネットの提供を可能としています。当社では、この新しいデジタル世界に命を吹き込む開発者、企業、アンバサダーを募集中です。これらのチームや個人は、Flowにおいて持続可能な製品、サービス、ビジネス、コミュニティを確立するために必要なメンターシップのもと、当チームと密接に連携します。Flowで未来を築いてみたいという方はぜひ、当社までご連絡ください。