# Okimochiを2018/02/13に考えた時のやつ
[blockchain.tokyo #5](https://blockchain-tokyo.connpass.com/event/77752/)で発表をした[DAGで表現するお気持ちネットワーク](https://speakerdeck.com/erukiti/okimochi)の資料では、ここにある2/13時点のヤツよりもシンプルになっています。ブロックチェーンを作るつもりだったけど、コアアイデアはDAGだけで表現できちゃうなー的な。
ちなみに[設計メモ](https://hackmd.io/KwDmCNgUwBhBaAhgTkQZngFgGwxvcTZBdYAM0QCYB2ARgBNg16g=)
# お気持ちというコアアイデア
お気持ちは無限大である。それまでのその人のお気持ちによって価値は変動をするし、お気持ちを発行しすぎると価値は薄まる、かもしれない。ひとまずお気持ちは無限に発行できるとする。お気持ちは、信頼・信用・評価、そういったものの現れである。
お気持ちは、秘密鍵によって署名され、公開鍵で検証可能なデータブロックである。データブロックには、スコア(+1〜+5)と、対象URI、コメント(感想)、ジャンルを示すタグを含める。その一定のルールに従ったデータブロックを発行するソフトウェア(ライブラリ・アプリ・ブラウザ拡張など)によってお気持ちが発行される。
お気持ちは常にプラス評価、好きを表明をする為のものである。ディスる目的に使ってはいけない。ディスるくらいであれば、お気持ちを表明してはいけない。反論などがある場合は、お気持ちではなくコンテンツにおいて表現すべきである。また、議論をする場では無いので、お気持ちによる議論が発生する事はルール違反である。
お気持ちネットワークにおいて、コンテンツ・お気持ちの表明は全て公開され、過去にさかのぼって検証可能なものであり、検証可能ゆえに信頼できるものである。
使用例としては、OSS開発者や良い記事、良い発言、登壇など何かをした人、良い小説を書いた人など良いコンテンツを発表した人にお気持ちを送る。
基本的にはコンテンツを主体にするため、SNSなどの側面は考えない。コミュニケーションがしたければよそでやれというスタンス
## モチベーション
評価しあう文化圏・経済圏を作りたい。インターネッツでは罵倒のコストがあまりにも低すぎるので、ポジティブな評価をするだけの仕組みにする。また、小説なり作品なり作ってる人は感想に植えているので、ポジティブな感想を書くインセンティブを設計したい。
検索エンジンがSEO()とかいうのに汚染されすぎてて実用性が乏しくなってるので、キュレーション的なアプローチを、面倒じゃないやり方で実現したい。
コンテンツを作る人、お金を出す人が評価される、価値を得られる仕組みにしたい。
## 評価軸における信用・信頼
他人から大きく評価を集めている人は「ある評価軸において」信用・信頼できるはずである。たとえば、JavaScriptの優れた記事を書く人は、JavaScriptの優れたプロダクトを見つけたりできるはず。つまり、信用度の高い人のお奨めはきっとお奨め度も高いはずである。なのでそれによってキュレーションが可能になり、検索問題が解決できるはず。
もちろんそういった人が、実は政治について発言すると的外れな事をいいまくるかもしれない。その人の評価は、ある評価軸において保証される。もしかしたら複数の評価軸において信用されるかもしれないが、いったんそれらは独立して考えるべきだろう。
異なる価値観・評価軸を成立させる為に、お気持ちにはタグ付けを行う。
タグは、タグ自体にも評価値が付く。JavaScriptのお気持ち評価の高い人のJavaScriptのお気持ちは価値があるべきだし、JavaScriptの評価の高い人が高い評価をしている人物の、JavaScriptのお気持ちは価値があるべきだ。またメジャーなタグはそれ自体が信頼の積み重ねを持っていると考えられる。
表現揺れを防ぐ為にも、マイナーなタグは信用度の高い人であっても、スコアとしては低いものとして扱われる。(また、タグの間違い、推奨する別タグという指摘をモデレーションで行えるようにする)
お気持ちネットワークにおいてマイナーなタグでも、それについて活動する人が増え、(あまりモデレーションされなければ)、そのタグには価値が蓄積され、いつかはメジャーなタグになっているはずである。
タグの間で評価が分かれる(モデレーションが飛び交う)ようなものは、おそらく価値観の断絶があると判断できるので、そういったタグの間では価値は相互運用性が無いものと見なされる
### お気持ちタグ (お気持ちトークン)
たとえば、JavaScriptに関するお気持ちなら、JavaScriptというタグが付けられるべきであり、JavaScriptの中でもメタプログラミングであれば、メタプログラミングのタグも付けられるべきである。
錬金術コミュニティであれば、community.alchemist みたいな階層的なタグかもしれない。
ただしタグはあくまで分類の為のものであり、お気持ちの内容自体はコメントとして表明すべきである。
お気持ちタグに対するモデレーションも可能であり、たとえば「このタグはルール上、不当である。」「このタグはこの名前の方が相応しい」などである。
お気持ちが承認されたら、スコアなどに応じてお気持ちトークンが発行される。JavaScriptとしてのお気持ちであればJavaScriptお気持ちトークンである。お気持ちトークンの発行はある一定のタイムラグ (検証タイム) が設けられる。
### タグの発行
タグの発行にコストがかかるようにしてもいいかもしれない。コミュニティとかだと、名前空間の奪い合いにもなりかねないし
投票制度もありかもしれない
### 全体タグ (インフラタグ)
インフラ維持やモデレーションなどに貢献してる人向けのタグ。Okimochiとか。これのスコア価値は、他のスコア価値にも影響するようにする。
暗号通貨との繋ぎ込みが出来れば、暗号通貨でOkimochiが多少買えるようにするw (金を出す人がえらい)
## モデレーション
ある人が表明したお気持ちが、正しい運用をされていない場合、たとえばディスる目的にお気持ちを表明した、違法行為を行ったなどの「明確なルール違反」の場合には、お気持ちに対してモデレーションすることができる。むしろモデレーションを推奨する。
ただし、あるお気持ちに対して意見が異なるという目的の為にモデレーションをしてはいけない。ルール違反(違法行為も含む)に対してだけモデレーションできる。
モデレーションされたお気持ちは、そのモデレーションが正当である度合いに応じて、お気持ちにペナルティが付与される。
* 対象のお気持ちのスコアの低下 (参照しづらくなる)
* お気持ちを表した本人の使用度の低下
ただし、モデレーション自体が不当なケースもある。賛否両論なもの、あるいは不当な嫌がらせとしてのモデレーションもありえる。そのため、不当なモデレーションは積極的にモデレーションに対するモデレーションを表明すべきである。
モデレーションに対するモデレーションが付かない。信頼度の低いモデレーションしか付かないなどの場合は、正当なモデレーションであると見なせる。
モデレーションもお気持ち同様にブロックチェーンに残るので後から全部検証可能である。
### 不当なものへの通報としてのモデレーション
* 不当なお気持ち
* ディス用途で使っている
* 違法なコメントである (たとえば著作権違反物を含めたコメントなど)
* 違法コンテンツそのものに対するお気持ち (違法薬物や著作権違反コンテンツそのものに対するお気持ちはダメ)
* 反論目的で使っている (反論はお気持ちやモデレーションではなく、コンテンツでするべき)
* spam
* 不当なタグ
* ディス用途のタグ名 (ネトウヨ、パヨク、差別主義者、みたいな)
* タグ名が違法 (著作権違反な目的のタグ名… たとえば違法コンテンツへの短縮URLだったり、攻撃コードだったり…)
* タグによる反論行為などタグの用途に逸脱しているもの (反論はコンテンツですべき)
* 不当なモデレーション
* 違法でない物に違法であるとしているモデレーション
* ディス用途ではないのにディス用途としている
* 反論目的ではないのに反論目的としている
* 指摘が間違っている
### 指摘としてのモデレーション
* 問題のあるタグ
* タグの内容が間違っている
* より狭いタグを使用するべき
* 問題のあるモデレーション
* モデレーションの種類が間違っている
ペナルティとしては軽く設定する。間違っているという指摘なので、正しくあるべきものを指定することができる。
### 機械的なペナルティ
システム上の不当行為 (不正データの挿入、システムへの攻撃行為など)
* 少なくとも検証可能なはずなので、他の人がそれに対して検証を続ける。
## revoke
お気持ちやモデレーションが、間違いだった、不当だったなどの理由でrevokeすることもできる。まぁその場合再度計算しなおさなければならないので、それ相応のペナルティは付与される
違法なものなどはモデレーションだけではなく、自分でrevokeすべきではある。
## 新作発表
お気持ちネットワークにおいてのユーザーが新作を発表した場合、その情報もブロックチェインとして流れる。
この時、問題になるのは、その著作物が本当にそのユーザーのものなのか?電子署名を施す事はできるけど、拾ってきたものに電子署名を施す可能性もある。
* URI
* タイトル?
* タグ (参考情報として)
* ライセンス (独自、既存のリスト、CCなど)
# コンテンツとのつなぎこみ
お気持ちは「コンテンツ」に対する評価システムなので、コンテンツとどう繋ぎ込むのか?の問題がある。いかにユーザーが透過的、つまり明示的なアクションをしなくても運用出来るか?は考えられるべき。
## 対象コンテンツに電子署名を埋め込む
これが一番確実である。コンテンツ自体に電子署名を一定形式で埋め込んだ上で、コンテンツを公開した事をお気持ちネットワークにブロードキャストする。
## 対象IDに電子署名を埋め込む
Twitterとか、githubとかpixivだとこれでいけるのかな?
たぶん、Twitterとかだと定期的に署名できるようにしておくべき。対象サービスで有効な署名ツイートをした上で、お気持ちネットワークにブロードキャストを行う。
## コンテンツプロバイダ自体がお気持ちネットワークに対応する
この場合、コンテンツプロバイダが自動で電子署名を埋め込む事になる?
## カンファレンスの登壇とかどうする?
カンファレンスのページ自体が対応してくれればありがたいけど…
「カンファレンスで発表しました」ツイートとか、スライド自体にお気持ちを表明する?
## 拡張案
お気持ちネットワーク自体がコンテンツ配布ネットワークとして機能するという案もある
# アイデア: インフラ貢献
たとえば、インフラ運営者とか、モデレーションとかを正常に行ってる人は、インフラ貢献スコアを得られる。
インフラ運営としては、コンテンツプロバイダのような特定のノード運営をする、あるいはP2Pクライアントを常に立ち上げている、クライアント起動によりブロックの検証などを行う、などにより貢献スコアを得る(まぁある種のマイニング)。
その上でスコア(賞味期限あり)の高い人は、重要なノードや重要な証明とかを任されたりする (たとえば、初期接続ノードとして推奨されたり、特定のトランザクションを発行できる)
## インフラのやること
* ブロックの生成 (ピアからブロードキャストされた様々なデータブロックを一つのブロックにまとめる)
* ブロードキャストの検証
* ブロックの検証
* スコア計算 (定期的に計算済みスコアをブロックとして生成する。もちろんそのブロックは検証される)
* コンテンツDB (分散DBとして一部を負担する)
使って良いストレージ上限などリソース設定ができて、貢献度合いによって得られるスコアは変わる
# アイデア: お気持ちに対するお礼
いい感じのお気持ちを送ってくれる人がいたら、:+1: を付与できるようにする。その時自分のスコアに応じて、少しだけ評価をお裾分けできる(マイクロお気持ち)
これによって、感想を書くインセンティブを少しでも増やす
# アイデア: クライアント
クライアントは、色々な人の活動が可視化されるようにする。また、フィードとして新作発表とか、お気持ち表明を取得できるようにする。
たとえば、誰かのIDが表示されたときにその人がどういう活動をしているのかがばっちり可視化されるようにする。githubのcontributionだったり…
ポートフォリオとして使えるようにする。
ウェブ経由でもこれらの情報にアクセスできるようにする
## スマフォアプリ
お手軽に「お掃除ありがとう」みたいなのを送れると面白いかも
# アイデア: コンテンツDB
ハッシュと公開URLなどのデータベース
類似またはコピーを探し出せるようにする。
お気持ちネットワーク以外でもクローリングやクライアント経由でコンテンツをfetchしてその情報を共有できるようにする。
あるデータが最初に登場したタイミングを調べる
# アイデア: データ分析による貢献
スコアからクラスタリングやサジェストのような、データ分析・応用をするノードがあるといいのでは?ただ、その分析や応用が正しいかどうかの検証が低コストでできるかどうかの問題はある
また、ツール上でサジェストが取り扱われる場合、「無関係」「ある程度関係あるけど自分には役に立たない」「役に立つ」など細かく評価できるようにする
# アイデア: ネットワーク構成
WebRTCとか使う?ブラウザだけでも動くようなP2Pシステム
## 合意形成をどうするか?
お気持ち表明は、電子署名さえ問題なければrejectが発生しない。順番の問題が生じない。そういう意味では、異なるブランチとのmergeでコンフリクトが生じ得ない。つまりDAG的なもので問題が無い
モデレーションは、まぁ元となるお気持ちか、モデレーションが必要だけど、それはブロックとして確定してることだけ確認できれば良い
新作情報も、単体のものだから、順番の問題が生じない。
お気持ちトークンや暗号通貨繋ぎ込みに関しては注意深く処理する必要がある。
# アイデア: 外との繋ぎ込み
繋ぎ込むためのプロトコルを厳格に決める。プロバイダはDNSに特定の電子署名を必須とする
## 例: コンテンツプロバイダ
小説や絵その他のプラットフォームがコンテンツプロバイダになる
### プラットフォームユーザーと、お気持ちネットワークのユーザーの繋ぎ込み
あるプラットフォームのユーザーが、お気持ちのユーザーであることを証明する。これは別に対象プラットフォームじゃなくても、OAuthなどでも可能
### 作品公開のブロードキャスト
ユーザー情報の繋ぎ込みができている前提で、作品公開時に、自動でお気持ちネットワークに新作情報をブロードキャストする。コンテンツプラットフォームがコンテンツプロバイダとしてお気持ちネットワークに繋がっている場合、そのユーザーの作品であることをプラットフォーム側が保証する。
### 作品、非公開の情報をブロードキャスト
運営の判断による非公開、法的な非公開、ユーザーによる自発的な非公開などをブロードキャストする。
## 例: 作業依頼システム
作業依頼を暗号通貨やお気持ちトークンでやりとりできるようにする
## 例: お気持ちエクスプローラ
お気持ちシステムはある意味、ポジティブ評価専門のソーシャルブックマーク。これをウェブでアクセスできるようにする。あるいはあるユーザーのポートフォリオとしてアクセスできるようにする
もちろん、コンテンツプロバイダと兼任できる
## 例: アカウントプロバイダ
OAuthなり別の手段なりで、既存世界のアカウントと、お気持ちアカウントのマッチングだけ行う
# アイデア: 配布ネットワーク
お気持ちネットワークを、コンテンツの配布ネットワークとして動かす?
言ってみればいにしえからのファイル配布P2Pネットワークと同じ。ただし違法配布は捕まるように注意深く設計する。
この場合、コンテンツを発表した人はIPを記録する、torと接続できないようにする、などが必要になりそう。
ものによっては国単位での遮断も必要になる (ある国では合法でも、ある国では違法)
## キャッシュのみ
元のURLのデータを注意深く監視しつつ、キャッシュ配布だけ行えるようにする
* 削除した場合に、Internet Archive的に保存すべきなのかどうか
## ファイル配布自体を行う
この時、ファイル配布に対応するかどうかはクライアントごとに設定できるようにする
正直、それが必要かどうかはなんとも言いがたい
## 暗号化コンテンツの販売
* [出版業界に革命をもたらす「Publica」、これぞDaapsって気がするんだよね僕は | つかさのコインラボ](https://future-catalyst.com/publica)
* 所有権をブロックチェーンで表現するのはありだし、ファイル配布ネットワークと組み合わせて、コンテンツの販売が可能
# 考察: IPアドレスをブロックに含めるかどうか?
IPを記録すると、ペルソナの使い分けが難しくなる。また職場とかの情報が漏れる。
ただ、IPが記録されていれば、違法性は排除しやすくなる
折衷案としては、コンテンツプロバイダのような他との繋ぎ込みをするサイトがIPを保持する (プロバイダ責任)。この時プロバイダは自分のIPを知られる事になる。知られても問題ないし
# 考察: お気持ちの賞味期限
古いお気持ちは参考にならない可能性が上がるかも?
サジェストとか検索とかの時に、古いお気持ちの影響を下げる。
あるいは再評価を促す
# 考察: お気持ち決済
たとえば、技術書典とかでお気持ち決済とかできると面白いよね……とか、依頼をマイクロペイメントとかできる仕組みあれば面白いけど、果たしてそれは可能なのか?
たとえば、JavaScriptお気持ちトークン (分配で受け取る権利) を他人に渡す)
お気持ちスコアと、お気持ちトークンは一応分ける。
お気持ちトークンは自分が分配で暗号通貨を受け取れる権利を他人に贈与するもの。
あるいは、お気持ちトークンの交換。
あと、お気持ちを送る事前提で値引きとか (感想が欲しい)
# 考察: そもそもP2Pやブロックチェインである必要性
## ブロックチェイン
誰が発表し、誰がどう評価したかを、blockchainで残すのはありだと思う。検証可能性を保証する
## P2P
P2Pネットワークである必要があるのか?blockchainを皆で共有して、検証可能にする為には、P2Pネットワークである事が望ましい
## コンセンサスの問題
コンセンサスはどうするべきか?
PoW方式なのか、PoS, PoI, その他を採用すべきなのか
基本的に評価でのみ決まる仕組みだから、マイニングの必要性は低い。
まぁ、インフラを維持する事に対して多少の報酬を与えるの自体はありなので、それをベースに設計してもいいかもしれない。コンテンツプロバイダなど、他の世界との繋ぎ込みをどう担保するかの解決手段として。
# 考察: 暗号通貨との繋ぎ込み
暗号通貨を流し込む(寄贈)する事でお気持ち評価の高い人、つまり貢献をしている人に通貨が自動分配される仕組みはあり。
## タグによる分配
たとえば、JavaScriptに1BTCを寄贈する場合、JavaScriptにおけるスコアに応じて分配する。このとき、Scalaなど他のタグには一切入らない。
Programming みたいな別途タグがあればそれはそれでプログラミング界全体に対する発行として良いのではとは思う。
## ベーストークン
お気持ちネットワークそのものの専用タグ(Okimochi)を用意して、特定タグに対する寄贈の場合でも、お気持ちネットワークに対して一定量流し込まれるようにする。
お気持ちネットワークの開発やインフラ維持、正しいモデレーションをした人に対して、お気持ちネットワークのスコアが上昇する。
## 不正できないようにするにはどうすればいいのか?
暗号通貨を流し込むウォレットは誰が管理するのか?そのウォレットからはお気持ちネットワーク的に正しい送信しかできないようにしたい。Ethereumのスマートコントラクトなどがこの目的には使いやすいと思うが、一からネットワークを設計してみたい感じが強いので、ちょっと合わない。
DEXのブリッジノードのようなことをする必要がありそうだ。外から暗号通貨側のブロックチェーンとお気持ちのブロックチェーンを検証することで、そのノードが不正を働いてないことの証明はできるので、それを持って不正を防ぐって考え方でいいかもしれない
## 分配
送信手数料が問題にならないthresholdを決める。mining poolとかと同じような感じにする。一定期間分配されないヤツは再分配にする?
# 考察: 談合などの不正はできるか?
たとえば、ある対象にお気持ちをグループで送る。(あるいは機械的に送る)。
あるいは相互でお気持ちを送り合う
IDの自動生成で大量にアカウントを作ってお気持ち送信しまくる
* 基本的に相互で送り合う場合は、スコアへの影響を低くする
* 同じ相手に送る場合も、スコアへの影響を低くする
# 応用: お気持ち交換所
異なるお気持ちトークンの交換所を用意する。DEX(分散型交換所)か、既存のと同じような交換所を設置するかはさておき。
この場合、合意形成をちゃんとしなければいけないので、お気持ちブロックチェーンと少し分ける (Bitcoinでいうサイドチェーン) とかはありかなーと思う。
# アイデア 分散ストレージ
インフラとしてのストレージが実現できれば、分散型ストレージサービスになるな?
* private にも public にもできる分散ストレージ
* private にする場合は専用の暗号化を施す
* ストレージ利用には、容量に応じて Okimochi token を消費する
* ストレージ提供者は、容量に応じてお気持ちスコア (および Okimochi token) を受け取る
ってなるとやっぱり、コンテンツ発表のプラットフォームとして普通にいけるよね……
# アイデア メールシステム
メールシステム実現できるのでは……
SNSはやるつもりない気持ちだったけど…
相手の公開鍵で暗号化をほどこせば相手の秘密鍵でのみ開くことができるメッセージを作成できる。まぁブロックチェーンに載せるのが妥当かはさておいて
spamの場合は、モデレーションで対処する (メタモデレーションができない問題はある…)