Filecoinの仕組み

このページでは、Filecoinネットワークがどのような仕組みなのかついての基本的な紹介をしています。Filecoinは他の暗号通貨と似ていますが、ネットワーク上に構築しようとしている開発者が知っておくべきいくつかの違いがあります。

ネットワーク

Filecoinネットワークは、さまざまな方法で参加するFilecoinのピアによって形成される、分散型のピアツーピアネットワークです。

ピアは、ネットワークへの情報配信(ゴシップ)、相互のデータ転送、および他のピアの検出に使用する安全なチャネルを介して通信し、数千のピアが参加している場合でも、ブロックやメッセージなどの情報が迅速に流れる、接続性の高い群が維持されます。

Filecoinノード

FilecoinノードまたはFilecoinの顧客は、Filecoinブロックチェーンを同期し、すべてのブロックのメッセージを検証するピアであり、これが適用されると、グローバルな状態で提供されます。ノードは、Filecoinウォレットを管理し、それに対するFILを受け取ることができます。

また、Filecoinノードは、さまざまなタイプのメッセージをブロードキャストでネットワークに公開することができます。例えば、顧客は、あるアドレスから別のアドレスにFILを送るためのメッセージを公開することができます。ノードは、Filecoinのマイナーにストレージやリトリーブの取引を提案し、実行されると支払いを行うことができます。

Filecoinノードの運営は、通常、プログラムを24時間365日稼働させ続けることを意味する低レベルのタスクです。Filecoinノードの実装はいくつかありますが、Lotusが最も進んでいます。

Filecoinマイナー

マイナーは、さまざまな種類の取引を実行し、新しいブロックをチェーンに追加することでネットワークにサービスを提供し(30秒ごと)、その対価としてFIL報酬を受け取ります。マイナーのタイプ、報酬、マイナーの視点から見た取引の実行についての詳細は、「マイニングの仕組み」に記載されています。

Filecoinのマイナーを実行することは、必要な証明を完了するために必要な、強力なハードウェア要件を伴う高度な技術的タスクです。Lotusマイナーは、今日までのFilecoinマイナーの中で最も高度な実装です。

取引

Filecoinの取引には、ストレージ取引とリトリーバル取引の2つの主な種類があります。

ストレージ取引は、顧客とストレージマイナーとの間で、あるデータをネットワークに保存するための契約です。取引が開始され、マイナーが保存するデータを受け取ると、マイナーは報酬を回収できるように、契約通りにデータを保存していることをチェーンに繰り返し証明します。そうでなければ、マイナーは打ち切られ、FILを失うことになります。

リトリーブ取引とは、顧客とリトリーブマイナー(ストレージマイナーを兼ねている場合もあります)の間で、ネットワークに保存されているデータを(できれば高速で信頼性の高い方法で)取り出すための契約です。ストレージ取引とは異なり、これらの取引はオフチェーンで実行され、受信したデータに対して段階的に支払うための支払いチャネルを使用します。

証明

前述の通り、ストレージマイナーは、取引条件通りにデータを保存していることを証明しなければなりません。それはつまり:

・顧客から提出されたすべてのデータを保存していること

・契約期間中、データを保存していること

これらの目的のために、Filecoinの証明システムについての記事で説明されているように、暗号化された証明が使用されます。

PoRep(Proof Of Replication)を使用して、マイナーはすべてのデータを受け取り、他のマイナーが複製できない方法で物理的なストレージを使用して、そのマイナーに固有の方法でデータをエンコードしたことを証明します(したがって、同じデータの2つの取引が同じディスクを再使用することはありません)。この証明は、取引が開始され、封印が完了したときに行われます。

取引が有効になった後、その寿命が尽きるまでの間、マイナーはProof of Spacetime(PoSt)を使用して、取引に関連するデータをまだ保存していることを証明します。PoStのために、ランダムなマイナーは、保存しているデータのランダムな部分がまだそこにあることを証明する必要があります。

Filecoinの顧客や他のマイナーは、各ブロックに含まれる証明が有効であることを継続的に検証し、必要なセキュリティを提供するとともに、取引を守らないマイナーにペナルティを与えます。

ガス料金

例えば、トランザクションや証明をチェーンに含めるなど、メッセージを実行すると、ネットワーク上の演算リソースとストレージリソースの両方が消費されます。ガスは、メッセージによって消費されるリソースの指標です。メッセージが消費するガスは、送信者がそのメッセージをマイナーが新しいブロックに含めるために支払うべきコストに直接影響します。

歴史的に他のブロックチェーンでは、マイナーは自国通貨単位でガス料金を指定し、メッセージによって消費されたガスの量に基づいてブロック生産マイナーに優先料金を支払います。Filecoinも同様の仕組みですが、すべてのノードがメッセージを検証する必要があるため、ネットワークのリソース消費を補うために、手数料の一部がバーンされます(復元不可能なアドレスに送信されます)。このアイデアは、EthereumのEIP1559をベースにしています。

Filecoinネットワークでバーンされる手数料の量は、ネットワークの混雑パラメータ(ブロックサイズ)に応じて自動的に調整される、動的な*BaseFeeによって与えられます。現在の値は、ブロック探索者の1人から、または現在のヘッドを検証することで得ることができます。

また、各メッセージにはガス関連のパラメータが多数添付されており、マイナーが得られる報酬の量を決定します。以下では、用語と概念の概要を説明します:

・GasUsage: メッセージの実行で実際に消費されるガスの量です。現在のプロトコルでは、実行前にメッセージが正確に消費するガスの量を知ることはできませんが、推定することは可能です(価格を参照)。GasUsageはガスの単位で測定されます。

・BaseFee:各メッセージの実行時に消費されるガスの単位あたりに消費されるFILの量。attoFIL/Gasの単位で測定されます。

・GasLimit:メッセージの送信者が推定・指定する、メッセージの実行で消費するガスの量の制限です。単位はガスです。ブロックに含まれるすべてのメッセージのGasLimitの合計は、BlockGasLimitを超えてはなりません。メッセージはガスを使い果たした場合、実行に失敗し、実行の効果はすべて元に戻ります。

・GasFeeCap: ブロックにメッセージを含めるために、送信者がGasUnitごとに支払うことができる最大トークン量。attoFIL/Gasの単位で測定されます。メッセージの送信者は、そのすべてが消費されるわけではないですが、メッセージを送信する際には、GasFeeCap * GasLimitの最小残高を持っていなければなりません。GasFeeCapは、予期せぬBaseFeeの高額な変動に対する安全装置として機能します。

・GasPremium:ブロックを生産するマイナーに支払われる優先料。これはGasFeeCapによって上限が決められています。BaseFeeの方が優先度は高いです。attoFIL/Gasの単位で測定され、1 attoFIL/Gasという低い値になることもあります。

・過大評価バーン:GasLimitとGasUsageの差が大きいときに大きくなる、追加のバーンのガス量です。(現在の実装を参照)。

送信者にとってのメッセージの総コストは、以下のようになります:

・GasUsage * BaseFee FIL (バーンした分) + 

・GasLimit * GasPremium FIL (マイナーの報酬) + 

・OverEstimationBurn*BaseFee FIL

重要な点は、メッセージは、使用されているGasFeeCapに関係なく、常にバーンの費用を支払うということです。そのため、GasFeeCapが低いと、GasPremiumが減少したり、マイナスになったりすることがあります。その場合、メッセージを含むマイナーは必要な金額を自分のポケットから支払わなければならず、新しいブロックにそのようなメッセージを含む可能性は低くなります。

Filecoinの実装では、マイナーが新しいブロックに含めるメッセージをどのように選択するかのヒューリスティックを選択することができますが、通常はマイナーの報酬を最大化するようにします。

アクター

アクターとは、状態を管理するためのソフトウェアのデザインパターンです。アカウント、マルチシグ(複数署名)、マイナー、そしてアカウントの残高などの状態を持つものはすべてアクターとして実装されます。

アクターは、Ethereum Virtual Machineにおけるスマートコントラクトに相当するFilecoinの機能です。そのため、アクターはシステムの非常に中心的なコンポーネントです。Filecoinブロックチェーンの現在の状態を変更するには、アクターを介してトリガーする必要があります。

参照:https://spec.filecoin.io/#section-systems.filecoin_vm

アドレス

Filecoinでは、アドレスはアクターを識別するために使用されます。アドレスには以下4つの種類があります:

0 – IDアドレス

1 – SECP256K1パブリックキーアドレス

2 – アクターアドレス

3 – BLSパブリックキーアドレス

IDアドレス:f0

すべてのアクターは、99 などの ID を持っています。これは、アクターが作成されたときに InitActor によって割り当てられた短い整数です。IDアドレスは、アクターのIDの前にネットワーク(メインネットはf)とアドレスタイプ0のIDを付けたものです。

例えば、メインネットのBurn Accountアクタは、IDが99で、IDアドレスがf099になります。

パブリックキーアドレス:f1とf3

アカウントのように、ユーザーが直接管理するアクターは、パブリックキーとシークレットキーのペアから派生します。シークレットキーへのアクセス権があれば、そのアクターから送信されるメッセージに署名することができます。パブリックキーは、そのアクターのアドレスを導き出すために使用されます。

例えば、Huobi Hot Walletには、secp256k1パブリックキーアドレスf1abjxfbp274xpdqcpuaykwkfb43omjotacm2p3zaとIDアドレスf033259があります。どちらのアドレスも同じアカウントアクターを識別します。どちらかのアドレスに送られたメッセージは、同じアカウントに適用されます。

パブリックキーアドレスは、Ledgerのようなデバイスが、パブリックキーだけからあなたのアカウントの有効なFilecoinアドレスを導き出すことを可能にします。遠隔地のノードにあなたのIDアドレスを尋ねる必要はありません。

Filecoinは、f1で始まるsecp256k1アドレスと、f3で始まるBLSアドレスの両方をサポートしています。

ロバストアドレスとIDアドレス

パブリックキーアドレスは、Filecoinチェーンの状態に依存しないため、「ロバストアドレス」と呼ばれています。

アクターIDは、InitActorによってチェーン上で定義されます。アクターIDは、同じIDが異なるフォークで異なるアクターに割り当てられた場合、作成後しばらくの間は変更されることがあります。IDアドレスは、リレーショナルデータベースの単調に増加する数字のプライマリーキーのようなものと考えることができます。チェーンの巻き戻しやSQL用語でのロールバックが発生した場合、異なる行に対して同じIDを参照することになる可能性があります。期待されるコンセンサスアルゴリズムによって対立が解消され、新しいIDを定義する状態が十分に古くなると(コンセンサスの用語でいうところのfinalityに達すると)、変更はできなくなり、IDは永遠にそのアクターにバインドされることになります。

ロバストなアドレスは、チェーンの状態が確定する前にアクターを参照する安全な方法を提供します。IDアドレスは、すべてのバイトが重要となるFilecoinのチェーン状態において、アクターを識別するためのスペース効率の良い方法として、また、人に優しい簡潔な形式として使用されます。

アクターアドレス f2

アクターアドレスは、パブリックキーに関連付けられていないアクターのためのロバストなアドレスを作成する方法を提供します。アクターアドレスは、アカウント作成時に出力される、本質的にランダムなsha256ハッシュです。ZH Storage Minerは、アクターアドレスf2plku564ddywnmb5b2ky7dhk4mb6uacsxuuev3piと、IDアドレスf01248を持ちます。

BLSカーブ f3

secp256k1のf1アドレスに加えて、FilecoinのBLSアドレスはf3で始まります。Filecoinでは、BLS署名にカーブbls12-381を使用しています。Bls12-381は、2つの関連するカーブのペアで、G1とG2です。bls12-381の実装は、パブリックキーがG1で署名がG2の場合と、その逆の場合で異なります。

Filecoinでは、パブリックキーをG1に、署名をG2にしていますが、これはG1の方がパブリックキーを小さく表現できるからです。これはETH2と同じ設計上の決定ですが、例えばZcashが署名をG1に、パブリックキーをG2に置いているのとは対照的です。

また、Filecoinはシークレットキーをリトルエンディアンで保存・解釈することに注意してください。これは、ETH2のキーがbls12-381を使用しているものの、ビッグエンディアンの順序で保存されているのとは対照的です。

加資料

Filecoinは、libp2p(ネットワーク、アドレッシング、メッセージ配信)、IPLD(データフォーマット、コーディング、コンテンツアドレス型データ構造)、IPFS(データ送信)、multiformats(future-proofデータタイプ)などの成熟したプロジェクトの上に構築されています。

ここでは、Filecoinを支える技術とFilecoin自体についての有用な紹介資料へのリンクを以下でご紹介します:

  • IPFS:

o初心者のためのIPFSガイド

IPFSのコンセプト

ProtoSchoolのチュートリアル

  • libp2p:

なぜ libp2p なのか?

libp2p: モジュール式のp2pネットワークスタック

  • Filecoin:

分散型ストレージネットワーク「Filecoin」のご紹介

Filecoinプライマー

Filecoinエコシステムの構築

Filecoinの特徴:ガス料金

IJC-media

IJC-media

IPFSを中心とした技術による日本の産業競争力の向上を目指すIPFS JAPAN コンソーシアムが、最新の世界動向や業界情報を配信するメディアサイト

関連記事

コメント

この記事へのコメントはありません。

TOP