pragma solidity ^0.4.18; library SafeMath { function mul(uint256 a, uint256 b) internal returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } function max64(uint64 a, uint64 b) internal constant returns (uint64) { return a >= b ? a : b; } function min64(uint64 a, uint64 b) internal constant returns (uint64) { return a < b ? a : b; } function max256(uint256 a, uint256 b) internal constant returns (uint256) { return a >= b ? a : b; } function min256(uint256 a, uint256 b) internal constant returns (uint256) { return a < b ? a : b; } function abs128(int128 a) internal constant returns (int128) { return a < 0 ? a * -1 : a; } } contract Repaying { using SafeMath for uint256; bool repayLock; uint256 maxGasPrice = 4000000000; event Repaid(address user, uint256 amt); modifier repayable { if(!repayLock) { repayLock = true; uint256 startGas = msg.gas; _; uint256 gasUsed = startGas.sub(msg.gas); uint256 gasPrice = maxGasPrice.min256(tx.gasprice); uint256 repayal = gasPrice.mul(gasUsed.add(41761)); tx.origin.send(repayal); Repaid(tx.origin, repayal); repayLock = false; } else { _; } } } contract testC is Repaying { using SafeMath for uint256; uint256 variable; function testC() payable { } function test() repayable { variable = block.number; variable = block.number; variable = block.number; } function test2() repayable { test(); } }
0.4.18