大家好,我是老梁。上一篇《开篇:数据交易落地以太坊业务流程》大致讲了一下我们落地以太坊PoC的流程,整体流程有了接下来就需要实现了。至于实现的基础当然最优先考虑是以太坊,在具体实施的时候还是遇到了不少问题。今天就介绍遇到的用户体验的一些问题和思考,抛砖引玉。
1. 加密数据搜索
买家购买数据的时候肯定需要通过一些维度对数据做一些筛选,例如:YourMechanic目前只需要美国用户的车辆电瓶数据。而用户的数据是加密保存的,要确保数据能够搜索筛选,我们采用了比较标准的Meta信息和数据本身分离的方式,也就是在数据加密保存的同时抽取出来对应的Meta数据,Meta是明文,而数据是加密的。同时,为了保证筛选搜索的速度,我们将数据的Meta信息做中心化处理。这些Meta信息包括:数据类型、国家/地区、车辆品牌/型号/年份等。因为Meta信息搜索这块并不属于核心流程,所以这部分采用中心化存储以提高效率。
2. 流程环节清晰
数据交易和传统交易其实非常类似,但还是有一些不一样,为了方便理解,增加了交易流程的步骤,可以让用户清晰的知道当前在哪一个步骤,并且通过详细的状态描述进一步说明清楚。目前交易步骤分为:数据选择、订单确认、智能合约创建、授权支付、卖家同意、数据下载。基于区块链的数据交易还是比较新的概念,通过借用传统交易流程的概念,也能让用户理解的门槛降低,了解下一步要做什么。
3. 流程响应延迟
在交易流程中,用户都希望速度快,能够有实时响应,但在我们这个PoC中有几个地方却有明显的延迟问题。例如:Smart Contract的创建,买家支付,卖家确认出售后Smart Contract转账给卖家,还有买家发出数据购买意向后等待卖家确认,最终下载数据的时候等待系统打包数据。虽然我们都知道交易打包需要时间确认,但对于不太了解区块链的用户来说这个延迟是比较难理解的。因为交易数量比较多,我们不可能支付较高的Gas,所以这类延迟不可避免。这时候可以通过明确提示降低用户预期,让用户能够随时刷新查看状态,状态变更第一时间通知用户的办法在一定程度上缓解这些问题。前面说到无法支付较高的Gas,是因为目前的业务主要面对的卖家是C端个人用户,这就导致单笔交易标的小、金额低,这种情况下Gas的成本就不得不考虑进去了。虽然现在以太坊上的Gas已经比年初的时候降低了很多,但是仍然不能忽略。这一部分也是接下来评估其他公链很重要的考察点。
4. 智能合约付款
在整个交易过程,最关键的是CAR币的支付转账。最开始设计的理想方式是在买家确认要购买数据后创建对应的Smart Contract,然后买家用手机的钱包扫个二维码将对应金额的CAR币支付到Smart Contract,激活Smart Contract开始执行。但在以太坊上实现的时候,发现在以太坊上不能将非ETH的Token支付到Smart Contract地址上再转账出去。目前变通的办法有点儿类似于信用卡预授权的方式,让用户提供相应钱包的私钥给Smart Contract,实现授权支付,合约执行的时候从这个授权的钱包上支付给卖家。对的,你没看错,让需要用户提供钱包私钥。这也是上一篇讲到的虽然在PoC上跑通能用,但最终推出的时候这样是无法接受的。因为钱包私钥对每个用户来说实在太敏感了,这个我就不多说了。当然不让买家提供钱包私钥,还可以通过MetaMask钱包插件的方式解决,由平台调起MetaMask插件通过加密的方式传递私钥,安全是有所保障,但这还需要所有买家安装MetaMask插件,也不方便。还有一种解决方案,就是上一篇说的,类似于中心化交易所,买家充值到平台,再由平台支付给卖家,但考虑到这会导致核心流程太中心化所以暂时也不考虑。这个问题目前在以太坊上还没有找到我们认为合适的解决方案,PoC暂时先用授权支付的方式跑通。这点也是后面评估其他公链一个很重要的考察点。
5. 用户数据下载
卖家同意出售数据后,这些数据通过重加密后提供给买家下载。标准的方式是买家将加密后的数据下载下来然后用自己的秘钥在本地解密成原始数据。目前为了方便PoC跑通测试,暂时采用买家在平台输入秘钥,线上解密后将原始数据发送给买家的方式。后面正式推出的时候,会调整这部分的实现。另外,采用离线解密的方式,还有两个潜在问题。一个就是买家拿到数据,能解开却说解不开,怎么办?这里还需要有一个在没有买家秘钥的情况下,零知识验证买家的秘钥是解的开加密数据包的方法。另一个是买家拿到原始数据后转手怎么办?需要一种可行的加数字水印的办法。这两个问题如何更好的解决,我们也还在研究中。
为了方便大家理解,把我们的PoC项目的基本操作流程录了一个视频,大家如果感兴趣可以看看。
点击查看视频:CarBlock POC demo
以上说到的部分问题和具体公链有关,但对于各个公链,个人认为没有所谓绝对的好和不好,而更多的是适不适合业务。所以,谈到的更多是从我们当前业务角度看到的问题,大家还是需要根据自己的业务需求来做判断,业务不一样判断不一样,千万别被带到沟里了。
这些就是我们落地过程中遇到的一些问题,和一些目前我们的想法。欢迎大家提出自己的建议或更好的解决思路,我也很期待和大家讨论。