以太坊升级完成你也做不出爆款应用,因为你不知道这个!

2019-04-20 13:30

大神告诉你,如何玩转 DApp 生态、开发一款爆款应用?2Pa币知区块链

2Pa币知区块链

作者 | Michael Yuan,CyberMiles 首席科学家2Pa币知区块链

出品 | CSDN、区块链大本营2Pa币知区块链

据 etherscan.io 数据显示,经历一波又一波「挫折」后,今日凌晨 03:52,以太坊区块高度达到 7280000,君士坦丁堡及圣彼得堡硬分叉完成,以太坊升级成功!对于区块链开发者而言,此次升级意味着什么?主要表现在:2Pa币知区块链

EIP145 和 EIP1052 通过提升智能合约的验证速度,能有效改进某些大型智能合约的运行时间和成本。简而言之,此次升级对开发者是极为友好的。2Pa币知区块链

但俗话说,「打铁还需自身硬,磨刀不误砍柴工」,对以太坊开发者而言,要开发一款可规模落地、用户体验极棒的 DApp,全面了解以太坊 DApp 生态则显得尤为必要。2Pa币知区块链

互联网是一个去中心化的网络。相较于传统客户端/服务器应用,互联网的巨大优势在于其提供了开放、透明、公平的竞争环境。更多的竞争意味着更多的创新,这最终体现在为消费者提供更好的用户体验。其余的都是历史,互联网已经胜利了。2Pa币知区块链

但 Web 时代和移动时代的应用再次以效率的名义出现了强大的权力集中。通过在单一平台提供方下聚合所有的数据和服务,互联网应用变得更加好用,并且也易于盈利。然而,正如最近公众对 Facebook、Google、Uber 等互联网巨头强烈反弹所表现的那样,互联网应用的中心化已经使得互联网的体验逐步变差,甚至与上一代公司所建立的私有网络一样糟糕。2Pa币知区块链

在中心化的互联网上,用户没有隐私可言,也无法从自己的数据中获益。在没有制衡的情况下,大公司制定、操纵并执行规则来使自己利益最大化,而小商家在这些中心化平台上的利润空间不断萎缩。2Pa币知区块链

去中心化的应用(DApp)是下一代开放式网络应用程序。DApp 使用公共区块链来存储关键数据,而不是使用不透明公司的私有数据库。公链的数据是透明的、不可篡改的,并且用户能够通过私钥直接控制自己的数据。2Pa币知区块链

如同 Web 或移动互联网的早期阶段,开发者社区仍在探索构建复杂且高度可用的 DApp 的最佳方法。今天,DApp 架构、开发者工具和部署环境都难以使用甚至难以理解。这对广大开发人员造成了很高的门槛。2Pa币知区块链

在本文中,我会介绍当前最新的 DApp 开发技术基础架构和工具,解释一些术语并为开发人员开发 DApp 提供实用指南。2Pa币知区块链

与传统的 Web 应用不同,DApp 的核心数据和事务逻辑存储在公链上。部署在区块链上的全自动不可更改的软件称为智能合约。在智能合约内部,数据和操作可以精细化到只允许特定的账户持有者访问,从而实现了个人的数据所有权。2Pa币知区块链

DApp 的 Web 或移动前端 UI 是任何人都可以部署的应用程序。它们与区块链智能合约进行交互。前端应用程序可以建立自己的数据库来存储非核心数据。但是由于核心数据和逻辑位于公链上,因此任何人都可以创建和部署前端应用程序,这就是 DApp 名字的由来。DApp架构如下图:2Pa币知区块链

2Pa币知区块链

DApp架构智能合约2Pa币知区块链

智能合约是 DApp 的核心,是公链上的不可变软件。当满足预设条件时,运行区块链的公共节点计算机会自动执行智能合约的代码。2Pa币知区块链

2Pa币知区块链

智能合约路径2Pa币知区块链

接下来,继续探讨智能合约开发所需的软件。2Pa币知区块链

编程语言支持2Pa币知区块链

开发人员可能会用到如下编程语言:2Pa币知区块链

Solidity由以太坊开创,是目前使用最广泛的智能合约编程语言。Solidity 语法简单,侧重代码的确定性行为,这是区块链共识的关键要求。也就是在运行智能合约代码时,所有的节点必须产生完全相同的结果。Solidity 目前是开发者首选的智能合约编程语言。2Pa币知区块链

Vyper与 Python 类似,是以太坊虚拟机的编程语言。与 Python 不同,Vyper 删除了语言中所有的非确定性功能。相较于 Solidity,Vyper 设计地更加容易使用,目前仍处于测试阶段。2Pa币知区块链

Lity是一种新的智能合约编程语言,对 Solidity 进行了扩展,为其添加了新的语言功能和操作码。Lity 针对商业用例优化了 Solidity 和以太坊虚拟机。例如,通过名为 libENI(以太坊本地接口)的机制,Lity 允许区块链虚拟机动态添加本机 C++ 扩展,这让虚拟机能够为某些计算任务提供专门的优化以实现高性能。Lity 还支持新的语言结构,例如构建基于规则应用的正式规则语言。2Pa币知区块链

C / C++是像 EOS 一样基于 WebAssembly 的区块链虚拟机选择的编程语言。但是 C / C++ 和 WebAssemly 并不是为区块链所需的确定性共识而设计的,使用 C / C++ 的修订版本存在着学习曲线。同样,由于 WebAssembly 通过 LLVM IR 可以支持多种通用编程语言,所以理论上,基于 WebAssembly 的区块链虚拟机可以使用几种不同的语言。但实际情况是,要支持除 C++ 以外的任何 LLVM 语言,社区仍然需要做大量的工作。2Pa币知区块链

Lua是一种轻量级的脚本语言,通常用于嵌入式硬件应用。由于Lua虚拟机轻巧且易于使用,因此有时会在区块链系统中用作智能合约虚拟机。不过这种情况并不常见。2Pa币知区块链

编译器和部署工具2Pa币知区块链

为了编译和运行智能合约,你需要工具。更准确点,需要组合工具。接下来,我们将重点放在以太坊生态系统中的工具,因为这是使用最广泛的工具。2Pa币知区块链

1、编译器和区块链节点2Pa币知区块链

编译器将智能合约构建为字节码(bytecode),区块链节点将字节码部署到区块链上以供下一步执行。2Pa币知区块链

Solidity 的编译器是 solc。运行 GETH 或 Parity 的以太坊节点可以上传并部署 solc 编译过的字节码到以太坊网络上。2Pa币知区块链

Lity 的编译器是 lityc,它在 solc 之上提供了合规性和附加安全性检查,并且支持 Lity 特定的语言功能和增强功能。通过Travis节点软件,可以将编译后的Lity应用程序部署到 CyberMiles区块链。2Pa币知区块链

2、Remix和MetaMask2Pa币知区块链

Remix 是基于 Web 的 IDE,用于编辑、编译、测试、部署和运行 Solidity 智能合约。Remix 可以在 Chrome 浏览器中编译和测试智能合约。2Pa币知区块链

然而,为使 Remix 与像以太坊、CyberMiles 这样的公链一起工作,其必须与”钱包”应用协同工作。因为很多区块链上的智能合约操作,如部署、创建新的合约,调用合约功能,都需要支付小额 gas 费。在以太坊上,Remix 需要 MetaMask 钱包才能运行。2Pa币知区块链

Remix 和 MetaMask 的组合适用于基于图型界面的重复手动开发。2Pa币知区块链

3、Truffle 和 Infura2Pa币知区块链

Truffle 和 Infura 为命令行和自动化开发过程设计。2Pa币知区块链

Truffle 使开发者从智能合约和 DApp 模板开始,构建越来越复杂的应用程序。Truffle 为在本地以太坊虚拟机上构建和测试智能合约提供了命令行工具。与 Infura 等公共以太坊节点服务提供商一起,开发者可以使用 Truffle 在公链上部署智能合约,并调用智能合约上的功能。2Pa币知区块链

去中心化的应用程序2Pa币知区块链

一旦我们构建并测试了智能合约,就可以构建 DApp UI,让用户与智能合约进行交互。2Pa币知区块链

不同于依赖中央服务器的的 Web 应用,DApp 可以在用户自己的机器上存储管理用户数据,并利用包括区块链服务在内的多个后端服务来实现去中心化。2Pa币知区块链

DApp 通常作为 JavaScript 应用程序的客户端在用户的设备中运行。DApp 的主要功能是提供用户界面,与核心数据和应用程序逻辑的区块链智能合约进行交互。DApp 还可以与其他公共服务,甚至是本地服务进行交互,以存储和管理链下数据。例如,DApp 可以利用 HTML5 本地存储 API 来存储特定于此设备上的用户数据。2Pa币知区块链

你可以用任何 JavaScript 客户端框架编写 DApp,热门的例子包括 jQuery 和 ReactJS。 在 Tuffle 项目中,你也可以找到好些用 JavaScript 框架创建的 DApp 模板。2Pa币知区块链

2Pa币知区块链

DApp设计路线1、Web3 库2Pa币知区块链

JavaScript 应用程序通过名为 web3.js 的库与区块链服务相连接。目前,web3.js 仅支持以太坊区块链,并且尚未达到1.0版本。然而,web3.js 仍然是连接 DApp 与区块链服务最广泛应用的库。2Pa币知区块链

与以太坊兼容的区块链需要自己定制的 web3.js 版本。例如,CyberMiles 区块链提供了 web3-cmt.js 库(也称作 Mercury),与 web3.js 向后兼容,但支持 CyberMiles 在其 web3.cmt 包下的增加的交易类型。2Pa币知区块链

这个 web3.js 库需要一个私钥来签署发送给区块链的交易与代码。就像我们已经讨论过的那样,区块链账户的私钥由钱包应用程序存储和管理。DApp 应该与兼容的钱包应用程序结合使用,如 MetaMask,Venus 或者 CMT Wallet。这样的钱包也被称为 Web3 提供方。DApp JavaScript 代码应该检测 Web3 提供的对象的可用性和有效性。2Pa币知区块链

MetaMask是以太坊官方的测试链和主链的 Web3 提供方。它为 Chrome 浏览器上的所有 Web 应用程序提供 Web3 实例。2Pa币知区块链

Venus(MetaMaskforCMT)是 CyberMiles 区块链在 Chrome 浏览器的 Web3 提供方。2Pa币知区块链

CMT Wallet为移动端应用程序提供 Web3。这些程序以移动网页的形式在 CMT Wallet 内打开。以太坊也有类似的移动钱包,如 Trust Wallet 可以运行以太坊 DApp。2Pa币知区块链

Venus 和 CMT Wallet 都为 DApp 提供了 web3-cmt 对象,以便与 CyberMiles 测试链和主链进行交互。2Pa币知区块链

在 web3.js 以外,ethereumJS 库可以在没有钱包应用的情况下签署以太坊交易。但是,要执行此操作,JavaScript 代码必须能够访问账户私钥。ethereumJS 库提供了一个 JavaScript 库,用于在 DApp 中实现嵌入式钱包。2Pa币知区块链

注意:Scatter 这样的跨链应用程序与钱包相类似,但是用于运行 DApp。Sactter 提供了 JavaScript 对象来签署和提交区块链事务。2Pa币知区块链

2、外部服务2Pa币知区块链

DApp 在区块链智能合约上只存储核心逻辑和代码。在区块链上存储大量的数据太慢并且过于昂贵。大多数应用还需要媒体文件,数据库和其他链下数据才能运行。2Pa币知区块链

DApp 可以利用线上服务来存储和管理数据,下面是一些例子。2Pa币知区块链

IPFS 是基于区块链的媒体文件存储和交换服务协议。DApp 可以在 IPFS 上存储大型用户文件,并使它们易于访问。2Pa币知区块链

Swarm 是一个基于以太坊的文件存储和共享解决档案。2Pa币知区块链

Github、Dropbox 和 GoogleDrive 等传统互联网文件分享服务可以给 DApp 用户提供链下文件存储和共享服务。2Pa币知区块链

DBaaS(DataBase即服务) 提供者,如 MicrosoftAzureSQL、AWSRelationalDatabaseService(RDS)、Google BigQuery、MongoDB Atlas,可以为 DApp 提供数据库服务存储。2Pa币知区块链

一个确保链下数据安全不可更改的常见设计实践是:将链下文件数据的哈希值存储在链上智能合约。2Pa币知区块链

总之,DApp 比大多数 Web 应用更复杂。从一开始,你需要设计程序的哪一部分是基于区块链智能合约,哪一部分利用链下服务器端数据,哪一部分是客户端 UI。以上每一个部分都需要一组软件栈来运行,并与应用的其他部分进行交互。2Pa币知区块链

声明:本站部份文章由机器搜集自互联网,若无意冒犯了您的版权或知识权利,请联系我们(bizhibtc@163.com)!我们将在最迟30个工作日内撤除您的权利内容。
警示: 阁下应知投资决策不能依赖于本网站的任何内容,并以此做为决策依据!

上一篇:以太坊基金会发放第五批科研奖金 这7个项目获得青睐

下一篇:FATF发布打击洗钱的数字资产初步指南

分享到:
相关阅读
友情链接
© 2018 币知区块链 http://www.beezhi.com/ 中国互联网举报中心 京ICP备18035806号-1 网络文化经营许可证 跟帖评论自律管理承诺书 违法和不良信息举报:bizhibtc@163.com '); })();
文章评论 相关阅读
分享到:
© 2016 币知区块链 http://www.beezhi.com/ 中国互联网举报中心 京ICP备18035806号-1
违法和不良信息举报:bizhibtc@163.com '); })();