架构

应用层

钱包-METAMASK

水龙头:
一、Ropsten测试网络
https://faucet.egorfine.com/
每个地址每天只能获取一次
二、Kovan测试网

https://ethdrop.dev/

三、Rinkeby测试网
https://www.rinkebyfaucet.com/
参考:https://blog.csdn.net/YM_1111/article/details/123324293

以太坊客户端(节点)

已经有 Ganache 工具,为什么还需要借助 Metamask?这是因为 Ganache 是用于开发调试的工具,并没有集成 Ropsten 测试网和 Mainnet 主网的链接功能。而 Metamask 中已经做了集成
当我们开始开发DApp,托管智能合约需要你建立一个你想托管它们的区块链节点,但这个过程不仅对刚刚开始Web3之旅的人来说很复杂;它也可能很耗时,需要大量的处理能力来完成。
这就是Infura和Alchemy这样的平台所要解决的问题。从本质上讲,它们是节点提供者;也就是说,它们提供对区块链服务的远程访问,所以你不必运行自己的节点。(https://zhuanlan.zhihu.com/p/514654991)

1、Ganache(本地)

Ganache 继承了原来的 Test-RPC的使命,作为测试环境里的模拟区块链而存在。(其实 Ganache 也就是旧的 Test-RPC 项目换了一个名字而已)【在开发过程中,我们推荐使用以太坊区块链的私有链 Ganache (只有几百 M),免去同步以太坊全部区块数据的麻烦】

 HTTP://127.0.0.1:7545   1337  CPAY

(参考:https://blog.csdn.net/weixin_43958804/article/details/109601153)

2、Geth(本地)

典型的以太坊客户端【Geth(Go Ethereum ) 会一直同步以太坊区块链上的所有数据。目前 fast 同步模式下,数据量已经有近 70G;full 同步模式下,已经达到了几百 G】,在开发过程中,我们推荐使用以太坊区块链的私有链 Ganache (只有几百 M),免去同步以太坊全部区块数据的麻烦

(参考:https://ethereum.org/zh/developers/tutorials/run-light-node-geth/)

3、Parity

Parity是完整节点以太坊客户端和DApp浏览器的实现

(参考:https://github.com/paritytech/parity/wiki/Setup)

4、Alchemy(线上)

5、Infura(线上)

通过 Ganache 部署成功并进行了初步校验后,我们需要将合约部署到 Ropsten 测试网,及 Mainnet 主网。这里我们推荐使用 Infura。

Infura 提供了托管的以太坊节点,不再需要我们消耗大量的磁盘空间和时间来搭建本地节点。同时,它为我们的 DApp 应用提供了以太坊节点支持,我们通过 API 和开发人员工具就可以安全、可靠和可扩展的访问以太坊节点。

HDWalletProvider

将合约部署到区块链(不论主网还是测试网)上,都会产生一笔 Transaction。而这笔 Transaction 需要通过外部账户支付 Gas,同时进行交易签名。这里我们需要借助 HDWalletProvider 工具。HDWalletProvider 是一个独立的 npm 软件包,可以处理交易签名以及与以太坊网络的连接。

Network ID以太坊网络
Mainnet //主网
Morden test network //Morden 测试网(已废弃)
Ropsten test network //Ropsten 测试网
Rinkeby test network //Rinkeby 测试网
Kovan test network //Kovan 测试网

heroku

登录:https://signup.heroku.com/

Heroku是一个支持多种编程语言的云平台即服务。目前支持Ruby、Java、Node.js、Scala、Clojure、Python、PHP和Perl等语言,基础操作系统是Debian。

Pinata

登录:https://app.pinata.cloud/pinmanager

Dapp开发框架

Truffle

Truffle 是目前最流行的 DApp 开发框架,它可以帮我们处理掉很多繁琐的事情,让我们更专注于智能合约的开发,迅速开始编码 -> 编译 -> 部署 -> 测试 -> 打包 DApp 的流程。
官方:https://trufflesuite.com/docs/truffle/quickstart/
中文翻译:https://learnblockchain.cn/docs/truffle/
Truffle的基础使用: https://blog.csdn.net/david2000999/article/details/120472092

Truffle常用命令:

#在当前目录下初始化一个全新的APP
truffle init
#构建一个开发中的app版本,创建.build目录。
truffle build
#编译 --compile-all: 强制编译所有合约
#    --network 名称:指定使用的网络,保存编译的结果到指定的网络上
truffle compile
#运行一个控制台,里面包含已初始化,且随时可用的合约对象。
truffle console
#移植(部署)
truffle migrate--reset: 从头运行所有的移植。--network 名称:指定要使用的网络,并将编译后的资料保存到那个网络。--to number:将版本从当前版本移植到序号指定的版本。--compile-all: 强制编译所有的合约--verbose-rpc:打印Truffle与RPC交互的详细日志。
#在Truffle的环境下执行一个Javascript文件 truffle exec /path/to/my/script.js
truffle exec
#在http://localhost:8080提供编译的app对应的服务,且在需要的时候自动构建,自动部署
truffle serve-p port: 指定http服务的端口。默认是8080。--network 名称:名称:指定要使用的网络,并将编译后的资料保存到那个网络
#监控文件系统的文件变化,重编译,重部署你的合约
truffle watch

Hardhat

经常与之对比的是 Hardhat vs Truffle(https://trufflesuite.com/)。相比其它作为web3基础设施的开发工具,Hardhat 更加轻量,采用插件化的思想,非常适合作为新手dapp开发入门的工具。

web3

为了便利Web端和区块链进行交互,我们需要一个JS API来实现这个功能,他就是web3.js,它提供了各种接口来实现和区块链以及智能合约的交互。

react.js、vue.js 或 angular.js 是很好的 javascript 前端框架,因为它们可以使用 ethers.js 或 web3.js 轻松与区块链网络集成。

账户

一个以太坊帐户是一个具有以太币 (ETH) 余额的实体,可以在以太坊上发送交易。 帐户可以由用户控制,也可以作为智能合约部署。
以太坊有两种帐户类型:

  • 外部持有 – 私钥的所有者控制
  • 合约 – 一种由代码控制,部署在网络上的智能合约。 了解智能合约。

这两种帐户类型都能:

  • 接收、持有和发送 ETH 和 token
  • 与已部署的智能合约进行交互
    主要区别

外部持有(EOA)

  • 创建帐户是免费的
  • 可以发起交易
  • 外部所有的帐户之间只能进行 ETH 和代币交易

合约(CA)

  • 创建合约存在成本,因为需要使用网络存储空间
  • 只能在收到交易时发送交易
  • 从外部帐户向合约帐户发起的交易能触发可执行多种操作的代码,例如转移代币甚至创建新合约

GAS

Gas 即矿工费。以太坊上每笔交易的执行(被矿工打包)都会被收取一定数量的 Gas

1eth=10^18wei ;  1wei=10^9gwei
GasLimit:愿意支付矿工费的上限。 GasPrice:矿工费单价。
gas = GasLimit * GasPrice

以太坊虚拟机(EVM)

EVM 即以太坊虚拟机,全称是 Ethereum Virtual Machine。它是以太坊智能合约的运行环境

EVM 是由以太坊节点提供。每个以太坊节点中都包含 EVM。
Solidity 之于 EVM,就像 Java 跟 JVM 的关系一样。
以太坊虚拟机是一个隔离的环境,在 EVM 内部运行的代码跟外部没有联系

智能合约

【智能合约 —— dapp 的后端,因为缺少更好的术语。 有关详细概述,请访问我们的智能合约部分。一旦部署无法更改】智能合约只是一个运行在以太坊链上的一个程序。 它是位于以太坊区块链上一个特定地址的一系列代码(函数)和数据(状态)。智能合约也是一个以太坊帐户,我们称之为合约帐户(以数字形成定义的能够自动执行条款的合约)智能合约之于区块连,相当于SQL之于数据库

合约编译

以太坊虚拟机上运行的是合约的字节码,类似于汇编语言。这就需要我们在部署之前先对合约进行编译,转换成字节码。

合约部署

合约部署后,当需要调用这个智能合约的方法时,只需要向这个合约账户发送消息(交易)即可,通过消息触发后智能合约的代码就会在 EVM 中执行了。

合约运行

合约部署后,当需要调用这个智能合约的方法时,只需要向这个合约账户发送消息(交易)即可,通过消息触发后智能合约的代码就会在 EVM 中执行了。

开发语言

Solidity (推荐)

参考:
https://solidity-by-example.org/
https://solidity-cn.readthedocs.io/zh/develop/

OpenZeppelin

OpenZeppelin 是Solidity语言的一个可重复使用且安全的智能合约的开放框架。他的意义有两个:

  • 把合约开发一些通用的组件开发出来,可以方便地复用
  • 合约组件经过严格的测试,至今未出现漏洞

数据存储

IPFS(星际文件系统)

是一个分布式文件系统协议。协议定义了文件在分布式系统中如何存储、索引、传输。目标是通过一个文件系统将网络中的所有的设备连接在起来
https://dist.ipfs.io/#go-ipfs
https://www.cnblogs.com/coderzjz/p/14924489.html
https://segmentfault.com/a/1190000040697342

Swarm

——以太坊官方推出的分布式存储项目 https://swarm-guide.readthedocs.io/en/latest/#

DApp

去中心化应用 (dapp) 是在去中心化网络上构建的应用程序,结合了智能合约(可以包含其他人的智能合约)和前端用户界面。dapp 可以用任何语言编写(就像是一个 app)。它有前端代码(可以托管在去中心化存储上)和用户界面,能调用其后端。

以太坊的github上,有一个dapp-bin的目录(https://github.com/ethereum/dapp-bin),有一些文档和示例。使用前,你需要看看文件最近的状态,因为他们将很可能已经被淘汰。

架构


DApp的组件:

  • 1、区块链(智能合约);
  • 2、前端(Web用户界面(UI))【Web前端技术(HTML,CSS,JavaScript)】;
  • 3、数据存储【由于gas成本高,智能合约目前不适合存储大量数据。因此,大多数DApps将利用去中心化存储(如IPFS或Swarm)来存储和分发大型静态资产,如图像,视频和客户端应用程序(HTML,CSS,JavaScript)。内容的哈希值通常使用键值映射存储为智能合约中的字节。然后,通过你的前端应用程序调用智能合约检索资产,以获取每个资产的URL。】

虽然也可以创建移动DApp,但由于缺少可用作具有密钥管理功能的轻客户端的移动客户端,目前没有创建移动DApp前端的最佳实践。

开发流程

开发工具

IDEA

Atom 或是 IntelliJ IDEA 系列的 WebStorm [安装支持 Solidity 语法的插件。]

在线Remix

https://remix.ethereum.org

使用教程:https://ethereum.org/zh/developers/tutorials/deploying-your-first-smart-contract/
离线版本:https://github.com/ethereum/remix-desktop/releases)

入门demo

https://download.csdn.net/download/wenwang3000/86734459 (写文章的时候,上传的代码还在审核中)


以太坊开发DApp实战

  1. Web前端:web前端使用HTML/CSS/JavaScript开发,其中大量使用了web3js来访问区块链。用户将会通过这个前端应用来访问以太坊、IPFS和NodeJS服务器。
  2. 以太坊区块链:这是去中心化应用的核心,所有的代码(电商合约、资金托管合约)和交易都存储在链上,这包括所有的商品信息、买家的出价信息、商品竞价结果、资金流向投票结果等。
  3. MongoDB:尽管核心数据存储在区块链上,但是为了方便买家对商品的检索和查询,例如只显示某一类的商品,或者显示即将过期的商品等等,我们会用MongoDB数据库来同步地存储和检索商品信息。
  4. NodeJS服务器:这是后端服务器,我们会利用它给前端提供REST风格的API来查询商品, 同时,也利用它来响应对前端静态页面的请求。
  5. IPFS: 当卖家上架一个商品时,前端会商品图片文件和介绍文本上传到IPFS,并将所上传文件的哈希值存到链上。

(1)前端使用一个HTML表单来采集用户输入的商品细节,例如起拍价、商品图片、描述信息等。
(2)(3) 前端将商品图片和介绍文本上传到IPFS,并返回所上传内容对应的链接(哈希)。
(4)(5) 然后,web前端会调用电商合约将商品信息和IPFS链接存储到链上。当合约成功地将商品存入区块链后,就会触发一个事件,该事件中包含了商品所有的信息。
(6)(7)(8) NodeJS服务器监听区块链事件,当事件被电商合约触发时,服务器读取事件内容并将商品信息插入到MongoDB数据库中。

以太坊开发入门--相关知识点说明相关推荐

  1. 以太坊开发入门实战视频教程-杨正威-专题视频课程

    以太坊开发入门实战视频教程-326人已学习 课程介绍         以太坊开发入门实战视频教程:从以太坊的安装使用,到rpc接口的调用,以及钱包应用开发所需要的知识(以java为例),智能合约的简单 ...

  2. 以太坊开发入门,如何搭建一个区块链DApp投票系统

    点击关注异步图书,置顶公众号 每天与你分享 IT好书 技术干货 职场知识 第一节 概述 对于初学者,需要了解以太坊开发相关的基本概念,另外就是如何构建一个基于以太坊的完整去中心化应用例如一个区块链投票 ...

  3. 以太坊是什么 - 以太坊开发入门指南

    本文首发于深入浅出区块链社区 原文链接:以太坊是什么 - 以太坊开发入门指南 很多同学已经跃跃欲试投入到区块链开发队伍当中来,可是又感觉无从下手,本文将基于以太坊平台,以通俗的方式介绍以太坊开发中涉及 ...

  4. 以太坊开发入门,完整入门篇(小白可以看看,高手看看自己有没有遗漏的

    2019独角兽企业重金招聘Python工程师标准>>> 翻译自:https://medium.com/@mattcondon/getting-up-to-speed-on-ether ...

  5. 以太坊开发入门,完整入门篇

    一个适合区块链新手的以太坊DApp开发教程: http://xc.hubwiz.com/course/5a952991adb3847553d205d1 一个用区块链.星际文件系统(IPFS).Node ...

  6. 以太坊开发入门-ERC20合约

    在上一章节中完成了一个非常简单的合约,本节中将按照ERC20协议完成一个合约, 本章部分源代码参考于网络开源代码,详细了解:openzeppelin-contracts/contracts/token ...

  7. 以太坊开发入门-第一个程序

    在完成MetaMask安装.测试币领取.IDE环境后,可以开始我们第一个合约程序(合约中的HelloWorld) 1. 在IDE中新建一个源码文件,命名:helloworld.sol,关输入下面代码: ...

  8. 以太坊开发入门-开发环境准备

    开发合约语言使用Solidity,在开始之前先学习一下该语言,有编程基础的人很快就能上手. 开发环境有很多,平时我们常用的IDE,安装上Solidity插件后基本都能使用,为了快速上手开发,今天主要是 ...

  9. linux以太坊开发环境搭建

    2019独角兽企业重金招聘Python工程师标准>>> 如果你希望马上开始学习以太坊DApp开发,可以访问汇智网提供的出色的在线互动教程: 以太坊DApp实战入门教程 以太坊去中心化 ...

最新文章

  1. fiddler自动响应AutoResponder之正则匹配Rule Editor
  2. Python常见问题(5):Python扩展与嵌入 Extending/Embedding FAQ
  3. Slax Linux安装——备忘篇
  4. Leetcode--31. 下一个排列
  5. leetcode53 python3 96ms 最大子序列和 python解法
  6. Linux查看CPU信息机器型号等硬件信息
  7. swiper实现移动端导航和内容板块的联动
  8. 在java中获取全年的节假日(包含周末和法定节假日及调休日)
  9. excel删除无尽空白行_?Excel你不知道的神技巧:提升工作效率必备,值得老师收藏!...
  10. 到底谁才能击败星巴克?|【常垒·常识】
  11. CCNP课堂练习一:详解交换机vlan的介绍及通过交换机从逻辑上划分区域配置
  12. CCF-CSP认证历年真题解(100分)
  13. 流年如风卷起梅花飘零的记忆
  14. matlab求方程在X附近的根,matlab 实验03 求代数方程的近似根(解)
  15. html设置字体为5号,以下HTML代码中,哪一个是将词语“Run Away Bride”显示为Verdana字体并且字号为5号的正确代码?...
  16. MAC禁止chrome自动更新【绝对真实有效,无效剁吊】
  17. 室内清扫机器人部分资料收集汇总
  18. 校内互测 B. 王者荣耀 (二分答案+dp)
  19. 港股暴跌719点 成交额超过2000亿港元
  20. 新零售连锁多店saas收银系统源码PHP版本

热门文章

  1. zset 怎么get_Redis消息队列的若干实现方式
  2. [转]缓解压力的5项训练
  3. ubuntu 安装kde桌面_给Ubuntu安装KDE桌面
  4. Docker仓库之企业级可视化私有仓库Harbor(安装、快速、入门)
  5. 华为云云耀服务器搭建网站,云耀云服务器用户指南
  6. python制作个人网页_熬了一夜!我用Python做了一个网站,帮小姐姐生成漫画头像...
  7. 关于 SQL的组合索引的生效问题
  8. iOS如何实时查看App运行日志
  9. 【深度相机系列八】结构光深度相机探讨
  10. java 图片转jpg图片_JAVA转换jpg图片为渐进式图片