区块链 | 由外部实体导致的 NFT 安全问题

🦊原文: Understanding Security Issues in the NFT Ecosystem

🦊警告: 本文只记录了原文的第 6 节。



1 问题描述

NFT 所指向的数字资产(图片、视频等)必须是可以访问的,这样 NFT 才具有意义。NFT 可以通过以下两种方式链接数字资产:

( i ) (\mathsf{i}) (i) 如果 NFT 合约是 ERC-721 兼容的并且实现了元数据扩展,那么由该合约创建的代币在链上包含一个 m e t a d a t a _ u r l \mathsf{metadata\_url} metadata_url,它指向一个元数据(JSON)。反过来,这个元数据又包含一个 i m a g e _ u r l \mathsf{image\_url} image_url 字段,该字段指向实际的数字资产。

JSON 是指元数据采用的是 JSON 格式。

( i i ) (\mathsf{ii}) (ii) 然而,许多较老的代币不符合标准,并且不包含任何链上的 i m a g e _ u r l \mathsf{image\_url} image_url。相反,它们使用一些临时的、链下方案来链接一个资产。对于这样的 NFT,NFT 市场(NFTM)实施自定义支持,以便它们能够生成有效的图片 URL 。

NFTM 的全称是 NFT Marketplace

由于元数据和数字资产都存储在链下,它们并不享受与 NFT 本身相同的不可篡改性保证。当任何 URL 变得无法访问时,就会打破 NFT 与相应数字资产之间的链接。实际上,这些 URL 通常指向分布式存储服务(例如 IPFS),或者是中心化存储(例如一个网页域名或 Amazon S3 存储桶)。

不知道这段说的是第二种方式,还是都有在说?

对于 IPFS URL,如果 NFT 所有者有所意识,TA 可以通过固定资源(即持续存储它)来保持 NFT “活跃”。即使这样做,也可能会有问题,因为 NFT 并不存储实际资源的哈希值,而是存储指向 IPFS 网关 Web 服务的 URL 。如果网关变得不可用,NFT “断裂”。总的来说,包含指向 NFT 所有者控制之外域名的 URL 的 NFT,在相应的域名消失时有失效的风险。



2 定量分析

我们进行了一次分析,以量化由于上述原因而 “丢失” 的 OpenSea NFT 的数量。

截至 2021 年 6 月 15 日,我们从 OpenSea 获得的 12 , 215 , 650 \mathsf{12,215,650} 12,215,650 个资产中,只有 3 , 175 , 644 \mathsf{3,175,644} 3,175,644 个资产具有有效的 m e t a d a t a _ u r l \mathsf{metadata\_url} metadata_url 字段。通过查询 OpenSea 的 API,我们获得了 8 , 363 , 550 \mathsf{8,363,550} 8,363,550 个具有非空 i m a g e _ u r l \mathsf{image\_url} image_url 字段的资产。

具有有效 m e t a d a t a _ u r l \mathsf{metadata\_url} metadata_url 的才 3 , 175 , 644 \mathsf{3,175,644} 3,175,644 个,怎么 i m a g e _ u r l \mathsf{image\_url} image_url 非空的都有 8 , 363 , 550 \mathsf{8,363,550} 8,363,550 个?

剩下的 3 , 860 , 607 \mathsf{3,860,607} 3,860,607 个资产没有 i m a g e _ u r l \mathsf{image\_url} image_url 字段,这意味着它们是直接托管在 OpenSea 上的(内容创作者可以选择留空 i m a g e _ u r l \mathsf{image\_url} image_url 字段,在这种情况下 OpenSea 处理托管)。

OpenSea 处理托管应该是指,将数字资产存储在 OpenSea 的集中式数据库中。

我们首先检查图像和元数据 URL 是否指向托管在 IPFS 上的资源。接着,我们检查 URL 是否仍然可以访问。为此,我们执行一个 HTTP HEAD 查询。如果查询返回的响应代码不是 200(OK),我们接下来执行一个 HTTP GET 查询。如果那个查询也返回一个非 200 的响应代码,我们将那个 URL 标记为不可访问。我们采取两步方法是为了优化性能,避免因为一些不支持 HEAD 查询的 Web 服务器而产生假阴性(false negatives)。

HTTP HEAD 用于检查网页是否更新,并不获取资源的实际内容。

此外,托管资产的服务器在测试时可能掉线,但后来又恢复在线。为了考虑这种可能性,我们在 15 天的时间内重复了上述 URL 检查三次。每次都只测试前一次尝试中被标记为不可访问的资产。只有当三次尝试都一致认为资产不可访问时,该资产才会最终被标记为不可访问。

在这里插入图片描述

上图报告了我们的发现。两个重要的观察结果是:

( i ) (\mathsf{i}) (i) 在我们数据集中的 6 月至 12 月期间,只有 3.91 \mathsf{3.91} 3.91% 托管在 IPFS 上的资产(图像)和 9.04 \mathsf{9.04} 9.04% 托管在 IPFS 上的元数据记录消失了;如预期的那样,托管在 IPFS 上的 NFT 比那些托管在非 IPFS 域名上的 NFT 更不可能消失。

( i i ) (\mathsf{ii}) (ii) 尽管 IPFS 应该更能抵抗资产消失,但大多数资产 URL( 88.71 \mathsf{88.71} 88.71%)以及元数据 URL( 80.69 \mathsf{80.69} 80.69%)都是托管在非 IPFS 域名上。查看所有丢失的 NFT,它们通过 118 , 294 \mathsf{118,294} 118,294 笔交易产生了惊人的收入,总额达到 1.60761805 \mathsf{1.60761805} 1.60761805 亿美元。不仅如此,由于我们在第 5 节中讨论的缓存问题,它们中的一部分可能仍然在流通中。正如这项分析所示,持久性是 NFT 领域的一个紧迫问题。



3 补充:缓存问题

无效缓存: 在展示正在销售的 NFT 时,OpenSea 和 Rarible 使用本地缓存层来避免重复请求获取关联的图片。如果图片被更新,或者消失了,缓存就会不同步。这可能会误导买家购买一个资产不存在,或者与 NFT 显示的资产不同的 NFT,因为他们使用了过时的缓存。

定量分析: 为了了解这个缓存问题可能的潜在影响,我们测量了在我们 OpenSea 数据集中有多少个 i m a g e _ u r l \mathsf{image\_url} image_url 无法被访问,但 OpenSea 仍然提供相应的缓存版本。

在总计 12 , 215 , 650 \mathsf{12,215,650} 12,215,650 个 NFT 中,有 3 , 945 , 231 \mathsf{3,945,231} 3,945,231 个( 32.30 \mathsf{32.30} 32.30%)代币的 i m a g e _ u r l \mathsf{image\_url} image_url 无法访问。然而,OpenSea 仍然缓存了其中 2 , 691 , 030 \mathsf{2,691,030} 2,691,030 个( 68.21 \mathsf{68.21} 68.21%)无法访问的图片,从而创造了资产仍然存在的错觉。这样一个损坏的系列是Gods Unchained,这是一个经过验证的系列,其总体交易量为 19.8 \mathsf{19.8} 19.8K 以太币。

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

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

相关文章

flake8,一个超强的 Python 库!

更多Python学习内容:ipengtao.com 大家好,今天为大家分享一个超强的 Python 库 - flake8。 Github地址:https://github.com/PyCQA/flake8 Flake8是一个流行的Python库,用于检查代码质量和风格一致性,它集成了PyFlakes、…

powershell 注册全局热键——提升效率小工具

powershell 注册全局热键 01 前言 在处理一些重复工作问题的时候,想搞一个小工具,配合全局快捷键来提高效率。因为是Windows系统,想到C#,但是又不想用VS开发,因为那样不够灵活,没办法随时修改随时用&…

Windows系统下安装Mosquitto的步骤(2)

接前一篇文章:Windows系统下安装Mosquitto的步骤(1) 本文内容参考: Windows10上安装Mosquitto的步骤(win10、win11 安装mqtt) - IPS99技术分享 MQTT:windows环境下配置MQTT服务器(mosquitto)_…

2024.阳光能源追光计划暨大陆考察团交流分享会

近日大陆考察团抵达香港,受到了本司热情接待和安排。公司于4月27日下午举办了阳光能源追光计划主题交流会。 会上公司营销部总监张超,分享了阳光能源近几年的能源发展之路及公司新推出的追光计划,得到了大陆考察交流团团长杨国均先生的高度赞…

Vue.js课后练习(登录注册和大小比较)

第一题 请编写登录页面和注册页面&#xff0c;通过动态组件实现动态切换页面中显示的组件&#xff0c;效果如图1和图2所示。 图1 登录页面 图2 注册页面 代码&#xff1a; my.vue代码: <template>登录 </template><script setup> </script><st…

【Go 语言入门专栏】Go 语言的起源与发展

前言 Go 语言是当下最为流行的编程语言之一&#xff0c;大约在 2020、2021 年左右开始于国内盛行&#xff0c;许多大厂很早就将部分 Java 项目迁移到了 Go&#xff0c;足可看出其在性能方面的优越性。 相信各位都知道&#xff0c;在爬虫业务中&#xff0c;并发是一个关键的需…

Notes for the missing semester. Useful and basic knowledge about Linux.

The Shell Contents The first course is to introduce some simple commands. I’ll list some commands that I’m not familiar with: # --silent means dont give log info, # --head means we only want the http head. curl --head --silent bing.com.cn# cut --deli…

【再探】设计模式—抽象工厂及建造者模式

抽象工厂模式和建造者模式都属于创建型模式。两者都能创建对应的对象&#xff0c;而创建者模式更侧重于创建复杂对象&#xff0c;将对象的创建过程封装起来&#xff0c;让客户端不需要知道对象的内部细节。 1 抽象工厂模式 需求&#xff1a; 在使用工厂方法模式时&#xff0…

Java File类

1. File类概述 1.1 什么是File类 File是java.io包下作为文件和目录的类。File类定义了一些与平台无关的方法来操作文件&#xff0c;通过调用File类中的方法可以得到文件和目录的描述信息&#xff0c;包括名称、所在路径、读写性和长度等&#xff0c;还可以对文件和目录进行新建…

从Paint 3D入门glTF

Paint 3D Microsoft Paint 3D是微软的一款图像编辑软件&#xff0c;它是传统的Microsoft Paint程序的升级版。 这个新版本的Paint专注于三维设计和创作&#xff0c;使用户可以使用简单的工具创建和编辑三维模型。 Microsoft Paint 3D具有直观的界面和易于使用的工具&#xff0…

GitLab常用指令!(工作中常用的)

目录 克隆代码创建分支切换分支将代码提交到分支当中Merge合并 克隆代码 复制完地址&#xff0c;打开Git Bash&#xff0c;然后 git clone “复制的地址”创建分支 创建new_test分支 git branch new_test切换分支 切换到new_test分支 git checkout new_test将代码提交到分…

Hotcoin Research | 市场洞察:2024年4月22日-28日

加密货币市场表现 本周内加密大盘整体呈现出复苏状态&#xff0c;在BTC减半后进入到震荡上行周期。BTC在$62000-66000徘徊&#xff0c;ETH在$3100-3300徘徊&#xff0c;随着港交所将于 4 月 30 日开始交易嘉实基金的比特币和以太坊现货 ETF&#xff0c;周末行情有一波小的拉升…

vue+elementUI实现点击左右箭头切换按钮功能

原本是可以用el-tabs做的,就像下面的样式,但是领导说不行 最后用button和element里面的el-carousel(走马灯)结合了一下 长这样 感觉还不错 可以自己改样式 代码如下: <div class"drawer-carousel"><el-carousel arrow"always" :loop"false…

Qt5配置Opencv读取一张图像

1、首先Qt5配置Opencv(我已经配置成功)有时间发出来 2、Opencv的基本Mat操作 &#xff08;1&#xff09;加Opencv的头文件 #include<opencv2/opencv.hpp> #include <opencv2/highgui/highgui_c.h> using namespace cv;&#xff08;2&#xff09;Opencv图像基本处理…

idea git commit全局ignore配置

idea 全局ignore配置 在开发时&#xff0c;提交开发代码到git&#xff0c;需要剔除一些不需要提交的文件。那么可以配置一个全局ignore文件。 配置方法 新建一个git.ignore文件&#xff0c;将配置写好。 # DIY target/# svn .svn/ # Linux System *~# KDE directory prefer…

自动驾驶框架 UniAD环境部署

感谢大佬们的开源工作 UniAD-github地址-YYDS更多bev算法部署参考如果您觉得本帖对您有帮助&#xff0c;感谢您一键三连支持一波^_^ 统一自动驾驶框架 (UniAD) &#xff0c;第一个将全栈驾驶任务整合到一个深度神经网络中的框架&#xff0c;并可以发挥每个子任务以及各个模块的…

NASA数据集——VIIRS每日 L3深蓝气溶胶网格产品(AERDB_D3_VIIRS_SNPP),以 1 x 1 度

VIIRS/SNPP Deep Blue Level 3 monthly aerosol data, 1 degree x1 degree grid 简介 美国国家航空航天局&#xff08;NASA&#xff09;的可见红外成像辐射计套件&#xff08;VIIRS&#xff09;标准三级&#xff08;L3&#xff09;每月深蓝气溶胶产品来自苏米国家极轨伙伴关系…

开通Jetbrains个人账号,赠送这些付费插件

开通Jetbrains个人账号&#xff0c;或者Jetbrains现成账号的, 可赠送以下付费插件 现成账号&#xff1a;https://web.52shizhan.cn/activity/xqt8ly 个人账号&#xff1a;https://web.52shizhan.cn/legal 账号支持全家桶系列&#xff1a;AppCode,CLion,DataGrip,GoLand,Intell…

移动端适配方案

移动端适配 方案 1&#xff1a;rem html font-size 方案 2&#xff1a;vw rem html font-size rem 是相对于 html 元素的 font-size 来设置的单位&#xff0c;通过在不同屏幕尺寸下动态修改 html 元素的 font-size 可达到适配效果 在开发中&#xff0c;我们只需要考虑两个…

IDEA->EasyCode(mapper.xml) 字段无逗号分割问题

IDEA-&#xff1e;EasyCode(mapper.xml) 字段无逗号分割问题_easycode allsqlcolumn 没有逗号-CSDN博客 在easycode的设置里找到&#xff1a; 1、Template下的 mapper.xml.vm脚本 2、Global Config下的 mybatisSupport.vm脚本 然后将这两个脚本里的 $velocityHasNext 替换成 …