
一、先理解分账由什么执行
区块链分账是把参与地址、分配比例与款项释放条件表达为链上程序规则。以太坊官方智能合约介绍说明,合约是在特定地址保存代码和状态的程序,用户通过交易调用其功能;部署和改变链上状态的执行需要支付 gas。合约本身不能直接读取链外事实。
因此,学习分账前应先区分账户、交易与合约:账户是参与主体,交易触发操作,合约记录并执行规则。链上程序能够处理已获得的数据,却不能自行判断线下服务是否完成或业务收入是否真实。

二、分清份额、应得金额与到账
OpenZeppelin Contracts 4.x 的 PaymentSplitter 采用固定份额分配 Ether 和 ERC20 款项,份额在部署时确定,之后不能修改。它使用拉取式付款:资产先留在合约中,再通过独立的 release 调用向指定受益地址释放。该文档属于旧版本,不能直接视为其他版本的接口说明。

理解这种模式,关键是把分账资格与实际到账分开。份额描述分配权重,可释放金额描述尚未领取的应得部分,已释放金额则记录此前已完成的分配。存在应得款项,并不代表款项已经进入收款地址。
三、判断业务是否适用
固定份额机制适合参与者与比例预先明确、无需经常调整的分配规则。如果业务需要持续增加参与者,或按照线下验收结果改变比例,就不能把固定份额方案直接当作完整解决方案。
需求梳理应分别回答:谁有分配资格、比例如何确定、何时允许释放、业务条件从哪里获得。按比例分配与按时间逐步释放是不同问题,不宜仅因都涉及付款就混为一谈。
四、常见问题与核对重点
自动分账是否意味着自动到账?不一定。规则可以由程序自动计算,但拉取式机制仍需要单独触发释放。执行规则与触发执行是两个层面。
所有 ERC20 代币都能采用相同逻辑吗?不能一概而论。上述 PaymentSplitter 文档特别提示,转账收费或余额重定基类代币可能不符合其预期,应将资产行为纳入兼容性测试。
如何核对分账结果?不能只看某一次入账通知,还应结合余额、累计释放记录与各地址的可释放金额。入门测试应覆盖重复释放、不同领取顺序及多次入账等情形,检查结果是否始终符合约定比例。