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

By [Untitled](https://paragraph.com/@0x0bad01f047a912a6a64d616c736bbb789295dd6e) · 2021-11-27

---

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

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

**代码有啥问题？**

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

**下一扇白门的编号是？**

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

**代码具体的漏洞在哪里？**

合约地址：[https://etherscan.io/address/0xf4794aEB9D243c024cf59B85b30ed94F5014168a#code](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多个才会等到下一个白门，到时候也会有一堆人和你抢）
    
*   要求项目方道歉！ （虽然看他们这副割韭菜的的德行大概率不会）希望大家也能多多转发。

---

*Originally published on [Untitled](https://paragraph.com/@0x0bad01f047a912a6a64d616c736bbb789295dd6e/stringify-door)*
