工作原理
它做什么
当你想购买的商店只收现金或只支持某种特定支付方式时,你用加密货币付款 (目前为 BTC signet 和 USDC),由代购者(proxy shopper)替你买下商品并寄给你。
每笔订单的资金都进入一个 2-of-3 多签(用户(user)、代购者、托管方(escrow))。
- 商品送达后,用户和代购者共同签名,把钱付给代购者。
- 如果发生纠纷,托管方与另外两方中的一方一起决定如何分配资金。
- 即使有人不再响应,时间锁也能保证这笔钱最终归到某一方。
架构
浏览器 (proxy-shopping-web) Go 节点 (proxy-shopping-go)
密钥与签名都在浏览器中 shopper / escrow / operator / relay
│ WSS(仅出站) │ WSS │ libp2p
▼ ▼ ▼
Nostr 中继(由运营者指定) ◀──▶ Go 节点网络
= 始终在线的入口 + 信箱 (gossipsub;通过 circuit relay v2 和 DCUtR 穿透 NAT)
- 用户什么都不用运行。 打开公开的 Web 应用就能加入。 密钥在浏览器中生成,永远不会离开浏览器;所有授权(签名)都在浏览器里进行。
- 位于 NAT 之后的用户也能连接,因为到 Nostr 中继的连接是出站连接。
- 发给不常在线的人(用户、托管方、运营者(operator)、协调者(coordinator))的消息, 会以加密状态存放在充当信箱的 Nostr 中继上等待。每条消息都会发往多个中继。
- 只有代购者需要始终在线。它运行一个 Go 节点,以及一个操作商店网站的浏览器自动化工具(shopper-bot)。
信任如何传递
coordinator(用户信任它的公钥)
└─ 委托:"这个 operator 可以发布列表"
└─ 列表:"在这个地区,这个 shopper 和这个 escrow 可以一起被信任"
- 用户只信任协调者的公钥。信任从这里延伸到运营者,再延伸到代购者 × 托管方的组合。
- 列表带有版本号,永不过期。要移除某人,就发布一个新版本。
- 用户把某个协调者从设置中删除,就等于”罢免”了它。
费用
| 付给谁 | 可强制执行? | 方式 |
|---|---|---|
| 代购者 | 是 | 包含在报价中 |
| 托管方(预付) | 是 | 在注资时一并直接付给托管方。对于未付预付费的订单,托管方没有仲裁义务 |
| 托管方(纠纷) | 是 | 从裁决的分配中扣除 |
| 运营者 / 协调者 | 否 | 在协议之外约定,例如收录费。列表出售的是”被找到的机会” |
托管方的保证金及其没收不属于协议的一部分。 它们被视为运营者与托管方之间自行约定的条款;项目提供了一份参考合约。
只收现金的商店
商店的位置用地区代码表示(例如 JP-13-13104 = 东京新宿区)。
代购者声明自己能前往并用现金支付的地区,只接受这些地区内商店的订单。
商店风险
接单前,代购者会给商店打分: 它是否在代购者的白名单上、是否使用 HTTPS、结账页面是否为已知的支付网关。 把银行卡信息发送到任意网站是有风险的,因此得分低的商店的订单会被拒绝。