区块链 | OpenSea 相关论文:Toward Achieving Anonymous NFT Trading(一)


🥑原文: Toward Achieving Anonymous NFT Trading
🥑写在前面: 本文对实体的介绍基于论文提出的方案,而非基于 OpenSea 实际采用的方案。

在这里插入图片描述

其实右图中的 Alice 也是用了代理的,不过作者没有画出来。



正文

我们首先概述各方在所提方案中所扮演的角色,具体的构造细节将在后续进行详细阐述。



1 NFT 市场

NFT 市场(例如 OpenSea)维护一个在线网站,供区块链用户创建、列出和出售他们的 NFT 资产。在交易过程中,用户通过市场的前端提交他们的 NFT 订单。

OpenSea 网址:OpenSea, the largest NFT marketplace

针对区块链部分,NFT 市场在区块链网络上部署了几个智能合约,执行包括铸造新的 NFT 代币、匹配 NFT 订单和转移现有代币所有权在内的 NFT 交易。

在这里插入图片描述

个人理解:上图中的「NFT」和「Exchange Protocol,交易所协议」都是 NFT 市场部署在区块链网络上的智能合约。「NFT」负责铸造 NFT、转移 NFT 所有权等,「交易所协议」主要用于匹配 NFT 订单。

此外,我们假设 NFT 市场几乎完全值得信赖。因此,我们允许 NFT 市场在「NFT 市场数据库」中保密保存一些可能导致用户身份暴露的关键信息。

上图没有画「NFT 市场数据库」,可以参考 OpenSea’s scheme 的图。



2 交易所协议

交易所协议是在区块链上部署的合约,主要完成订单匹配任务。

看来我说的没错😇

交易所协议从 NFT 市场接收订单集合,并检查是否有任何两个订单根据目标代币、价格设置和其他相关信息匹配。如果是这样,交易所协议将首先根据位掩码填充「calldata」中省略的部分。匹配「calldata」的构造也可以在链下以任何方式完成,例如由 NFT 市场完成。

个人感觉「calldata」应该是在调用方法时需要传入的什么东西吧?这里不懂其实不影响后续阅读。

然后,买方和卖方的「代理」参与执行预定义的传输动作。同时,将在区块链网络中发出相应的事件供监听者接收。最后,双方的「代理」完成它们的交易操作,交易由区块链确认。因此,目标 NFT 的所有权被转移。

智能合约中不仅会定义方法还会定义事件,一些方法在执行完毕后会触发相应的事件。



3 代理

为了方便 NFT 交易,每个用户在区块链网络上使用一个「代理」来代表自己处理 NFT 订单。

在一个名为「the registry,注册表」的已部署合约内部,定义了「代理」的功能。每次通过调用「注册表」来生成新的「代理」实例。在「代理」内部存储了一个「临时地址」,该地址代表当前「代理」的所有者,它被用于验证来自「代理」所有者的消息。

🥕「临时地址」是本文的核心创新点之一
个人理解,「临时地址」就是后文提到的「临时密钥」中的公钥。因此,「代理」所有者使用「临时密钥」中的私钥对消息进行签名,而「代理」使用「临时地址」来验证签名的有效性。

具体来说,当「代理」的所有者想要将 NFT 交易委托给「代理」时,TA 通过带有「临时密钥」签名的命令授权「代理」访问目标 NFT 。之后,一旦市场向「交易所协议」发送了带有所有者签名的有效订单并引起了资产交换,那么「代理」将会根据订单中的「calldata」执行相应的操作,从而将目标 NFT 的所有权变更给买方。

注意:所有者给代理授权的消息需要签名,所有者提交给市场的订单也需要签名。勿将二者混为一谈。



4  假账户

在我们的方案中,「Decoy Account,假账户」是由 NFT 市场管理的大量区块链账户。从其他用户的角度来看,「假账户」似乎与由个人持有的 EOA 账户没有区别。然而,「假账户」的私钥实际上是由 NFT 市场管理的。

EOA 是指外部所有者账户,这类账户由掌握相应私钥的个人所拥有,并用于发起区块链上的交易。

提出「假账户」是为了将 ETH 的转移NFT 所有权的转移 隔离开来,从而使其他人难以将买方、卖方的身份与 NFT 所有权的转移联系起来。

ETH 是以太币,即以太坊使用的一种加密货币。

具体来说,买方向假账户 D 1 \mathcal{D}_1 D1 支付 ETH,然后另一个假账户 D 2 \mathcal{D}_2 D2 将相同数量的 ETH 转给卖方。该流程使得其他人无法找到买方、卖方和被转移的 NFT 所有权之间的联系。同时,买方和卖方之间的这笔交易看起来像是,在两个普通 EOA 之间进行的、两个独立的常规区块链交易。

🥕「假账户」也是本文的核心创新点之一
简而言之,「代理」负责 NFT 所有权的转移,「假账户」负责 ETH 的转移。二者都可以视作用户的代理。

在这里插入图片描述

上图虚线框中的黑色用户代表的就是「假账户」



5  NFT 购买者

NFT 购买者可以通过 NFT 市场网站查看所有可购买的物品,并提交购买特定 NFT 的订单。在购买 NFT 艺术品时,购买者可以选择匿名或非匿名模式。

在匿名模式下,买家提交一个匿名订单并贡献于承诺生成的随机性。具体来说,买家需要提交一个由 ECDSA 签名的订单。交换完成后,NFT 的所有权得到转移,买家随后向「假账户」支付以太币。

由于非匿名模式不需要保护买家身份,因此我们在这篇论文中只展示匿名模式的过程。

同时,买家区块链地址的「承诺」将被记录下来,作为该 NFT 代币的新持有者。

🥕「承诺」的使用也是本文的核心创新点之一
一般来说,NFT 合约里面记录的是 NFT 所有者的真实地址,但本文改为了「关于所有者地址的承诺」,从而保护了所有者的个人隐私。



6  NFT 卖家

NFT 卖家是指,想要在 NFT 交易中将自己的 NFT 卖给其他人的人。同时,他们也可以作为买家从其他 NFT 创作者或者卖家那里购买了 NFT 。在匿名模式下,NFT 市场扮演中介的角色,从而使交易变成了一个三方交易。

在链下部分,卖家在市场上创建 NFT 商品并提交卖出订单。卖出订单有两个作用:

  • 一是,指定目标 NFT 的售价;
  • 二是,向交易所协议证明自己具有目标 NFT 的所有权。

卖出订单中包含了打开「关于所有者地址的承诺」的方法,因此可以证明卖家的 NFT 所有权。

此外,卖家还需要对「代理」进行授权。以便「代理」在两个订单匹配时,通过「临时密钥」生成的签名来将目标 NFT 的所有权转移给另一个地址。交换完成后,NFT 的所有权得到转移,「假账户」随后向卖家支付 ETH 。

论文对交易过程描述得不清楚,但它的流程图画得很清楚。具体来说,买家先把 ETH 转账给买家「假账户」,待 NFT 所有权的转移完成后,卖家「假账户」再把 ETH 转账给卖家。



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

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

相关文章

基于SpringBoot + Vue实现的校园(通知、投票)管理系统设计与实现+毕业论文(12000字)+答辩PPT+指导搭建视频

目录 项目介绍 运行环境 技术栈 效果展示 论文展示 总结 项目介绍 本系统包含管理员、用户、院校管理员三个角色。 管理员角色:用户管理、院校管理、单位类别管理、院校管理员管理、单位管理、通知推送管理、投票信息管理、通知回复管理等。 用户角色&#…

sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?

🏆本文收录于「Bug调优」专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&…

数据结构—单链表

含义 1.顺序表的回顾 之前的文章已经谈到了顺序表,关于顺序表,有一下的几种特点 1.中间,头部的删除,复杂度为O(N); 2.增容会有申请新的空间,拷贝数据,释放旧的空间,会有不小的消耗&#xff…

数据结构:最小生成树(Prim算法和Kruskal算法)、图的最短路径(Dijkstra算法和Bellman-Ford算法)

什么是最小生成树?Prim算法和Kruskal算法是如何找到最小生成树的? 最小生成树是指在一个连通图中,通过连接所有节点并使得总权重最小的子图。 Prim算法和Kruskal算法是两种常用的算法,用于寻找最小生成树。 Prim算法的步骤如下&…

mysql的多表查询和子查询

多表查询:查询数据时,需要使用多张表来查询 多表查询分类: 1.内连接查询 2.外连接查询 3.子查询 笛卡尔积: create table class (id int primary key auto_increment,name varchar(10) ); create table student (id int primar…

学习STM32第十六天

RTC实时时钟 一、简介 RTC是一个独立的BCD格式定时器,提供一个时钟日历,两个可编程报警中断,一个具有中断功能周期性可编程唤醒标志,RTC和时钟配置系统处于后备区域。 通过两个32位寄存器以BCD格式实现秒、分钟、小时&#xff08…

stable-diffusion-webui安装与使用过程中的遇到的error合集

stable-diffusion-webui1.9.2踩坑安装 1. 安装过程1.1 stable-diffusion-webui1.2 在win11或win10系统安装,需修改两个启动脚本1.2.1 修改webui-user.bat1.2.2 修改webui.bat 1.3 双击 webui-user.bat 启动脚本1.3.1 no module xformers. Processing without on fre…

Grafana系列 | Grafana监控TDengine库数据 |Grafana自定义Dashboard

开始前可以去grafana官网看看dashboard文档 https://grafana.com/docs/grafana/latest/dashboards 本文主要是监控TDengine库数据 目录 一、TDengine介绍二、Grafana监控TDengine数据三、Grafana自定义Dashboard 监控TDengine库数据1、grafana 变量2、添加变量3、配置panel 一…

FSMC读取FPGA的FIFO

一、硬件说明 FSMC配置 单片机的代码如下: #define VALUE_ADDRESS_AD1 (__IO uint16_t *)0x60400000while (1){if(!HAL_GPIO_ReadPin(GPIOF, GPIO_PIN_8)) //数据非空{data *(__IO uint16_t *)VALUE_ADDRESS_AD1;data2 *(__IO uint16_t *)VALUE_ADDRESS_AD1…

【数据库】MongoDB

文章目录 [toc]数据库操作查询数据库切换数据库查询当前数据库删除数据库查询数据库版本 数据集合操作创建数据集合查询数据集合删除数据集合 数据插入插入id重复的数据 数据更新数据更新一条丢失其他字段保留其他字段 数据批量更新 数据删除数据删除一条数据批量删除 数据查询…

Transformer step by step--Positional Embedding 和 Word Embedding

Transformer step by step往期文章: Transformer step by step--层归一化和批量归一化 要把Transformer中的Embedding说清楚,那就要说清楚Positional Embedding和Word Embedding。至于为什么有这两个Embedding,我们不妨看一眼Transformer的…

Hadoop之路

hadoop更适合在liunx环境下运行,会节省后期很多麻烦,而用虚拟器就太占主机内存了,因此后面我们将把hadoop安装到wsl后进行学习,后续学习的环境是Ubuntu-16.04 (windows上如何安装wsl) 千万强调,有的命令一…

【24年物联网华为杯】赛题分析与初步计划

赛事介绍 官网链接:2024 年全国大学生物联网设计竞赛 (sjtu.edu.cn) 含金量:属于A类赛事 (注意:很多搜索结果的序号是按照选入时间排列的,与含金量无关,华为杯是23年选入的) Kimi Chat: 全国…

JavaScript创建和填充数组的更多方法

空数组fill()方法创建并填充数组 ● 我们之前创建数组的方式都是手动去创建去一个数据,例如 console.log([1, 2, 3, 4, 5, 6, 7]);● 当然我们也可以使用Array对象来构造数组 console.log([1, 2, 3, 4, 5, 6, 7]); console.log(new Array(1, 2, 3, 4, 5, 6, 7));…

Java毕业设计 基于SpringBoot vue城镇保障性住房管理系统

Java毕业设计 基于SpringBoot vue城镇保障性住房管理系统 SpringBoot 城镇保障性住房管理系统 功能介绍 首页 图片轮播 房源信息 房源详情 申请房源 公示信息 公示详情 登录注册 个人中心 留言反馈 后台管理 登录 个人中心 修改密码 个人信息 用户管理 房屋类型 房源信息管理…

【算法基础实验】图论-UnionFind连通性检测之quick-find

Union-Find连通性检测之quick-find 理论基础 在图论和计算机科学中,Union-Find 或并查集是一种用于处理一组元素分成的多个不相交集合(即连通分量)的情况,并能快速回答这组元素中任意两个元素是否在同一集合中的问题。Union-Fin…

【React】Sigma.js框架网络图-入门篇(2)

通过《【React】Sigma.js框架网络图-入门篇》有了基本认识 由于上一篇直接给出了基本代码示例,可能看着比较复杂也不知道是啥意思; 今天从理论入手重新认识下! 一、基本认识 首先,我们先了解下基础术语: 图(Graph)&…

随笔 | 宿舍矛盾

室友A:睡觉时间比较早 室友B:睡觉时间比较晚,起床时间也晚 室友C:睡的晚,起的早 我:睡的时间随机,起的较早 事件1: 某一个星期四的中午,我正在听歌。室友C跟我说:我们去打扫卫生吧。于是&am…

CPPTest实例分析(C++ Test)

1 概述 CppTest是一个可移植、功能强大但简单的单元测试框架,用于处理C中的自动化测试。重点在于可用性和可扩展性。支持多种输出格式,并且可以轻松添加新的输出格式。 CppTest下载地址:下载地址1  下载地址2 下面结合实例分析下CppTest如…

【Linux网络】FTP服务

目录 一、FTP简介 1.FTP-文件传输协议 2.FTP的两种模式 二、安装配置FTP 1.安装环境 2.对文件的操作 3.切换目录 4.设置匿名用户 5.图形化界面登录 6.白名单与黑名单 重点与难点 一、FTP简介 1.FTP-文件传输协议 FTP是FileTransferProtocol(文件传输协…