ZooBC 维基
交易

托管

托管是由链本身保管的一笔付款,直到第三方即审批人决定它是否成立。没有任何公司保管这笔钱,也不涉及任何合约代码:托管就是一笔普通的 SendZBC 或 TransferToken,只是其信封中多了一个部分,由链的固定规则来结算。它适用于送货、自由职业工作,或任何付款方希望有一位裁判的交易。

创建托管

交易的托管部分指定:

  • 审批人,即负责评判这桩交易的地址;
  • 给审批人的佣金;
  • 一个绝对的截止期限,以 Unix 秒计,晚于交易的时间戳;
  • 给审批人的指令,例如“收货后放款”,最多 128,000 字节,且不含零字节。

只有 SendZBC 和 TransferToken 可以携带托管部分。区块打包该交易时,发送方支付金额、手续费、佣金和托管租金,由链保管金额和佣金。在代币托管中,金额以该代币计,而手续费、佣金和租金都以 ZBC 支付。

四种结局

一个装着金额和佣金的托管箱,有四个出口:批准、拒绝、接收方谢绝和截止期限已过,每个出口都标明这两部分的去向
一个装着金额和佣金的托管箱,有四个出口:批准、拒绝、接收方谢绝和截止期限已过,每个出口都标明这两部分的去向
结局如何发生金额去向佣金去向
批准审批人发送 ApprovalEscrow接收方审批人
拒绝审批人发送 ApprovalEscrow发送方审批人
谢绝接收方发送 DeclineEscrowRequest发送方发送方
截止期限已过截止期限之后的第一个区块自动处理发送方发送方

无论批准还是拒绝,审批人都能赚取佣金,因为无论结果如何,评判这桩交易都是它的工作。如果接收方谢绝,或者无人及时采取行动,发送方会拿回这两部分。

ApprovalEscrow 的交易体为 36 字节:批准值和被托管交易的哈希。只有指定的审批人才能发送它。每个托管只结算一次,对已结算托管的第二次批准是付费空操作:它支付手续费,但不做任何其他事。发送方不能随意撤回付款:只有这四种结局才能结束一个托管。截止期限按前一个区块的时间戳来检查(见 有效期与时间戳)。

链把每个托管的状态记录为 0 待定、1 已批准、2 已拒绝、3 已过期或 4 已谢绝。

托管租金

托管在结算之前一直占用链的状态,因此除手续费之外还要支付租金:

escrow rent = storage price of the escrow part's bytes × lock duration in blocks ÷ billing period

租金在创建托管时扣除,进入长效池(见 资金池),并且无论结局如何都不退还。GET /api/v1/blockchain/estimate-fee 会在你签名之前报告这笔租金。

如果截止期限晚于该交易会被修剪的时间点,它就会被拒绝,除非该交易的存续押金支付了保存这么久的费用(见 付费保存数据(存续))。

托管请求:收款方先行

有时收款方希望自己设定条款。收款方用一笔 EscrowRequest 公布付款方、金额、审批人、佣金、绝对截止期限、指令,以及以区块计的注资窗口。付款方随后要么用一笔条款完全一致的托管 SendZBC 为它注资,要么用 DeclineEscrowRequest 谢绝它。条款不一致的注资交易是付费空操作。

多方托管要么携带接收方的联署签名,要么携带这样一个请求的 id。

另见