mirror of
https://github.com/grassrootseconomics/erc20-pool.git
synced 2026-05-24 15:46:16 +02:00
fixes: fee application to swap quote
commit4931ef1d70Author: Mohammed Sohail <sohailsameja@gmail.com> Date: Tue Mar 26 16:56:44 2024 +0800 fix: include fees in public liquidity commit78844169c5Author: Mohammed Sohail <sohailsameja@gmail.com> Date: Thu Mar 21 17:00:33 2024 +0800 update: fix-pool builds commitab897bf901Author: Mohammed Sohail <sohailsameja@gmail.com> Date: Thu Mar 21 16:57:06 2024 +0800 fix: apply fee after quote. Exclude fees from public liquidity commitc38fb552e9Author: Mohammed Sohail <sohailsameja@gmail.com> Date: Thu Mar 21 13:09:29 2024 +0800 feat: make getQuote a public function * useful for 3rd part integration. No need to make a 2nd call to the quoter.
This commit is contained in:
@@ -119,7 +119,7 @@ contract SwapPool {
|
||||
return fee;
|
||||
}
|
||||
|
||||
function getQuote(address _outToken, address _inToken, uint256 _value) private returns (uint256) {
|
||||
function getQuote(address _outToken, address _inToken, uint256 _value) public returns (uint256) {
|
||||
bool r;
|
||||
bytes memory v;
|
||||
uint256 quote;
|
||||
@@ -137,22 +137,26 @@ contract SwapPool {
|
||||
function withdraw(address _outToken, address _inToken, uint256 _value) public {
|
||||
bool r;
|
||||
bytes memory v;
|
||||
uint256 netValue;
|
||||
uint256 balance;
|
||||
uint256 fee;
|
||||
uint256 outValue;
|
||||
|
||||
fee = getFee(_value);
|
||||
netValue = _value - fee;
|
||||
netValue = getQuote(_outToken, _inToken, netValue);
|
||||
outValue = getQuote(_outToken, _inToken, _value);
|
||||
|
||||
(r, v) = _outToken.call(abi.encodeWithSignature("balanceOf(address)", this));
|
||||
require(r, "ERR_TOKEN");
|
||||
balance = abi.decode(v, (uint256));
|
||||
require(balance >= netValue + fee, "ERR_BALANCE");
|
||||
|
||||
// deduct the fees from the quoted outValue
|
||||
fee = getFee(outValue);
|
||||
outValue -= fee;
|
||||
|
||||
// pool should have enough balance to cover the final outValue (fees already deducted)
|
||||
require(balance >= outValue, "ERR_BALANCE");
|
||||
|
||||
deposit(_inToken, _value);
|
||||
|
||||
(r, v) = _outToken.call(abi.encodeWithSignature('transfer(address,uint256)', msg.sender, netValue));
|
||||
(r, v) = _outToken.call(abi.encodeWithSignature('transfer(address,uint256)', msg.sender, outValue));
|
||||
require(r, "ERR_TOKEN");
|
||||
r = abi.decode(v, (bool));
|
||||
require(r, "ERR_TRANSFER");
|
||||
@@ -235,3 +239,4 @@ contract SwapPool {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user