> For the complete documentation index, see [llms.txt](https://www.onee.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://www.onee.io/blog/qu-kuai-lian-ji-shu-ke-pu.md).

# 区块链技术科普

> 声明：以下内容为作者浅显认知，不一定对，请读者自行甄别。

### 一、区块链基础知识

#### 1、区块链（Blockchain）是什么？

官方释义：区块链从本质上讲，它是一个共享数据库，存储于其中的数据或信息，具有“不可伪造”“全程留痕”“可以追溯”“公开透明”“集体维护”等特征。基于这些特征，区块链技术奠定了坚实的“信任”基础，创造了可靠的“合作”机制，具有广阔的运用前景。

白话解释：顾名思义，区块链就是由很多**区块**（Block）组成的**链条**（Chain），每个区块上存储的是上一区块打包后产生的**交易**（transactions）记录，打包区块的过程称之为**记账**，所以区块链也被称作分布式账本。

![](https://cdn.jsdelivr.net/gh/onee-io/onee-resource/picgo/20210725220816.jpg)

#### 2、区块链是如何运作的？

区块链网络是通过不断的打包区块，延长链的长度来进行运作的，网络中只要有节点在持续的打包区块（记账）就可以一直维持下去，所以系统为了鼓励记账行为，设定了奖励机制，给予记账的节点一定的代币奖励（例如比特币），所以人们常称记账为**挖矿**，每个参与区块链网络的节点都可以记账，系统为了保证同一时刻只有一个节点可以获得记账权，设立了**共识机制**来确认记账权，常见的共识机制有**PoW**（工作量证明）、**PoS**（权益证明）、**DPoS**（股权授权证明）等。

区块浏览器：<https://www.blockchain.com/explorer>

#### 3、区块链解决了什么问题？

因为区块链网络是由世界各地的节点来进行位维护，每个节点都存有完整链上数据，所以没有一个中心化的机构可以对链上数据进行篡改（除非拥有整个网络51%以上的算力），这就保证了区块链网络的**去中心化**、**不可篡改**、**数据可追溯**等特性，解决了用户对中心化的机构的**信任**问题。

#### 4、常见的区块链有哪些？

常见的区块链有比特币、以太坊、币安智能链、火币生态链等等。

比特币（Bitcoin）：<https://bitcoincore.org>

以太坊（Ethereum）：<https://ethereum.org/zh>

币安智能链（BSC）：<https://www.binance.org/en/smartChain>

火币生态链（Heco）：<https://www.hecochain.com/zh-cn>

### 二、Dapp开发

#### 1、什么是智能合约？

智能合约（Smart Contract）简单来说就是部署在区块链上的一段程序代码，因为区块链具有公开透明的特性，合约内的规则、数据以及所有交易是公开可见，不会存在任何虚假或者隐藏的交易，同时因区块链具有不可篡改的特性，所以合约一旦部署将不能被修改。

#### 2、什么是 DApp？它与传统的 App 相比有什么区别？

DApp 是 Decentralized Application 的缩写，也就是去中心化应用的意思，DApp 与区块链的关系就好比传统 App 与 Android/iOS 的关系。

传统的 App 数据都是存储在中心化机构的（比如你在支付宝有多少钱都是阿里说了算），用户只能期望中心化机构不会随意篡改你的数据，而 DApp 的数据是存储在链上的，因区块链去中心化、不可篡改的特性，你在 DApp 上的数据不属于任何一家中心化机构，没有任何人可以篡改你的数据，用户也就无需去信任任何中心化机构。

目前最主流的 DApp 开发平台当属以太坊，可随着以太坊的火爆，以太坊网络随之拥堵、交易费用日渐增高，所以市面上出现了一批兼容以太坊协议的公链，比如币安智能链、火币生态链等，开发者可以无缝迁移它们的智能合约。

#### 3、开发语言及工具介绍

*Solidity*：它是由以太坊推出用来编写智能合约的编程语言，其语法类似与 JavaScript，代码编译后可运行在 EVM 上，官方文档：<https://docs.soliditylang.org/en/v0.8.4>，中文版：<https://learnblockchain.cn/docs/solidity>

*Remix*：它是由以太坊推出用来开发智能合约的 Web IDE，具备编写、编译、部署智能合约等功能，IDE 地址：<https://remix.ethereum.org>，官方文档：<https://remix-ide.readthedocs.io/en/latest>

*Truffle*：它是一个基于以太坊进行 DApp 开发的世界级开发框架，与 Java 中的 Spring 框架类似，它具有完备的合约编写、编译、部署、测试等能力，官方文档：<https://www.trufflesuite.com/docs/truffle/overview>，中文版：<https://learnblockchain.cn/docs/truffle>

*Ganache*：它是一个运行在本地内存中的区块链环境，会自动为每一笔交易进行打包记账，无需等待区块确认，它有命令行及 GUI 两个版本，用于开发人员在本地调试合约，官方文档：<https://www.trufflesuite.com/docs/ganache/overview>

*Metamask*：它是一个开源的以太坊钱包，以浏览器插件的形式存在，能帮助用户方便地管理自己的以太坊数字资产以及切换不同的以太坊网络，以便于开发者进行合约调试，下载地址：<https://metamask.io>，官方文档：<https://docs.metamask.io/guide>

*web3.js*：它是由太坊提供的一个JavaScript 库，封装了以太坊的 RPC 通信 API，提供了一系列与区块链交互方法，使 JavaScript 与以太坊交互变得简单，Java 版也有 web3j 库，官方文档：<https://web3js.readthedocs.io/en/v1.3.4>，中文版：<https://learnblockchain.cn/docs/web3.js>，web3j：<http://docs.web3j.io/latest>

社区推荐 → 登链社区：<https://learnblockchain.cn>

#### 4、EIPs是什么？

*EIPs* 是 Ethereum Improvement Proposals 的缩写，即为以太坊改进提案，它描述了以太坊平台的标准，包括核心协议规范，客户端 API 和合同标准，类似于 Java 中接口定义，常用的协议有 ERC20（标准代币）、ERC721（非同质化代币）等，官方文档：<https://eips.ethereum.org>，中文版：<https://learnblockchain.cn/docs/eips>

*OpenZeppelin*：它是根据以太坊 EIPs 规范实现的一套安全、标准的合约库，大大降低的开发者编写智能合约的难度，避免开发者重复造轮子，官方文档：<https://docs.openzeppelin.com/contracts/4.x>

### 三、案例讲解

#### 1、NFT 是什么？他与一般的数字货币有什么区别？如何铸造一个NFT？

NFT 是 Non-Fungible Token 的缩写，意为非同质化代币，它基于 ERC721 规范开发，不同 NFT 代表了不同的资产，比如一个 NFT 代表一根笔，另一个 NFT 可以代表一本书，两两之间价值不同、不可交换、不可分割，典型应用：加密猫（<https://www.cryptokitties.co>）。

一般的数字货币是同质化代币，它们基于 ERC20 规范开发，每一枚代币的价值的是相同的，好比你有100块钱，我也有100块钱，它们两两之间是可以直接交换且可分割的，价值上没有什么不同，典型应用：比特币、以太币等。

铸造一个NFT很简单，首先需要一个被代表的资产，比如一张图片，将他上传到去中心化的存储网络中（比如 IPFS），你会得到这个资产的指向地址（[像这样](https://gateway.pinata.cloud/ipfs/QmZZeMZJsLHPMcwPP3gMZkBXQtaiscSJjfeL6CR3WD5Zh1)），然后你需要创建一个资产的描述文件，一般称之为元数据，他是一个 json 格式的文件，同样也需要上传到去中心化的存储网络中（[像这样](https://gateway.pinata.cloud/ipfs/QmRLrfTUGLAnCBWk6BqTJsrgpSUjeRQWF6pDZ8Qru9CvKA)），最后，你只需要将元数据文件地址的传入合约的 “铸造” 函数，函数会返回一个 tokenId，这样可以得到一个独一无二的 NFT 了。

#### 2、NFT 交易所 OpenSea 介绍

OpenSea 官网：<https://opensea.io>

OpenSea 是一个去中心化的综合性 NFT 交易所，用户可以很容易的在平台上创建、出售、购买 NFT 资产，目前支持的品类包括艺术品、域名、虚拟世界、交易卡、运动等。

使用说明：

* 用户首次登录时会提示连接钱包（MetaMask），平台会根据钱包地址创建账户；
* 用户可创建自己的收藏集，上传 logo、填写名称及描述（可选），收藏集的名称需全平台唯一；
* 用户可在收藏集内创建收藏品，首次上传之前，用户需通过钱包在链上签署服务协议，如：<https://opensea.io/tos>
* 创建收藏品需要包含图片、名称、链接（可选）、描述（可选）以及一些属性，平台会通过这些信息来生成元数据文件 json；
* 确认创建收藏品后，平台会帮我们铸造 NFT，生成一个唯一的 tokenId，并记录在合约上；
* 自己收藏品可以直接转赠给他人，也可以以三种方式进行售卖，固定价格、竞价、打包售卖，成交后平台会收取2.5%的佣金；
