Blogstrの有料記事が、購入後すぐ自動で開くようになりました — その仕組みを解説

Blogstrの有料記事が、購入後すぐ自動で開くようになりました — その仕組みを解説

Blogstrを公開したばかりのころ、有料記事を読むまでの流れは、とても手作業の多いものでした。

読者が支払いをする。作者が購入を確認する。作者がメッセージで閲覧キーを送る。読者が受け取ったキーを記事へ入力する。

最初の公式記事にも、はっきり「少し手動です」と書いています。

あれからBlogstrの有料記事は、支払いが確認されると、購入した本人だけが全文を自動で読めるところまで進みました。作者がオンラインでなくても、読者が閲覧キーをコピーして貼り付けなくても、購入してすぐにそのまま有料部分を読めます。

せっかくですからこの記事では、Blogstrとして何が改善したのか。そして、便利になってもあえて変えなかったことを紹介させてください。

>> Blogstrで読む

最初は、作者と読者が直接やり取りしていました

初期の仕組みは、意図的にシンプルでした。

有料部分は閲覧キーで保護し、支払いは読者から作者へ直接送る。Blogstrが売上を預からず、閲覧キーもBlogstrのサーバーへ預けない(ここまでは今も変わりません)。購入後は、作者と読者が暗号化されたメッセージで閲覧キーやり取りする。

自動化されていない代わりに、どのような仕組みなのかを見えやすいようにしていました。まずこの形で公開したからこそ、有料記事をNostr上で成立させるために必要なものを、一つずつみんなで確認できたと思っています。

ただ、そのままだと、記事が売れるたびに作者が購入を確認し、相手を間違えないように閲覧キーを送る必要があります。読者は作者からの返信を待たなければなりません。メッセージが保存先(Nostr用語でリレーと言います)へ届くまで時間がかかったり、別の端末でログインすると閲覧キーを見つけにくかったりすることもありました。

「記事を買ったのに、すぐ読めない」

ここは、仕組みを育てるうえで避けては通れない課題でした。

自動メッセージではなく、「読む権利」を渡すことにしました

単純に考えると、支払いを検知したプログラムが、作者の代わりに閲覧キーを自動で購入者にメッセージすればよさそうです。

しかし、それだけではメッセージの配送や見落とし、迷惑メッセージ判定、別端末での再取得といった問題が残ります。自動化のために作者の大切な復旧キーを預かる設計にもしたくありませんでした。

そこでBlogstrでは、メッセージを自動送信するのではなく、購入者専用の「読む権利」をNostr上で発行する方式を選びました。

Blogstrでは、これをAccess Grant(アクセスグラント = 読む権利)と呼んでいます。

有料部分はあらかじめ暗号化された状態で公開され、支払いを確認できた購入者だけに、本文を開くための情報を暗号化して自動で渡します。

今の有料記事は、こうやって開きます

現在の流れを、できるだけ簡単にすると次のようになります。

  1. 作者が有料記事を公開します。無料部分はそのまま読めますが、有料部分は暗号化されています。
  2. 読者が、自分のBlogstrアカウントで記事購入の支払いをします。代金はBlogstrを経由せず、作者の受取先へ直接送られます。
  3. 支払いの記録がNostrの保存先へ公開されます。
  4. 有料記事専用のArticle Agent(サブドメインで管理)が、支払い記録の署名、記事、購入者、金額、受取先などを確認します。
  5. 条件がすべて一致した場合だけ、その購入者専用のAccess Grantを暗号化して複数の保存先へ公開します。
  6. BlogstrがAccess Grantを見つけ、購入者のアカウントで復号すると、有料部分が自動で表示されます。

同じBlogstrアカウント(= Nostrアカウント)を使えば、購入時のブラウザに閲覧キーが残っていなくても、再訪時や別の端末でAccess Grantを取得して読むことができます。

外部アプリやブラウザ拡張機能でログインする場合は、署名だけでなく、暗号化されたデータの復号にも対応している必要があります。対応していないログイン方法では自動表示を利用できないため、手動の閲覧キーを救済手段として使います。

作者がオンラインになるのを待つ必要も、閲覧キーをコピーして貼り付ける必要もありません。

少しだけ、技術の話

Nostrに詳しい人向けに書くと、記事の無料部分は長文記事の kind:30023、暗号化された有料部分や購入条件、Access Grantは kind:30078 の署名済みイベントとして扱います。購入の申込みと支払い記録には、NIP-57の kind:9734kind:9735 を使います。作者からArticle Agentへ渡す情報と、Article Agentから購入者へ渡す情報は、NIP-44で暗号化します。

自動解放全体がひとつの共通NIPとして定められているわけではありません。BlogstrはNostrの標準的な署名、暗号化、支払い記録を組み合わせ、その上に記事購入専用の条件を定義しています。誰かがBlogstrのデータベースを書き換えて閲覧権を決めるのではなく、署名された記事、購入条件、支払い記録、Access Grantが判断の根拠になっています。

普通の投げ銭では開かないようにしています

Nostrでは、有料記事への支払いも、通常の投げ銭も、Lightningの支払い記録を使います。

だからこそ、金額が同じというだけで有料記事を開いてはいけません。

Blogstrでは、記事購入として署名された支払いであることに加えて、次の情報が現在の記事と一致しているかを確認します。

  • 購入した人
  • 記事と作者
  • 購入時の記事情報
  • 価格と実際の支払額
  • 作者が指定した受取先
  • 有料部分と閲覧キーの世代
  • 支払い記録の署名

どれかが一致しなければ、Access Grantは発行しません。

通常の投げ銭、別の記事への支払い、購入価格と金額が異なる支払い、署名を確認できない記録では、有料部分は開きません。

取りこぼしても、あとから回復できるようにしました

Nostrの保存先は、いつも同じ速さで応答するとは限りません。支払い直後に記録を見つけられなかったり、Access Grantを一部の保存先へ公開できなかったりすることがあります。

そのためBlogstrでは、ひとつの経路だけに頼らないようにしています。

支払い直後には、Article Agentへ確認を促します。それとは別に、定期的な再確認でも、支払い済みなのにAccess Grantがない購入や、保存先への公開が不足しているGrantを探します。同じ購入をもう一度処理しても、同じ結果へ戻れるように作っています。

また、必要な記事情報や閲覧キーを複数の保存先から確認できないとき、Article Agentの準備状態が一致しないときは、新しい支払いを始めません。支払ったあとに読めない状態を増やすより、準備が整うまで支払いを止めるほうを選びます。

Blogstrは、今も静的なWebアプリです

自動化のために、Blogstr全体を動的なWebサービスへ作り替えたわけではありません。

記事を読む画面や書く画面は、今までどおり静的なWebアプリとして配信しています。記事、購入条件、支払い記録、暗号化された有料部分、Access Grantは、署名されたNostrのデータとして保存先へ公開されます。Blogstr専用のデータベースだけを正本にはしていません。

Article Agentは、支払いを確認してAccess Grantを発行する小さな専用処理です。資金を預からず、作者の復旧キーも持ちません。支払いは、これまでどおり購入者から作者へ直接送られます。

便利にするためにNostrを隠すのではなく、Nostrの仕組みを使って便利にする。それが今回の自動化で大事にしたところです。

自動化しても、信頼がゼロになるわけではありません

ここは、Blogstr公式として正直に書いておきたいところです。

Article Agentは、購入者専用のAccess Grantを作るため、管理する記事の閲覧キーを扱えます。作者の復旧キーやウォレット資金を扱うことはありませんが、有料記事の自動解放における信頼先のひとつです。

また、Access Grantの中身と有料本文は暗号化されていますが、現在の方式では、どの公開IDにどの記事向けのGrantがあるかという関係は公開情報から分かります。

これはDRMでもありません。正しく購入して本文を読める人が、文章や画面を別の場所へコピーすることまで技術で完全に防ぐものではありません。

支払った購入者からNostr上へ支払い記録が一度も公開されなければ、自動確認できない場合もあります。そのときのために、作者が確認して閲覧キーを案内する手動の救済手段を残しています。

自動になったから万能、というわけではありません。どこに限界があり、誰を信頼するのかを隠さずに運用していきます。

最初の記事も、同じリンクのまま次へ進めます

初期方式で公開した有料記事を、勝手に新しい仕組みへ変えることはしていません。

すでに購入した人の記録や、作者が管理している閲覧キーがあるからです。過去の記事は、今までどおり手動の閲覧キーで読むことができます。

一方で、初期のころの有料記事については、作者が既存の閲覧キーを確認したうえで、同じ記事リンクのまま自動解放へ移行できる導線を用意しました。移行後の新しい購入は、支払い確認後に自動で開きます。閲覧キーは、移行後も障害時の救済用として残ります。

過去を切り捨てて新方式へ置き換えるのではなく、これまでの購入を守りながら少しずつ移る。その進め方も、Nostrの上で長く使えるWebアプリを作るために大切だと考えています。

「少し手動です」の、その先へ

最初のBlogstrでは、作者が購入者へ閲覧キーを送りました。

今は、支払い記録を検証し、その購入者だけが開けるAccess Grantを複数の保存先(再度の説明ですが、Nostrリレーの意味です)へ届け、同じアカウントなら再訪時にも自動で本文を表示できます。取りこぼしを後から回収する仕組みもあります。

それでも、変えていないことがあります。

支払いは作者へ直接届くこと。Blogstrが売上を預からないこと。記事とアクセス情報の正本を、ひとつのサービスのデータベースへ閉じ込めないこと。そして、問題が起きたときのために、作者と読者が直接やり取りできる道(= 閲覧キー)を残すことです。

最初の手動方式は、完成形ではありませんでした。でも、間違いだったとも思っていません。小さく始めたからこそ、守るべきものを確かめながら、自動化するための方法を選べました。

Blogstrはこれからも、Nostrの自由さを崩さずに、普通の人が普通に読めて、普通に書ける場所へ近づけていきます。

以下は、「自動公開」がどのように機能するのかを、実際に確認していただくために設置した有料部分です。

内容は特別にありませんが、実験という意味でもぜひ遊んでみてくださいね。

>> Blogstrで読む

この続き : 0字 / 画像 0枚
100

会員登録 / ログインして続きを読む

関連記事

記事を書いた人

bitcoin | I am Japanese | Live in Thailand 🤙 LN yutaro@walletofsatoshi.com ⚡️

SNSにシェア

このクリエイターの人気記事

奥さんをOrange Pillした話をぜひ聞いてほしい。

232

ノーコイナーが【ビットコインに興味を持つ】3つのパターン

121

【お願い】”Spotlight の使い方”記事を書いてます。

95