Misskey: ノートに対する投げ銭機能

Created on 14 Aug 2020  ·  15Comments  ·  Source: syuilo/misskey

Summary

「ノートに対して記事購読料を払う」という感じで、投げ銭機能が実装できたらお金の動きができるかなと。

実装を厳密にしなきゃならないとか、そもそもどんな決済手段でやるのかとか、実際の難しいあれこれは置いておいて、とりあえず基本的なアイデアだけ書いておきます。
お金がそもそも嫌いだったら申し訳ないです。

Ideas

  • ユーザーは、(なんらかのサービスの)決済アカウントを紐づけておく。
  • ノートを読んだユーザーがノートにお金を払いたいなと思ったら、決済する

    • (もちろん)ノートを投稿したユーザーが決済アカウントを登録していた場合だけお金を払うことができる

    • ノート毎に購読料を受け付けるかをトグルできるようにする

    • 価格は自由

    • ノート毎のユーザー毎の最低・最高価格をインスタンスで設定する

    • 上限に達するまでなら何回でも・いくらでもノートにお金を支払える

    • 投稿したユーザーに即座にお金が入る

  • 決済の結果はniconicoの「ニコニ広告」のような感じで反映されるといいかも

    • お金がたくさん払われているノートをハイライトのようにTLに挿入する

    • ノートに金額が多い順にユーザーを表示する

  • リモートでも支払えるようにしたい
  • インスタンス管理者がインスタンスに決済アカウントを紐づけておいて、インスタンスが設定した料率で手数料をもらえるようにすると良いかも

    • リモートアカウントの場合はどうするか……リモートとローカルでは別の料率を設定できるようにするとかがいいのかしら。

  • もちろん、インスタンス設定で有効/無効を切り替えられるようにする
✨Feature

Most helpful comment

あと今とりあえず気になるのは

  • CSP 厳しくするとFirefoxで Mpulse がJSインジェクトできなくて死ぬかも?

    • 全く見てないのでこれは勘 (たぶんうまくいくと思いたい)

  • テストがだるい (デバッグするのに送金しまくって手数料引かれまくるのつらそう)

    • デバッグ用チェーンがあるとこなら (Crypko のβみたいな) あり?

  • Mpulse をそのまま使うのはちょっとアレかもしれない

    • 今年に入ってからコミットがない (https://github.com/tadajam/mpurse/commits/develop masterも同様)

    • インジェクトされるAPIの型定義公開されてるのか?

    • まあ本体がTS製なのでその気になればなんとかならなくはなさそうだが

    • とはいえ自作するのもどうなんという感じはするが

    • MetaMask というのもある (Ethereum) https://metamask.io/

くらいかなあ

All 15 comments

決済手段については、

  • 世界的に普及していること
  • 換金性があること
  • 小数を扱えること

から、暗号資産がよさそうだけど、私が暗号資産をまともに扱ったことがないのでよくわからない(

暗号通貨手数料やばそう (物にもよるけど)

あと暗号通貨を日本で扱う時素直にサービス側ウォレットを持つと法規制がめんどくMpurseとかで迂回しないといけないという問題もある (AskMonaがその辺でゴタゴタあった)

暗号通貨手数料やばそう (物にもよるけど)

どんな決済手段であっても手数料はかかる。一定の企業に手数料を払うよりはましかなと。
暗号通貨の場合は手数料だけでなく通貨そのものの価値も変動が激しいので、そこらへんがそもそも厳しいというのも…

AskMona

仕組みや概念として似ていそう

AskMonaがどうして仕組みの変更を強いられたかというのは、AskMonaのサービス側でMonaウォレットを持っていたために資金決済法2条7項の四「他人のために暗号資産の管理をすること」に該当してしまうのでそうなったらしい?

私が想定している実装では、ウォレットはユーザーが事前に作成しておき、Misskeyはウォレットアドレスやトランザクションハッシュ等を取得するがユーザーのウォレットの秘密鍵はMisskeyは把握しないようにする。なので、「他人のために暗号資産の管理をする」ということにはならなそう。

フリマアプリのように取引を媒介するものではあるけど、暗号資産の交換を媒介するものではないので『資金決済法における「暗号資産交換業」』ではない。

どっちの実装が良いんだろうか。どっちの方法でも、取引の確かさは同じだと思われる。

  1. お金をインスタンスのウォレットを介してやりとりする

    • インスタンスは取引に手数料(フィー)を取ることができる

    • インスタンス管理者が一瞬だが預り金を持つことになる

    • トランザクションが2回(リモートの場合は3回?)になるので、そのぶんトランザクションフィーが高くつく

    • ユーザーアカウントのアドレスを開示する必要あり(しかし、抵抗ある人はいない気がする

  2. お金をP2Pでやりとりする

    • インスタンスに全くお金が落ちない

    • インスタンス管理者は預り金を持たない

    • トランザクションが1回で済む

    • ユーザーがアカウントのアドレスを開示する必要はない

2のほうが無駄がないので、効率的な観点ならやはり2の実装になる

P2P でやりとりするにしてもどっちにしろ受け取る側はウォレット開示する必要があるし送る側も送った時にバレるのでは (まあバレたところで…というのはあるが)

あとトランザクションハッシュが本当にその投稿に紐付いたものなのかをどうやって検証するかという問題がある (検証しないと、例えば取引所等から本人のウォレットに送金した時のトランザクションハッシュを申請して、あたかも巨額をtipした人になる、みたいな悪用方法が考えられる)

そういえばこれ AskMona 3.0 だとどうしてるんだろう

税務申告はどうするかというと、日本では、暗号資産の移動は資産の譲渡が行われた時の日本円での時価を基に所得を決める。つまり、どこかの取引所のAPIから時価を取得してあげる必要がありそう。……まあでも普通は1年に1回のことなので、Misskeyに組み込むプログラムではなく別のアプリとして提供すればいいのかもしれない。

Ref: 仮想通貨に関する税務上の取扱いについて; 国税庁
https://www.nta.go.jp/publication/pamph/pdf/virtual_currency_faq.pdf

P2P でやりとりするにしてもどっちにしろ受け取る側はウォレット開示する必要があるし送る側も送った時にバレるのでは

インスタンスのウォレットを介せば一般公開する必要はない…と思ったんだけど、結局インスタンスのウォレットのトランザクションを辿れば推察できちゃうわね。
どこになにを支払ったか全部明確になってしまうというのは暗号通貨のツラいところか。

あとトランザクションハッシュが本当にその投稿に紐付いたものなのかをどうやって検証するか

Misskeyに保存されているウォレットアドレスをMisskeyアカウントと確実に紐づけさせて(通常の認証されたAPIリクエストでアドレスを送信するのでよさそう)、トランザクションに保存されている送り主と宛先の両方のウォレットアドレス(これが確かでなければブロックチェーンが崩壊する)を照らし合わせれば、とりあえず送り主と宛先のアカウントが本人たちのものかどうかは検証できる。宛先アカウントのどのMisskeyの投稿にトランザクションを紐づけるかは、送り主の自己申告だけど、そこを検証する必要性は低そう。

Misskeyに保存されているウォレットアドレスをMisskeyアカウントと確実に紐づけさせて(通常の認証されたAPIリクエストでアドレスを送信するのでよさそう)

そのMisskeyアカウントの持ち主がそのアドレスを登録したということは確実になるけど、そのアドレスの持ち主がMisskeyアカウントの持ち主とイコールかどうかは 通常の認証されたAPIリクエストでアドレスを送信するのでよさそう だけではわからなくない?(Misskeyアカウント @kyogenheki が 俺は NantokacoinNoCh0YumeiNaTorihikizy0 の持ち主や!と主張してMisskeyにアドレスとして登録した場合に、@kyogenheki が本当にそのアドレスの所持者?というのはどうやって検証するのか)

「俺はこのアドレスからここにいくらだけ送るぜ!」というのを申請してからトランザクションを作ってトランザクションIDを送る (サーバーでは申請より後にトランザクションがあったことを確認する) という方式なら行ける気はするが別途専用アプリが必要になりそう

そのMisskeyアカウントの持ち主がそのアドレスを登録したということは確実になるけど、そのアドレスの持ち主がMisskeyアカウントの持ち主とイコールかどうかは 通常の認証されたAPIリクエストでアドレスを送信するのでよさそう だけではわからなくない?

確かにそうですね…そこまでして数字を大きく見せたい人は…いないとは言えないなぁ。

AskMona3の実装ドキュメントを見つけたので参考になりそう
https://qiita.com/Raiu1210/items/af87cb5f7bf155e9aaac

  • 決済の結果はniconicoの「ニコニ広告」のような感じで反映されるといいかも

    • お金がたくさん払われているノートをハイライトのようにTLに挿入する

これやると絶対不正したいマン出ると思う

あーまあアドレスの鍵で署名してもらえばいいのか。それでいいかもしれない

あと今とりあえず気になるのは

  • CSP 厳しくするとFirefoxで Mpulse がJSインジェクトできなくて死ぬかも?

    • 全く見てないのでこれは勘 (たぶんうまくいくと思いたい)

  • テストがだるい (デバッグするのに送金しまくって手数料引かれまくるのつらそう)

    • デバッグ用チェーンがあるとこなら (Crypko のβみたいな) あり?

  • Mpulse をそのまま使うのはちょっとアレかもしれない

    • 今年に入ってからコミットがない (https://github.com/tadajam/mpurse/commits/develop masterも同様)

    • インジェクトされるAPIの型定義公開されてるのか?

    • まあ本体がTS製なのでその気になればなんとかならなくはなさそうだが

    • とはいえ自作するのもどうなんという感じはするが

    • MetaMask というのもある (Ethereum) https://metamask.io/

くらいかなあ

Was this page helpful?
0 / 5 - 0 ratings

Related issues

ibrokemypie picture ibrokemypie  ·  3Comments

tosuke picture tosuke  ·  3Comments

no-boot-device picture no-boot-device  ·  3Comments

ShinoharaTa picture ShinoharaTa  ·  3Comments

marek-lach picture marek-lach  ·  3Comments