---
title: '通过 ofo 退押金事件看区块链二层解决方案'
date: 2018-12-20
draft: false
summary: '借 ofo 退押金事件解释二层方案为什么会成为现实需求。'
slug: ofo-and-blockchain-layer2
tags:
- blockchain
- layer2
- payment
topics:
- blockchain
type: post
---
最近几天 ofo 退押金一直是个热门话题，据说排队退押金的人已经超过 1000 万了。 

像 ofo 这种退押金机制的关键问题是退押金必须和商家协作完成，如果商家不协作，或者故意制造门槛，用户就很难退押金。当然更恶劣的情况就是直接跑路了，比如各种美容店，健身房卷了会员充值的钱跑路的例子。

从法律角度说，用户给服务方的押金以及充值，都是服务方代管的资金，当用户没发生实际消费之前，服务方无权动这些资金。但钱都转到人家帐上了，如何防止被挪用？ 

那能不能设计一种非协作式退款提现机制，把充值资金托管给有公信力的第三方，比如银行，然后用户退款的时候直接和银行交互，无需商家协作？比如直接拿从银行给商家充值的订单退款？
<!--more-->

但实际上没这么简单，银行如何相信你没在商家的应用中花费掉了这笔钱？ 

![](./app-and-bank.png)

如图所示（画图水平有限，将就着看），应用服务器和客户端实际上是一个体系的，客户端依附于应用服务器，无法独立运行。应用系统和银行系统之间通过支付接口连接，应用自己的账本和银行的账本之间是没有关联的，一旦应用方中断和银行或者和客户端的连接，用户就无法提现，也无法向银行证明自己的在应用中的余额。 

要解决前面的问题，需要把关系调整为下面这样： 

![](./app-and-bank2.png)

应用的账本和银行的账本之间需要建立一种映射关系，相互关联起来。客户端是独立的，它保存了带有数字签名的证据，同时和应用与银行连接，如果应用自己中断和银行的连接，用户可以通过客户端直接向银行提供数字证据来完成退款，而不需要应用的协作。 

详细的说，要设计这样一个方案需要有以下关键点： 

1. 要找到这样一个有公信力（商家，用户都信任）的机构，如果只是一国内应用，就比较容易，比如银行吧。 
2. 要有一个账号，这个账号不受商家控制，用户直接把钱充进这个账号。 

1. 由于用户充值退款都是直接和银行交互，所以银行需要有一种机制通知商家有用户充值或者退款了。 
2. 用户中会有恶意用户，可能把钱消费了后迅速向银行发起退款。所以银行对退款必须有一个锁定期，这个锁定期内，商家可以提交证据，证明用户已经消费或者造成损失了，然后撤销退款。 
3. 而用户可能也会发现商家的作弊行为，比如私扣余额等，可以给银行提供证据，由银行裁决对商家进行惩罚。所以用户的本地客户端需要有离线能力，不能完全依赖商家的服务器，每次交易后，需要从商家获取证据，保存到本地，为以后提交证明准备。 
4. 由于银行实际上不可能保存用户在应用中的所有交易记录，它无法直接进行裁决，所以商家需要定期将自己本地记录的数据哈希（数据指纹），提交给银行，产生争议的时候，用户和商家互相举证进行挑战，证据需要和历史上提交的哈希相关。 

这个方案看起来好像有点复杂，估计没有一个银行愿意干这个事情，因为成本有点高。但如果把上面的所有的举证以及裁决都数字化，由程序完成，相当于一个应用对用户的公开可执行合约，托管在银行，实际上成本就可以接受了。 

熟悉区块链的朋友，可以看出上面的方案其实就是区块链的二层(layer2)方案的关键点，那个合约就是区块链的智能合约，这里的银行就是代表了区块链。区块链技术发展到现在，大家都认识到公链这样的全球共识系统本身成本肯定很高，很慢，短时间很难有大的突破，所以可扩展问题需要通过链外方案解决，比如交易所以及中心化钱包。但这些方案都完全依赖用户对这些服务提供方的信任，用户充值退款都需要服务提供方协作，一旦发生黑天鹅事件，出现 ofo 这样的情况还算好的，更恶劣的情况恐怕就是跑路了，而作为一个全球化的系统，用户想起诉估计都不知道找哪里的法院。 

所以区块链二层的各种方案主要焦距点是如何设计一种机制，一方面让服务提供方可以自证清白，建立公信力，另外一方面给用户提供一种额外的制约机制，让用户来监督服务提供方，一旦有问题用户可以通过一层的链来进行裁决。这样链主要关注于安全，相当于扮演一种法院的角色，只需要处理有争议的交易，二层主要关注性能和扩展性，区块链就可以应用到更广阔的场景中。 

![](./ofo.jpg)

一个行业中的企业如果不能自证清白，只能天下乌鸦一般黑，因为自我操守坚持不能形成竞争优势。比如有一个有良心的共享单车创业企业，承诺不挪用用户的资金，但它怎么证明自己呢？所有的企业在公开场景下都做这样的承诺，用户如何相信？如果你不挪用，别人挪用了，别人有了资金竞争优势，结果就是大家都挪用。而在前面的方案中，用户的资金是被锁在企业无法控制的账号中，并且用户可监督，就提供了这样一种证明机制。如果 ofo 现在有办法证明用户的押金都在，没有被挪用，未来也不可能挪用，用户可能就不着急退款了，越是不容易退，用户越要通过退款来验证，和银行挤兑一个道理。 

而从监督方面看，随着互联网的发展，支付交易凭据都电子化，用户对服务提供方的监督能力在降低。没互联网的时候，用户可以保留服务提供方的纸质凭证来作为证明。 

![](./deposit-book.jpg)

                  （图片来自新浪科技新闻 — 从现金到手机支付，你还记得记忆中的存折吗？） 

比如，现金时代，我们取钱存钱都通过存折，存折实际上提供了一种证据保存能力。用户取钱的时候可以校对余额，如果存折和银行数据不一致就很容易发现。但现在都用客户端 App，App 的数据都是直接从银行服务器上下载的，没有客户端校验机制。如果数据有误，但误差不大，有几个人可以发现？比如前一段时间的一个银行内部员工盗钱的新闻，最后还是银行内部对账发现。更严重的是，万一银行把用户的数据丢了，如果没有存折，用户如何证明自己有多少钱存款？登陆银行APP查看？数据都没了怎么登陆？ 

当前，用户将一个封闭账本体系里的价值转移到外部系统，是制约服务提供方的终极方式。比如 ofo 退款，比如从交易所提出比特币，比如从银行把现金取出来。正是迫于用户提现的压力，服务提供方才会在意自己的信用。而区块链二层方案中，客户端的独立存证校验能力相当于重新实现了数字化的存折，并且把校验机制自动化。再配合数字化的举证和裁决，以及非协作式提现机制，就可以实现用户对服务提供方的监督和制约。 

写到这里，提一个值得思考的问题：充值到商家账本里的钱可以通过提到银行来进行制约，那如果未来货币完全数字化，没有了现金，用户把银行发行的数字货币提到哪儿去？这个问题会在后面一篇关于央行的数字货币的文章中分析。 

区块链的二层（layer2) 方案并不只是解决区块链自己造出来的问题，它具有普适性。虽然相关技术尚未成熟，但至少提供了一种解决思路。关于区块链二层的各种技术方案的详细对比，后面会写专门的文章进行分析。

最后再谈下对 ofo 的看法。ofo 的这个例子非常典型，无论结局最后如何，对未来的创业者以及用户都有警示作用。 有人觉得创业不易，这时候呼吁退押金好像有点落井下石。实际上我个人也挺愿意用这点押金去支持创业者，但关键问题是企业拿了用户的押金去创业，而用户有什么收益呢？成功了收益是创业者的，失败了用户的押金都没了。至少要明确告知用户这算作投资，做到风险收益对等才行。比如一个早期用户在 ofo A轮的时候加入，算 200 块入股，当时 ofo 融资 2500万人民币，估值大约 1 亿人民币左右吧。到 17 年 ofo E 轮融资估值到了 30 亿美元，市值涨了有 200 倍，用户的 200 块押金估值相当于 40000 元，如果 ofo 不倒闭，估计骑一辈子单车的钱也够了吧。用户愿不愿意拿 200 块堵一个一辈子免费骑单车的机会？当然，这样规模的股东是当前公司注册机制无法承载的，肯定需要组织以及金融模式上的革新，当然这就属于另外一个话题了。 

## 相关链接

1. [本文当前链接](/ofo-and-blockchain-layer2/)
2. [区块链的技术世界观](/blockchain-technology-overview/)
3. [无币区块链代表未来？浅谈联盟链以及对 Hyperledger、 Corda、FISCO BCOS 的比较](/consortium-blockchain-hyperledger-corda-fisco/)
