如何简化去中心化应用运行程序?

现代世界中的可扩展区块链,就如同沙漠中的一片体育场:配置豪华、容纳能力可观,但就是没人坐。

设想一下,如果我们想在区块链项目中试试水——比如想养只虚拟小猫或者是搞点卡片收藏,就目前来看,准备过程其实相当复杂,我们需要:

  1. 安装Metamask;
  2. 创建密钥对,安全存储私钥;如果之后需要通过其他设备进行访问,还需要了解如何将密钥传输到新设备当中;
  3. 在Coinbase上完成注册;
  4. 填写“了解你的客户”调查表单,包括向Coinbase提交信息文档;
  5. 等上好几天;
  6. 购买以太币。没错,如果不买币,连个游戏都玩不上!
  7. 从Coinbase处提取以太币;
  8. 最后,买下你的小猫!虽然游戏中的每一项操作都需要付费,但响应时间仍然长达恐怖的20秒以上。

在整个流程当中,将有95%到97%的用户选择放弃。这意味着每100个有意使用这些所谓现代游戏或者应用程序的用户,能够熬过准备阶段的只有5个甚至更少。

整个流程,大致可以分为以下三个子问题:

  1. 必须安装浏览器插件(或者钱包应用程序)以安全实现对链交互;
  2. 必须具备并理解公/私钥安全机制;
  3. 必须为每一项交易付费。

第1条和第2条很好理解,毕竟与区块链交互过程中的安全保障极为重要,用户当然不希望自己的资金或者资产随随便便就消失不见。而最后一项除了向矿工提供财务激励外,同时也给区块链自身提供安全支持——如果交易全部免费执行,那么一定会出现发送大量无用交易的DDoS攻击活动。

要想参与到以太坊或者NEAR之类的特定区块链生态系统当中,安装浏览器插件或钱包、在账户上购买部分资产,并在所有设备上设置正确的密钥对是必须完成的三项前提操作。对大部分用户来说,Web3应用程序运行速度缓慢,所以可能相对较易上手。但是,截至目前,大多数互联网用户还没有接触到区块链。如果希望进一步拓展潜在使用群体,那么第一步就是简化上手难度。

在理想情况下,在区块链上运行去中心化应用程序的过程,应该比构建NodeJS应用程序更简单。而且一旦应用程序部署到位,即使是从未接触过区块链的用户,也可以在浏览器中直接打开并轻松开始交互。

下面,让我们立足以上子问题,逐一考量目前区块链业界为其做出的改善性努力,以及如何在协议层面给出解决方案。

浏览器插件/钱包应用

只有在计算机上运行一系列自定义二进制文件,用户才能真正安全地同区块链交互。其背后的基本思路在于,我们在浏览器中打开的任何托管内容都由托管方全面控制,因此对方可以随意加以变更。即使托管解决方案保存有本地加密密钥,代码也可以从本地存储中获取数据并在将其解密后立即发送至远程服务器,由此完成与区块链的交互。

然而,我们想象一下最典型的例子:一个没有区块链账户的人,要如何购买加密货币?摆在面前的路只有两条:在本地设置账户并存入资金,或者将账户完全交由Coinbase这类集中服务托管商打理。人都怕麻烦,所以大多数用户会选择后者。

其他去中心化应用程序也存在类似的情况。当用户与区块链进行交互时,他们主要通过托管解决方案完成交互操作。虽然这种方式安全性较差,毕竟该集中实体会接管用户账户,但早期用户的损失顾虑不强,因此实际安全性至少也能与目前我们习惯使用的其他集中式服务持平。托管商掌握着大量资产与数据,所以用户基本可以信任他们。

另外需要强调一点:大多数人会在火狐或者Chrome的扩展目录中安装MetaMask,并从iTunes或者PlayStore处安装钱包应用,这就意味着我们已经对MetaMask/钱包应用开发商以及Mozilla、苹果或者谷歌等大型企业给予了信任。而且这个世界上毕竟没有那么多强迫症,绝大多数人并不打算在检查代码之后再安装MetaMask的开源版本。集中实体基本上还是靠得住的,我们的生活经历已经反复证明了这一点。

如今的开发人员已经能够将现有解决方案集成至去中心化应用程序当中,从而在无需安装浏览器插件及钱包应用(例如Portis)的前提下完成区块链交互。但此类服务的问题在于,一旦人们放心将自己的私钥对交给这类服务,那么账户安全将受到永久性损害。换言之,如果日后希望拿回账户资产的完全所有权,用户必须创建新账户并将资产全部转移过去。而一旦某些应用程序不提供便捷的资产转移功能,那么用户可能就彻底失去了对资产的完全控制能力。

一种解决方案是建立一个基于合约的账户,用户可以随时根据意愿替换并控制账户所使用的密钥。但要实现这一功能,用户必须在刚刚使用时就选定账户的基于合约属性。除了Portis等少数服务默认提供此类账户之外,大多数用户其实享受不到这项功能。此外,基于合约的账户无法像常规私钥保护账户那样执行所有操作,这一点也需要注意。

在NEAR当中,每个账户都默认基于合约创建,且NEAR提供对应的托管钱包。最终,用户可以利用托管的钱包与区块链进行交互,并随时通过本地创建的新密钥对完成账户更新,从而保障账户的安全性水平。

最近,社区中出现了我们非常赞赏的新表述:渐进式安全。随着时间的推移,用户对区块链的参与度与投资额日渐增长,用户完全可以从高可用性/低安全性逐步过渡至高安全性/低可用性。

##了解私钥/公钥对

如果渐进式安全最终能够得到广泛认可,同时托管钱包成为人们的首选,那么密钥对机制也将随之消失。简单来讲,托管钱包会将所有用户的私钥存储在自己的托管数据库当中,并直接向用户提供身份验证层。这一验证层允许用户使用Facebook账户登录、Google账户登录或者是更为传统的电子邮件地址加密码登录方式。只有在用户希望由托管钱包转换为本地钱包时,才需要正确设置私钥,并一步步学习如何将密钥转移到其他设备当中。

有趣的是,通过基于合约的账户,我们既能够轻松完成转移,又可保持全面的安全控制能力。相较于本地钱包通过非安全通道进行私钥转移的方法,基于合约的账户管理方案可提供以下两种方案选项:“proposeNewSk”与“approveSk”。

第一种方法可供任何人调用,用于向账户的私钥列表当中中添加新的私钥。第二种则必须利用账户中的某一现有私钥进行调用,并在验证通过后批准为账户添加新的私钥。如此一来,用户就可以在新设备设置全新的密钥对,从该设备上提出出新的私钥,再在原始设备上加以批准。

手续费区块链上执行的任何交易都会消耗大量资源。为了安全执行状态变更,参与区块链的众多节点都需要在应用状态变化之前对其进行验证。与大量资源相对应,交易的执行自然是有成本的。

将Web3与Web2进行比较,很多人会认定Web2服务在本质上是免费的,毕竟我们在Facebook上执行操作时并不需要缴费,但实际情况并非如此。如果用户的长期预期价值达不到响应其操作请求以及存储其发布数据所耗费的资源成本,那么Facebook方面根本不可能为用户提供免费服务。

在使用Facebook时,用户实际上是在用自己的个人数据付费,而且对Facebook的滥用行为无可奈何。以下截屏来自Facebook,其中包含的所有额外信息都由广告商发布:


(x的值是2)

对区块链来说,如果应用程序开发商认为用户的生命周期总价值高于交易手续费,那么当然也可以提供免费服务。这正是EOS项目提出的几个极具现实意义的倡议之一。

同样的,如果托管钱包能够从用户身上获得一定收益,那么他们当然也可以负担这部分常规支出。例如,NEAR可能会为每位用户承担一部分Gas交易手续费,并借此提高自身协议的普及度。CryptoKitties可以承担合约交互执行成本,毕竟CryptoKitties的用户拥有相当高的购买积极性,转化率也确实可观。

但这并没能彻底解决问题:虽然用户看起来不必为交易直接付费,但免费交易机制将导致垃圾操作的数量大量增加,并导致钱包托管商或者应用程序开发商不得不设置免费限额以避免交易执行成本的快速膨胀。

面对同样的问题,Facebook用户会注册多个账户反复利用免费限额。这类挑战并非区块链所特有,好在目前已经出现了不少解决方案。托管钱包可以选择一种来预防潜在的DDoS攻击,同时继续为用户提供免费的交易服务。

不过仍有其他问题存在。这种为用户承担费用、期望后续获得更高价值的商业模式极易遭到滥用。谷歌、Facebook以及苹果等科技巨头为此制定出不透明的隐私政策,这种对用户隐私权的践踏实际上也是防止滥用的手段。Web3虽然希望在基本设计层面排除这种作法,但为了吸引更多用户的参与,我们仍在有意或无意地采取类似的机制。

下面来说说最本质的区别。在Web3中,虽然用户默认享受的是以隐私换免费的机制,但我们可以随时切换为自主交易付款模式,从而为托管钱包或者浏览器扩展程序的使用带来新的选项。如此一来,我们就能真正控制自己的隐私权益。

总结

借助渐进式安全概念与以上提到的几种特定解决方案,我们得以为用户提供如Web2一样的简单入门途径,同时允许使用者随时切换至完整的区块链安全性水平。

原文链接:

On usability of blockchain applications

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章