前段时间一个以太坊游戏应用:Fomo3D异常火爆,在短短的几天内就吸引了几万的以太币投入游戏,第一轮游戏一个“黑客”用了一个非常巧妙的利用以太坊规则成为了最终赢家,拿走了1万多以太币奖金。

区块链应用的价值由这个游戏反映的淋漓尽致,Fomo3D游戏能够成功核心所依赖的是以太坊提供的一个可信、不可篡改平台。当游戏的规则确定之后,一切都按规则运行,无人可干预。今天这篇就来介绍一下程序员如何切入去中心化应用开发。

中心化应用

作为对比,先来看看中心化应用,其实就是现有的互联网应用,为什么它是中心化应用,看看它的架构图:

平时我们接触的是应用的前端(或称客户端),前端可以是HTML5的web页面、 小程序、APP, 在前端展现的内容通常发送一个请求到服务器,服务器返回相应的内容给前端。在前端的动作同样也会转化请求发送到服务器,服务器处理之后返回数据到前端。也就是说我们所有看到的内容或者操作都是中心化的服务器控制,因此说是中心化应用。

去中心化应用DAPP

而去中心化应用有什么不同呢? 看看它的架构图:

前端的表现上是一样的, 还是H5页面、 小程序、APP,DAPP和传统App关键是后端部分不同,是后端不再是一个中心化的服务器,而是分布式网络上任意节点,注意可以是 任意一个节点,在应用中给节点发送的请求通常称为 交易,交易和中心化下的请求有几个很大的不同是:交易的数据经过用户个人签名之后发送到节点,节点收到交易请求之后,会把 请求广播到整个网络,交易在网络达成共识之后,才算是真正的执行(真正其作用的执行不一是连接的后端节点,尽管后端也会执行)。以及中心化下的请求大多数都是同步的(及时拿到结果), 而交易大多数是异步的,这也是在开发去中心应用时需要注意的地方,

从节点上获得数据状态(比如交易的结果),一般是通过事件回调来获得。

如何开发

在开发中心化应用最重要两部分是 客户端UI表现后端服务程序, UI表现通过HTTP请求连接到后端服务程序,后端服务程序运行在服务器上,比如Nginx Apached等等。

开发一个去中心化应用最重要也是两部分: 客户端UI表现智能合约,智能合约的作用就像后端服务程序,智能合约是运行在节点的EVM上, 客户端调用智能合约,是通过向节点发起RPC请求完成。

下面是一个对比:

     客户端UI <=> 客户端UI HTTP <=> RPC后端服务程序 <=> 智能合约
Nginx/Apache <=> 节点

因此对于去中心化应用来说,程序员可以从两个方面切入:

一个是 去中心化应用的客户端开发, 熟悉已经熟悉客户端软件(如WebAPP等)开发的同学,只需要了解一下客户端跟区块链节点通信的API接口,如果是在当前应用最广泛的区块链平台以太坊上开发去中心化应用,那么需要了解Web3
这个库,Web3对节点暴露出来的JSON-RPC接口进行了封装,比如Web3提供的功能有:获取节点状态,获取账号信息,调用合约、监听合约事件等等。

目前的主流语言都有Web3的实现,列举一些实现给大家参考:

  • JavaScript Web3.js
  • Python Web3.py
  • Haskell hs-web3
  • Java web3j
  • Scala web3j-scala
  • Purescript purescript-web3
  • PHP web3.php
  • PHP ethereum-php

另一个切入点是 智能合约的开发,在以太坊现在推荐的语言是Solidity,有一些同学对新学一门语言有一些畏惧,Solidity的语法其实很简洁,有过一两门其他语言基础(开发经验)的同学三五天就可以学会,我也录制了一个视频课程:深入详解以太坊智能合约语言Solidity。

下面用一个Hello合约,体会下Solidity的语法:

contract Hello {function hello() public returns(string) {return "Hello World"; }
}

如果把上面的contract关键字更改为class,就和其他语言定义一个类一样。

有兴趣的同学可以进一步学习一下这个DApp开发案例Web3与智能合约交互实战,

在DAPP的开发过程中,一些开发工具可以帮助我们事半功倍,如:Truffle开发框架以及Ganache工具来模拟节点等,这篇文章一步步教你开发、部署第一个去中心化应用

补充

对于想切入到去中心化应用开发的同学,对区块链运行的原理了解肯定会是加分项,尤其是各类共识机制(POW,POS,DPOS等)的理解,P2P网络的理解,以及各类加密和Hash算法的运用。有一些同学想做区块链底层开发,对区块链运行的原理则是必须项。

欢迎来知识星球提问,星球内已经聚集了300多位区块链技术爱好者。
深入浅出区块链 - 系统学习区块链,打造最好的区块链技术博客。

程序员如何切入区块链去中心化应用开发相关推荐

  1. 区块链去中心化分布式_为什么渐进式去中心化是区块链的最大希望

    区块链去中心化分布式 by Arthur Camara 通过亚瑟·卡马拉(Arthur Camara) 为什么渐进式去中心化是区块链的最大希望 (Why Progressive Decentraliz ...

  2. 区块链去中心化金融是对互联网金融的拨乱反正吗?

    (图片来源于网络) 现代金融中的一个非常关键的活动就是货币创造.货币创造的一个重要方式就是贷款.当你向银行这样的金融机构申请贷款时,符合要求的条件,银行可以在它的资产负债表的资产端记上你的贷款,然后在 ...

  3. 区块链去中心化的生命之源:“DPOS(委托权益证明)共识机制”

    区块链去中心化的生命之源:"DPOS(委托权益证明)共识机制" 原创2018-04-24[水伯]战略忽悠局政委水伯 移动网络时代唯一壁垒就是认知,周二有约给思想洗澡让认知破壁! D ...

  4. 所谓区块链去中心化社交产品,究竟是创新还是复旧?

    4月据市场消息,5.33亿Facebook用户的个人数据被泄露,包括电话号码.全名.出生日期.电邮地址.ID地点以及一些生物信息,这将对数百万加密货币交易者构成潜在风险,Hudson Rock(网络犯 ...

  5. 区块链去中心化等特点

    中心化? 回忆一下你在网上购买一本书的流程: 第一步,你下单并把钱打给支付宝: 第二步,支付宝收款后通知卖家可以发货了: 第三步,卖家收到支付宝通知之后给你发货: 第四步,你收到书之后,觉得满意,在支 ...

  6. 区块链去中心化有那么有用吗?

    作者:maxdeath 链接:https://www.zhihu.com/question/68685893/answer/266407268 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权 ...

  7. 区块链去中心化有什么优势?

    说到区块链,我们经常听到一个词"去中心化",这也是区块链最重要的一个特性.那么什么是去中心化,和中心化相比,它又有哪些优势呢? 要想知道什么是去中心化,我们先来看看什么是中心化.简 ...

  8. 区块链去中心化通俗的理解是什么?

    区块链中去中心化是什么?如今很多的区块链学习者接触到区块链发现去中心化概念比较广泛难以理解.近日在区块链行业内中比特币开发者Jimmy Song分享了他对去中心化的看法和观点.这位开发者列举了四个问题 ...

  9. 区块链去中心化和传统去中心化的区别

    去中心化在我们生活中其实并不是一个新概念,也许你没有注意,但是我们生活中早已充斥着去中心化的产物.现实中的微博啊,社交媒体啊这些其实都是去中心化的产物. 在了解去中心化之前,首先我们得知道,什么是中心 ...

最新文章

  1. java二级下拉菜单_航菜单栏中的二级下拉菜单
  2. Maven全局配置文件settings.xml 全解
  3. pandas的series和dataframe
  4. php--在类中声明常量的关键字
  5. BZOJ 3836 Codeforces 280D k-Maximum Subsequence Sum (模拟费用流、线段树)
  6. 使用腾讯开发平台获取QQ用户数据资料
  7. 用计算机算出你喜欢吃你喜欢的人,Go for it七年级下学期1-12单元(期末复习)句子翻译专练...
  8. 安装quartus时弹出错误_Win10 安装arcgis10.2 for desktop需要.net framework 解决方案
  9. 家乐福举报山姆涉嫌“二选一”背后 会员店需要的不是模仿能力
  10. excel表格数字显示不全_表格技巧—Excel里身份证号码显示不全的多种解决办法...
  11. linux mysql远程连接
  12. UI 自动化测试在有赞的实践
  13. 毛细血管瘤的一般常识
  14. iOS 上传ipa包成功找不到ITMS-90338: Non-public API usage
  15. 学计算机与学英语词汇,计算机专业常用英语词汇学习
  16. STM32 DSP库
  17. 拇指射箭服务器维护,拇指射箭1小游戏:这个拇指射箭3D游戏有点意思,拇指枪王对决...
  18. 【520521】程序员中的“芳心纵火犯”, 这就是面向对象编程吗?
  19. 游戏核心编程之一 概述
  20. 面试官:谈谈分库分表吧?

热门文章

  1. 台积电将开始量产 iPhone 8 A11 芯片 10纳米工艺
  2. 简单说一下,你对CPU缓存的了解?
  3. 使用Java VisualVM监控远程JVM
  4. postman指定User-Agent的header无效
  5. IMI装系统装到一半出错?
  6. 详解Spring MVC 4之ViewResolver视图解析器
  7. 约瑟夫问题(优化优化再优化)
  8. ORA-600 [kddummy_blkchk] [18038] 一例
  9. 谈谈对分布式事务的一点理解和解决方案
  10. 原来BCH是这样转给别人的