# filecoinのアップロードをどうやって証明するか ## 用語集 - Sector(セクター): Filecoinの中でファイルを保存、管理する単位。フォルダみたいなもん。32GB or 64GBを選べる。セクタの中に複数ファイルが入る。 - Seal(シール): Sectorに対して封すること。 - UnSealedSector: まだファイルが入りきってない状態のセクターのこと。 - UnsealedCID (CommD): UnsealedSectorのマークルツリーのルートハッシュ。CommD、または「データコミットメント」とも呼ばれます。 - SealedCID(CommR): 封印されたセクターのマークルツリーのルートハッシュ。CommRまたは「レプリカコミットメント」とも呼ばれます。 ## PoRep(Proof of Replication) PoRepはSealedSectorを他のノードがコピーしたと証明するやつ。 ## PoSt(Proof of Space time) 一定期間SealされたSectorを保持し続けたことを証明するやつ。 ## WinningPoSt マイナーに選ばれたらランダムに選ばれた自分が保存を担当しているSectorのPoStをさせられる。FILとMessageのFeeがもらえる。別にしなくてもスラッシュはされない。 ## WindowPoSt 30分ごとに証明できるかテストさせられるので、ファイルがない状態から証明するのは時間がかかって時間切れになってしまうので無理らしい。24時間かけて48回テストし、全部のセクタが24時間に1回は少なくともテストされ保持されていることを確認する。WindowPoStしないと、スラッシュされる。 ## ストレージ追加フロー - miner.PreCommitSector: `miner.PreCommitSectorBatch`の`miner.PreCommitSector`を通じて、SealedCIDを公開し、預け入れを行います。これで、セクターはMinerに登録され、MinerはセクターをProveCommitしなければ、預金を失うことになります。 - セクターのProveCommitting:マイナーは、miner.ProveCommitSectorまたはminer.ProveCommitAggregateを介してセクターにレプリケーションの証明(PoRep)を提供します。この証明は、遅延(InteractiveEpoch)の後、およびPreCommitの有効期限が切れる前に提出する必要があります。 - InteractiveEpochは150ブロック => $$150block * 31sec_{avgBlockTime} / 60sec = 77.5 m $$ => 77分以上は絶対にかかる ## 環境構築 ここを参考に https://lotus.filecoin.io/docs/set-up/install/#m1-based-cpus - M1 Mac ```bash= git clone make 2k ``` [「error: no such subcommand: `+nightly」](https://zenn.dev/serinuntius/scraps/bfd4858f8e0abd)でエラー出るので解決方法。 ## Proof-of-Replication(PoRep)でやる? PoRepだとInteractiveEpochは150ブロックなので $$150block * 31sec_{avgBlockTime} / 60sec = 77.5 m $$ => 77分以上は絶対にかかる。 Pre Commitだと、スラッシュされる代わりにコミットしないことができてしまうが、PoRepのタイミングよりは早そう。 ## PoStで証明する? どうやら一定の時間を保持していることを証明するのがPoStなので、今回の要件的に合わないみたい。 WindowPoStだと、24時間に少なくとも1回証明されるっていう感じだし。 - https://spec.filecoin.io/algorithms/pos/post/ - https://starli.medium.com/filecoin-whats-winning-post-4e460fc84fc7 - https://github.com/filecoin-project/lotus/blob/207d33eaba23dd32c8f560cd7a99ac618a315b88/documentation/en/api-v0-methods-miner.md#computeproof - https://github.com/filecoin-shipyard/js-lotus-client-rpc/blob/1f4b2d2373f78b78f98c0555482fbc1e7a589e6f/index.d.ts#L1032