【曝光】Stringify(Door)项目方的代码有严重问题

一句话概括: 生成Door的代码完全部不随机!高度怀疑项目之前有利用漏洞定时mint稀有门(白门),普通人只能大概率接盘黑门。

我也算是刚接触NFT不久的小白,第一个Mint就是mint这个项目。最近刚开始了解智能合约,因为有技术背景,突发奇想想研读一下这个项目的代码就发现了重大问题。更令人气疯的是项目方的不作为和阴阳怪气的态度。他们对现有的问题不管不顾,最近打算继续发行下一个项目继续割韭菜,所以一气之下就写下了这篇文章。希望大家也能多多转发不要让更多人被割韭菜。

代码有啥问题?

由于生成门的代码完全部随机,项目方(和科学家,但是这个project小估计没啥科学家)在mint之前可以提前知道哪些编号的门会是白门。然后可以通过监控mint的状态来定时抢走那些编号的门。

下一扇白门的编号是?

为了公平起见我可以透露一下,下一扇白门是 #73xx,再下一扇是 #7456。 后面的也都可以计算出来。

代码具体的漏洞在哪里?

合约地址:https://etherscan.io/address/0xf4794aEB9D243c024cf59B85b30ed94F5014168a#code

我们先来看看 StringifyDoor.sol 文件, 我们可以看到tokenid 被传到 random这个函数中来生成一个数字,然后取 那个数%100是否<1来决定是否生成白门。

    /* White background color */
    if ((random(string(abi.encodePacked(toString(tokenId)))) % 100) < 1) {
        tokenType = 1;
        background = 'white';
    }

但问题在,这个名叫random的函数完全部不随机,代码如下,基本上只是把tokenid hash了一下。

function random(string memory input) internal pure returns (uint) { return uint(keccak256(abi.encodePacked(input)));

项目方如何利用这个漏洞?

综上所述,token ID 完全决定了门的是白是黑。。所以在mint之前项目方(和科学家)早就知道应该mint那几扇门

由于token ID是按照mint的时间按顺序发放的。由于这个项目不火,比方说已知7332门是白门,项目方只要等到有人mint了7331号门,然后赶紧mint下一个就可以抢走白门。 (保险起见也可以提前多mint几个)

你和项目方沟通过了吗?

沟通过了,他们大言不惭地说这是他们刻意这个做的,还是区块链就是这么运行的。。

然后我一番说教后,问他们会不会停止mint然后把这件事情公开透明地告诉大家,他们态度很不好的说并没有此意,这个漏洞他们早知道了。

为什么要曝光

项目方态度太糟糕,不但割韭菜还嘴硬死不认账。 明明知道有问题还重启mint。

你靠这个漏洞挣到钱了吗?

没有,我如果想靠这个获利就不会曝光了。我也是这几天刚发现这个问题,刚发现就和团队沟通了。

我们应该干啥?

  • 不要再mint了 (还要再mint 80多个才会等到下一个白门,到时候也会有一堆人和你抢)

  • 要求项目方道歉! (虽然看他们这副割韭菜的的德行大概率不会)希望大家也能多多转发。