写点什么

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

借助渐进式安全概念与几种特定解决方案,就可为用户提供如 Web2 一样的简单入门途径。

2019 年 11 月 12 日

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


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


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


  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


2019 年 11 月 12 日 16:281222

评论

发布
暂无评论
发现更多内容

两边夹的应用

孙苏勇

算法 积水问题 两边夹

凡事必先骑上虎背

ikook

学习 态度 方法论

黄金思维圈,养成透过现象看本质的能力

非著名程序员

读书笔记 程序员 程序人生 提升认知

2019 年

贾献华

2020 2019 总结 日历 计划

阿里笔记之数据模型

迹_Jason

大数据

聊聊:Python

谢烟客

Python 人工智能 编程

微服务架构深度解析与最佳实践 - 第五部分

kimmking

微服务 微服务架构 最佳实践 深度解析 高可用

最近看了两本书:The Rules of Life 和 Make Big Happen

霍太稳@极客邦科技

创业 团队管理 自我管理

程序员职业生涯的八点感想

池建强

程序员 职业

归去来兮:递归

曲镇

算法

你不是迷茫,只是缺乏目标

ikook

学习 身心健康 方法 自我管理

亚马逊云 AWS LightSail 搭建高性能 LNMP 环境并安全部署 Wordpress

小蚂蚁(Snow Hide)

Nginx PHP-FPM Wordpress 部署 SELinux 安全上下文配置 亚马逊云 AWS Lightsail 安全

一文讲清楚 MySQL 事务隔离级别和实现原理,开发人员必备知识点

古时的风筝

MySQL 数据库 事务隔离级别 mysql事务 数据库事务

一个独立开发者,他是如何做到月入 20 万的?

非著名程序员

程序员 独立开发者 副业赚钱 开发者 程序人生

申请鲲鹏920测试机试水+编译nginx

草宝虫

鲲鹏920 centos7 nginx编译 armv8

求稳不得

孙苏勇

职业 发展 职场

微服务架构深度解析与最佳实践 - 第四部分

kimmking

微服务 微服务架构 最佳实践 深度解析 高可用

微服务架构深度解析与最佳实践 - 第七部分

kimmking

微服务 微服务架构 最佳实践 深度解析 高可用

微服务架构深度解析与最佳实践-第二部分

kimmking

微服务 微服务架构 最佳实践 深度解析 高可用

小程序的当下和未来可能 | GMTC.2019深圳站演讲文稿

崔红保

小程序 uni-app

微服务架构深度解析与最佳实践 - 第三部分

kimmking

微服务 微服务架构 最佳实践 深度解析 高可用

一个运营经理人的工作两周年总结

霍太稳@极客邦科技

高效工作 身心健康 项目管理 自我管理

数据分析师应该了解的数据湖

数据社

大数据 数据仓库 数据湖 数据分析

微服务架构深度解析与最佳实践 - 第六部分

kimmking

微服务 微服务架构 最佳实践 深度解析 高可用

越是困难,越是要做有分析判断能力的人

霍太稳@极客邦科技

创业 团队管理 个人成长

两边夹的应用二

孙苏勇

算法 两边夹 重排序 函数式接口 Lambda

【译】Rust 开发者的2019

Michael Yuan

程序员 rust

浅谈数据中台

数据社

大数据 数据中台 数据仓库

微服务架构深度解析与最佳实践-第一部分

kimmking

微服务 微服务架构 最佳实践 深度解析 高可用

微服务架构深度解析与最佳实践(全篇汇总)

kimmking

微服务 微服务架构 最佳实践 深度解析 高可用

平均响应1000ms到200ms,PHP和Go那家强?

拖地先生

php 架构 性能优化 后台开发 运维

Leader修炼指“北”:管理路上的大小Boss

Leader修炼指“北”:管理路上的大小Boss

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