分账策略与交易策略
有两项账户设置决定了哪些东西能到达一个账户。分账策略把收到的每一笔入账(无论是 ZBC 还是任何代币)按固定份额转给最多十个其他地址:可用于版税、合作伙伴之间的收入分成或自动储蓄。交易策略在两个方向上拒绝整类交易,例如,这样就没有人能向该账户发送不想要的代币。每项设置都用一笔交易设定,并一直有效,直到被更改。
分账策略
SetSplitPolicy 交易(类型 54)列出最多 10 个接收方,每个接收方都有一个以基点表示的份额(100 个基点等于 1%):
- 每个份额至少为 1 个基点,所有份额合计最多为 10,000(100%);
- 同一接收方不得出现两次,账户也不得指定自己;
- 每个接收方都必须能够持有资金。
交易体为 00 时清除该策略。
哪些入账会被分账
该策略适用于每一笔入账,包括 ZBC 和代币:付款、托管释放、触发器、流式支付的付款、归属付款、代币转账、交易成交、应用赔付以及奖励。它不适用于账户自有资金的退款(例如退回给发送方的托管款)、拉取模式的定时转账付款,以及跨链桥铸造。
每个份额为 floor(amount × basis points ÷ 10,000),未分配的部分(包括取整的余数)留在该账户中。份额不会层层传递:接收方自己的分账策略不会应用于它通过分账收到的款项,因此资金不会循环流转。交易策略拒收付款的接收方会被跳过,其份额留在该账户中。
在账户组中,只有控制者才能设置该策略,组的策略适用于发送给任何成员的资金。设有分账策略的地址不能加入账户组。
交易策略
SetTransactPolicy 交易(类型 50)在账户上存储一个 2 字节的掩码。每一位在两个方向上拒绝一类交易:账户既不发送也不接收这类交易。
| 位 | 类别 |
|---|---|
| 0 | 支付 |
| 1 | 应用 |
| 2 | 代币 |
| 3 | 交易所 |
| 4 | 数据存储 |
| 5 | 托管与多重签名 |
| 6 | 节点基础设施 |
| 7 | 桥接(AttestEvent) |
| 8 | 治理 |
少数类型永远不会被拒绝:Empty、SetTransactPolicy、SetSplitPolicy、存续相关的交易类型以及账户组相关的交易类型。
拒绝如何生效
策略所禁止的交易一经提交就会被节点拒绝。如果某个区块仍然携带了这样的交易,它会被退回:发送方支付手续费,但没有任何东西转移。只有交易信封中指明的接收方会被检查,而且是在交易执行时检查。链之后代表先前某笔交易所做的付款,例如定时转账付款、触发器释放和流式支付的付款,仍然会到达已选择拒收的接收方。
交易策略不是手续费设置,因为手续费由每笔交易的下限决定;它也不选择出块者,出块者由链抽签产生。关于共享账户成员的支出限额,见 账户组。