Skip to content

Instantly share code, notes, and snippets.

@cryptcoin-junkey
Last active October 26, 2020 01:33
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cryptcoin-junkey/c2b077ef298cdb812273c1c225ceb96a to your computer and use it in GitHub Desktop.
Save cryptcoin-junkey/c2b077ef298cdb812273c1c225ceb96a to your computer and use it in GitHub Desktop.
[whitepaper] Monaparty IPFS

Monaparty IPFS ホワイトペーパー

ついに Monaparty がホワイトペーパーなるものを書くようになりました。きっと scam だ、この計画は。

現状の問題点

Monaparty は、XMP アセットを基軸として新規アセットの発行と交換をトラストレスに行うプラットフォームであり、それ以上の機能は、ほぼ有していない。 例外的な機能としてブロードキャスト・メッセージがある。

ブロードキャスト・メッセージは、マイナー手数料に相当するモナコインさえあれば、XMP を消費することなく万人が見える形で文字列を記録できる。

ブロードキャスト・メッセージを用いて、 ブロックチェーン外の Web サーバにある情報を Counterblock サーバに与えるような拡張が、 Counterparty チームの手によって行われている。

これらの拡張により、アセットの追加情報や、bet の開催情報などが与えられる。

この手法には、Web サーバに永続性がないという大きな問題があった。 チェーンの再同期時に、過去を再現できないのは、ブロックチェーンにとって、看過しづらい大きな問題である。

IPFS

IPFS は、現状の web が抱える諸問題を解決すべく開発が行われているプロトコルおよびサーバ実装である。 IPFS の全貌は、紙幅に余るため、割愛し、必要な機能のみ紹介する。

まず、IPFS は P2P ノードの集合体として機能し、全てのコンテンツは暗号学的に安全な hash に紐付いている。 そして、IPFS には HTTP ゲートウェイが存在し、一般的な web ブラウザからアクセスが可能である。 IPFS ゲートウェイは、自分が所有していないコンテンツの要求があったとき、IPFS ネットワークに問い合わせ、所有しているノードからコンテンツを受け取り、要求を満たす。 つまり、ゲートウェイにのみ着目したとき、IPFS は CDN の一種として機能する。

IPFS と CDN を分ける大きな点として、 pin 機能がある。 IPFS ノードは、任意のハッシュを pin できる。 pin したハッシュに基づくコンテンツは、所有しているノードにダウンロードされる。 CDN と同様に IPFS ノードのデータは定期的にゴミ集めされるが、pin したコンテンツはゴミ集めの対象とはならない。 pin したコンテンツが他のノードから要求されたとき、そのノードへコンテンツを転送する。

つまり、誰かがノードに pin したコンテンツは、unpin したりノード自体が消滅しない限り P2P ネットワークに永続的に残り続ける。

Monaparty IPFS

仕様変更

Counterparty が実装した、enhanced_info を拡張し、URL ipfs:// プレフィックスを許す。 仕様としては、この 1 点のみの変更から始まる。

次に、enhanced_monacard_info など複数の JSON schema を用意する。どのような仕様にするかは、現段階では明らかにしない。

pinning サーバの追加

次に、ブロードキャスト・メッセージを解釈して enhanced_info に含まれる ipfs:// URL を解釈し、pin するサーバを用意する。 2種類の実装が可能である。

Counterblock への拡張

enhanced_info を解釈するのは Counterblock であり、Counterblock が IPFS サーバに対して pin を指示するのが、最も自然な実装となる。

しかしながら、違法性があるコンテンツが IPFS 経由でダウンロードされるリスクがあり、単純所持でノード運用者が法に問われる可能性を完全には排除できない。 実装時には、pin 指示を行わないオプションを付ける。

裁判で争えば無罪を勝ち取れるようなことでも、目をつけられたならとりあえず逮捕され締め上げられる。 これが、残念ながら日本の、特にサイバー警察の期待値である。 開発者としては、善意のノード運用者をリスクに晒すことは避けねばならず、保守的な態度を取らざるを得ない。

独立サーバの実装

ブロードキャスト・メッセージは、平文で、Counterparty API など使い、誰でも読める。 つまり、誰かが pinning を行う独立したサーバを用意すれば、Monaparty ノード運用者にリスクはない。 独立サーバの運用者には若干のリスクは発生する。 しかし、どの P2P ノードが pin を行っているのかを追跡するのは極めて困難であり、ノード所有者を特定するのは更に困難である。 そしてそもそもプログラムが勝手に集めた P2P コンテンツが単純所持で法に問えるのかは、かなり難しいだろう。(少なくとも現時点での日本では)

IPFS gateway の設置

Monaparty dApps 運営者の利便性を高めるため、IPFS gateway を設置する。 IPFS の性質上、他の IPFS gateway を用いても問題は生じない。

敢えて IPFS gateway を用意するのは、別の新機能への布石のためだが、ここでは匂わせるだけにしておく。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment