役割
| 役割 | 常時オンライン | 何を使うか | 何をするか | 不正をしたら |
|---|---|---|---|---|
| 利用者 | いいえ | ブラウザ | 注文・入金・受け取りの確認・紛争の申し立て | ― |
| proxy shopper | はい | Go ノード + shopper-bot | 見積・代理購入・配送の報告。手数料を受け取る | escrow の裁定で取り分を失う。operator が一覧から外す |
| escrow | いいえ | ブラウザ または Go ノード | 紛争を T1 までに裁定する | operator が一覧から外す。規約次第で預かり金を没収され、補償に回る |
| operator | いいえ | ブラウザ または Go ノード / psctl |
地域ごとに、信頼できる shopper と escrow の組み合わせ一覧に署名する。通報を受け取る | coordinator が委任を失効させる |
| coordinator | いいえ | ブラウザ または psctl |
operator への委任書に署名する | 利用者が設定から外す(解任) |
利用者
- Web 画面を開き、ニーモニック(12 語)を作って控え、鍵を暗号化するパスフレーズを決める。
- 買いたい店の URL、店の地域、商品を入れる。
- 候補に出た shopper と escrow の組み合わせを選んで注文する。
- 見積が届く。レートが自分で調べた値から 3% を超えてずれていると注意、10% を超えると強い警告が出る。
- 承諾して入金する。お金はマルチシグと、escrow の前払い手数料に分かれる。
- 届いたら「受け取った」を押す(金額と宛先を確かめる画面のあと、部分署名が shopper に送られる)。
- 届かなければ紛争を申し立てる。証拠は画面が自動で揃える。
proxy shopper
- Go ノードを
role: shopperで動かし、shopper-bot(自動操作ツール)をつなぐ。 - 対応する決済手段、通貨、現金で行ける地域、手数料、店の危険度の方針を設定に書く。
- カード情報は shopper-bot の中だけに置き、ノードや網には渡さない。
- 利用者が受け取り確認をしないまま T1 を過ぎると、自分だけで受け取れる。
escrow
- 前払い手数料を受け取った注文の紛争だけを裁定する。
- 住所は普段は読めない。紛争になったとき、shopper(または利用者)が復号の鍵を渡す。
- 裁定は、署名済みのトランザクションとして両者に届く。どちらかが連署すると確定する。
operator
- 担当する地域(複数可)と、組み合わせの一覧、推奨するリレーとチェーンの接続先を書いて署名する。
- 通報を受け取ったら、一覧の新しい版を出して外す。預かり金の扱いは、escrow と結んだ規約に従う。
coordinator
- operator に委任書を出す。失効させるときは
revokedの新しい版を出す。
登録簿に載る
管理者の信頼の登録簿は、GitHub のレポジトリ pad01g/proxy-shopping-registry です。 pull request がマージされたことが承認になります。 マージのたびに CI が登録簿の鍵で新しい委任書と一覧に署名し、公開の Nostr リレーと https://pad01g.github.io/proxy-shopping-registry/events.json に公開します。
| なりたい役割 | pull request で足すもの | マージで起きること |
|---|---|---|
| shopper | shoppers/<name>.json(pk、連絡先、説明、現金で行ける地域、決済手段、組む escrow) |
登録簿の operator が、あなたの shopper × escrow の組み合わせを一覧に載せる |
| escrow | escrows/<name>.json(pk、連絡先、説明、裁定までの日数) |
shopper があなたを指名でき、組み合わせが表に出る |
| operator | operators/<name>.json(pk、連絡先、説明、担当地域) |
登録簿の coordinator があなたに委任する。以後は自分の一覧に署名できる |
| coordinator | coordinators/<name>.json(pk、連絡先、説明) |
アプリが利用者に示す coordinator の目録に載る(誰を信頼するかは各利用者が選ぶ) |
pk は Nostr の公開鍵(64 文字の 16 進数)です。Web 画面の設定に表示され、psctl keys --mnemonic-file … でも出せます。
外すときは、そのファイルを理由を添えて revoked/ に移す pull request を出します。
ファイルの形とコマンドの詳細は、登録簿の README にあります。