自从2021年NFT火爆出圈,NFT市场一直都收到了国内外市场的广泛关注,要知道,因为中国政策的原因,所以国内发展除了一种独特的数字藏品的模式,它与海外市场的NFT的产品逻辑并不完全一样。数字藏品是一种区块链新应用,它是数字收藏家物品的一种形式,其主要目的就是跟踪一段数字内容的所有权,现在很多投资者都在争先恐后地投资数字藏品。现在其安全性是众多玩家都十分关心的问题,投资者们想要知道数字藏品如何注意安全?下面就让币圈子小编带大家深入探讨一下。
数字藏品智能合约主要的安全问题有:整型溢出安全问题、重入漏洞安全问题、动态数组越界安全问题、随机数安全问题、函数权限配置错误安全问题等问题,详细分析如下。
1、整型溢出安全问题
数据的存储是区块链上重要的一环,而执行合约的虚拟机(EVM)为各类整数都指定了固定大小的存储宽度。这意味着一个整型变量只能由一定范围的数字表示。所以在代码实现时,如果没有检查用户输入就执行算术运算,可能会导致数值超出存储它们的数据类型允许的范围,产生数值溢出的问题。
具体的溢出类型包括乘法溢出、加法溢出、减法溢出、指数溢出等。例如,Solidity中 uint8只能存储大小在[0,255]的数值。当试图存储256到一个uint8时将溢出变成0。而Go语言中使用make()进行内存分配时,如果发生溢出使得该值为0或最大值时,将导致内存分配失败。攻击者常利用该漏洞达到绕过转账条件、操纵内存、破坏堆栈的目的。
2、重入漏洞安全问题
数字藏品的业务场景中智能合约常常需要实现合约间的外部调用,这种方式主要的危险就是外部合约可以接管控制流,并调用函数对某些关键数据进行更改。尤其在solidity语言中,当用户直接向一个合约转账时会产生一个隐藏的fallback()外部调用,如果未对该调用进行限制则可能会产生重入漏洞。
重入攻击首次出现于以太坊,对应的真实攻击为The DAO攻击,该攻击还导致了原来的以太坊分叉成以太经典(ETC)和现在的以太坊(ETH)。
3、动态数组越界安全问题
对于数组越界这种严重的内存错误,不同的区块链开发语言有各自的特点。Java、Solidity、Go语言等跟其他大部分编程语言类似,在编译期间会进行数组越界检查。特别的是,在Solidity语言中动态数组将首先在变量定义处的虚拟机插槽位置存储数组元素数量,之后根据该插槽位置的Keccak256值和下标位置计算特定元素值的存储位置。
所以当动态数组下标是用户可控的且数组长度不受限的情况下,攻击者可以根据虚拟机的插槽深度构造对应的参数,使得参数指向虚拟机中的任意内存位置,从而修改对应插槽的状态变量。
4、随机数安全问题
随机数在数字藏品中的应用十分广泛,如为艺术类数字藏品随机分配属性,为游戏类的藏品分配宝藏位置,以及保障限量版藏品空投的公平性等。不同区块链开发语言中生成随机数的方式也多种多样,例如Go使用math/rand、Java使用java.util.Random类等。而在Solidity中由于没有原生的生成伪随机数的函数,所以部分开发者常采用区块参数替代。
但上述随机数的生成方式都存在安全缺陷,当开发者使用可被预测的随机数种子生成随机数时,攻击者就可以根据对应的算法获取到即将出现的随机数,实现随机数预测,达到攻击目的。
5、函数权限配置错误安全问题
函数是区块链智能合约中的一个重要组成部分,而函数的权限控制决定了其是否可以被用户或其他派生合约在外部调用,或仅在内部调用。
不同的语言同样拥有不同的函数权限声明方式,如:Solidity中可以使用四种可见性修饰符public、private、internal、external直接规定调用权限,同时也可以采用modifier实现对某些特权函数的严格权限控制。而go语言则采用函数首字母的大小写声明权限。如果这些函数权限修饰符被开发者误用,则会导致一些特殊功能的函数被攻击者调用,造成诸如随意更改藏品数量等严重后果。
数字藏品(也称为NFT)出售需要在数字藏品平台进行,OpenSea是最大的数字藏品平台之一,今天币圈子小编将以OpenSea出售NFT为例,为大家介绍数字藏品怎么卖出去,详细教程如下:
1.在OpenSea平台巡览到页面的右上方,然后按一下您的个人资料图示。
2.在钱包中选取要出售的NFT。
3.在项目页面的右上方,按一下标售。
4.预设销售为固定价格销售,由卖家设定NFT价格。你可以按一下快显视窗,以查看使用定时拍卖出售项目的选项。
5.选择标售清单的预设持续时间或设定自订持续时间。
以上就是币圈子小编对于数字藏品如何注意安全这一问题的深入探讨。现在国内对于数字藏品的应用还在持续不断的发展,国内已经出现了很多领先的数字艺术平台,并且大家也能够在这些平台中看到对于区块链技术的具体应用。就比如说,大家交易的每个数字藏品下面其实都是由比较清楚的交易记录的,能够做到对时间和价格可追溯。而从非技的术角度来看的话,数字藏品是能够将有关数字资产的信息以及其他信息来进行编码的,并以此来扩展加密货币的概念。