ZCF提出解决零确认交易安全问题新方案

159 阅读3分钟

北京时间21日8点左右,r/btc论坛出现一篇帖子《Solving the 0-conf problem using forfeits》(使用罚金程序解决0确认安全问题),作者为awemany。该文章提出了一种有效方案用于提升0确认交易的安全性,文章引起了论坛的广泛关注。

0确认交易(Zero Confirmation Transaction )一直是BCH社区讨论的重点,也是一个极为重要的方向,0确认交易是指交易卖家无需等待该笔交易被区块链网络节点确认,即交付出售的东西,以达到即时交易的目的。目前BCH链上交易一般需要10分钟左右的时间来打包区块、验证交易,也就是说正常情况下完成交易需要等待10分钟,这对于零售商来说明显是不可接受的。为了解决这一问题,0确认交易应运而出,0确认交易极大的提升了交易速度。但同样的,0确认交易在没有被彻底写入区块的时间里完成交易,自然带来了双花交易的风险,用户可能会利用0确认的风险将一笔钱花两次(欺诈行为),为商家带来了损失。

通常情况下,一般0确认交易被认为是低风险的,面对面的交易中风险被控制的很低,因为面对面意味着可以通过区块链技术手段之外的方式来确保安全。目前来看0确认交易发生双花的概率一直在1%以下,对于小额交易的零售商来说,这完全属于可接受的范围。但用于大额交易时零确认这1%以下的代价就显得尤其昂贵,从技术层面解决这一问题的呼声也越来越高。社区已经提出了各种各样的解决方案,预共识、弱区块等,但由于各种原因,这些方案的进展都极为缓慢。

awemany提出的方案是使用惩罚金措施来减少用户的欺诈行为,使用通常的零确认支付方法,但为交易添加一个特殊的罚款功能,试图发动双花的欺诈者将受到惩罚。在两个月后OP_CHECKDATASIG和OP_CHECKDATASIGVERIFY操作码上线,就可以用自动化的方式实现这样的罚款,作者将此方案命名为Zero Confirmation Forfeits(0确认惩罚金),简称ZCF。

双花交易方式是重复花费其输入之一,并且双重支出其中一个输入意味着创建两个对同一个公钥有效的不同签名。因此如果商家希望使用ZCF,商家将要求用户进行这种结构的交易:

输入: [P2PKH inputs 1] ... [P2PKH input I]

输出: [any-type-output 1] ... [any-type-output O] [Forfeit Output]

[Forfeit Output]是关键要求,而所有输入都是P2PKH类型以及来自不同地址也很重要(否则,客户将默认丢失它),满足这两个关键条件才可以视为该笔0确认交易是通过Zero Conf Forfeit(ZCF)的方式完成的。[Forfeit Output]是P2SH输出、支付特别准备的罚款脚本。 这个forfeit脚本将允许使用包含just的scriptSig来消耗输出,在矿工发现用户试图尝试发动双花交易时将没收Forfeit Output的罚金,对于矿工来说,这也是鼓励矿工发现全网双花交易的措施,对于用户来说,双花交易需要支付双倍的成本,双花交易代价昂贵,自然减少欺诈行为,从而有效的提升0确认交易的安全性。

对于BCH网络来说0确认交易的及时性是提升其交易性的重要途径,ZCF提出了一个创新性的解决方案,或许未必是最优解,但也提供了创新的思路,社区也欢迎其他更优秀的方案。​​​​