DApp的组件:
1、区块链(智能合约);
2、前端(Web用户界面(UI))【Web前端技术(HTML,CSS,JavaScript)】;
3、数据存储【由于gas成本高,智能合约目前不适合存储大量数据。因此,大多数DApps将利用去中心化存储(如IPFS或Swarm)来存储和分发大型静态资产,如图像,视频和客户端应用程序(HTML,CSS,JavaScript)。内容的哈希值通常使用键值映射存储为智能合约中的字节。然后,通过你的前端应用程序调用智能合约检索资产,以获取每个资产的URL。】
Truffle常用命令:
在当前目录下初始化一个全新的APP
truffle init
构建一个开发中的app版本,创建.build目录。
truffle build
编译 --compile-all: 强制编译所有合约
--network 名称:以太链开发唯:MrsFu123指定使用的网络,保存编译的结果到指定的网络上
truffle compile
运行一个控制台,里面包含已初始化,且随时可用的合约对象。
truffle console
移植(部署)系统开发唯:MrsFu123
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 中执行了。