ArchSummit全球架构师峰会门票9折倒计时中~ 了解详情
写点什么

给 Web 开发人员的以太坊入坑指南

  • 2018 年 11 月 26 日
  • 本文字数:1760 字

    阅读完需:约 6 分钟

给Web开发人员的以太坊入坑指南

以太坊现在各种学习资料数不胜数,但由于以太坊正处于飞速发展阶段,有些学习资料很快就过时了。所以想找到有价值的资料无异于大海捞针。我费了很大功夫,才建立起对以太坊的整体认识,搞清楚它的工作机制。我相信很多跃跃欲试的开发人员正面临着跟我一样的问题,所以我把自己的认识整理出来,希望能对大家有所帮助。


对于 web 开发人员来说,webapp 的客户端服务器架构很清晰。


我们一般会把 web 程序部署在 AWS、Heroku 或某个云平台提供的云主机上,所有客户端都跟这个中心程序交互。这些客户端可能是浏览器,也可能是使用 API 的其它程序,不管怎样,总是客户端发起请求给服务器,服务器再跟数据库或缓存交互,读/写/更新数据库中的数据,然后给客户端发送一个响应。


大部分情况下,这个架构很好用。但有时候,如果数据库是公开的,所有人都可以安全地访问,不用把数据全权交给 webapp 的控制者,对你来说真的非常重要。


比如说你是 eBay 上的明星卖家,已经赚了上千个好评了。但不知为什么 eBay 忽然把你的账号给封了,这可能会让你损失惨重,甚至给你的生意带来毁灭性的打击。如果能把顾客对你的评论和打分都挪到另外一个平台上,比如到 eBay 的竞争对手那里,你是不是马上就会有种绝处逢生的感觉?


虽然 eBay 还充当着买卖双方的担保人,但每一笔生意他都是要抽取佣金的。如果不需要担保人,买卖双方不仅能降低交易成本,并且还能访问到自己的所有数据,你是不是会觉得特别理想?去中心化应用就是要帮你实现这个理想,而以太坊会让 DApp(去中心化应用)的搭建变得非常轻松。


以太坊 DApp 的架构如下所示:



如果仔细观察,你会发现所有客户端(浏览器)都是跟自己的程序实例通讯的,不再连到一个中心服务器上。这就是说每个想要跟 Dapp 交互的人都要在自己的电脑/手机上跑一份完整的区块链,也就是说想用这个程序,你必须先把整条区块链全都下载到本地。乍一看你可能会觉得这很搞笑,但这样确实能解决对中心服务器的依赖问题。


实际上也并不需要真的把整条区块链都下载下来,有几种两全其美的办法,既能得到去中心化的好处,又可以快捷地完成交互。


那么区块链究竟是什么呢?


  • 数据库:以太坊网络中每出现几笔交易,就会打包成一个区块,并且每个新的区块都会连到区块链的最后一个区块上。所有的交易数据都放在这些连在一起的区块里,这就是区块链。如果 eBay 用区块链做数据库,那么买卖双方之间发生的所有交易,不管是销售、退款,还是纠纷,都被记录在区块链上,并且所有人都能看到。为了确保网络中所有节点都有相同的数据副本,同时也为了确保写到这个数据库中的数据都是有效的,以太坊用了一种被称为工作证明的算法。

  • 代码:刚才只是介绍了区块链作为数据库存储数据的一面。但购买、销售、取消订单、退款等诸如此类的业务逻辑要放在哪里呢?在以太坊上,我们用一种被称为 Solidity 的语言编写程序代码(被称为合约)。然后再用 Solidity 编译器将这些合约编译成以太坊字节码,部署到区块链上。虽然目前能够编写合约的不止 Solidity 一种语言,但其他语言相对来说要小众得多。

  • 所以我们基本上可以说,区块链存储你的数据,存储你的代码,还在 EVM(以太坊虚拟机)上运行这些代码。


为了搭建在 web 上运行的 dapp,以太坊推出了一个 Javascript 库,web3.js,它可以连接区块链节点。所以我们只要把这个库加到自己熟悉的框架中就可以了,比如 reactjs、angularjs 或 vuejs。


这个平台的另一个重要特性是它的金融功能。如果我告诉你,只要用上 dapp,就会给你一个银行账户,你会不会觉得很吃惊?实际上不是一个银行账户,而是随便你创建多少个账户都行。这些账户被称为钱包,用来存放你的以太币(以太坊体系内所用的货币)和交易。


本文没有介绍区块链的内部工作机制,因为我想一篇文章能完成一件事情就够了,这里的重点是让你了解基于区块链的 dapp 跟中心化的 webapp 有什么不同。希望你现在对以太坊是什么,以及怎么用它搭建去中心化应用程序有了一个清晰的总体认识。


原文链接:https://medium.com/@mvmurthy/ethereum-for-web-developers-890be23d1d0c


活动推荐


12 月 7 日北京 ArchSummit 全球架构师峰会上,来自阿里、京东、360 的讲师齐聚一堂,共同分享“分布式 BaaS”、“区块链安全”和“智能合约”等区块链技术相关经验与实践。详情点击 https://bj2018.archsummit.com/schedule


2018 年 11 月 26 日 17:561578

评论 1 条评论

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

申通快递 双11 云原生应用实践

阿里巴巴云原生

阿里云 Kubernetes 运维 云原生 监控

大厂都是怎么用Java8代替SimpleDateFormat?

Java架构师迁哥

原创 | 使用JPA实现DDD持久化-数据库连接配置:persistence.xml

编程道与术

Java hibernate 编程 mybatis jpa

三分钟带你搞懂分布式链路追踪系统原理

Java架构师迁哥

如何用CSS实现图像替换链接文本显示并保证链接可点击

陈北

CSS小技巧

容器化时代到来!跳转机分配问题终于“有救”了

华为云开发者联盟

容器 镜像 网络

《迅雷链精品课》第七课:以太坊数据存储分析

迅雷链

区块链

架构师训练营第 1 期-week10

习习

云原生应用Go语言:你还在考虑的时候,别人已经应用实践

华为云开发者联盟

微服务 云技术 Go 语言

有奖话题 | 如果程序员和产品经理都会凡尔赛文学,将如何对话?

YourBatman

话题讨论 凡尔赛文学

原创 | TDD工具集:JUnit、AssertJ和Mockito (二十七)运行测试-在构建工具中运行测试

编程道与术

Java 编程 TDD 单元测试 JUnit

LeetCode题解:169. 多数元素,分治,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

我是面试官,我来分享一波面经!看看我的内心OS

比伯

Java 编程 架构 面试 技术宅

基于DAYU的实时作业开发,分分钟搭建企业个性化推荐平台

华为云开发者联盟

华为 算法 数据 dayu

《华为数据之道》读书笔记:第 3章 差异化的企业数据分类管理框架

方志

数据中台 数据仓库 数据治理 元数据

什么是堡垒机?为什么需要堡垒机?

xcbeyond

运维

纷享销客罗旭:拐点下的中国SaaS

ToB行业头条

SaaS

性能测试界“网红”云性能测试服务,了解一下?

华为云开发者联盟

CloudTest 沙箱实验 云性能测试

为什么程序员不做外包

Java架构师迁哥

理解三值逻辑与NULL,你离SQL高手更近了一步

华为云开发者联盟

sql null 逻辑

马士兵最新2020涵盖P5—P8Java全栈架构师学习路线,跟着老师学我已拿P7Offer!

Java架构追梦

Java 学习 架构 面试 马士兵

英特尔与南京溧水经济技术开发区共同成立智能交通研究院

新闻科技资讯

接口请求(get、post、head等)详解

测试人生路

HTTP

程序员面试的时候突然遇到答不上的问题怎么办?

Java架构师迁哥

架构师训练营 1 期 -- 第十周总结

曾彪彪

极客大学架构师训练营

Alibaba最新《Java架构核心宝典》限时开放下载,互联网主流技术详解总结,提升技术能力的必备宝典!

Java架构之路

Java 程序员 架构 面试 编程语言

视频作品播放量低:自媒体作者如何走出新手村

石头IT视角

双指针算法和位运算&离散化和区间合并

落曦

打工人、打工魂、高效MES助力打工者都是人上人

Marilyn

敏捷开发 快速开发 MES系统

原创 | 使用JPA实现DDD持久化-只要O,忘记R & Maven配置

编程道与术

Java hibernate 编程 mybatis jpa

AI在游戏反外挂中的应用与实践

AI在游戏反外挂中的应用与实践

给Web开发人员的以太坊入坑指南_区块链_Mahesh Murthy_InfoQ精选文章