个人网站建设的花费/网站查询器
🐶原文: Preventing Content Cloning in NFT Collections
🐶写在前面: 这是一篇 2023 年的 CCF-C 类,本博客只记录其中提出的方法。
F C o l l N F T \mathbf{F_{CollNFT}} FCollNFT and Blockchains with Native Support of NFTs
为了促进 NFT 集合 c o l l e c t i o n \mathsf{collection} collection 的发展,一些区块链技术,如 A l g o r a n d \mathsf{Algorand} Algorand,通过第 0 层 l a y e r 0 \mathsf{layer\ 0} layer 0 的功能实现 NFT 的交易。
区块链层次结构参考:
关于区块链如何分层这件事,网上的博客各有各的说法。根据后文采用的 Merkle Tree 方案,文中的第 0 层可能指的是上图中的 D a t a L a y e r \mathsf{Data\ Layer} Data Layer 数据层😇
与基于以太坊的区块链不同,后者在账本中只存在两种类型的交易:
- 由用户发行 i s s u e \mathsf{issue} issue 的交易;
- 由智能合约发行 i s s u e \mathsf{issue} issue 的交易;
A l g o r a n d \mathsf{Algorand} Algorand 设计并提供了更多类型的交易,其中包括创建代币、转让代币、修改代币的交易。每个区块链用户都可以是自己 NFT 集合 c o l l e c t i o n \mathsf{collection} collection 的发行者,或者一组用户可以联合起来发行由智能合约仲裁的公共 NFT 集合。
开发者可以编写智能合约,以确保只有位于发行者授权名单中的用户才能进行铸币操作,从而拒绝来自非授权用户的铸币交易。遵循 P 1 \mathbf{P1} P1 原则。 P 2 \mathbf{P2} P2 原则也是成立的,因为只有在产生交易的区块链用户拥有该代币时,代币转让交易才会成功。
然而,与 ERC-721 的情况不同,代币的管理并不是由智能合约逻辑控制的,而是由区块链共识控制的,它检查各种类型交易的有效性。因此,代币(如 A l g o r a n d \mathsf{Algorand} Algorand 中的 ASA)在系统中是通过在创建时由共识分配的数值索引唯一标识的。这个索引是由区块链验证者处理的一个计数器。因此,不能保证 i d \mathsf{id} id 不同的两个代币一定代表不同的数据。
综上所述, A l g o r a n d \mathsf{Algorand} Algorand 设计的方法不符合 F C o l l N F T \mathsf{F_{CollNFT}} FCollNFT,因为它不满足 P 3 \mathbf{P3} P3 原则。
1 方案一:利用修剪过的 Merkle Tree
考虑区块链上智能合约的能力,实现 F C o l l N F T \mathsf{F_{CollNFT}} FCollNFT 的一个潜在方法如下:
- 同属一个集合的代币通过一个智能合约创建;
- 该智能合约跟踪同属一个集合的、已创建的代币;
- 该智能合约在合法发行者的请求下铸造新代币;
在某些区块链中,智能合约对存储大小有约束。因此,管理 NFT 集合的智能合约应该在其状态中维护所有随时间发行的代币的简洁 s u c c i n c t \mathsf{succinct} succinct 表示。一个典型的简洁 s u c c i n c t \mathsf{succinct} succinct 表示是由 Merkle Tree 的根 r o o t \mathsf{root} root 组成的。
个人理解:智能合约属于应用层,Merkle Tree 属于数据层。我们之前是通过编写智能合约的逻辑来防止 NFT 集合的克隆,而这里是通过 Merkle Tree 查重来防止 NFT 集合的克隆。
按照以下方式将代币分配到 Merkle Tree 的各个 l e a f \mathsf{leaf} leaf 叶子节点。
考虑从根节点 r o o t \mathsf{root} root 到叶子节点 l e a f \mathsf{leaf} leaf 的路径。若当前节点是左子节点,则被分配 0 \mathsf{0} 0;若当前节点是右子节点,则被分配 1 \mathsf{1} 1。如此一来,每个叶子节点 l e a f \mathsf{leaf} leaf 都可以由一个 01 \mathsf{01} 01 字符串来表示。
个人脑补图:
如上图所示,叶子节点 C 被表示为 00,叶子节点 D 被表示为 01,叶子节点 E 被表示为 10,叶子节点 F 被表示为 11😇
当我们输入一个 01 \mathsf{01} 01 字符串时,便能在 Merkle Tree 上找到一个对应的叶子节点。
用字符串 s h a 256 ( t . d a t a ) \mathsf{sha256(t.data)} sha256(t.data) 表示代币 t \mathsf{t} t,通过使用上述程序,我们可以检查代币 t \mathsf{t} t 是否存在于 Merkle Tree 中。初始化,将树的根设置为 n i l \mathsf{nil} nil 空值,表示目前集合中还没有代币。为了添加一个新代币 t \mathsf{t} t,发行者首先必须证明 t \mathsf{t} t 不在集合中,即证明相应的叶子节点尚未被插入。
相应的叶子节点是指由字符串 s h a 256 ( t . d a t a ) \mathsf{sha256(t.data)} sha256(t.data) 标识的那个位置。
这很容易实现,只需从根开始按照 s h a 256 ( t . d a t a ) \mathsf{sha256(t.data)} sha256(t.data) 字符串所代表的路径行走,直至遇到 n i l \mathsf{nil} nil 空值才结束。 n i l \mathsf{nil} nil 空值代表路径中的下一子节点尚不存在。换句话说,发行者提供了一个证明,证明了从根到 s h a 256 ( t . d a t a ) \mathsf{sha256(t.data)} sha256(t.data) 的路径中有一个 n i l \mathsf{nil} nil 空值。如果代币可以被添加,那么智能合约将添加它并相应地更新 Merkle Tree 的根。
个人认为:字符串 s h a 256 ( t . d a t a ) \mathsf{sha256(t.data)} sha256(t.data) 既能代表相应的叶子节点,又能代表从根到该叶子节点的路径。
请注意,这并不是一个纯粹的 Merkle Tree,因为整个子树被修剪掉了。这实际上是出于效率考虑,因为我们无法计算完整的二叉树。具体来说,由于字符串 s h a 256 ( t . d a t a ) \mathsf{sha256(t.data)} sha256(t.data) 的长度是 256 位,因此叶子节点的数量将是 2 256 \mathsf{2^{256}} 2256 个!
什么叫做 “整个子树被修剪掉了”?原文貌似也没有讲。难道是不需要存储叶子节点吗🫠
对于某些区块链,如 A l g o r a n d \mathsf{Algorand} Algorand,实现此类过程的预期工作量可能是不切实际的。确实,一个智能合约似乎最大程度只能管理一个高度为 15 \mathsf{15} 15 的 Merkle Tree 。
个人理解:方案一要求的 Merkle Tree 岂不是高度要为 256?
2 方案二:在共识层防止 NFT 集合的克隆
由于通过智能合约编码来防止 NFT 集合克隆可能很有挑战性,特别是当底层区块链对智能合约的功能施加限制时,因此我们转而考虑该问题与区块链交易的有效性的关系。
实际上,防止克隆与在逻辑上判定某些交易无效是紧密联系的。所谓无效交易,是那些违反了区块链状态规则的交易。因此,对于那些支持 NFT 管理 m a n a g e m e n t \mathsf{management} management 交易的区块链(比如 A l g o r a n d \mathsf{Algorand} Algorand 中的 ASA),一个可行的策略是在共识层实施机制,拒绝那些试图铸造与集合中已有 NFT 相同的 NFT 的交易。为了实现这一目标,区块链的验证者可以采用类似以太坊中用于存储集合状态的数据结构(如键值映射)来进行验证。
相关文章:

区块链 | NFT 相关论文:Preventing Content Cloning in NFT Collections(三)
🐶原文: Preventing Content Cloning in NFT Collections 🐶写在前面: 这是一篇 2023 年的 CCF-C 类,本博客只记录其中提出的方法。 F C o l l N F T \mathbf{F_{CollNFT}} FCollNFT and Blockchains with Native S…...

Unity技术学习:渲染大量物体的解决方案,外加RenderMesh、RenderMeshInstanced、RenderMeshIndirect的简单使用
叠甲:本人比较菜,如果哪里不对或者有认知不到的地方,欢迎锐评(不玻璃心)! 导师留了个任务,渲染大量的、移动的物体。 寻找解决方案: 当时找了几个解决方案: 静态批处…...

[数据概念|方案实操][最新]数据资产入表4月速递
“ 在各地数据资产变现“热辣滚烫”” 国家数据局全国数据工作会议前后,数据资源“入表”的尝试在各地持续热火朝天地展开,多地实现数据资产入表和利用数据资产进行融资实现“零的突破”。 我们今天就把4月前后的案例做一个小结,之前的案例大…...

C++中使用Multimap和Vector管理和展示数据
一: 在本文中,我们将探讨如何在C中使用vector和multimap容器来管理一个简单的员工数据系统。我们将创建一个员工类,随机生成员工数据,将员工分组,并展示各组员工的详细信息。此示例展示了C标准模板库(STL&…...

Java---类和方法的再学习
上一篇主要介绍了面向对象的思想以及内存实现,关于类与对象感觉写的不够好,因此才会有这一篇作为补充; 一:类与对象 (1)类 一些相同属性和行为的事物的统称,比较广泛、抽象,比如…...

C语言每日一练(12、水仙花数)
在编程的领域中,我们常常会遇到一些有趣而富有挑战性的问题。今天,让我们一起来探讨一个经典的编程题目——打印出所有的“水仙花数”。 所谓“水仙花数”,是指一个三位数,其各位数字的立方和等于该数本身。例如,153 …...

HTML5实现酷炫个人产品推广、工具推广、信息推广、个人主页、个人介绍、酷炫官网、门户网站模板源码
文章目录 1.设计来源1.1 主界面1.2 我的产品界面1.3 关于我们界面1.4 照片墙界面1.5 发展历程界面1.6 优秀人才界面1.7 热门产品界面1.8 联系我们界面 2.灵活调整模块3.效果和源码3.1 动态效果3.2 源代码 源码下载 作者:xcLeigh 文章地址:https://blog.c…...

系统如何做好安全加固?
一、Windows系统 Windows系统出厂时,微软为了兼容性,默认并未对系统安全做严格的限制,因此还需要做一些基本的安全加固,方可防止黑客入侵。 1、系统补丁更新 为什么要更新系统补丁?很多人感觉漏洞更新没必要&#x…...

对NI系统和PLC系统的应用比较
以下是对这两种系统的基本比较: 1. 设计和功能性 NI系统: 通常基于LabVIEW等软件平台,提供强大的数据采集、信号处理和图形界面开发能力。高度模块化和可扩展,支持各种传感器和信号类型。适合进行复杂的数据分析和高级控制算法的…...

微服务架构中的挑战及应对方式:Outbox 模式
使用 Outbox 模式保持微服务数据一致性 在一个由许多小型服务组成的系统中保持数据一致性是困难的,因为它们分散在各处。以下是一些常见问题以及如何处理它们的方法:当服务发送消息时,同时更新数据库和发送消息是棘手的问题。 在微服务中发出…...

使用Docker安装MySQL5.7.36
拉取镜像并查看 docker pull mysql:5.7.36拉取成功后查看(非必须) docker images创建并设置宿主机 mysql 配置文件目录和数据文件目录 创建相关文件夹将容器中的mysql数据保存到本地,这样即使容器被删除,数据也不会丢失。 mkd…...

【PyTorch】6-可视化(网络结构可视化、CNN可视化、TensorBoard、wandb)
PyTorch:6-可视化 注:所有资料来源且归属于thorough-pytorch(https://datawhalechina.github.io/thorough-pytorch/),下文仅为学习记录 6.1:可视化网络结构 Keras中可以调用model.summary()的API进行模型参数可视化 torchinfo…...

C++容器——map和pair对组
pair(对组) 是一种模板类,允许将两个不同类型的值组合在一起。它由两个数据成员first和second组成,分别用来保存这两个值。 头文件 加头文件 #include<utility> 对于 C11 及以上标准,pair 类型可以在不包含头…...

MVC和DDD的贫血和充血模型对比
文章目录 架构区别MVC三层架构DDD四层架构 贫血模型代码示例 充血模型代码示例 架构区别 MVC三层架构 MVC三层架构是软件工程中的一种设计模式,它将软件系统分为 模型(Model)、视图(View)和控制器(Contro…...

如何利用AI提高内容生产效率?
如何利用AI提高内容生产效率? 简介:探讨如何通过AI技术提升内容生产的效率和质量。 方向一:自动化内容生成 自动化内容生成是一种利用人工智能技术来自动创建文本、图像、音频等内容的方法。 以下是一些常见的自动化内容生成方式: 基于…...

C++ stack、queue以及deque
1、stack和queue常用接口 严格来说栈和队列的实现是容器适配器 1、常用接口: 栈:top、push、pop、size、emptystack - C Reference (cplusplus.com) 队列:top、push、pop、swap、size、emptyqueue - C Reference (cplusplus.com) 2、deque&a…...

科沃斯,「扫地茅」荣光恐难再现
作者 | 辰纹 来源 | 洞见新研社 科沃斯恐怕已经很难再回到被市场誉为“扫地茅”时的荣光了。 不久前,科沃斯发布2023年财报,报告期内营业收入155亿,同比仅增长1.16%,归母净利润6.12亿元,同比下降63.96%,直…...

双向BFS算法学习
双向BFS算法学习 推荐练习题 力扣“127”题:单词接龙 “752”题:打开轮盘锁 这里推荐一篇力扣题解 双向BFS 这里使用打开轮盘锁的题干进行举例: 你有一个带有四个圆形拨轮的转盘锁。每个拨轮都有10个数字: ‘0’, ‘1’, ‘2’,…...

C++从入门到精通---模版
文章目录 泛型编程函数模版模版参数的匹配原则类模版类模版的定义格式类模版的实例化 总结 泛型编程 泛型编程是一种编程范式,旨在实现通用性和灵活性。它允许在编写代码时使用参数化类型,而不是具体的类型,从而使代码更加灵活和可重用。 在…...

Unity数据持久化之Json
Json概述 Json是什么? 全称:JavaScript对象简谱(JavaScript Object Notation) Json是国际通用的一种轻量级的数据交换格式 主要在网络通讯中用于传输数据,或本地数据存储和读取 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率 我们一般使用Json文件来…...

LeetCode 35.搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例 1: 输入: nums [1,3,5,6], target 5 输出: 2 示例 2: 输入…...

速来get!多微信聚合聊天功能大揭秘!
随着网络时代的发展,微信成为了职场中不可或缺的沟通工具,很多人都有着多个微信号,而要想高效管理这些账号,那就少不了工具的帮忙。 通过微信管理系统,可以轻松实现多个微信号聚合聊天,提高沟通效率。 1、…...

【跟我学RISC-V】(一)认识RISC-V指令集并搭建实验环境
目录 写在前面 一、RISC-V指令集简介 1、什么是ISA 2、有哪些ISA 3、CISC和RISC 4、什么是RISC-V 1. RISC 的起源 2. RISC-I 和 RISC-II 3. RISC 发展和商业化 4. RISC-V 的诞生 5、RISC-V生态的特点 6、RISC-V指令集的特点 1. 开源 2. 社区化 3. 设计简洁 4. 模…...

如何使用google.protobuf.Struct?
google.golang.org/protobuf/types/known/structpb 包提供了一种方式来创建和操作 google.protobuf.Struct 类型的数据。google.protobuf.Struct 是一种灵活的数据类型,可以表示任何结构化数据。 以下是如何使用 structpb 包的一些示例: 创建 Struct&a…...

Vue3 + TS + Element-Plus 封装的 Dialog 弹窗组件
弹窗组件中自定义了header 增加了全屏,svg-icon 没有的话可能会报错,换成自己的图标就可以 <template><el-dialog:dialogHeight"dialogHeight":title"dialogTitle"class"dialog min-w-70"v-model"dialogVi…...

大数据技术概述_4.大数据的应用领域
1.制造业的应用 制造业目前正在向信息化和自动化的方向发展。在产品的设计、生产和销售中,越来越多的企业使用计算机辅助设计(CAD)、计算机辅助制造(CAM)等软件,数控机床、传感器等设备,物料需求…...

ABB RobotStudio学习记录(一)新建工作站
RobotStudio新建工作站 最近遇到 虚拟示教器和 Rapid 代码不能控制 视图中机械臂的问题,其实是由于机械臂和工作站不匹配。以下是解决方法。 名称版本Robot Studio6.08 新建一个”空工作站“; 在目标位置新建一个目标文件夹 C:\solution\test࿰…...

雷达通信一体化(含WCSP2023会议论文集学习)
雷达通信一体化,又称雷达通信融合(RADCOM),是一种新兴的技术,它将雷达(通常用于探测和跟踪目标)和无线通信(用于传输信息)的功能结合在一起。这种融合技术的主要目标是提…...

特斯拉擎天柱机器人:工厂自动化的未来
随着技术的进步,工业自动化已经逐步进入了一个新的纪元。特斯拉最近公布的擎天柱机器人Optimus的演示,不仅仅展示了一个高科技机器人的能力,更是向我们揭示了未来工厂的可能性。 特斯拉擎天柱机器人的功能展示 马斯克在最新的演示中向我们展…...

【管理咨询宝藏93】大型制造集团数字化转型设计方案
【管理咨询宝藏93】大型制造集团数字化转型设计方案 【格式】PDF版本 【关键词】国际咨询公司、制造型企业转型、数字化转型 【核心观点】 - 235页大型制造型集团数字化转型方案设计!细节非常详尽,图表丰富! - 系统架构必须采用成熟、具有国…...