php去中心化算法,如何开发一个去中心化应用?

原标题:如何开发一个去中心化应用?

今年上半年,以太坊上的很多游戏都爆红过一段时间,从以太猫到Fomo3D,吸引了众多人的参与,不过目前大多数游戏都以投机为主,本文介绍的不是投机内容,而是从代码层面介绍如何建立一个去中心化应用,有兴趣的小伙伴可以尝试一下。

以太坊的平台游戏引用了以太坊提供的一个可信、不可篡改平台。与传统游戏不同的是,区块链游戏的规则确定之后,一切都按规则运行,无人可干预,这也是去中心化的重要表现。而传统游戏,后台会有不定时的更新,更新内容当然也包括游戏规则。那么开发者是如何开发出去中心化的应用的呢?

首先看一下它的架构图:

ebe232159563ca1395336ce59db8ff31.png

前端的表现上就是一个H5页面、 小程序、APP、DAPP和传统App不同的是后端部分,后端不再是一个中心化的服务器,而是分布式网络上的任意节点,注意可以是任意一个节点,在应用中给节点发送的请求通常称为交易,交易和中心化下的请求有几个很大的不同是:交易的数据经过用户个人签名之后发送到节点,节点收到交易请求之后,会把请求广播到整个网络,交易在网络达成共识之后,才算是真正的执行。

中心化下的请求大多数都是同步的(及时拿到结果), 而交易大多数是异步的,这也是在开发去中心应用时需要注意的地方,从节点上获得数据状态,一般是通过事件回调来获得。

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

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

下面是一个对比:

客户端UI <=> 客户端UI

HTTP <=> RPC

后端服务程序 <=> 智能合约

Nginx/Apache <=> 节点

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

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

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

o Java Web3.js

o Python Web3.py

o Haskell hs-web3

o Java web3j

o Scala web3j-scala

o Pure pure-web3

o PHP web3.php

o PHP ethereum-php

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

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

9518857d458b4aae30bd32fd9a1c487f.png

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

有兴趣的同学可以进一步学习一下这个DApp开发案例Web3与智能合约交互实战,在DAPP的开发过程中,一些开发工具可以帮助我们事半功倍,如:Truffle开发框架以及Ganache工具来模拟节点等。

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

责任编辑:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值