【WEB3】区块链开发入门项目之「简易NFT交易市场」

参考文章

教程英文版:https://docs.alchemy.com/docs/how-to-build-an-nft-marketplace-from-scratch

教程中文版:https://zhuanlan.zhihu.com/p/557479922?utm_id=0

以太坊测试币领取:https://goerlifaucet.com/

入门项目地址:https://github.com/alchemyplatform/NFT-Marketplace-Tutorial

一些名词和平台简介

入门该项目之前,最好先了解一些相关平台和技术,有个大概的认知。

下面的内容一些是Copy谷歌上的,一些是GPT生成的,仅供参考。

Alchemy

Alchemy 是一个以太坊开发平台,提供了一系列工具和服务,帮助开发者更轻松地构建和管理以太坊应用程序。Alchemy 的主要功能如下:

  1. 以太坊节点管理:Alchemy 提供了一个可靠的高可用性以太坊节点,开发者可以使用它来连接以太坊网络,并获取实时区块数据和交易数据。
  2. 智能合约开发:Alchemy 提供了一个易于使用的智能合约开发工具,帮助开发者编写、部署和测试智能合约。
  3. API 集成:Alchemy 提供了一组 API,使开发者能够轻松地将以太坊功能集成到他们的应用程序中。
  4. 交易分析和监控:Alchemy 提供了一套工具,帮助开发者分析和监控以太坊网络上的交易,包括交易量、交易费用、区块时间等等。
  5. 安全和隐私:Alchemy 提供了一系列安全和隐私功能,帮助开发者保护他们的应用程序免受攻击和数据泄露。

总之,Alchemy 提供了一系列工具和服务,帮助开发者更轻松地构建和管理以太坊应用程序。

MetaMask

MetaMask 是一款以太坊钱包浏览器插件,它可以用来管理以太坊和 ERC-20 标准代币。它可以让您在浏览器中访问以太坊网络,并与去中心化应用程序(DApp)进行交互,如去中心化交易所、去中心化金融应用、游戏等,而不需要暴露您的私钥。此外,MetaMask 还提供了高级功能,如 Gas 费设置、多账户支持、交易历史记录等。如果您在使用以太坊和去中心化应用程序,MetaMask 是一个非常有用的工具。

Pinata

Pinata 是一个 IPFS 文件托管平台,它提供了简单、安全、可靠的去中心化存储和分发服务。使用 Pinata,用户可以将文件上传到 IPFS 网络,并获得一个唯一的 CID(Content Identifier),以便在整个 IPFS 网络中找到和访问该文件。Pinata 还提供了一些有用的功能,如文件版本控制、自动备份、文件加密和解密、API 接口等等。使用 Pinata,用户可以方便地将文件存储在 IPFS 网络上,以实现去中心化的文件存储和分发。这对于需要存储大量数据或需要在去中心化应用程序中使用文件的用户来说非常有用。

IPFS

星际文件系统 (InterPlanetary File System,缩写为 IPFS)是一个旨在实现文件的分布式存储、共享和持久话的网络传输协议。它是一个内容可寻址的点对点超媒体分发协议。在IPFS网络中的节点构成一个分布式文件系统。

IPFS采用去中心化的方式存储文件,文件被分发到全球各个节点,每个节点都可以存储和提供文件内容。当用户请求某个文件时,IPFS会根据文件的哈希值快速定位到存储该文件的节点,实现高效的文件传输。

IPFS具有以下特点:

  1. 去中心化:文件存储和传输不依赖于中心化的服务器,而是通过全球范围内的节点共同完成。
  2. 版本控制:IPFS使用内容寻址的方式来标识文件,每个文件的哈希值与其内容密切相关,因此可以实现文件的版本控制。
  3. 高可靠性:文件在IPFS网络中会被多个节点存储,当某个节点不可用时,可以从其他节点获取文件内容,提高了文件的可靠性。
  4. 高效传输:IPFS使用数据块的哈希值来标识文件,当多个文件具有相同的数据块时,可以实现数据的共享,减少了重复传输的问题。

总之,IPFS是一种新型的分布式文件系统,通过去中心化、内容寻址和多节点存储等技术,实现了高可靠性、高效性和去中心化的文件存储和传输。

IPFS在区块链开发中可以做什么

IPFS(InterPlanetary File System)是一种点对点的分布式文件存储系统,可以在区块链开发中实现以下功能:

  1. 分布式存储 - IPFS可以将文件分散在网络中的多个节点上存储,确保文件的安全性和可靠性。这在区块链应用程序中很有用,因为它可以将数据存储在多个节点上,从而减少数据丢失的风险。
  2. 链接数据 - IPFS使用哈希链接文件,这使得它可以轻松地链接和共享数据,从而使数据更易于在区块链应用程序中共享和使用。
  3. 去中心化网络 - IPFS是去中心化的网络,没有中心化的服务器,这使得它更难受到攻击和故障。这在区块链应用程序中很有用,因为它可以提高应用程序的可靠性和安全性。
  4. 加速数据传输 - IPFS使用内容寻址,可以加速数据传输并提高网络效率。这在区块链应用程序中很有用,因为它可以减少数据传输时间,提高应用程序的性能。

总之,IPFS可以在区块链开发中用于分布式存储、链接数据、去中心化网络和加速数据传输等方面,从而提高应用程序的可靠性、安全性、性能和效率。

NFT和IPFS之间的联系

NFT(Non-Fungible Token)是一种基于区块链的数字资产,通常用于代表独特的数字艺术品、游戏道具、收藏品等。而IPFS(InterPlanetary File System)是一种点对点的分布式文件存储系统,可以在区块链应用程序中用于存储和管理NFT资产。

具体来说,NFT通常包含对存储在IPFS上的数字资产的引用,这些数字资产可以是图像、音频、视频或其他类型的文件。因此,将NFT与IPFS结合使用可以实现以下功能:

  1. 分布式存储 - 将NFT资产存储在IPFS上可以将其分散在网络中的多个节点上存储,确保资产的安全性和可靠性。
  2. 去中心化 - 使用IPFS进行NFT资产管理可以实现去中心化的存储和管理,提高应用程序的可靠性和安全性。
  3. 链接数据 - NFT通常包含对存储在IPFS上的数字资产的引用,这使得它可以轻松地链接和共享数据,从而使数据更易于在区块链应用程序中共享和使用。

总之,NFT资产管理和IPFS之间有着密切的关系,使用IPFS可以实现分布式存储、去中心化和链接数据等功能,从而提高NFT资产的可靠性和安全性。

Alchemy、Pinata和MetaMask 三者是怎么联动的

Alchemy、Pinata 和 MetaMask 可以一起使用来构建和管理以太坊应用程序,具体的联动方式如下:

  1. Alchemy 可以提供一个高可用性的以太坊节点,供开发者在 MetaMask 中使用。开发者可以在 MetaMask 中添加自定义网络,输入 Alchemy 提供的节点 URL,以连接到 Alchemy 的以太坊节点。
  2. Pinata 提供了一个 IPFS 存储服务,开发者可以将文件上传到 Pinata,然后通过 Alchemy 提供的 API 将文件的哈希值存储到以太坊上。开发者可以使用 MetaMask 来授权这些交易,并跟踪交易状态。
  3. MetaMask 可以通过 Alchemy 提供的 API 来与以太坊网络进行交互,包括查询账户余额、发送交易、调用智能合约等操作。开发者可以使用 MetaMask 来管理以太坊账户,以便与 Alchemy 和 Pinata 进行交互。

总之,Alchemy、Pinata 和 MetaMask 可以一起使用来构建和管理以太坊应用程序,通过 API 和网络连接来实现联动。这三个工具提供了不同的功能和服务,可以共同帮助开发者更轻松地构建和管理以太坊应用程序。

MetaMask连接Alchemy

要将MetaMask连接到Alchemy节点,您需要按照以下步骤操作:

  1. 在浏览器中打开MetaMask钱包,确保您已登录您的钱包。
  2. 点击MetaMask的网络切换按钮,选择“Custom RPC”自定义网络。
  3. 在“New Network”页面中,输入以下信息:
  • Network Name: 任意名称,如“Alchemy Mainnet”。
  • New RPC URL: Alchemy提供的节点URL,例如:https://eth-mainnet.alchemyapi.io/v2/YOUR-API-KEY。
  • Chain ID: Alchemy节点的Chain ID,例如1表示以太坊主网。
  • Symbol: 代币符号,例如ETH。
  • Block Explorer URL: 区块链浏览器的URL,例如https://etherscan.io/。
  1. 点击“Save”按钮保存设置,然后返回MetaMask的主页面。
  2. 点击MetaMask的网络切换按钮,选择刚刚新增的Alchemy网络,您现在应该已经成功连接到Alchemy节点了。

需要注意的是,为了能够连接到Alchemy节点,您需要在Alchemy上注册一个账户并获取API密钥。您可以在Alchemy的控制台中创建一个项目,并在项目设置中找到API密钥。确保您已经启用了与所使用的Alchemy节点相对应的API密钥。

NFT

NFT是“Non-Fungible Token”的缩写,中文翻译为“非同质化代币”,是一种基于区块链技术的数字资产。与传统的加密货币不同,NFT每个都是独一无二的,不可替代的数字资产,它们可以代表数字艺术品、虚拟房地产、游戏物品、音乐等数字内容。NFT使用智能合约技术,确保每个NFT的唯一性、拥有权和交易历史可追溯。NFT市场的兴起,为数字内容创造者提供了新的收入来源,同时也为数字内容爱好者提供了新的收藏方式。

创建NFT市场大致过程

选择区块链平台:有几个区块链平台支持NFT,例如Ethereum、Binance Smart Chain和Flow。选择最符合您要求的平台。

创建智能合约:编写定义NFT结构和所有权的智能合约。该合约将部署在区块链平台上。

创建前端:为您的市场开发一个前端,用户可以查看和购买NFT。您可以使用React或Angular等框架来构建您的前端。

集成钱包:集成MetaMask等钱包,允许用户购买、出售和持有NFT。

创建数据库:设置数据库以存储有关NFT及其所有者的信息。

开发付款系统:集成付款系统,允许用户购买和出售NFT。您可以使用Ether等加密货币或USDT等稳定币进行交易。

启动市场:部署智能合约和前端到区块链平台上,并启动您的NFT市场。

请记住,这只是NFT市场的基本框架。您可能需要根据您的具体要求进行自定义。

使用Goerli龙头来申请Goerli ETH(白嫖ETH)

https://zhuanlan.zhihu.com/p/557479922?utm_id=0

ABI

在以太坊区块链上,ABI(Application Binary Interface)是用于描述智能合约函数的接口的一种标准格式。要获取一个智能合约的ABI,可以按照以下步骤操作:

  1. 打开以太坊区块链浏览器(如Etherscan、BscScan、PolygonScan等)。
  2. 在搜索框中输入智能合约的地址,然后按下回车键。
  3. 打开智能合约的页面,找到“Contract”或“Contract Source Code”部分。在这一部分中,通常会提供智能合约的ABI,可以通过点击“View Contract ABI”或类似的按钮来查看。
  4. 如果ABI没有提供,则可以在“Contract Source Code”部分中查找智能合约的源代码,并手动编写ABI。

另外,如果您已经有智能合约的源代码,可以使用Solidity编译器来生成ABI。在Solidity编译器中,选择智能合约的源文件,然后点击“Compile”按钮。在编译完成后,可以在输出中找到智能合约的ABI。

一般的,我使用remix编译合约并获取之。

开发大致过程

这里只列出大致的步骤,详情请查阅参考文章中的教程

1、注册一个Alchemy账户并创建一个新的应用程序

2、注册MetaMask,记钱包私钥为PRIVATE_KEY

3、使用Goerli龙头来申请Goerli ETH,获取一点Goerli测试网的ETH(0.03就行)

建议用这个网站:https://goerli-faucet.pk910.de/

更多网站:https://zhuanlan.zhihu.com/p/618154628

4、注册Alchemy,创建一个区块链应用APP,记该APP的API地址为ALCHEMY_API_URL

5、使用remix开发、编译合约,然后,开始部署合约,并「保存合约地址和ABI」

(remix比用自己的命令行、脚本啥的省事多了)

注意:部署的时候会花费一点点虚拟币,这里是从哪个钱包扣钱,哪个钱包地址就是这个部署上去的合约的创造者(Creator)。

合约地址:部署成功后,会在控制台打印合约地址的,例如「0x2a54C4D62d40D6750B24601F9C79107D3192Bedf」

ABI:可以在编译后的contracts文件夹中的NFTMarketplace_metadata.json文件中的output的abi获取之。

然后就可以在https://goerli.etherscan.io/address/0x2a54c4d62d40d6750b24601f9c79107d3192bedf看到合约信息了。

remix地址:https://remix.ethereum.org/#lang=en&optimize=true

使用remix部署合约教程:https://docs.moonbeam.network/cn/builders/build/eth-api/dev-env/remix/

截屏2023-09-12 下午5.20.34.png

6、在本地代码里,把上面的相关配置配了。

.env大致结构如下,记得替换为自己的

REACT_APP_ALCHEMY_API_URL="https://eth-goerli.g.alchemy.com/v2/xxxxxxxxxxxxxx"# metamask钱包秘钥
REACT_APP_PRIVATE_KEY="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"# Pinata配置
REACT_APP_PINATA_KEY="xxxxxxxxxxxxxxxxxxx"
REACT_APP_PINATA_SECRET="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

Marketplace.json大致结构如下

{"address": "0x2a54c4d62d40d6750b24601f9c79107d3192bedf","abi": [...]}

7、跟着官方教程完善代码

8、完成项目,并进行测试

查看自己的账户余额,发布NFT商品,然后购买。在pinata查看发布的NFT数据有没有被存进来,在MetaMask或者Goerli查看自己部署的合约以及每一笔交易记录的详情

goerli.etherscan.io是以太坊测试网络Goerli的区块链浏览网站。它提供了对在Goerli网络上发生的交易、合约和地址的实时查看和跟踪,同时也可以查看区块链的状态和统计数据。

例如我完成的项目的操作可以在这里查阅得到,说明上链成功。

https://goerli.etherscan.io/tx/0x6d37aafb2947ae03076c0bc774921ec419e972a1b25a70671058e5386aec67a3

https://goerli.etherscan.io/token/0x2a54c4d62d40d6750b24601f9c79107d3192bedf

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/131500.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++杂货铺】优先级队列的使用指南与模拟实现

文章目录 一、priority_queue的介绍二、priority_queue的使用2.1 数组中的第k个最大元素 三、priority_queue模拟实现3.1 仿函数3.2 成员变量3.3 成员函数3.3.1 构造函数3.3.2 AdjustDown3.3.3 push3.3.4 AdjustUp3.3.5 pop3.3.6 empty3.3.7 size 四、结语 一、priority_queue的…

苏州融资融券(两融)开户利率最低能做到多少?5%!

两融利率是指投资者在证券交易所通过融资买入和融券卖出股票时所支付的利息费用。两融包括融资和融券两部分,而融资和融券则是两种常见的金融杠杆运作方式。融资是指投资者通过向券商借入资金来买入股票。在融资中,投资者需要支付给券商一定的利息费用。…

面了一个测试工程师要求月薪26K,总感觉他背了很多面试题...

最近有朋友去华为面试,面试前后进行了20天左右,包含4轮电话面试、1轮笔试、1轮主管视频面试、1轮hr视频面试。 据他所说,80%的人都会栽在第一轮面试,要不是他面试前做足准备,估计都坚持不完后面几轮面试。 其实&…

Linux系统离线安装RabbitMQ

安装rabbitmq 1、下载安装包 首先进入官网进行安装包的下载,在下载时一定要注意erlong版本和rabbitmq-server版本匹配 rabbitmq版本对应关系:传送门 Erlong下载地址:传送门 rabbitmq-server下载地址:传送门 socat 不同版本 centos7:传送门 cent…

【Unity3D】UI Toolkit数据动态绑定

1 前言 本文将实现 cvs 表格数据与 UI Toolkit 元素的动态绑定。 如果读者对 UI Toolkit 不是太了解,可以参考以下内容。 UI Toolkit简介UI Toolkit容器UI Toolkit元素UI Toolkit样式选择器UI Toolkit自定义元素 本文完整资源见→UI Toolkit数据动态绑定。 2 数据…

【办公软件】微信占用C盘空间如何释放

C盘又满了,如果微信QQ用得多的话,很可能微信就占用了很多空间。当然就算安装目录选择到了其他盘,但是软件的缓存也有可能占用C盘。 因为微信或是其他常用软件的缓存路径都会默认保存在C盘,随着传输文件较多,每次都会自…

编码转换流

同理,创建f1和f2方法,分别测试OutputStreamWriter和InputStreamReader 也是主要分三步,即1创建流 2使用流 3关流 OutputStreamWriter f1方法 因为要操作流,所以先创建一个try-catch-finally结构,创建流对象Out…

ARTS 打卡 第一周,初试ARTS

前言 认识三掌柜的想必都知道,我持续创作技术博客已经有6年时间了,固定每个月发布不少于6篇博文。同时,自己作为一名热爱分享的开发者,像ARTS这样的活动自然少不了我。由于我是打算挤在一起分享,之前都是做了本地文档记…

在PHP8中统计数组元素个数-PHP8知识详解

在php8中,统计数组元素的个数,有下面几个函数:使用count()函数统计数组元素个数、使用sizeof()函数统计数组元素个数。还讲到了,使用array_count_values()函数来统计数组中每个元素出现的次数。 1、使用count()函数统计数组元素个…

大数据知识点之大数据5V特征

大数据的特征可以浓缩为五个英文单词,Volume(大量)、Variety(多样性)、Velocity(速度)、Value(价值)、Veracity(准确性)。因为是5个特征都是以“V”开头的英文单词,又叫大数据5V特征。 概述&…

Redis常用应用场景

Redis是一款开源的基于内存的键值存储系统,它提供了多种数据结构和丰富的功能,适用于各种不同的应用场景。以下是Redis常用的应用场景: 1.缓存:Redis最常见的用途就是作为缓存。由于Redis存储在内存中,读取速度非常快…

线性代数的学习和整理19,特征值,特征向量,以及引入的正交化矩阵概念(草稿)

目录 1 什么是特征值和特征向量? 1.1 特征值和特征向量这2个概念先放后 1.2 直观定义 1.3 严格定义 2 如何求特征值和特征向量 2.1 方法1:结合图形看,直观方法求 2.1.1 单位矩阵的特征值和特征向量 2.1.2 旋转矩阵 2.2 根据严格定义…

建站系列(八)--- 本地开发环境搭建(WNMP)

目录 相关系列文章前言一、准备工作二、Nginx安装三、MySQL安装四、PHP安装及Nginx配置五、总结 相关系列文章 建站系列(一)— 网站基本常识 建站系列(二)— 域名、IP地址、URL、端口详解 建站系列(三)— …

8月客户文章盘点——累计IF 168.4,平均IF 8.42

客户文章一览 凌恩生物以打造国内一流生物公司为目标,在科研测序领域深耕不辍,吸纳多名在生物信息高级技术人员的加盟,参与并完成多个高科技项目。现已在宏组学、基因组、表观遗传以及蛋白代谢等多组学及联合分析领域积累了深厚经验&#xff…

SpringBoot 如何使用 CORS 进行跨域资源共享

SpringBoot 如何使用 CORS 进行跨域资源共享 在 Web 开发中,跨域资源共享(CORS)是常见的问题之一。CORS 是一种安全机制,用于限制跨域请求对目标服务器的访问。在本文中,我们将介绍如何在 Spring Boot 中使用 CORS 进…

【Y 新闻】YMatrix 成立三周年,三岁的我们还真是“不简单”

三年的时间足够短,眨眼间我们已不知不觉度过了数个三年;但是三年的时间也足够长,这期间足够一个人完成从学校到社会的过渡,也足够一家企业实现从青涩到成熟的转变。 转眼到了 2023 年 8 月 24 日,是 YMatrix 成立后的…

中秋国庆双节邮件营销怎么做?看这里!

今年的国庆节恰逢中秋节,因此国家假日办安排国庆中秋连放8天。对于打工人来说,超长的假期是外出旅游、回家探亲好时机,可是对于企业来说,却是一次仅次于春节的营销大战。这个时候企业营销人员当然是要借助各种营销手段来获取流量和…

go语言基础操作---七

socket简单介绍—套接字编程 什么是Socket Socket,英文含义是【插座、插孔】,一般称之为套接字,用于描述IP地址和端口。可以实现不同程序间的数据通信。 Socket起源于Unix,而Unix基本哲学之一就是“一切皆文件”,都可…

YOLO目标检测——口罩规范佩戴数据集+已标注xml和txt格式标签下载分享

实际项目应用:目标检测口罩佩戴检测数据集的应用场景涵盖了公共场所监控、疫情防控管理、安全管理与控制以及人员统计和分析等领域。这些应用场景可以帮助相关部门和机构更好地管理口罩佩戴情况,提高公共卫生和安全水平,保障人们的健康和安全…

Kubernetes 使用configmap挂载卷给Pod内的nginx容器

目录 实验:使用configmap挂载卷给Pod内的nginx容器 1、创建nginx.conf配置文件(必须由nginx镜像里的nginx.conf修改而来,防止出现配置不相似的情况出现,导致访问不了nginx网页) 2、通过nginx.conf文件创建configmap容…