相信大家如果有区块链交流群的话可能会看见最近都在转发这个消息:
作为一名正在学习区块链技术的苦逼,自然是不会错过这么好的一个教材案例(毕竟这可是斯坦福大学的材料呢!!)
课程大纲和材料大家感兴趣可以自己去感受感受 链接我放在这了:
https://cs251.stanford.edu/syllabus.html
今天的重点其实是这样一道题 在第二个链接斯坦福大学期末考试的卷子里面
链接在这:
https://cs251.stanford.edu/hw/final2021.pdf
当然需要大家有一定的区块链和solidity知识基础才可以看懂我们在讲什么
那么我们来看看题目:
这道题讲的是:这是一个ERC721代币标准发行总量为16384个NFT的智能合约,用户通过调用mint函数一次性可以铸造不超过20个NFT,并且所有的内部变量已经在构造函数里面正常初始化了(不与展示)
然后我们再来看看问题:
A) 假设已经铸造了16370个NFT,那么totalSupply()=16370。解释恶意合同如何导致超过16384个的NFT被铸造。攻击者可以造出的NFT的最大数量是多少?
提示:如果在呼叫地址收到的OnERC721是恶意的,会发生什么?仔细观察铸币循环,并考虑重新铸造缺陷
B) 假设totalSupply()的当前值为16370,为实现(a)部分攻击的恶意Solidity合约编写代码。
C) 你会在上一页的代码中添加或更改哪一行代码
为了防止你的