長ったらしいアドレスじゃ誰が誰だかわからんので。方法がないか考えてみた。

プロフィール情報

アドレスにプロフィール情報があったらいいのに。次のようなものが欲しい。

  • アドレス
  • ユーザ名
  • アバター画像
  • サイトURL
  • 自己紹介文

実現できそうか考えてみた。そもそも、どうやってこれらの情報を入手したり保存したりすればいいか。

  • ブログなどで公開されているものから勝手にパクる
  • アドレスとGravatarハッシュのセットを送受信するサイトを作る
  • webmentionで受け取る

A. ブログなどで公開されているものから勝手にパクる

アドレスやプロフィール情報は各ブログサイトなどで公開されている。これをパクればいいのではないか。

けれど倫理的にアウトでしょう。運営者や利用者に無断でパクるのは人としていかがなものか。

一応、プロフィール情報は公開されている情報だし、アドレスは公開されて困ることはないはず。投げモナされる入り口が増えたら、むしろ嬉しいのではないかとも思う。

でも、それと無許可でパクるのは別の話。想定外の使われ方を、しかも無許可でやられたら、いい気はしないでしょう。

かといって私が一人ひとりに許可をとるのも非現実的です。そもそも、そんなアプローチをされること自体が迷惑でしょうし。もし私がそれをされたら何事かと思いビビって無視しそう。

仮に全員が無条件でOKを出してくれたとしても、私が手動でデータを取得、整形せねばなりません。無謀です。

あらゆる方面においてダメなのでボツ。

B. アドレスとGravatarハッシュのセットを送受信するサイトを作る

同意を得てやる分には問題ないでしょう。前回Gravatarでプロフィール情報を作成できることがわかりました。なら、それとアドレスを紐付ければ目的を達成できるはずです。

あとはそれを受け取るサイトを作る必要があります。たとえば以下のようなイメージ。

暗号通貨のアドレスに名前やアバター画像をつけよう!

あなたの情報を入力してください。

ウォレットのアドレス [xxxxxxxxxxxxxxxx]
Gravatarのハッシュ  [yyyyyyyyyyyyyyyy]

[送信]

怪しすぎるw 私なら絶対にこんなヤバそうなページで自分の情報を送信したくありません。頭わるい詐欺サイトみたいw

それはともかく、物理的に実現できそうか調べてみます。

画面から受け取ったデータを次のようなTSVファイルで保存することにしましょう。

profiles.tsv

アドレスA	ハッシュA
アドレスB	ハッシュB
アドレスC	ハッシュC
...

はたして、こんなことが可能なのか? 調べ考えてみます。思いつく方法は以下のとおり。

B1. 暗号通貨のブロックチェーン

たぶん暗号通貨のブロックチェーンにアドレスやプロフィール情報をぶち込んだりはできないと思います。そういうのが目的でもないでしょうし。

IPFSなら可能かもしれませんが、私の知識や技術力が追いつきません。

なので、サーバ側でアドレスとGravatarのハッシュをもたせ紐付けるしかないでしょう。でも、私にはそんなサーバを立て、運用し、サーバサイドアプリを実装するカネもパワーも知識も技術もやる気もありません。想像しただけであまりに膨大すぎて途方にくれます。

ではどうやって実装したらいいのか。ほかの外部サービスを使うしかありません。

B2. Github App

Github Appで私のリポジトリへTSVファイルを追記できればいいのですが、厳しそうです。

管理者が許可を出した相手だけ、特定のリポジトリへpush可能みたいです。

つまり、不特定多数から集めることはできなさそう。いちいち私がひとりひとりに対して手作業で許可を出さねばならない。そんなこと、やってられません。

この辺のことを、どうにかして自動化できないか。やりたい人が勝手にデータを送って、そのデータを自動的に整形、保存してくれるシステムを自分で作れる何かがあればいいのに……。

B3. Google Firebase

Google Firebaseは独自のロジックを組み込めないらしいです↓ となるとTSVファイルに追記する処理を実装できません。さようなら。

B4. Google Apps Script

私はその昔、Google Apps Script(GAS)を使って表計算ファイルにデータを追記するPOST APIを作ったことがあります。これなら希望することにピッタリな予感。ですが、どうやらGoogle Apps Scriptは2022年7月1日をもって無償提供を終了するらしいです。↓

その上、リクエスト上限も厳しそう。↓

サービス名はGoogle AppsG SuiteGoogle Workspaceというように変化してきたようです。

というか、Google AppsGoogle Apps Scriptは同じものという認識であっているのかな? よくわかりません。

Googleはすぐにサービスを終了させるので信用できません。これまでもDesktop、Reader、Todoなど数々のサービス終了をされてきました。やはり外部サービスに依存するのは危険。ローカル最強。でも、ならどうやって情報を得たらいいんだ。

C. webmentionで受け取る

  1. 専用ページを作る
  2. 賛同者がツイートなりトゥートする
    • mpurseのアドレスを含める
    • そのページのURLを含める
    • 紐づけたいプロフィール情報があるアカウントでツイートする
  3. webmentionを受信する
    • webmention APIによりJSONで取得できる
  4. Python.Webmention.io.Backupツールでバックアップファイルをローカルに保存する
  5. メンション内容からアドレスとプロフィール情報を取得してTSVに整形する
  6. TSVファイルをGitHubのリポジトリへプッシュする
  7. TSVを利用したいときはファイルのURLをfetch(GET)する

Webmentionでコメントするにはツイッターかマストドンのアカウントがいる。そこにすでにプロフィール情報がある。なのでそれを使えばいい。Gravatarハッシュは不要。

なりすましの可能性

けれど、よく考えたら他人のアドレス情報を書くこともできてしまう。するとアドレスだけその人になりすましてモナコインを受け取れるようにできてしまいそう。これは致命的だ。

本人確認すれば解決する。mpurseの署名が使えると思う。署名したときに返ってきた値がnullでなければ本人確認できたと考えていいのかな? たぶん。

ということは、データを送信するときに署名してもらい、それがnullでなければ送信できる仕組みにすることで本人しか情報を送れないようにできる。このとき、アドレスも自動的にセットして送ればいい。手入力させなければ別の値をセットできないため正確に本人の値となる。これにて他人によって自分の情報を書き換えることはできないくなる、と思う。

ようするにmpurseとツイッターまたはマストドンのプロフィール情報を紐付ける。

次のような画面を作る。

あなたのアドレス[xxxxxxxxxxxxxxxxxxxxx]

* [ツイッターのプロフィールと紐付ける]
* [マストドンのプロフィールと紐付ける]

参加者一覧

■ 名前A アドレスaaaaaaaaaaaaaaaaaa
■ 名前B アドレスbbbbbbbbbbbbbbbbbb
■ 名前C アドレスcccccccccccccccccc
...

あとはツイッターまたはマストドンのプロフィールを紐付けるボタンを押してもらい、mpurseで署名し、マストドンAPIで承認してもらう。これにて両方のアカウントで本人確認が完了する。その後はアドレスをツイートまたはトゥートし、webmention APIで内容を取得し、そこからアドレスとプロフィール情報を紐付けることで成就する。

ここで問題になるのはツイッターだ。

マストドンはAPIが使えるため、トゥート内容を編集させずに投稿させることができる。そのため他人のアドレスを入れることはできず、なりすまし不可能。だが、ツイッターはAPIが使えない。ツイッターの編集画面で好きなようにテキストを編集できてしまう。なりすまし可能。というわけで、マストドンだけを対象にしたほうがいいかもしれない。

まとめ

どうにか頑張ればアドレスにプロフィール情報を紐付けることは可能そう。けれどそれらを作るのが大変そう。もっと詰める必要もある。とにかくmpurseとマストドンAPIを使えばイケそうなのはわかった。

モナコインのトランザクション情報と関連づけてアレコレすれば面白いことができそうな予感。そのためには、トランザクション情報をゲットする方法も調査せねば。いよいよMonaParty APIを本格的に調べるときが近づいて来たか。