* alternative flash lending (renting) design
* add rent interface
* fix stack too deep error
rearrange order of k condition math
ignore erroneous out of gas errors in tests
* try removing rent in favor of monolithic swap
IUniswapV2Borrower -> IUniswapV2Callee
update tests
* fix implementation
* clean up math a bit
* amount{0,1}In -> amount{0,1}InNet
* charge on all inputs, not just net
* removed unnecessary safemath
* add to != token check
don't indent in scope
rename reserve{0,1}Next -> reserve{0,1}Adjusted
* > instead of >=
simplify algebra
reserve{0,1}Adjusted -> balance{0,1}Adjusted
add comments
* add some optimistic swap test cases
53 lines
2.4 KiB
Solidity
53 lines
2.4 KiB
Solidity
pragma solidity =0.5.16;
|
|
|
|
interface IUniswapV2Exchange {
|
|
event Approval(address indexed owner, address indexed spender, uint value);
|
|
event Transfer(address indexed from, address indexed to, uint value);
|
|
|
|
function name() external pure returns (string memory);
|
|
function symbol() external pure returns (string memory);
|
|
function decimals() external pure returns (uint8);
|
|
function totalSupply() external view returns (uint);
|
|
function balanceOf(address owner) external view returns (uint);
|
|
function allowance(address owner, address spender) external view returns (uint);
|
|
|
|
function approve(address spender, uint value) external returns (bool);
|
|
function transfer(address to, uint value) external returns (bool);
|
|
function transferFrom(address from, address to, uint value) external returns (bool);
|
|
|
|
function DOMAIN_SEPARATOR() external view returns (bytes32);
|
|
function PERMIT_TYPEHASH() external pure returns (bytes32);
|
|
function nonces(address owner) external view returns (uint);
|
|
|
|
function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
|
|
|
|
event Mint(address indexed sender, uint amount0, uint amount1);
|
|
event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
|
|
event Swap(
|
|
address indexed sender,
|
|
uint amount0In,
|
|
uint amount1In,
|
|
uint amount0Out,
|
|
uint amount1Out,
|
|
address indexed to
|
|
);
|
|
event Sync(uint112 reserve0, uint112 reserve1);
|
|
|
|
function MINIMUM_LIQUIDITY() external pure returns (uint);
|
|
function factory() external view returns (address);
|
|
function token0() external view returns (address);
|
|
function token1() external view returns (address);
|
|
function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
|
|
function price0CumulativeLast() external view returns (uint);
|
|
function price1CumulativeLast() external view returns (uint);
|
|
function kLast() external view returns (uint);
|
|
|
|
function mint(address to) external returns (uint liquidity);
|
|
function burn(address to) external returns (uint amount0, uint amount1);
|
|
function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
|
|
function skim(address to) external;
|
|
function sync() external;
|
|
|
|
function initialize(address, address) external;
|
|
}
|