链上没有'以后扣款'这回事,我们怎么做出了业界第一个真加密订阅
区块链没有 pull 支付——每笔转账都要持有人当下签名。行业的答案是穿着订阅外衣的提醒邮件。这篇讲让'不托管的自动循环扣款'成真的三个设计决策:条款住在地址里、keeper 能触发但不能决定、出口永远敞开——包括那些不舒服的部分。
先给答案:银行卡订阅之所以存在,是因为卡组织有pull——顾客授权一次,商户以后可以再扣。区块链没有这个原语:每笔转账都要持有人在那一刻签名。行业的变通是每个周期给顾客发邮件,然后祈祷——穿着订阅外衣的提醒。Finality 的订阅自动扣款,且不托管,整个系统立在三个设计决策上:计费条款住在金库的地址里(不在数据库里)、keeper 能触发但不能决定(自动化不等于权力)、顾客的出口永远敞开(提取、取消、关闭,谁的许可都不用)。这篇讲这三个决策的来龙去脉——包括那些不舒服的部分。
问题,诚实地摆出来
我们想让"你的订阅会自动续费"这句话在非托管前提下为真。把朴素的选项挨个走一遍,每个都辜负一种人:
- "顾客每月手动付"辜负商户:续费率=打开率×耐心。那是结构化的流失,不是计费。
- "顾客把余额存在我们/商户这里"辜负顾客:那是套着订阅界面的托管——这家公司存在的意义就是不做这件事。
- "顾客授予无限额度的支出批准"最终辜负所有人:一张对钱包的空白支票,是一条在等日期的安全事故头条。
真答案的形状:顾客预存进一个只有他自己控制的东西,而那个东西事先就被约束好了什么能从里面出去。一个带规则的金库。三个决策,就是把这个形状变成现实的过程。
决策一:条款住在地址里
顺手的做法是:把套餐条款——金额、周期、收款人——存在我们的数据库里;链上程序校验"这次扣款和数据库对不对得上"。能跑,但是错的。数据库的行可以被改;谁能改它,谁就能改变一个金库允许什么。顾客拿到的保证,会是我们的变更管理流程——一条穿着架构外衣的政策。
所以条款进了地址本身:金库的链上地址,由它的计费条款派生而来。金额、周期、收款人——哈希出不一样的值,得到的就是另一个地址。顾客充值的那个金库,物理上不可能按别的条款被扣款,因为"别的条款"描述的是一个不存在的金库。没有人——我们、商户、拿下我们数据库的攻击者——能挪动门柱,和没有人能改一笔付款的去向是同一个原因。
我们接受的那个不舒服:条款焊死意味着改不了价。换套餐是关旧开新、原子完成、折算在链上重算。我们收下了这份摩擦;这份摩擦就是那份保证。
决策二:keeper 能触发,但不能决定
总得有个东西在计费日准时发起续费——顾客不会在凌晨三点醒着,"自动"的意思就是没有人需要醒着。那个东西是我们的 keeper 进程。第二个决策,是给它多大权力:要紧的权力,一点不给。
keeper 说什么时候;金库里焊死的条款说要不要、扣多少、给谁——链拒绝一切超出条款的东西。一个被攻陷的 keeper,最坏也就是按时、按条款、向承诺的收款人发起扣款——换句话说,干它的本职。它不能多扣、不能改道、不能提前。自动化和权力是两回事,把它们分开,顾客才能信任一台自己素未谋面的机器发起的自动扣款。
我们特意点出这个形状,因为它在到处重复:拿不了钱的平台、扣不下佣金的商户、决定不了的 keeper——这个系统里每个值得信任的部分,都因它做不了的事而值得信任。
决策三:出口永远敞开
预存金库会引出每个顾客都在心里默问的问题:我想走怎么办?第三个决策是:答案必须是全部,且不需要任何人点头——余额随时提取;订阅随时取消;关闭金库,一切在一笔交易里回来——余额,连租金押金也在内。
反直觉的结果:把离开做到毫不费力,恰恰让开始变得安全。一个一次签名就能全身而退、每分钱都链上可见的订阅,消解的正是加密订阅真正死掉的那个时刻——不是续费时,而是第一次充值前的犹豫。担心我们造了台流失机器的商户,得到的是相反的东西:业界唯一一个扣款不取决于顾客收件箱的循环计费。
上线之后我们学到的事
我们以为是产品的那些功能——自动续费、美元定价的稳定币计费——确实重要。但顾客真正提起的,是那三条约束:条款不会在我脚下变;机器拿不走超出约定的钱;我随时能全拿回来。我们出发时想做的是循环计费,抵达的地方更具体:一种让两个陌生人立下一份谁都毁不了的循环约定的办法——链攥着约定的两头。
这也是为什么这篇是故事不是规格书。规格书在架构文章和文档里;规格书展示不了的是:每条约束都是一次选择,选在一条更容易的路的对面——因为那条容易的路,都在悄悄把"信任"重新请回来。
FAQ
为什么别家没做出来?
托管阵营做不了——从托管余额里自动扣款就是托管本身;开放式支出批准的责任模型多数人不敢碰。真正难的是把约束当产品做:条款进地址、无权的 keeper、全额的出口。这是一次架构下注,不是一个功能排期。
金库见底了怎么办?
余额不足事件在扣款失败之前触发——商户的挽留抓手,SaaS 生命周期篇有展开。顾客给自己控制的金库充值;没有人的卡会过期。
keeper 是单点故障吗?
是活性的单点,不是安全的单点——前者靠冗余 keeper 解决,后者正是决策二的意义:keeper 故障能推迟一次扣款,永远无法污染一次扣款。
这种订阅怎么取消?
一笔交易,不需要任何人批准:取消加密订阅=停止后续扣款+退回剩余余额——关闭连租金押金一起退。如果一个产品把"怎么取消"做成了客服工单问题,它就没通过决策三。
订阅需要 KYC 吗?
不需要——无 KYC 的加密订阅在这里是默认状态,结构性原因与收款不需要守门人相同:没人托管你的资金,就没人需要先验证你。
焊进金库地址里的到底有哪些条款?
每期金额、周期长度、收款方与分账比例、优惠条款、周期上限。改动任何一项,派生出的就是另一个地址——这就是为什么任何数据库改动都碰不到你的约定。
如果 Finality 消失了怎么办?
金库在链上属于你:余额可提、关闭可执行、资金可回收——没有一步需要我们的服务器存在。这正是决策三在最坏情况下的工作。
keeper 有可能多扣我的钱吗?
不可能——链会按焊死的条款重新核算每次扣款,不符即拒。被攻陷的 keeper 最坏也就是按时、按条款扣款——也就是干它的本职。
为什么不用带上限的代币授权?
带上限的授权好过无限授权,但上限管的是单次额度、不管时间表——没有什么能阻止提前扣或连续扣。条款进地址管住的是什么时候和每期多少——这才是"计费"这个词的本义。
三个决策装得进一次演示:打开沙盒,给金库充值,看一次扣款严格按条款执行,然后关掉它,数数回来了什么。一切——包括押金。最后那笔转账,就是全部的哲学,在链上看得见。