From 34a7b7a3dae47f790ad851b9276ff3b3ef4f1d75 Mon Sep 17 00:00:00 2001 From: xilibi2003 Date: Sun, 30 Jun 2024 18:34:30 +0800 Subject: [PATCH] add introduce --- eth/EVM.md | 43 ++++++ eth/eips/ERC721.md | 2 +- "eth/\345\274\200\345\217\221/Foundry.md" | 143 ++++++++++++++++++ "eth/\345\274\200\345\217\221/Solidity.md" | 67 ++++++++ .../DAO.md" | 1 + .../NFT.md" | 90 ++++++++--- 6 files changed, 322 insertions(+), 24 deletions(-) diff --git a/eth/EVM.md b/eth/EVM.md index e69de29..c5ce4b5 100644 --- a/eth/EVM.md +++ b/eth/EVM.md @@ -0,0 +1,43 @@ +### EVM 是什么? + +[EVM](https://learnblockchain.cn/tags/EVM?map=EVM)(Ethereum Virtual Machine,以太坊虚拟机)是[以太坊](https://learnblockchain.cn/tags/以太坊?map=EVM)的核心组件之一。它是一种图灵完备的虚拟机,允许任何人通过[智能合约](https://learnblockchain.cn/tags/智能合约?map=EVM)在区块链上运行代码。 + +[Solidity](https://learnblockchain.cn/tags/Solidity?map=EVM)语言 与 EVM, 类似语 Java 与 JVM,由于 EVM 的存在,让以太坊成为一个全球无需可的计算机。 + + + +### EVM 执行原理 + +1. **合约编译/部署**:智能合约通常使用[Solidity](https://learnblockchain.cn/tags/Solidity?map=EVM)语言编写,然后编译成[EVM字节码](https://learnblockchain.cn/tags/EVM%E5%AD%97%E8%8A%82%E7%A0%81),编译后的字节码通过交易的方式部署到[以太坊](https://learnblockchain.cn/tags/以太坊?map=EVM)链。 +2. **执行交易**:每次调用智能合约方法时,都会生成一个交易,这个交易包含了要执行的函数(选择器)以及相关的输入数据。 +3. **Gas 计算**:在EVM中,每条指令的执行都需要消耗一定的[Gas](https://learnblockchain.cn/tags/Gas?map=EVM)。Gas 机制用于防止网络资源被滥用。每个交易发送者在发起交易时需要预先指定愿意支付的最大 Gas 量。 +4. **指令执行**:EVM 以堆栈为基础架构,字节码被加载到 EVM 后,依次执行每条指令。这些指令可以进行算术运算、堆栈操作、存储操作、条件跳转等。 +5. **存储与内存**:EVM 具有两种主要的存储区域:永久存储(Storage)和临时内存(Memory)。永久存储用于保存智能合约状态,存储在区块链上;临时内存用于在交易执行过程中存储中间数据,交易结束后会被清空。 +6. **结果返回**:指令执行完毕后,EVM 返回执行结果。如果执行成功,状态改变和输出结果会被记录到区块链上;如果执行失败,则回滚所有状态变化,并返回错误信息。 +7. **账户状态更新**:根据交易的执行结果,更新相关账户的状态(例如余额、存储数据等)。 + + + +EVM 执行过程中的关键点在于其去中心化和一致性。所有节点都运行相同的EVM代码,确保每个节点在处理同一交易时都能得到相同的结果。 + +EVM 是一个封闭沙盒环境,只能读取链内部的状态。 + + + +## EVM 兼容链 + +由于 EVM 具有灵活性和强大的计算能力,能够支持各种复杂的去中心化应用(DApps),这也是[以太坊](https://learnblockchain.cn/tags/以太坊?map=EVM)生态系统繁荣的基础。 + +也因此发展出了很多 [EVM](https://learnblockchain.cn/tags/EVM?map=EVM) 兼容链,他们是实现(EVM)规范的区块链,使得这些链能够运行以太坊上编写的智能合约,并与以太坊上的工具和基础设施兼容。 + + + +常见的 EVM 兼容链:**BNB Chain (原币安智能链 BSC)**、**Polygon(以前称为 Matic)**、Avalanche、Fantom + + + +## 进一步阅读 + +[理解 EVM - 探究Solidity 背后的秘密](https://learnblockchain.cn/column/22) + +[以太坊 EVM 谜题破解](https://learnblockchain.cn/column/21) \ No newline at end of file diff --git a/eth/eips/ERC721.md b/eth/eips/ERC721.md index 75af61c..4874548 100644 --- a/eth/eips/ERC721.md +++ b/eth/eips/ERC721.md @@ -1,5 +1,5 @@ ## ERC721 -ERC721 是一种用于创建非同质化代币(NFT)的以太坊标准。与 ERC20 标准不同,ERC721 代币是独特的,每个代币都有其独特的属性和价值。 +ERC721 是一种用于创建[非同质化代币(NFT)](https://learnblockchain.cn/tags/NFT)的以太坊标准。与 ERC20 标准不同,ERC721 代币是独特的,每个代币都有其独特的属性和价值。 ### ERC721 的特点 diff --git "a/eth/\345\274\200\345\217\221/Foundry.md" "b/eth/\345\274\200\345\217\221/Foundry.md" index e69de29..c1a692d 100644 --- "a/eth/\345\274\200\345\217\221/Foundry.md" +++ "b/eth/\345\274\200\345\217\221/Foundry.md" @@ -0,0 +1,143 @@ +## Foundry 简介 + + + +[Foundry](https://learnblockchain.cn/tags/Foundry?map=EVM) 是一种用于以太坊智能合约开发的先进工具集。它由 Paradigm 开发,是一个快速、便捷和高效的智能合约开发框架,提供了编译、测试、调试和部署合约的完整工具链。Foundry 的设计目标是提高开发效率简化 [Solidity](https://learnblockchain.cn/tags/Solidity?map=EVM) 智能合约的开发流程。 + +### Foundry 的主要组件 + +1. **Forge**: + - Forge 是 Foundry 的核心命令行工具,用于编译、测试和部署智能合约。 + - 主要功能包括: + - 编译:`forge build` 命令编译智能合约。 + - 测试:`forge test` 命令运行测试,支持快速和高效的单元测试。 + - 部署:`forge create` 命令用于将合约部署到区块链上。 +2. **Cast**: + - Cast 是 Foundry 的另一重要工具,提供了与以太坊网络进行交互的命令行界面。 + - 功能包括发送交易、查询链上数据、调用智能合约等。例如,`cast send` 命令用于发送交易,`cast call` 命令用于调用合约方法。 +3. **Anvil**:一个高性能的本地测试网络,用于模拟以太坊区块链环境。它提供了快速的交易确认和丰富的测试功能,便于开发和调试。 + +4. **Chisel**: 一个先进的Solidity REPL。它可以用来快速测试在本地或 fork 网络上的 Solidity 片段的行为。 + +### 使用 Foundry 的示例 + +以下是使用 Foundry 编写、测试和部署智能合约的基本步骤: + +1. **安装 Foundry**: + - 通过以下命令安装 Foundry: + ```sh + curl -L https://foundry.paradigm.xyz | bash + foundryup + ``` + +2. **初始化项目**: + - 使用 `forge init` 命令初始化一个新的智能合约项目: + ```sh + forge init my-foundry-project + cd my-foundry-project + ``` + +3. **编写智能合约**: + - 在 `src` 目录下编写你的智能合约,例如 `HelloWorld.sol`: + ```solidity + // SPDX-License-Identifier: MIT + pragma solidity ^0.8.0; + + contract HelloWorld { + string public message; + + constructor(string memory _message) { + message = _message; + } + + function setMessage(string memory _message) public { + message = _message; + } + } + ``` + +4. **编译合约**: + - 使用 `forge build` 命令编译合约: + ```sh + forge build + ``` + +5. **测试合约**: + - 在 `test` 目录下编写测试文件,例如 `HelloWorld.t.sol`: + ```solidity + // SPDX-License-Identifier: MIT + pragma solidity ^0.8.0; + + import "forge-std/Test.sol"; + import "../src/HelloWorld.sol"; + + contract HelloWorldTest is Test { + HelloWorld hello; + + function setUp() public { + hello = new HelloWorld("Hello, Foundry!"); + } + + function testInitialMessage() public { + assertEq(hello.message(), "Hello, Foundry!"); + } + + function testSetMessage() public { + hello.setMessage("Hello, Ethereum!"); + assertEq(hello.message(), "Hello, Ethereum!"); + } + } + ``` + +6. **运行测试**: + - 使用 `forge test` 命令运行测试: + ```sh + forge test + ``` + +7. **合约部署** + + Forge 提供 create 命令和 script 两个方式部署: + + `create` 命令部署合约,方法如下: + + ``` + forge create src/HelloWorld.sol:HelloWorld --constructor-args "Hello" --rpc-url --private-key $PRIVATE_KEY + ``` + + 复杂一些的合约,更多的使用 script, 在 `scripts` 目录下创建一个新的部署脚本,例如 `DeployHelloWorld.s.sol`: + + ```solidity + // SPDX-License-Identifier: MIT + pragma solidity ^0.8.0; + + import "forge-std/Script.sol"; + import "../src/HelloWorld.sol"; + + contract DeployHelloWorld is Script { + function run() external { + vm.startBroadcast(); + + new HelloWorld("Hello, Foundry!"); + + vm.stopBroadcast(); + } + } + ``` + + 在这个脚本中,`vm.startBroadcast()` 和 `vm.stopBroadcast()` 用于指示在区块链上广播交易。`new HelloWorld("Hello, Foundry!");` 是部署合约的命令。 + + ``` + forge script scripts/DeployHelloWorld.s.sol --rpc-url --private-key $PRIVATE_KEY --broadcast + ``` + + + + +## 更多 + +1. DeCert.me Foundry 开发教程: https://decert.me/tutorial/solidity/tools/foundry + +2. Foundry 文档: 英文: https://book.getfoundry.sh/ 中文:https://learnblockchain.cn/docs/foundry/i18n/zh/ + + \ No newline at end of file diff --git "a/eth/\345\274\200\345\217\221/Solidity.md" "b/eth/\345\274\200\345\217\221/Solidity.md" index e69de29..4764b5c 100644 --- "a/eth/\345\274\200\345\217\221/Solidity.md" +++ "b/eth/\345\274\200\345\217\221/Solidity.md" @@ -0,0 +1,67 @@ +## Solidity + +[Solidity](https://learnblockchain.cn/docs/solidity/) 是一门面向合约的、为实现智能合约而创建的高级编程语言,也是用于开发[以太坊](https://learnblockchain.cn/tags/以太坊?map=EVM)智能合约)最受欢迎的语言之一。这门语言受到了 C++,Python 和 Javascript 语言的影响,其设计目的是能在 [以太坊虚拟机(EVM)](https://learnblockchain.cn/2019/04/09/easy-evm/) 上运行。 + +Solidity 是静态类型语言,具备面向对象特性:支持继承、库、接口和复杂的用户定义类型、 + +Solidity 中文文档:可阅读[Solidity最新中文文档](https://learnblockchain.cn/docs/solidity/) + +> Solidity 更新较快,历史版本文档:[0.8.0 更新列表](https://learnblockchain.cn/docs/solidity/080-breaking-changes.html) , [0.7 更新列表](https://learnblockchain.cn/docs/solidity/070-breaking-changes.html) , [0.6 更新列表](https://learnblockchain.cn/docs/solidity/060-breaking-changes.html) , [0.5 更新列表](https://learnblockchain.cn/docs/solidity/050-breaking-changes.html) 。 + +### Solidity 的实例 + +一个简单的 Solidity 智能合约示例如下: + +```solidity +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +contract SimpleStorage { + uint256 private data; + + // 设置数据 + function set(uint256 _data) public { + data = _data; + } + + // 获取数据 + function get() public view returns (uint256) { + return data; + } +} +``` + +- `pragma solidity ^0.8.0;`:指定 Solidity 编译器的版本。 +- `contract SimpleStorage`:定义一个名为 `SimpleStorage` 的合约。 很类似其他语言定义一个类。 +- `uint256 private data;`:定义一个私有的 `uint256` 类型变量 `data`。 +- `function set(uint256 _data) public`:定义一个公开的 `set` 函数,用于设置 `data` 的值。 +- `function get() public view returns (uint256)`:定义一个公开的 `get` 函数,用于返回 `data` 的值。 + +### Solidity 开发工具 + +开发 Solidity 智能合约时,可以使用以下工具: + +1. **Remix IDE**: + - [Remix](https://remix.ethereum.org/) 是一个基于浏览器的开发环境,提供了编写、编译、调试和部署 Solidity 智能合约的全套工具。 +2. **Hardhat**: + - [Hardhat](https://learnblockchain.cn/tags/Hardhat?map=EVM) 是一个 Solidity 开发工具,可以轻松地编写、测试和部署智能合约。Hardhat 使用 Node 进行包管理,如果你熟悉 Node 及 Javascript, Hardhat 将非常简单上手。 +3. **Foundry**: + - [Foundry](https://learnblockchain.cn/tags/Foundry?map=EVM) 是一个 Solidity 开发工具,用于构建、测试、模糊、调试和部署Solidity智能合约, Foundry 的优势是以Solidity 作为第一公民,完全使用 Solidity 进行开发与测试,如果你不太熟悉 JavaScript , 使用 Foundry 是一个非常好的选择,而且Foundry 构建、测试的执行速度非常快。 +4. Truffle: 不推荐使用 +5. **OpenZeppelin**: + - [OpenZeppelin](https://learnblockchain.cn/tags/OpenZeppelin?map=EVM) 提供了可复用的智能合约库和安全工具,帮助开发者编写安全的合约。 + + + +## 更多 + + + +专栏:[全面掌握Solidity智能合约开发](https://learnblockchain.cn/column/1) + +DeCert.me 教程:https://decert.me/tutorial/solidity/intro/ + +线上课程:https://learnblockchain.cn/course/28 + +线下集训:[OpenSpace Web3*BootCamp ](https://learnblockchain.cn/openspace/1) + diff --git "a/eth/\347\224\237\346\200\201\345\272\224\347\224\250/DAO.md" "b/eth/\347\224\237\346\200\201\345\272\224\347\224\250/DAO.md" index e69de29..faf0ca3 100644 --- "a/eth/\347\224\237\346\200\201\345\272\224\347\224\250/DAO.md" +++ "b/eth/\347\224\237\346\200\201\345\272\224\347\224\250/DAO.md" @@ -0,0 +1 @@ +**去中心化自治组织(DAO)**:建立去中心化的组织结构,用于社区治理和集体决策。 \ No newline at end of file diff --git "a/eth/\347\224\237\346\200\201\345\272\224\347\224\250/NFT.md" "b/eth/\347\224\237\346\200\201\345\272\224\347\224\250/NFT.md" index 39fabf4..9951b77 100644 --- "a/eth/\347\224\237\346\200\201\345\272\224\347\224\250/NFT.md" +++ "b/eth/\347\224\237\346\200\201\345\272\224\347\224\250/NFT.md" @@ -1,45 +1,89 @@ -# NFT +## NFT 是什么 -## 什么是NFT? +NFT(非同质化代币,Non-Fungible Token)是一种基于区块链技术的数字资产,与传统的同质化代币(如比特币、以太币、USDT等 [Token](https://learnblockchain.cn/tags/Token?map=EVM) )不同,NFT 是独一无二的,每一个 NFT 都具有唯一的标识符和元数据,无法互换。NFT 常用于表示数字艺术品、音乐、视频、游戏道具、虚拟地产等独特的数字资产。 -**非同质化代币**(NFT/Non-Fungible Token),是一种众筹扶持项目方的方式,也是一种被称为区块链数字账本上的数据单位,每个代币可以代表一个独特的数字资料,作为虚拟商品所有权的电子认证或证书。由于其**不能互换的特性**,非同质化代币可以代表数字资产,如画作、艺术品、声音、视频、游戏中的项目或其他形式的创意作品。虽然作品本身是可以无限复制的,但这些代表它们的代币在其底层区块链上能被完整追踪,故能为买家提供所有权证明。诸如以太币、比特币等加密货币都有自己的代币标准以定义对NFT的使用。 -## NFT如何运作? -NFT由区块链技术提供支持,该技术可提供记录交易和所有权详情的去中心化账本。得益于**NFT的高透明度和不可篡改性**,人们可以清晰地追溯NFT的所有权历史。随着NFT随时间推移而不断易手,这可以用于验证NFT的真实性和合法性。 +### NFT 标准 -NFT采用的另一项底层技术是**智能合约**,它们本质上是自动执行的程序。通过自动化和强制执行相关条件,智能合约可以在没有中间机构参与的情况下创建、管理和转让NFT。 +在[以太坊](https://learnblockchain.cn/tags/以太坊?map=EVM)区块链(或 EVM 兼容链)上,NFT 通常遵循以下标准: -NFT的一个关键方面在于代币标准的实施。这些标准针对NFT的创建、管理和转让定义相应的规则和功能,确保不同平台之间的互操作性和一致性。例如,目前使用最为广泛的NFT代币标准是以太坊上的ERC-721和BNB Chain上的BEP-721。 +1. **[ERC-721](https://learnblockchain.cn/tags/ERC721?map=EVM)**:ERC-721 是最早的、最广泛使用的 NFT 标准,定义了一组基本接口和事件,用于管理和交易 NFT。 +2. **[ERC-1155](https://learnblockchain.cn/tags/ERC1155?map=EVM)**:ERC-1155 是一种多代币标准,可以同时支持同质化代币和非同质化代币。这种标准在游戏和收藏品领域特别有用,因为它允许批量转移和高效的代币管理。 -NFT的创建过程通常被称为**铸造**。依托智能合约,铸造可以将数字文件转换为区块链上的数字资产。用户在购买NFT时,**实际上获得的是与该特定数字资产相关联的唯一标识符(或代币ID)的所有权**。因此,代码所有者拥有使用、展示以及与该资产交互的专属权利。 +在其他链上有不同的标准,比特币上通过 Ordinals 协议定义 NFT , 在 Solana 上,并不严格区分 NFT 与 同质Token, 而是统一使用 SPL Token 标准。 -## NFT应用场景 -* **NFT艺术** -NFT艺术为艺术家提供了一种将其作品变现的新方式。通过将艺术品代币化,创作者可以出售独特的数字化副本,从而保留每件作品的原创性和稀缺性。此外,借助NFT艺术,收藏家可以在虚拟画廊中展示和交易其作品,甚至还可以将作品出借给他人。 +### 如何创建 NFT -* **NFT游戏** +在 EVM 生态链上 创建 NFT 的过程通常包括以下步骤: -NFT游戏可以将NFT作为数字收藏品,例如游戏内物品和角色等。此外,NFT还可用于代表玩家可进行交易的虚拟房地产。而这有望打造出一个游戏生态系统,在该生态系统中,玩家可以将其游戏内成就和资产变现,还可以创建一个二级市场。 +1. **编写智能合约**: + - 使用 [Solidity](https://learnblockchain.cn/tags/Solidity?map=EVM) 编写智能合约,定义 NFT 的属性和行为。 + + 以下是 ERC-721 智能合约示例: + ```solidity + // SPDX-License-Identifier: MIT + pragma solidity ^0.8.0; + + import "@openzeppelin/contracts/token/ERC721/ERC721.sol"; + import "@openzeppelin/contracts/access/Ownable.sol"; + + contract MyNFT is ERC721, Ownable { + uint256 public nextTokenId; + string private _baseTokenURI; + + constructor(string memory baseTokenURI) ERC721("MyNFT", "MNFT") { + _baseTokenURI = baseTokenURI; + } + + function mint() external onlyOwner { + uint256 tokenId = nextTokenId; + _mint(msg.sender, tokenId); + nextTokenId++; + } + + function _baseURI() internal view override returns (string memory) { + return _baseTokenURI; + } + } + ``` -* **NFT质押** +2. **部署智能合约**: + - 使用 [Foundry](https://learnblockchain.cn/tags/Foundry?map=EVM)、[Hardhat](https://learnblockchain.cn/tags/Hardhat?map=EVM) 等工具将智能合约部署到区块链上。 -借助NFT质押,用户可将其NFT质押为抵押品以赚取回报。某些去中心化金融(DeFi)平台已可以实现这一点,即NFT持有者能够在保留其NFT所有权的同时赚取利息收益。 +3. **铸造(Minting)NFT**: + - 调用智能合约中的 `mint` 函数,创建新的 NFT 并将其分配给用户。 -* **NFT门票** +### 交易 NFT -NFT可用于门票管理。例如,活动组织者可发行NFT作为门票,提供不可篡改的所有权和出席情况证明。此外,所有者可以在不涉及第三方的情况下转让和转售NFT门票。NFT门票还可以附带专属福利,例如进入VIP区域、访问专属商品或特殊数字内容等。 +NFT 的交易通常在去中心化的 NFT 市场上进行,如 OpenSea、Blur、MagicEden 等。交易过程如下: -## NFT与加密货币区别 +1. **上架**: + - 将 NFT 上架到市场,设置价格和销售条件。 -尽管NFT与加密货币均为使用区块链技术的数字资产,但它们有着不同的用途和特点。 +2. **买卖**: + - 买家浏览市场,选择并购买 NFT。交易通过智能合约完成。 -加密货币通常旨在促成交易。它们具有同质化特性,也即每一单位均可兑换为同币种的另一单位。例如,您可以使用一枚比特币兑换另一枚比特币,而不会产生任何价值差异。 +3. **转移所有权**: + - 一旦交易完成,NFT 的所有权从卖家转移到买家,交易记录将被永久记录在区块链上。 -相比之下,NFT是独一无二的数字资产。它们具有非同质化特性,也即每一枚NFT都是独一无二的,无法直接一对一交换另一枚NFT。简言之,NFT的价值源于其独特性和稀缺性。 -*** -参考文章:https://academy.binance.com/zh/articles/what-is-an-nft?&utm_campaign=web_share_copy +### 知名 NFT 项目 + +* **CryptoPunks** 是由 Larva Labs 创建的 10,000 个独特的 24x24 像素艺术角色。每个 CryptoPunk 都是独一无二的,并存储在以太坊区块链上。CryptoPunks 是最早的 NFT 项目之一,因其历史意义和稀缺性而备受收藏家青睐。 +* **CryptoKitties** 是一款区块链养猫游戏,玩家可以收集、饲养和繁殖虚拟猫咪,每只猫咪都是独特的 NFT。CryptoKitties 是最早的 NFT 游戏之一,CryptoKitties 展示了区块链技术在游戏和收藏领域的潜力。 +* **Bored Ape Yacht Club** 是由 Yuga Labs 创建的一系列 10,000 个独特的 Bored Ape NFT,每个猿猴都有不同的外观和特征。持有者不仅可以拥有独特的数字艺术品,还可以加入俱乐部,享受独家会员福利和活动。 +* **Art Blocks** 是一个生成艺术平台,允许艺术家创建和销售基于算法生成的艺术作品。每件作品都是独一无二的,并在购买时生成。 +* **Decentraland** 是一个基于区块链的虚拟现实平台,用户可以购买、开发和出售虚拟土地和资产。所有资产都以 NFT 形式存在。Decentraland 提供了一个完全由用户控制的虚拟世界,用户可以在其中创建和体验各种互动内容。 +* **NBA Top Shot** 是由 Dapper Labs 开发的一个数字收藏品平台,允许用户购买、出售和交易 NBA 的精彩时刻(视频剪辑)。每个时刻都是一个 NFT,具有独特的稀缺性和收藏价值,受到了大量篮球迷的欢迎。 +* **ENS** 是以太坊名称服务, 使用 NFT 来记录域名的所有权,并提供很好的交易方式。 +* **Uniswap V3** 通过 NFT 来表示用户提供的独一无二的流动性。 + + + +### 未来展望 + +随着区块链技术的不断发展和应用场景的扩展,NFT 将在更多领域发挥重要作用,推动数字经济的发展和变革。NFT 的独特性和可编程性为创造新的商业模式和用户体验提供了无限可能。