我学习以太坊区块链平台已经有一段时间了,这个真是让我越学越兴奋啊。网络上有很多关于以太坊的资料(文章,视频,平台官网),这些我们都很容易就获取到,由于平台还在快速迭代所以相关的资料内容普遍普遍滞后。自己基于所学整理了一个关于以太坊是什么,以及他是怎么工作的图。在开发者论坛以及线上社区中发现想了解这些新技术的人同样在学习的时候遇到了很多问题。这篇文章试图从一个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. python全栈开发day29-网络编程之socket常见方法,socketserver模块,ftp作业

    一.昨日内容回顾 1.arp协议含义 2.子网,子网掩码 3.两台电脑在网络中怎么通信的? 4.tcp和udp socket编码 5.tcp和udp协议的区别 6.tcp三次握手和四次挥手,syn洪攻 ...

  2. Java jvm 内存参数限制

    nohup java -jar -Xms3g -Xmx3g jenkins.war > jenkins.log 2>&1 &

  3. 8. 博客系统| 富文本编辑框和基于bs4模块防御xss攻击

    views.py @login_required def cn_backend(request): article_list = models.Article.objects.filter(user= ...

  4. css 选择器、元素默认宽度、media screen

    @media screen and (min-width:800px){ .a{  background: url('../image/banner/banner1.jpg') no-repeat l ...

  5. python获取公网ip,本地ip及所在国家城市等相关信息收藏

    python获取公网ip的几种方式       from urllib2 import urlopen   my_ip = urlopen('http://ip.42.pl/raw').read() ...

  6. 在VS Code中对Python进行单元测试

    在VS Code中对Python进行单元测试 Python扩展支持使用Python的内置unittest框架以及pytest和Nose进行单元测试.要使用pytest和Nose,必须将它们安装到当前的 ...

  7. IntelliJ IDEA(九) :插件(转)

    最近项目比较忙,很久没有更新IDEA系列了,今天介绍一下IDEA的一些炫酷的插件,IDEA强大的插件库,不仅能给我们带来一些开发的便捷,还能体现我们的与众不同. 0|11.插件的安装 打开settin ...

  8. 谈谈MySQL无法连接的原因和分析方法

    [可能的原因] MySQL无法连接的原因有很多,比如: 1.数据库的请求量突增,实例连接数超过max_connections,或用户连接数超过max_user_connections, 这种情况连接时 ...

  9. [FFT/NTT/MTT]总结

    最近重新学了下卷积,简单总结一下,不涉及细节内容: 1.FFT 朴素求法:$Coefficient-O(n^2)-CoefficientResult$ FFT:$Coefficient-O(nlogn ...

  10. Python图形编程探索系列-07-程序登录界面设计

    设计任务 初步设计程序登录界面,详细分析设计步骤. 程序详细分析 基本框架设计 import tkinter as tk import tkinter.messagebox root = tk.Tk( ...