区块链 | 一文了解 NFT 的生态系统(上)

2024-05-06 11:52

本文主要是介绍区块链 | 一文了解 NFT 的生态系统(上),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

🐶原文: Understanding Security Issues in the NFT Ecosystem

🐶写在前面: 本博客只摘取了原论文的第二、三节。



技术背景知识

在本节中,我们将介绍以太坊生态系统的构建模块,重点关注「NFT,非同质化代币」以及围绕它们成长起来的经济体系。



1 以太坊区块链

以太坊是推动加密货币「ETH,以太币」和数千个「dApp,去中心化应用程序」的技术。以太坊区块链是一个分布式、公共账本,其中交易由解决「PoW,加密工作量证明」挑战的矿工挖掘到区块中。

早在 2022 年,以太坊就从工作量证明过渡到权益证明了。

在这个生态系统中,一个账户是由一个地址表示的实体,能够提交交易。以太坊中有两种类型的账户:

  • 外部所有账户(EOA):由持有相应私钥的任何人控制;
  • 合约账户:其中包含可执行的代码片段,称为智能合约;

智能合约是由「EVM,以太坊虚拟机」运行的程序,它利用区块链来存储其持久状态。交易是账户之间资金的转移,或对合约的公共方法的调用。发送资金或与合约交互的地址表示为 msg.sender



2 非同质化代币 NFT

在以太坊中,代币是基于区块链的数字资产。不同于以太坊区块链本地的、内置的加密货币以太币,代币是通过专门的智能合约实现的。代币主要有两种类型:同质化代币和非同质化代币。

一方面,同质化代币的所有副本通常是符合 ERC-20 接口的,都是相同的且可以互换。另一方面,非同质化代币的所有副本通常是符合 ERC-721 接口的,都是独一无二的,每个代币代表某人对特定数字资产的所有权,例如 ENS 域名和 CryptoKitties,或者实体资产,如金条。

ENS 类似于中心化网络中的 DNS,都是用于提高地址的可读性,区别在于 ENS 针对的是去中心化网络。



3 ERC-721

ERC-721 是目前在以太坊上实现非同质化代币的最受欢迎的标准。这个标准接口定义了一组必须实现的和可选的 API 方法,用于代币合约。与我们的讨论相关的几个 API 方法如下:

/// 授予地址_operator具有所有NFT的控制权
setApprovalForAll (address _operator, bool _approved) external/// 授予地址_approved具有_tokenId控制权
approve (address _approved, uint256 _tokenId) external payable/// 地址_from将对tokenId的所有权转移给地址_to
transferFrom (address _from, address _to, uint256 tokenId) external payable/// 获取_tokenId的元数据链接
tokenURI (uint256 _tokenId) external view returns (string)

智能合约应该是用 Solidity 语言编写的,可惜 CSDN 没有这款语言的语法高亮。

每个 NFT 都有它自己的 ID,ID 用于追踪这些独特的代币,这个 ID 被称为 _tokenId



3.1 setApprovalForAll 方法

在 ERC-721 中, o p e r a t o r \mathsf{operator} operator 是一个可以管理 NFT 的 o w n e r \mathsf{owner} owner 的所有资产的实体。换句话说,NFT 的 o w n e r \mathsf{owner} owner 可以将对自己的资产采取行动的权限委托给 o p e r a t o r \mathsf{operator} operator

针对 setApprovalForAll() 方法:

  • 若设置了 _approved 参数,则将地址 _operator 添加到 msg.sender 授权的 o p e r a t o r \mathsf{operator} operator 集合中;
  • 若未设置 _approved 参数,则将地址 _operatormsg.sender 授权的 o p e r a t o r \mathsf{operator} operator 集合中移除;

其中 msg.sender 是指 NFT 的 o w n e r \mathsf{owner} owner



3.2 approve 方法

与可以操作 o w n e r \mathsf{owner} owner 的所有资产的 o p e r a t o r \mathsf{operator} operator 不同,ERC-721 定义了一个 c o n t r o l l e r \mathsf{controller} controller 作为被授权操作一个单一资产的实体。approve() 方法将地址 _approved 批准为资产 _tokenId c o n t r o l l e r \mathsf{controller} controller



3.3 transferFrom 方法

o p e r a t o r \mathsf{operator} operator c o n t r o l l e r \mathsf{controller} controller o w n e r \mathsf{owner} owner 可以调用 transferFrom() 方法将代币 _tokenId 从当前 o w n e r \mathsf{owner} owner_from 地址转移到 _to 地址。



3.4 tokenURI 方法

在创建 NFT 时, c r e a t o r \mathsf{creator} creator 可以选择性地关联一个 URL,这个 URL 被称为 m e t a d a t a _ u r l \mathsf{metadata\_url} metadata_url,它指向一个符合 ERC-721 元数据标准的 JSON 文件。这个 JSON 文件存储了资产的详细信息,例如其名称和描述,并且包含一个名为 i m a g e _ u r l \mathsf{image\_url} image_url 的字段,它是指向资产的 URL 。以下是一个示例:

{"title": "Asset Metadata","type": "object","properties": {"name": {"type": "string","description": "Identifies the asset to which this NFT represents",},"description": {"type": "string","description": "Describes the asset to which this NFT represents",},"image": {"type": "string","description": "A URI pointing to a resource.",}}
}

如此一来,NFT 就将资产与记录其所有权的记录连接起来了。给定一个 _tokenId,可以通过合约的 tokenURI() 方法来检索所关联的 m e t a d a t a _ u r l \mathsf{metadata\_url} metadata_url

有趣的是,NFT 的创建和销毁 ( \mathsf{(} ( m i n t i n g \mathsf{minting} minting b u r n i n g \mathsf{burning} burning ) \mathsf{)} ) 并不是标准要求的一部分。通常,mint() 被定义为一个公共函数,仅限于合约的 c r e a t o r \mathsf{creator} creator 使用,通过传递 m e t a d a t a _ u r l \mathsf{metadata\_url} metadata_url 作为参数来调用。铸币还可以在合约创建过程中通过调用 mint() 来实现,即通过合约的构造函数。



4 IPFS

IPFS 是一个去中心化、点对点、无需权限的文件系统。任何人都可以加入 IPFS 覆盖网络。每个数据项 d d d 都将被分配一个唯一的不可变地址,该地址被称为「CID,内容标识符」,计算公式如下:

C I D = H ( d ) CID=H(d) CID=H(d)

即 CID 就是文件内容 d d d 的哈希 H H H。因此,当文件内容发生变化时,CID 也会发生变化。

在 IPFS 中存储文件时,文件的内容首先被分成块。所有的存储元素,即目录、目录中的文件以及这些文件中的块,都被存储在一个称为 M e r k l e D A G \mathsf{Merkle DAG} MerkleDAG 的有向无环图结构中。

IPFS 维护一个分布式哈希表 D H T \mathsf{DHT} DHT 存储关于 p r o v i d e r \mathsf{provider} provider 的记录,即这些记录用于定位那些存储了被请求内容的对等节点。要检索数据项 d d d,节点首先在 DHT 中查找 d d d 的提供者 P ( d ) P(d) P(d),然后节点向提供者 P ( d ) P(d) P(d) 中的一个发出对 d d d 的请求。

这段主要介绍了 IPFS 存储数据、请求数据的方式。



这篇关于区块链 | 一文了解 NFT 的生态系统(上)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/964274

相关文章

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。

速了解MySQL 数据库不同存储引擎

快速了解MySQL 数据库不同存储引擎 MySQL 提供了多种存储引擎,每种存储引擎都有其特定的特性和适用场景。了解这些存储引擎的特性,有助于在设计数据库时做出合理的选择。以下是 MySQL 中几种常用存储引擎的详细介绍。 1. InnoDB 特点: 事务支持:InnoDB 是一个支持 ACID(原子性、一致性、隔离性、持久性)事务的存储引擎。行级锁:使用行级锁来提高并发性,减少锁竞争

PHP: 深入了解一致性哈希

前言 随着memcache、redis以及其它一些内存K/V数据库的流行,一致性哈希也越来越被开发者所了解。因为这些内存K/V数据库大多不提供分布式支持(本文以redis为例),所以如果要提供多台redis server来提供服务的话,就需要解决如何将数据分散到redis server,并且在增减redis server时如何最大化的不令数据重新分布,这将是本文讨论的范畴。 取模算法 取模运

Weex入门教程之1,了解Weex

【资料合集】Weex Conf回顾集锦:讲义PDF+活动视频! PDF分享:链接:http://pan.baidu.com/s/1hr8RniG 密码:fa3j 官方教程:https://weex-project.io/cn/v-0.10/guide/index.html 用意 主要是介绍Weex,并未涉及开发方面,好让我们开始开发之前充分地了解Weex到底是个什么。 以下描述主要摘取于

Java了解相对较多!

我是对Java了解相对较多,而对C#则是因工作需要才去看了一下,C#跟Java在语法上非常相似,而最初让我比较困惑的就是委托、事件部分,相信大多数初学者也有类似的困惑。经过跟Java的对比学习,发现这其实跟Java的监听、事件是等同的,只是表述上不同罢了。   委托+事件是观察者模式的一个典型例子,所谓的委托其实就是观察者,它会关心某种事件,一旦这种事件被触发,这个观察者就会行动。   下

使用WebP解决网站加载速度问题,这些细节你需要了解

说到网页的图片格式,大家最常想到的可能是JPEG、PNG,毕竟这些老牌格式陪伴我们这么多年。然而,近几年,有一个格式悄悄崭露头角,那就是WebP。很多人可能听说过,但到底它好在哪?你的网站或者项目是不是也应该用WebP呢?别着急,今天咱们就来好好聊聊WebP这个图片格式的前世今生,以及它值不值得你花时间去用。 为什么会有WebP? 你有没有遇到过这样的情况?网页加载特别慢,尤其是那

初步了解VTK装配体

VTK还不太了解,根据资料, vtk.vtkAssembly 是 VTK库中的一个重要类,允许通过将多个vtkActor对象组合在一起来创建复杂的3D模型。 import vtkimport mathfrom vtk.util.colors import *filenames = ["cylinder.stl","sphere.stl","torus.stl"]dt = 1.0renW

数据库遇上知识图谱、区块链、深度学习

参考资料: https://zhuanlan.zhihu.com/p/33381916 https://www.zuozuovera.com/archives/1062/ 东南大学D&Intel Lab相关ppt 数据库的核心概念——表示、存取、查询 有了数据库是干什么,大概实现的逻辑,特点,才能引申出对当今这些新技术的对比、适应和发展。 目的:研究数据表示、存取数据模型:表示数据的模型,通