社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  区块链

区块链上编程:DApp 开发简介

创宇前端 • 5 年前 • 293 次点击  
阅读 5

区块链上编程:DApp 开发简介

当你开始探索区块链开发,需要了解到这些。

一、DApp介绍

什么是 DApp?

DApp 是 Decentralized Application 的简称,及去中心化应用。
在某种程度上,比特币可以说是出现的第一个 DAPP,因为它是完全开源的,为贡献者提供奖励回报,不受一个中央机构的控制,并使用区块链作为支撑技术。 区块链,作为一个基础设施,提供了分布式的去中心化可信数据库,人们可以基于此,可以开发各种应用,适用于不同的场景。 简单来说,DAPP 和普通的 App 原理一样,除了他们是完全去中心化的,由类似以太坊网络本身自己的节点来运作的 DAPP,不依赖于任何中心化的服务器,DAPP 是去中心化的,可以完全自动地运行。 目前 DApp 通常指代基于以太坊或者 EOS 上的智能合约开发的相关应用。

DApp 运行原理

DApp 底层区块链开发平台就好比手机的 iOS 和 Android 系统,是各种 DApp 的底层生态环境,DApp 就是底层区块链平台生态上衍生的各种分布式应用,也是区块链世界中的基础服务提供方,DApp 于区块链,就好比 APP 之于 iOS 和 Android。

什么是智能合约?

如果把区块链看做是一个数据库,数据源, 智能合约基本上就是一段数据库操作脚本, 它决定了你如何在区块链上存储数据,修改数据。

DApp应用案例

前往这里可查看 DApp 的行业最新动态:
www.stateofthedapps.com/

cryptokitties 加密猫

Fomo3D

智能合约开发

简介

智能合约是代码(它的功能)和数据(它的状态)的集合,存在于以太坊区块链的特定地址。 智能合约账户能够在彼此之间传递信息,进行图灵完备的运算。智能合约依靠被称作以太坊虚拟机(EVM) 字节代码(以太坊特有的二进制格式)上的区块链运行。

智能合约使用诸如 Solidity 等高级语言写成,然后编译成字节代码上传到区块链上。

智能合约开发流程大概有以下步骤:

  • 编写智能合约(如基于 solidity)
  • 测试智能合约,在测试网络或者私有链进行合约的功能测试
  • 编译和发布合约,将合约部署到链上
  • 操作合约,利用诸如 web3.js 等接口,通过访问智能合约的地址,来调用和操作智能合约。

结构示意图:

智能合约的开发流程图:

Solidity

Solidity 是一种语法类似 JavaScript 的高级语言。它被设计成以编译的方式生成以太坊虚拟机代码。

代码片段:

pragma solidity ^0.4.22;

contract helloWorld {
 function renderHelloWorld () public pure returns (string) {
   return 'helloWorld';
 }
}
复制代码

ERC-20

最著名的智能合约,想必大家都听过,那就是 ERC20。 ERC-20 是一种代币的标准协议,简单地说,任何 ERC-20 代币都能立即兼容以太坊钱包(几乎所有支持以太币的钱包,包括 MIST、imToken 等),由于交易所已经知道这些代币是如何操作的,它们可以很容易地整合这些代币。这就意味着,在很多情况下,这些代币都是可以立即进行交易的。

一个基于 ERC-20 的代币包含以下接口:

contract ERC20Interface {
    function totalSupply() public constant returns (uint);
    function balanceOf(address tokenOwner) public constant returns (uint balance);
    function allowance(address tokenOwner, address spender) public constant returns (uint remaining);
    function


    
 transfer(address to, uint tokens) public returns (bool success);
    function approve(address spender, uint tokens) public returns (bool success);
    function transferFrom(address from, address to, uint tokens) public returns (bool success);

    event Transfer(address indexed from, address indexed to, uint tokens);
    event Approval(address indexed tokenOwner, address indexed spender, uint tokens);
}
复制代码

Solidity开发环境介绍

下面我会粗略的引入介绍一下 Solidity 智能合约相关开发环境跟工具,这些都是目前智能合约开发中常用的工具集合。

IDE

开发基于Solidity的智能合约,可以使用以下开发环境

Truffle

Truffle 是针对基于以太坊的 Solidity 语言的一套开发框架。本身基于 Javascript。

  • 内置的智能合约编译,链接,部署和二进制文件的管理。
  • 快速开发下的自动合约测试。
  • 脚本化的,可扩展的部署与发布框架。
  • 部署到不管多少的公网或私网的网络环境管理功能
  • 使用 EthPM&NPM 提供的包管理,使用 ERC190 标准。
  • 与合约直接通信的直接交互控制台(写完合约就可以命令行里验证了)。
  • 可配的构建流程,支持紧密集成。
  • 在 Truffle 环境里支持执行外部的脚本。

安装 Truffle

npm install -g truffle
复制代码
mkdir myproject && cd myproject && truffle init
复制代码

Ganache

Ganache 是一个带有图形界面的本地运行的以太坊区块链浏览器/模拟器,它在本地运行了一个 RPC Server,通过连接这个 Ganache,我们可以完成智能合约的本地测试,而不需要真正的接入以太坊的公网或测试网络。

通过使用 Ganache,你可以快速的看到你的应用是如何影响区块链的。其中细节:如你的账户、余额、合约及 Gas 成本。

Geth

geth 的全称是 go-ethereum,是以太坊的官方钱包客户端。Geth 是基于命令行的。 通过使用 Geth 和相关参数,我们可以接入以太坊的公网,测试网以及私有网络。 以太坊除了主网络,还有各种各样的测试网络。使用 geth 前要先解决要进入哪一个网络。 Geth 相当于在本机启动一个以太坊网络节点,但是通过参数控制,可以让节点选择成为全节点或者轻节点。

Geth 控制台提供 admin、debug、eth、miner、net、personal、rpc、txpool、web3 等服务及命令。比如有这些常用的操作:

  • eth.blockNumber 可以查看当前的区块高度,总共有多少区块
  • eth.getBlock(xxx) 可以查看指定区块的信息
  • eth.accounts 查看当前钱包的账户地址,当第一次运行私有链网络的时候,没有账户,需要新建
  • eth.coinbase 矿工账户,当网络进行挖矿操作挖到新的区块后,奖励会到这个账户里
  • personal.newAccount() 新建账户,会提示输入密码,之后账户会以加密好的私钥文件存到data/keystore目录下
  • miner.start(threas_number) 开始挖矿,前提是当前钱包已经有coinbase矿工账户
  • miner.stop() 停止挖矿

图示在 geth 命令行下新建账户及获取余额操作:

Mist

Mist 是以太坊的官方图形钱包,通过该钱包,用户可以很方便的管理账户,查看余额,以及发送和接收交易。Mist 还有一个非常实用的功能就是,编译和部署 Solidity 智能合约。

web3.js

web3.js 提供了 web3 对象,封装了一组可以用来操作智能合约的方法。底层实现上,它通过 RPC 调用与本地节点 geth 进行通信。

geth 本身就可以与合约进行交互,通过 web3.js 再封装了一层,这样我们可以使用 js 程序与合约交互,方便开发。

引入

npm install web3
复制代码

以太坊通过 web3 的交互流程大致如下:

总结

随着区块链近些年的大红大紫,DApp 被推上了风口浪尖,本文从技术的角度大致介绍了一下 DApp 所涉及的技术要点。后续的文章,可以更加详细的分享一些 DApp 开发的具体案例,引入跟介绍一些 DApp Demo 跟具体开发流程等。


文 / 李工

普通程序猿,长期混迹移动互联网 曾供职 91 与百度,现任区块链开发工程师 资深韭菜,在韭菜经历中学习到扎实的区块链知识

本文已由作者授权发布,版权属于创宇前端。欢迎注明出处转载本文。本文链接:knownsec-fed.com/2018-08-10-…

想要看到更多来自知道创宇开发一线的分享,请搜索关注我们的微信公众号:创宇前端(KnownsecFED)。欢迎留言讨论,我们会尽可能回复。

感谢您的阅读。


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/6WnsWLSMjJ
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/22826
 
293 次点击