add permit

This commit is contained in:
owen05
2020-11-29 23:40:19 +08:00
parent d90e031a30
commit 7290f73634
12 changed files with 602 additions and 18 deletions

View File

@@ -169,7 +169,7 @@ contract DODOV2Proxy01 is IDODOV2Proxy01 {
);
require(
baseAdjustedInAmount >= baseMinAmount && quoteAdjustedInAmount >= quoteMinAmount,
"DODOV2Proxy01: deposit amount is not enough"
'DODOV2Proxy01: deposit amount is not enough'
);
address _dvm = DVMAddress;
@@ -179,6 +179,46 @@ contract DODOV2Proxy01 is IDODOV2Proxy01 {
(shares, , ) = IDODOV2(_dvm).buyShares(to);
}
function removeDVMLiquidity(
address DVMAddress,
address payable to,
uint256 sharesAmount,
uint256 baseMinOutAmount,
uint256 quoteMinOutAmount,
uint8 flag, // 0 -ERC20, 1 - baseOutETH, 2 - quoteOutETH
uint256 deadline
) public virtual override judgeExpired(deadline) returns (uint256 baseOutAmount, uint256 quoteOutAmount) {
_deposit(msg.sender,DVMAddress,DVMAddress,sharesAmount,false);
if(flag == 0)
(baseOutAmount,quoteOutAmount) = IDODOV2(DVMAddress).sellShares(to);
else
(baseOutAmount,quoteOutAmount) = IDODOV2(DVMAddress).sellShares(address(this));
require(baseOutAmount >= baseMinOutAmount && quoteOutAmount >= quoteMinOutAmount, 'DODOV2Proxy01: Return Amount is not enough');
if(flag != 0){
_withdraw(to, IDODOV2(DVMAddress)._BASE_TOKEN_(), baseOutAmount,flag == 1);
_withdraw(to, IDODOV2(DVMAddress)._QUOTE_TOKEN_(), quoteOutAmount, flag == 2);
}
}
// ================ Permit ======================
function removeDVMLiquidityWithPermit(
address DVMAddress,
address payable to,
uint256 sharesAmount,
uint256 baseMinOutAmount,
uint256 quoteMinOutAmount,
uint8 flag, // 0 -ERC20, 1 - baseOutETH, 2 - quoteOutETH
uint256 deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external virtual override returns (uint256 baseOutAmount, uint256 quoteOutAmount) {
uint256 value = approveMax ? uint256(-1) : sharesAmount;
IDODOV2(DVMAddress).permit(msg.sender, dodoApprove, value, deadline, v, r, s);
(baseOutAmount,quoteOutAmount) = removeDVMLiquidity(DVMAddress,to,sharesAmount,baseMinOutAmount,quoteMinOutAmount,flag,deadline);
}
// ============================================
function createDODOPrivatePool(
address baseToken,
address quoteToken,
@@ -439,7 +479,7 @@ contract DODOV2Proxy01 is IDODOV2Proxy01 {
}
function _withdraw(
address to,
address payable to,
address token,
uint256 amount,
bool isETH
@@ -447,7 +487,7 @@ contract DODOV2Proxy01 is IDODOV2Proxy01 {
if (isETH) {
if (amount > 0) {
IWETH(_WETH_).withdraw(amount);
msg.sender.transfer(amount);
to.transfer(amount);
}
} else {
SafeERC20.safeTransfer(IERC20(token), to, amount);

View File

@@ -36,9 +36,13 @@ interface IDODOV2 {
uint256 k
) external returns (address newVendingMachine);
// ============= permit =================
function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
// ======================================
function buyShares(address to) external returns (uint256,uint256,uint256);
function sellShares(address to, uint256 amount, bytes calldata data) external returns (uint256,uint256);
function sellShares(address to) external returns (uint256,uint256);
//========== DODOPrivatePool ===========

View File

@@ -82,6 +82,30 @@ interface IDODOV2Proxy01 {
uint256 quoteAdjustedInAmount
);
function removeDVMLiquidity(
address DVMAddress,
address payable to,
uint256 sharesAmount,
uint256 baseMinOutAmount,
uint256 quoteMinOutAmount,
uint8 flag, // 0 -ERC20, 1 - baseOutETH, 2 - quoteOutETH
uint256 deadline
) external returns (uint256 baseOutAmount, uint256 quoteOutAmount);
// ==================== Permit ================================
function removeDVMLiquidityWithPermit(
address DVMAddress,
address payable to,
uint256 sharesAmount,
uint256 baseMinOutAmount,
uint256 quoteMinOutAmount,
uint8 flag, // 0 -ERC20, 1 - baseOutETH, 2 - quoteOutETH
uint256 deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint256 baseOutAmount, uint256 quoteOutAmount);
// ==============================================================
function createDODOPrivatePool(
address baseToken,
address quoteToken,