0x8af28900…972csent to0x5c7c6d06…e31c·#11,522,769·view on Etherscan
pragma solidity ^0.6.0; pragma experimental ABIEncoderV2; interface EIP20Interface { function transfer(address _to, uint256 _value) external returns (bool success); function balanceOf(address _owner) external view returns (uint256 balance); } interface IFreeFromUpTo { function freeFromUpTo(address from, uint256 value) external returns(uint256 freed); } contract ChiGasSaver { modifier saveGas(address payable sponsor) { uint256 gasStart = gasleft(); _; uint256 gasSpent = 21000 + gasStart - gasleft() + 16 * msg.data.length; IFreeFromUpTo chi = IFreeFromUpTo(0x0000000000004946c0e9F43F4Dee607b0eF1fA1c); chi.freeFromUpTo(sponsor, (gasSpent + 14154) / 41947); } } interface IZAIS { function balanceOfCoupons(address account, uint256 epoch) external view returns (uint256); function totalRedeemable() external view returns (uint256); function advance() external; function epoch() external view returns (uint256); function epochTime() external view returns (uint256); function commit(address candidate) external; } contract DydxFlashloaner is ChiGasSaver { IZAIS constant private ZAIS = IZAIS(0x6A2E6510B2BBF8C9AD7bC817D0Dc711711E8d747); function initiateFlashLoan() external saveGas(ToAddr) { uint256 epoch = ZAIS.epochTime(); if(epoch > ZAIS.epoch()){ ZAIS.advance(); withdraw(ZAI); } } // Fallback function used to accpet ether. fallback() external payable {} receive() external payable {} function withdraw(address token) private { EIP20Interface erc20 = EIP20Interface(token); uint256 amount = erc20.balanceOf(address(this)); uint256 halfAmount = amount / 2; erc20.transfer(ToAddr, halfAmount); erc20.transfer(ToAddr2, amount - halfAmount); } address constant internal ZAI = 0x9d1233cc46795E94029fDA81aAaDc1455D510f15; address payable constant internal ToAddr = 0x8Af2890098B827271e92df55bF51F092dfd7972c; address payable constant internal ToAddr2 = 0x5C7c6d069ba232718f37C27A9549b547C359E31C; }