Interrep
web2(Twitter,github,Reddit)上の評判(reptation)を独自のアルゴリズムから算出し、web3上で使えるようにするツール
算出されたreptationは数段階にランク付けされ、ランクごとにNFTを発行したりSemaphoreのメンバーシップにエクスポートできる。これにより、「web3上で限られたメンバーのみ入れるDAO」みたいなのが作れる.
OAuthを使用しているので、ユーザーは自分のWeb2 accountでサインインできるし、web2-web3のリンクはいつでも解除できる
アカウントの紐付け
1.アンカリングメッセージの署名
ユーザーは、Web2 accountに関連付けられた固有のIDとEthereum addressを結びつけるメッセージに署名する
また、サーバーが暗号化に使用する公開鍵も提供する
2.検証
サーバーでは、署名の有効性が検証され、以下のようなチェックが行われる
Web2アカウントが接続されている。
reptationが十分である。
そのアカウントがすでにEthereumアドレスにリンクされていない。
3.基本情報メッセージの作成
その後、サーバーは、ユーザーのEthereum addressとユーザーのWeb2 accountに関する基本情報を含むメッセージを作成する
4.基本情報メッセージの署名
そのメッセージは、サーバーの秘密鍵で署名される
署名、メッセージ(一緒に証明書を形成)、ソルトは、ユーザーの公開鍵で暗号化され、Web2 accountとaddressの間のリンクは、暗号化された証明書以外のどこにも記録・保存されない。つまり、この関連性を明らかにできるのは、秘密鍵を持つユーザーだけなのでプライバシーに配慮されている。
→不正時にのみ、この関連性が明かされるような仕組みを考えています
InterrepはMongoDBを使っており、この暗号化の結果をNOT_MINTED というステータスとユニークな tokenId を持つ Token として保存する
Token のステータスは以下のいずれか
not_minted
バッジのステータスがNOT_MINTEDの場合、そのバッジのスマートコントラクトを呼び出し、ERC721 NFTを鋳造するミントがトリガーされる。そのNFTのidは上述のtokenIdであり、現時点では、秘密鍵を持つサーバーのみがトークンを鋳造することができる
mint_pending
minted
burned
バッジの所有者は、スマートコントラクト上で burnToken() を呼び出し、tokenId を渡すことで、バッジを燃やすことができる。このプロセスは、ユーザーがボタンをクリックしてトランザクションを承認するだけなので、InterRepアプリケーションによってより簡単になる。バッジは、その所有者またはその所有者が承認したアカウントによってのみ燃やすことができる。
revoked
アカウントのリンクを解除した状態。解除する前提条件として、アカウントの関連付けを表すバッジがオンチェーンでburnされている必要がある。
ユーザーは、自分が所有するトークンを選択し、関連する認証を復号する。この復号化された認証はサーバーに送られ、サーバーはその有効性をチェックする。また、サーバーは、ユーザーがあるアドレスにリンクされたWeb2アカウントでサインインしていることを確認する。
Web2 accountは、復号化された証明書から取得され、ユーザーがログインしているアカウントと比較される。オンチェーンの tokenId が取得され、トークンが実際にオンチェーンでburnされたかどうかがチェックされる。
すべてのチェックに合格すると、DB内の Web2 accountはaddressにリンクされていない状態、つまりトークンのステータスはREVOKEDに更新される