アプリケーションがWeb2とWeb3の両方で動作することを実現するため、抽象化レイヤーを用意する。デザインパターンのStrategyパターンを参考にして作成する。
アプリケーション側でそのDAOがWeb2なのかWeb3なのかフラグを持っておく。
Hookのインターフェイスを定義し、Web2実装とWeb3実装を行う。
フラグに応じて、どちらのHookを使用するのか選択を行い、Web2側のメソッドを呼び出すか、Web3側のメソッドを呼び出すか分ける。
type usePollInterface = (daoId: string) => {
vote: (points:number[]) => void,
contributors: User[]
}
const usePollWeb3: usePollInterface = (daoId: string) => {
//実装
}
const usePollWeb2: usePollInterface = (daoId: string) => {
//実装
}
const usePoll: usePollInterface = (daoId: number) => {
// strategy選択の実装を最初に行う
vote: selectedStrategy.vote,
contributors: selectedStrategy.contributors,
}
usePollを例にしてPoCを実装した
https://github.com/teichaku-org/teichaku/pull/5/files
不正なトークン詐取ができないように、ユーザIDとウォレットアドレスの紐付けはサーバサイドで実施する必要がある。
スマートコントラクトの実行はサーバサイドで実施する必要があるが、技術的に負荷が大きいため今回は実装しない。