FX168财经报社(香港)讯 NBA球迷所期待的非同质化代币(NFT)推出后,却出现智能合约出错的惨况,使得币圈投资者骂声不断。NBA 推出的THE ASSOCIATION动态NFT于21日凌晨正式开放铸造,许多早期进入Discord的支持者皆能获得白名单资格。然而却因为智能合约漏洞,造成许多没有白名单的用户也能够大量铸造,进而使得部分符合资格的用户损失权益。
根据OpenSea交易所知名NFT项目Azuki开发人员cygaar在推特发表的说法,若想利用其合约漏洞,只需将此数据发送到尚未铸造过的钱包上的合约地址,无需拥有白名单资格也可以进行此操作。
(来源:推特)
将这段数据反编译后,你会看到它调用的函数是mint_approved,仔细观察info中的参数会发现这段程式码,主要是用来判断交易是否由铸造网站签名,以及用户是否在白名单内。然而它少了一个关键部分,他没有去检查info.from == msg.sender。
这意味着,同样的签名能被任何人重复利用,只需一个有效的签名便可无限循环。尽管一个钱包仅能铸造一次,但要创建一个新钱包不过就是几秒钟的事情而已。此外,cygaar提出一个更大的疏失。合约并没有检查交易是否来自用户,若能多添加一行:require(tx.origin == msg.sender, ‘Caller not user’),即可降低合约被滥用的风险。
上述漏洞被发现后,被许多有心人士利用,造成NFT在短时间内被铸造完毕,甚至造成有白名单的用户无法铸造。“整理来看,合约看起来非常草率。随意的注解、大小写不一致、许多未使用的变数,且没有进行优化,”cygaar说道。
为使智能合约更加安全完善,cygaar给出几点建议:
一、妥善地进行签名验证,确保签名来自讯息发送方;
二、对合约多用点心,别再只是到处复制贴上;
三、聘请审计员,任何合格的审计员皆能在短时间内发现这些漏洞
在事情发生后,NBAxNFT立即在官方推特表达歉意,他们当前正在确认因漏洞造成无法铸造的白名单钱包,若有问题可于其Discord 反应。
随后NBAxNFT宣布增发12000张球员卡,这是在22日更新的消息。根据官方最新声明,其已确认那些有白名单资格却无法铸造的用户钱包,这些用户将收到一个THE ASSOCIATION NFT作为补偿。不过,这系列的NFT也将由原先的18000个增发至30000个,每位球员的张数也由75张增加至125张。
延伸阅读: