斯坦福大学区块链期末考试题

本文探讨了斯坦福大学区块链课程中的一道期末考试题,涉及ERC721智能合约的安全漏洞。题目指出,一个ERC721代币合同存在恶意攻击可能导致铸造超过最大发行量的NFT。攻击者利用恶意合约地址,通过反复调用mint函数,能够在合约未检查总量的情况下铸造额外的NFT。解决方案是在每次铸造后检查总发行量,防止超限。这提醒我们关注智能合约的边界条件和安全性设计。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

相信大家如果有区块链交流群的话可能会看见最近都在转发这个消息:

作为一名正在学习区块链技术的苦逼,自然是不会错过这么好的一个教材案例(毕竟这可是斯坦福大学的材料呢!!)

课程大纲和材料大家感兴趣可以自己去感受感受 链接我放在这了:


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) 你会在上一页的代码中添加或更改哪一行代码

为了防止你的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值