仕組み
何ができるか
買いたい店が現金や特定の電子決済しか受け付けないとき、暗号通貨(いまは BTC signet と USDC)で proxy shopper(代理購入者)に代わりに買ってもらい、届けてもらう。
お金は注文ごとの 2-of-3 マルチシグ(利用者・shopper・escrow)に入れる。
- 届いたら、利用者と shopper の署名で shopper に払う。
- 揉めたら、escrow がもう一方と組んで配分を決める。
- 誰かが応答しなくなっても、タイムロックで最後は必ずどちらかに戻る。
構成
ブラウザ(proxy-shopping-web) Go ノード(proxy-shopping-go)
鍵はブラウザ内・署名もブラウザ shopper / escrow / operator / relay
│ WSS(外向きのみ) │ WSS │ libp2p
▼ ▼ ▼
Nostr リレー群(オペレータが一覧で指定) ◀──▶ Go ノード同士の網
= 常時オンラインの口 + メールボックス (gossipsub、NAT 越えは circuit relay v2 と DCUtR)
- 利用者は何も立てなくてよい。 公開されている Web 画面を開くだけで網に参加できる。 鍵はブラウザの中で作られ、外に出ない。操作の許可(署名)はすべてブラウザで行う。
- NAT の内側からでも、Nostr リレーへは外向きの接続なのでつながる。
- 常時オンラインでない人(利用者・escrow・operator・coordinator)宛てのメッセージは、 暗号化したまま Nostr リレー(メールボックス)に預ける。複数のリレーへ同時に送る。
- 常時オンラインが必要なのは shopper だけ。shopper は Go ノードと、店を操作する自動操作ツール(shopper-bot)を動かす。
信頼の流れ
coordinator(利用者が公開鍵を信頼する)
└─ 委任書: 「この operator に一覧を作らせる」
└─ 一覧: 「この地域では、この shopper とこの escrow の組み合わせが信頼できる」
- 利用者が信頼するのは coordinator の公開鍵だけ。そこから operator、shopper と escrow の組み合わせへ間接的に信頼が伸びる。
- 一覧はバージョンで管理し、有効期限は持たない。外すときは新しい版を出す。
- 利用者は、coordinator を設定から外すことで「解任」できる。
手数料
| 誰に | 強制できるか | 方法 |
|---|---|---|
| shopper | できる | 見積に含める |
| escrow(前払い) | できる | 入金と同時に escrow へ直接払う。前払いの無い注文について、escrow は仲裁の義務を負わない |
| escrow(紛争時) | できる | 裁定の配分から差し引く |
| operator / coordinator | できない | プロトコルの外で、掲載料などを決める。一覧が売っているのは「見つけてもらえること」 |
escrow の預かり金(bond)とその没収は、プロトコルには入れていない。 operator と escrow が独自に結ぶ規約として扱い、参考実装のコントラクトを用意している。
現金しか使えない店
店の所在地は地域コードで表す(例: JP-13-13104 = 東京都新宿区)。
shopper は現金で買いに行ける地域を宣言し、その地域の店の注文だけを受ける。
店の危険度
shopper は注文を受ける前に店を点数化する。 点数は、許可リストに載っているか、HTTPS か、既知の決済ゲートウェイか、で決まる。 カード情報を任意のサイトに送る危険があるので、点数が低い店の注文は断る。