Splits 分账的核心机制,是把"比例"和"控制权"分开设计。比例决定钱怎么分,控制权决定谁能改比例。如果你希望分账规则永久固定、任何人都改不了,创建时不设 controller,合约就变成不可变的;如果你需要日后调整收款人或比例,就必须设一个 controller,但这也意味着控制者有能力在你收到钱之前把资金导向别处。领取环节则有一个容易被忽略的细节:分账(distribute)和提款(withdraw)是两个动作,钱分配到你的份额后,还需要你自己或代你操作的人执行 withdraw,才会进入你的钱包。
比例:百分比总和必须是 100,填错会卡住资金
创建 Split 时,每个收款人对应一个 percentAllocation,所有收款人的百分比加总必须精确等于 100(在合约内部以 1e6 为单位表示,即 100% = 1,000,000)。如果总和不对,合约部署或后续更新会失败。在 Liquid Split 的场景下,官方文档明确警告:如果百分比总和不等于 1e6,Split 将无法更新,资金会被卡住。这不是理论风险,是部署前必须核对的一个数值。
收款人可以是任何能接收 ETH 和 ERC20 的 EVM 地址,包括其他 Split 合约或智能合约。如果你有大量收款人,Splits 支持通过 CSV 上传地址和比例,但官方建议收款人数量控制在 2,000 以下,这是基于区块大小的技术限制。
控制权:设不设 controller,决定了这个 Split 能不能被改
controller 是创建 Split 时指定的一个地址,拥有单方面修改收款人和比例的能力。Splits 官方文档把它描述为"Split 管理员",并直接指出:一个 Split 的可信程度,取决于它的管理员有多可信。
不设 controller 的 Split 是不可变的(immutable),创建后永远无法修改。这是最安全的选择,适合你已经确定分配方案、不需要再调整的场景。一旦设了 controller,它可以随时把 Split 改成不可变,但反过来不行——不可变的 Split 永远无法变回可变。
如果你需要灵活性,但不想把控制权交给单个人,可以把 controller 设成一个多签钱包。这样修改规则需要多个签名者同意,降低了单点风险。这个选择在创建时就要做,事后无法通过普通操作把不可变 Split 加上 controller。
领取:分账和提款是两步,不是一步
很多人以为钱到了 Split 地址,自己那份就会自动进钱包。不是这样。Splits 采用 pull-based 支付模型:资金先留在合约里,执行 distribute 时按比例分配到每个收款人名下,但钱还在合约中,收款人需要再执行 withdraw 才能提到自己的地址。
distribute 是一个无需许可的操作,任何人都可以触发,不需要是收款人本人。执行时有两个选项:"Distribute and keep balance within Splits"(只分配,收款人后续自己提)或"Distribute and withdraw for each recipient"(分配并立即替所有收款人提款,一步到位)。
这里有一个不可逆的节点:一旦执行了 distribute,资金就永久分配给当时的收款人,无法撤回或重新分配。无论 Split 有没有 controller,分配后都不能再改。这意味着如果你是一个可变 Split 的 controller,在分配之前修改收款人或比例,新的收款人会拿到这笔余额;但分配之后,钱就归当时名单上的人,改名单也追不回来。
Liquid Split 的额外分支:所有权是 NFT,可以转卖
如果你创建的是 Liquid Split,控制权的逻辑不同。Liquid Split 用 ERC-1155 NFT 代表份额,初始铸造 1,000 个 NFT,每个收款人按比例获得对应数量(比如 20% 的收款人拿到 200 个)。NFT 持有者就是收款人,持有者可以把 NFT 转给别人,份额随之转移。
但这带来一个需要核实的风险:Liquid Split 的 NFT 只代表"尚未被分配的资金"的索取权。因为收款人名单是在每次 distribute 时根据 NFT 持有者更新的,卖家可以在把 NFT 转给你之前,先触发一次 distribute 把当前余额分走,你拿到的 NFT 对应的是一个已经被清空的合约。购买 Liquid Split NFT 时,不能假设它自动附带合约里现有的余额。
Liquid Split 的分配需要额外 gas 来更新持有者名单,官方建议把分配激励设得稍高一些(约 2-3% 而非 1%)。收款人数量也建议不超过 500,以避免触及交易 gas 上限。
完成标准
不是"创建了 Split",而是:你确认了所有收款人地址正确、百分比总和精确为 100;你根据是否需要日后调整,决定并设置了 controller(或明确选择不可变);如果有资金进入,你或任何人执行了 distribute,并且收款人确认份额已在合约中可提取(或已通过"distribute and withdraw"直接到账)。 如果你是收款人而非创建者,去 Splits 界面查看该 Split 的详情页,确认你的地址在收款人列表中、比例正确,并且当前是否有已分配但未提取的余额。如果资金已经 distribute 但你没收到,检查是否需要手动 withdraw。



