我学习以太坊区块链平台已经有一段时间了,这个真是让我越学越兴奋啊。网络上有很多关于以太坊的资料(文章,视频,平台官网),这些我们都很容易就获取到,由于平台还在快速迭代所以相关的资料内容普遍普遍滞后。自己基于所学整理了一个关于以太坊是什么,以及他是怎么工作的图。在开发者论坛以及线上社区中发现想了解这些新技术的人同样在学习的时候遇到了很多问题。这篇文章试图从一个web开发者的角度来解释以太坊。
 
如果你是一个web开发者,知道怎么很好的构架webapp的客户端以及服务端。
 

你有一个web应用托管在托管服务器上,像AWS,Heroku,VPS等,所有的客户端都是通过一个中心的应用程序进行交流。客户端可以是web浏览器,或者是其它的消费你程序的API等。当一个客户端像服务端发起一个请求,服务器会像变魔法一样喝数据库进行通信,对数据库进行增删改查,然后相应客户端请求。
 
这种结构大部分情况下都能很好的运行,但是如果数据库是公开的任何人都可以访问,那么有一些应用就会变得很有用,这样我就不用依赖上面的webapp来获取自己个人的数据了,也就是说我可以从其它渠道获取我的个人数据。
 
下面举例说明:例如eBay,如果你是一个超级卖家,已经获得了数百的好评。由于某些原因eBay封停了你的帐号。这事很糟糕会严重的影响你的生意。如果你能够把这数百的好评与评分转移到其他平台(eBay的竞争者)的话,这将是一件很赞的事情。eBay在买家和卖家之间提供了一个第三方信任服务。并且从买卖双方都要收取佣金。是否有这么一种方式买卖双方在交易的时候完全忽略eBay,这样双方也节省了佣金,同时你又可以访问到你的交易数据?这就是下面的图片提出的去中心化应用。以太坊让你很容易的创建Dapps(去中心化应用)。
 
下面是一个从高层次来看待以太坊Dapp:
你是否发现,每一个客户端交流使用的都是它自己的应用实例。没有一个所有的客户端都链接到服务器上的中心化服务器。这就意味着,每一个想通过去中心化应用交互的人,需要在他们的电脑或者是手机上完整的拷贝区块链。这就意味着,在你可以使用应用之前,你需要下载完整的区块链,然后启动使用这个应用。第一次听说感觉很荒唐,但是他有一个好处就是不需要依赖一个中心化的服务,而且这个中心化的服务有可能明天就不存在了。
 
现实中你不需要花费很多的内存和硬盘,来下载完整的区块链。已经有了一些变通的方法或者是优化来使的应用去中心化,保证交互方便快捷。
 
现在确切的说什么是区块链呢?它包含:
1,Database(数据库):在以太坊网络上每发生一个交易就会被包装到一个区块中,每一个区块都和下一个区块相连。这些包含所有交易数据相连的一系列的块就是区块链。如果我们返回去看刚才的eBay的例子,买卖双方无论是出售,退款还是纠纷都将会被记录在区块链上,并且每个人都可以看到。为了保证以太坊网络上的所以网络节点对这条信息都有同样的拷贝,而且为了确保非法数据写入的这个数据库中(区块链的区块中),以太坊使用一个叫做proof的算法来做这件工作。
 
2,Code:区块链的数据库部分只是存储了数据,但是像买,买,取消,退款等操作逻辑在什么地方呢?在以太坊的世界里,你可以使用一个叫做Solidity的语言来写应用(合约)代码。然后可以使用Solidity编译器来把代码编译成以太坊二进制文件,然后把这个二进制代码部署到区块链上。除此之外和Solidity很少有其他的交互,但是Solidity是目前开发合约最流行的开发语言。
 
所以从根本上来说:区块链存储数据,存储代码,而且运行EVM(Ethereum Virtual Machine)中的代码。
 
基于Dapps构建web,Ethereal有一个很好用的javascript包叫web3.js,这个包可以和你的区块链接点建立连接。所以你紧紧需要在你的javascript框架(reactjs, angularjs等)中引入这个包,然后就可以开始构建应用了。
 
另一个大而重要的应用方面是平台的财务能力。如果我告诉你你在使用Dapp的时候,你就拥有了一个内置的银行帐户你会怎么办呢?事实上不是一个银行帐户,你可以在一分钟内创建多个帐户。这些银行帐户被叫做钱包,你可以用来存钱(用在以太坊生态系统的货币)和交易。
 
有许多关于区块链的内部细节是我故意留下的,因为我想集中精力在基于区块链的Dapp和中心化的webapp进行比较。希望这篇文章可以很好的达到说明以太坊是什么,以及怎么去构建去中心化的应用。
 
我现在已经写了3个指导教程来构建全栈的dapp
 
 
延伸阅读:
 

Ethereum for web developers的更多相关文章

  1. [引] Security tips for web developers

    Source :Security tips for web developers

  2. Docker for Web Developers目录

    在OpenStack在私有云占主导定位之后,后起之秀Docker在PaaS平台.CI/CD.微服务领域展露锋芒.作为Web Developers,我们有必要学习和掌握这门技术. 1. 运行第一个Doc ...

  3. 《Professional JavaScript for Web Developers》day02

    <Professional JavaScript for Web Developers>day02 1.在HTML中使用JavaScript 1.1 <script>元素 HT ...

  4. 《Professional JavaScript for Web Developers》day01

    <professional JavaScript for Web Developers>day01 1.JavaScript简介 1.1JavaScript简史:略 1.2JavaScri ...

  5. 《Professional JavaScript for Web Developers》day03

    <Professional JavaScript for Web Developers>day03 1.1ECMAScript语法 1.1.1 区分大小写 1.1.2 标识符 按照惯例,E ...

  6. Professional JavaScript for Web Developers 4th Edition

    Professional JavaScript for Web Developers 4th Edition learning notes / 学习笔记 https://github.com/xgqf ...

  7. 使用Docker-Docker for Web Developers(2)

    1. 使用镜像 1.1 在Docker Hub上查找镜像 我们查找一下之前博客里面,推送到Docker Hub里面的bage88/docker-demo,能看到有2个仓库,第一个就是我们上次上传的镜像 ...

  8. Sublime Text 插件推荐——for web developers

    楼主向高大上的: web front-end development engineer (好吧,google就是这样翻译的 ^_^)们推荐 ST 插件,在此抛砖引玉: NO.1 :Emmet (原名: ...

  9. Elevate Web Builder for Web Developers(类似于unigui的东西)

    推荐一款pascal 语言的web 开发工具 这几天仔细研究了一款使用Pascal 语言开发web 的工具 具体介绍可以参照这里. 先上几张他开发的页面照.

随机推荐

  1. CSS3常用功能的写法 转

    CSS3常用功能的写法 作者: 阮一峰   随着浏览器的升级,CSS3已经可以投入实际应用了. 但是,不同的浏览器有不同的CSS3实现,兼容性是一个大问题.上周的YDN介绍了CSS3 Please网站 ...

  2. Asp.Net Core 2.0 项目实战(4)ADO.NET操作数据库封装、 EF Core操作及实例

    Asp.Net Core 2.0 项目实战(1) NCMVC开源下载了 Asp.Net Core 2.0 项目实战(2)NCMVC一个基于Net Core2.0搭建的角色权限管理开发框架 Asp.Ne ...

  3. 090实战 Hadoop离线项目介绍(不包括程序)

    一:项目场景 1.需求分析 根据用户行为数据进行程序的处理,得到结果保存到关系型数据库中 需要收集用户(系统使用者)在不同客户端上产生的用户行为数据,最终保存到hdfs上 需要明确收集字段的相关信息, ...

  4. 使用SQL语句从数据库一个表中随机获取数据

    -- 随机获取 10 条数据 SQL Server:SELECT TOP 10 * FROM T_USER ORDER BY NEWID() ORACLE:SELECT * FROM (SELECT ...

  5. 008.Docker Flannel+Etcd分布式网络部署

    一 环境准备 1.1 Flannel概述 Flannel是一种基于overlay网络的跨主机容器网络解决方案,即将TCP数据包封装在另一种网络包里面进行路由转发和通信,Flannel是CoreOS开发 ...

  6. js数据结构之hash散列的详细实现方法

    hash散列中需要确定key和value的唯一确定关系. hash散列便于快速的插入删除和修改,不便于查找最大值等其他操作 以下为字符和数字的hash散列: function HashTable () ...

  7. django-用户验证系统

    django提供了一套用户验证系统,但是要使用这个系统,必须要使用django内置的用户模型:django.contrib.auth.models.User,这个模型中预先定义了一些字段,其中只有us ...

  8. IT 产品 需求 痛点

    英文应该有个 汉语发音 标注 这样的平台软件.罗马音.

  9. 5288: [Hnoi2018]游戏

    5288: [Hnoi2018]游戏 链接 分析: 考虑y<=x的怎么做,那么只能从左边走到右边.我们可以从最右边的点开始,一次确定每个点往右边可以走多少. L[x],R[x]分别是x向左向右最 ...

  10. eclipse更改workspace中出现The superclass "javax.servlet.http.HttpServlet" was not found on the Java----问题》》

    第一步:那是因为在项目中没有告诉它应该在哪个tomcat中运行,右击项目名称----->build path-->configure   path---->library------ ...