哪条区块链可以运行DAPP_区块链应用开发入门

哪条区块链可以运行DAPP_区块链应用开发入门在区块链上编程:DApp 开发简介

大家好,又见面了,我是你们的朋友全栈君。

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

哪条区块链可以运行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应用案例

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

cryptokitties 加密猫

哪条区块链可以运行DAPP_区块链应用开发入门

Fomo3D

哪条区块链可以运行DAPP_区块链应用开发入门

智能合约开发

简介

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

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

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

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

结构示意图:

哪条区块链可以运行DAPP_区块链应用开发入门

智能合约的开发流程图:

哪条区块链可以运行DAPP_区块链应用开发入门

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的智能合约,可以使用以下开发环境

  • VSCode + Solidity Plugin
  • Remix Solidity IDE (https://remix.ethereum.org)

Truffle

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

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

安装 Truffle

npm install -g truffle
mkdir myproject && cd myproject && truffle init

Ganache

哪条区块链可以运行DAPP_区块链应用开发入门
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 命令行下新建账户及获取余额操作:

哪条区块链可以运行DAPP_区块链应用开发入门

Mist

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

哪条区块链可以运行DAPP_区块链应用开发入门

web3.js

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

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

引入

npm install web3

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

哪条区块链可以运行DAPP_区块链应用开发入门

总结

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


后续文章:
在区块链上编程:DApp 开发实战——来写个竞猜游戏吧


文 / 李工

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

编 / 荧声

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

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

哪条区块链可以运行DAPP_区块链应用开发入门

欢迎点赞、收藏、留言评论、转发分享和打赏支持我们。打赏将被完全转交给文章作者。

感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/107271.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • mybatis @MapperScan 解析

    mybatis @MapperScan 解析MapperScan注解会引入MapperScannerRegistrar,MapperScannerRegistrar实现了ImportBeanDefinitionRegistrar,可以向beanFactory中注册BeanDefinition,具体注入的过程是通过ClassPathMapperScanner实现的。publicvoidregisterBeanDefi…

  • linux工具箱_docker ps命令

    linux工具箱_docker ps命令1.gdb调试利器GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具。对于一名Linux下工作的c++程序员,gdb是必不可少的工具;1.1.启动gdb对C/C++程序的调试,需要在编译前就加上-g选项:$g++-ghello.cpp-ohello调试可执行文件:$gdbprogram也就是你的执行文件,一般在当前目录下。调试core文件(core是程序非法执行后coredump后产生的文件):$gdb$gdb

  • mqttnet消息推送与接收[通俗易懂]

    mqttnet消息推送与接收[通俗易懂]创建windows服务网上有很多,不多述;服务端做好后一定要写bat安装卸载文件install.bat@echo.请稍等,MqttNetServiceAddUserAndPassword服务安装启动中…………@echooff@title安装windows服务:MqttNetServiceAddUserAndPassword@sccreateMqttNetServiceAdd…

  • 最长上升子序列(n*log n)

    最长上升子序列(n*log n)转载于:http://www.cnblogs.com/dongsheng/archive/2013/01/25/2876323.htmlNYOJ-214单调递增子序列(二)单调递增子序列(二)时间限制:1000 ms |          内存限制:65535 KB难度:4 描述给定一整型数列{a1,a2…,an}(0<n<=100000),找出单…

  • Java单元测试框架 JUnit

    Java单元测试框架 JUnit

    2021年11月18日
  • softmax、softmax损失函数、cross-entropy损失函数[通俗易懂]

    softmax、softmax损失函数、cross-entropy损失函数[通俗易懂]softmaxsoftmax,顾名思义,就是soft版本的max。在了解softmax之前,先看看什么是hardmax。hardmax就是直接选出一个最大值,例如[1,2,3]的hardmax就是3,而且只选出最大值,非黑即白,但是实际中这种方式往往是不合理的,例如对于文本分类来说,一篇文章或多或少包含着各种主题信息,我们更期望得到文章属于各种主题的概率值,而不是简单直接地归类为某一种唯一的主题。这里就需要用到soft的概念,即不再唯一地确定某一个最大值,而是为每个输出分类

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号