Enable choice in net fee, settable evm version

Signed-off-by: lash <dev@holbrook.no>
Signed-off-by: Mohammed Sohail <sohailsameja@gmail.com>
This commit is contained in:
lash
2024-04-15 13:02:23 +01:00
committed by Mohammed Sohail
parent c688989c40
commit 066f7914a6
8 changed files with 62 additions and 14 deletions

View File

@@ -1,13 +1,14 @@
SOLC = /usr/local/bin/solc
EVM_VERSION = byzantium
all:
$(SOLC) --bin SwapPool.sol --evm-version istanbul | awk 'NR>3' > SwapPool.bin
$(SOLC) --abi SwapPool.sol --evm-version istanbul | awk 'NR>3' > SwapPool.json
$(SOLC) --metadata SwapPool.sol --evm-version istanbul | awk 'NR>3' > SwapPool.metadata.json
$(SOLC) --bin SwapPool.sol --evm-version $(EVM_VERSION)| awk 'NR>3' > SwapPool.bin
$(SOLC) --abi SwapPool.sol --evm-version $(EVM_VERSION) | awk 'NR>3' > SwapPool.json
$(SOLC) --metadata SwapPool.sol --evm-version $(EVM_VERSION) | awk 'NR>3' > SwapPool.metadata.json
truncate -s -1 SwapPool.bin
$(SOLC) --bin DecimalQuote.sol --evm-version istanbul | awk 'NR>3' > DecimalQuote.bin
$(SOLC) --abi DecimalQuote.sol --evm-version istanbul | awk 'NR>3' > DecimalQuote.json
$(SOLC) --metadata DecimalQuote.sol --evm-version istanbul | awk 'NR>3' > DecimalQuote.metadata.json
$(SOLC) --bin DecimalQuote.sol --evm-version $(EVM_VERSION) | awk 'NR>3' > DecimalQuote.bin
$(SOLC) --abi DecimalQuote.sol --evm-version $(EVM_VERSION) | awk 'NR>3' > DecimalQuote.json
$(SOLC) --metadata DecimalQuote.sol --evm-version $(EVM_VERSION) | awk 'NR>3' > DecimalQuote.metadata.json
truncate -s -1 DecimalQuote.bin
install: all

View File

@@ -163,7 +163,7 @@ contract SwapPool {
return quote;
}
function withdraw(address _outToken, address _inToken, uint256 _value) public {
function withdraw_less_fee(address _outToken, address _inToken, uint256 _value) public {
bool r;
bytes memory v;
uint256 balance;
@@ -197,6 +197,46 @@ contract SwapPool {
emit Swap(msg.sender, _inToken, _outToken, _value, outValue, fee);
}
function withdraw(address _outToken, address _inToken, uint256 _value) public {
bool r;
bytes memory v;
uint256 netValue;
uint256 outValue;
uint256 balance;
uint256 fee;
fee = getFee(_value);
netValue = _value - fee;
netValue = getQuote(_outToken, _inToken, netValue);
(r, v) = _outToken.call(abi.encodeWithSignature("balanceOf(address)", this));
require(r, "ERR_TOKEN");
balance = abi.decode(v, (uint256));
outValue = netValue + fee;
require(balance >= outValue, "ERR_BALANCE");
deposit(_inToken, _value);
(r, v) = _outToken.call(abi.encodeWithSignature('transfer(address,uint256)', msg.sender, netValue));
require(r, "ERR_TOKEN");
r = abi.decode(v, (bool));
require(r, "ERR_TRANSFER");
if (feeAddress != address(0)) {
fees[_outToken] += fee;
}
emit Swap(msg.sender, _inToken, _outToken, _value, outValue, fee);
}
function withdraw(address _outToken, address _inToken, uint256 _value, bool _deduct_fee) public {
if (_deduct_fee) {
withdraw_less_fee(_outToken, _inToken, _value);
} else {
withdraw(_outToken, _inToken, _value);
}
}
// Withdraw token to fee address
function withdraw(address _outToken) public returns (uint256) {
uint256 balance;