【Web3】Lens Protocol🌿
Links
Official Site
Lenster (Lens Protocolを利用したSNS)
Developer Garden
Github
Description
Lens Protocolは、ユーザーが所有するオープンでコンポーザブル、非集権的なソーシャルグラフ。どのようなアプリケーションでもプラグインすることができる。
また、後述する Follow NFT を利用して、DAOを構築することもできる。
現状、betaフェーズのため、Profile NFT の Mint は、ホワイトリストに登録されたアドレスによってのみ Mint することができる。
Lens Protocolは、Polygon Proof-of-Stake ブロックチェーン上に構築されたWeb3ソーシャルグラフです。このプロトコルは、クリエイターが自分自身とそのコミュニティの間のリンクを所有し、完全に構成可能な、ユーザーが所有するソーシャルグラフを形成できるように設計されています。このプロトコルは、ユーザーが所有するコンテンツとソーシャルリレーションシップの不変性を確保しながら、新機能の追加や修正を可能にするモジュール性を念頭に置いて、ゼロから構築されています。
Lens Protocolは、既存のソーシャルメディアネットワークの大きな問題点を解決しようとするものです。すなわち、Web2ネットワークはすべて、その独自の集中型データベースから読み取る。ポータビリティはありません。あなたのプロフィール、友人、コンテンツは特定のネットワークにロックされ、ネットワークオペレータによって所有されています。このため、各ネットワークは、あなたの注目を集めるためにゼロサムゲームを戦うことになる。
Lens Protocol は、ユーザーが所有するオープンなソーシャルグラフであり、どのようなアプリケーションでもプラグインすることができるため、この問題を解決します。ユーザーは自分のデータを所有しているので、Lens Protocol の上に構築されたあらゆるアプリケーションにデータを提供することができます。コンテンツの真の所有者であるクリエイターは、個々のプラットフォームのアルゴリズムやポリシーの気まぐれによって、コンテンツやオーディエンス、生活を失う心配をする必要がなくなります。さらに、Lens Protocol を使用する各アプリケーションは、エコシステム全体に利益をもたらし、ゼロサムゲームを協力的なものに変えます。開発者は、ユーザーの注目を集めるためにフィードバックの仕組みに頼ることなく、有意義なソーシャル体験を設計することができます。
Keywords
- composable
- decentralized social graph
- A PERMISSIONLESS, NON-CUSTODIAL SOCIAL MEDIA PROFILE
Key Features
CREATE NEW PROFILE
ProfileNFTは、コンポーザブル、ノンカストディアル、パーミッションレスです。ユーザーが作成したすべての投稿、ミラー、コメント、その他のコンテンツの履歴が含まれます。個々のアドレスがProfileNFTを所有し、1つのアドレスが複数のProfileNFTを含むことができます。
POST
あなたが作りたいもの、共有したいものは、POSTで実現できます。Lens ProtocolはIPFSと、あなたのインスピレーションを刺激するメディアタイプをサポートします。
COMMENT
あなたという存在は、その発言で形成されます。投稿にコメントすると、それはあなたのProfileNFTに残り、あなたのデジタルフットプリントをオンチェーンに追加します。
MIRROR
ミラー機能を使って投稿を再共有する。コンテンツを増幅させることで、二次コレクターから紹介料として報酬を受け取ることができます。
FOLLOW
各フォロワーNFTには固有のトークンIDがあり、それには生来のレアリティとユーティリティが伴います。あなたのFollower tokenID 1を手に入れるのは誰ですか?
COLLECT
気に入りましたか?あなたがフォローしている人たちの投稿を集めましょう。新しい自己表現の形として、あなたのコレクションをキュレーションして、好きなものを見せましょう。
GOVERNANCE BUILT IN
Lens Protocolで誰かをフォローすると、ユニークなFollowNFTが発行され、トークンIDが増加し、簡単に投票できるようになります。例えば、あなたがDAOで、最初の100人のトークンIDのFollowerに投票を許可したいとします。簡単です。これは、ガバナンスが組み込まれています。
Blockchain in use
Polygon
地球第一主義。Polygonの環境に優しいブロックチェーンは、Lens Protocol上の各出版物が低コストで安全なブロックチェーン上にありながら、低カーボンフットプリントを実現することができます。
Terminology
User / Profile
User
=ウォレット
Profile
Profileは2023年1月現在、クローズドベータ版のためホワイトリストに登録されたアドレスによってのみ Mint することができます。これは、Polygonの低料金な環境を考えると、名前空間が不法占拠者に予約されないことを保証するものです。もしLens上でProfileの Mint を必要とするアプリケーションを開発しているなら、Discordに参加して連絡をする必要があります。
Profile に紐づく要素
Publication
(後述)
Follow module
Profileに紐づくモジュールであり、ホワイトリストのロジックコントラクト。Followする際に実行され、Follow NFTとインクリメンタルなIDを付与する。
Profile Image URI
プロフィールのイメージURI。
Dispatcher
Profileの所有者の代わりに行動することができるアドレス。
Publication について
Profileから発行されるもの。ユーザーのProfileNFTsに直接投稿されるものであり、NFTではない。これにより、ユーザーが作成したすべてのコンテンツは、ユーザーの所有物であり、ユーザーの財布に入ったままであることが保証される。
以下3種類ある。
Post
各種コンテンツ。基本となる。
Comment
他のPublicationを指しコメントするもの。Commentにはポインタが含まれるため、ポインタされたPublicationの「参照モジュール」ロジックがあれば、それを実行する。
Mirror
従来の意味での「シェア」に相当し、コンテンツはなく、他のパブリケーションへのポインターを持つ。Mirrorにはポインタしかないので、指されたPublicationの「参照モジュール」ロジックがあれば、それを実行する。
Publication に紐づく要素
Collect module
Publicationに紐づくモジュールであり、Collectする際に実行され、Collect NFTとインクリメンタルなIDを付与する。Publication が Mirror の場合、ミラー元Publicationの Collect Module が実行される。
Deployed Contract Addresses を見ると、以下のような Collect module が提供されているよう。
- FeeCollectModule: このモジュールは、指定された価格でPublicationの無制限コレクトを可能にすることで機能します。
- LimitedFeeCollectModule: このモジュールは、あるPublicationの限定的なコレクトを無期限に許可することで機能します。
- TimedFeeCollectModule: このモジュールは、指定された料金で、決められた時間内にPublicationの無制限のコレクトを可能にすることで機能します。
- LimitedTimedFeeCollectModule: このモジュールは、決められた時間内に、決められた料金でPublicationを限定的に収集することを可能にします。
- RevertCollectModule: このモジュールは、すべてのコレクトを拒否することで動作します。
- FreeCollectModule
Reference module
Publication 自体への参照を制御する。このモジュールには、誰が Publication に Comment したり Mirror したりできるかを決定するロジックが含まれている。
Deployed Contract Addresses を見ると、以下のような Reference module が提供されているよう。
- FollowerOnlyReferenceModule: コメントやミラーが、フォロワーが所有するプロフィールから発信されたものであることを検証するシンプルなリファレンスモジュールです。
Token and Contract Architecture
Lensプロトコルは、ERC721 NFTを介した3つのレイヤーのトークン化を持っています。3つともERC721に準拠し、完全にコンポーザブルです。
アップグレード可能なコントラクト「LensHub」は、Lensプロトコルの大部分の相互作用の中核となるエントリーポイントです。
Follow NFT と Collect NFTは、それぞれ最初のフォロー/コレクトの時のみデプロイされることに注意してください。これにより、Profile作成のためのgasのオーバーヘッドが削減されます。
Profile NFT
ほぼすべてのインタラクションは、Profile 作成時に Mint される Profile NFT の ERC721 NFTコントラクトとして始まり、倍増します。
メモ)
LensHubコントラクトの createProfile
冒頭で、msg.sender
が whitelist に載っているかどうかをチェックし、載っていればProfileを作ることができる。(そのため、Dappのウォレットアドレスを事前に whitelist に載せてもらう必要がある)
Profile NFT を mint してから、その TokenID に紐づけて、handle 名 や follow module などを LensHub にてストレージ保存している。なお、follow module については、whitelistに登録されているモジュールのみ利用可能となっている。
Follow NFT
Profile が初めてフォローされると、Profile に固有の「FollowNFT」コントラクトが(最小限のプロキシクローニングによって)デプロイされます。これは、フォロワーのポジションを表すERC721 NFTコントラクトです。
メモ)
LensHubコントラクト にて follow
がコールされると、LensHubストレージのフォロー対象者Profile に紐づく Follow NFT コントラクトを取得し、まだ存在しない場合にだけ、Follow NFT コントラクトをデプロイし、そのコントラクトの address を LensHubストレージに保存する。
その上で、Follow NFT をフォロアーの address に mint する。
また、フォロー対象のProfile に紐づく follow module が指定されている場合、それを実行する。
Collect NFT
最後に、Publication が初めて Collect されると、Publicationに固有の「CollectNFT」コントラクトが(やはり最小限のプロキシクローニングによって)デプロイされます。これは、Collect された Publication を表すERC721 NFTコントラクトです。
メモ)
getPointedIfMirrorを実行し、コレクトする対象としての Publication や Collect Module を取得する。
LensHubコントラクト にて collect
がコールされると、LensHubストレージのコレクト対象者Publication に紐づく Collect NFT コントラクトを取得し、まだ存在しない場合にだけ、Collect NFT コントラクトをデプロイし、そのコントラクトの address を LensHubストレージに保存する。
その上で、Collect NFT をフォロアーの address に mint する。
また、コレクト対象のPublication に紐づく collect module が指定されている場合、それを実行する。
整理用Memo(TODO: 色々なところを省略しているので、あくまでイメージ。後でちゃんと綺麗に描き直す)
Gated publications
2023.1 に新たにゲート付きコンテンツ体験の作成をサポート。
Lensユーザがアクセス条件を指定できるようになりました。アクセス制御とは、出版物のコンテンツとメディアを復号化することが、(例えば)以下にのみ可能であることを意味します。
- お客様の出版物を収集したユーザー
- あなたのフォロワー
- 特定のコレクションから任意のNFTを所有するユーザー(例:DAOメンバーシップNFT、Lensに投稿されたコレクション出版物のNFT、Nouns DAO NFTなど)。
- 指定されたTokenId、またはTokenIdの範囲を持つNFTを所有するユーザー(例:あなたの最初の100人のフォロワー)
- 特定のレンズプロファイルまたはEOAアドレスの所有者、独占的なコンテンツのために。
- ERC20トークンをある程度の残高で保有しているユーザー(例。X stETH以上を持っている人、DAOガバナンストークンをY個持っている人)
- また、ブーリアン演算のAND条件とOR条件を用いて、上記を組み合わせることも可能です。
ゲーテッドエクスペリエンスの作成が可能になることで、Lens Ecosystemにおけるコンテンツのゲーティングやマネタイズのための様々な種類の興味深いユースケースが可能になり、クリエイターやパブリッシャーがコンテンツの消費方法をよりコントロールすることができるようになります。
実装例