Fixes on Fee related methods
This commit is contained in:
parent
8eb4809735
commit
fbf81a83b9
|
@ -170,6 +170,14 @@ contract BasicHomeBridge is EternalStorage, Validatable {
|
|||
addressStorage[keccak256(abi.encodePacked("feeManagerContract"))] = _feeManager;
|
||||
}
|
||||
|
||||
function setFee(uint256 _fee) external onlyOwner {
|
||||
require(feeManagerContract().delegatecall(abi.encodeWithSignature("setFee(uint256)", _fee)));
|
||||
}
|
||||
|
||||
function getFee() public view returns(uint256) {
|
||||
return uintStorage[keccak256(abi.encodePacked("fee"))];
|
||||
}
|
||||
|
||||
function isContract(address _addr) internal view returns (bool)
|
||||
{
|
||||
uint length;
|
||||
|
@ -178,13 +186,15 @@ contract BasicHomeBridge is EternalStorage, Validatable {
|
|||
}
|
||||
|
||||
function calculateFee(uint256 _value, bool _recover, address _impl) internal view returns(uint256) {
|
||||
uint256 fee;
|
||||
bytes memory callData = abi.encodeWithSignature("calculateFee(uint256,bool)", _value, _recover);
|
||||
assembly {
|
||||
let result := delegatecall(gas, _impl, add(callData, 0x20), mload(callData), 0, 32)
|
||||
fee := mload(0)
|
||||
|
||||
switch result
|
||||
case 0 { revert(0, 0) }
|
||||
default { return(0, 32) }
|
||||
}
|
||||
return fee;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -23,7 +23,7 @@ contract HomeBridgeErcToNative is EternalStorage, BasicBridge, BasicHomeBridge {
|
|||
address feeManager = feeManagerContract();
|
||||
if (feeManager != address(0)) {
|
||||
uint256 fee = calculateFee(valueToTransfer, false, feeManager);
|
||||
valueToTransfer = valueToTransfer - fee;
|
||||
valueToTransfer = valueToTransfer.sub(fee);
|
||||
}
|
||||
setTotalBurntCoins(totalBurntCoins().add(valueToTransfer));
|
||||
address(0).transfer(valueToTransfer);
|
||||
|
@ -85,9 +85,8 @@ contract HomeBridgeErcToNative is EternalStorage, BasicBridge, BasicHomeBridge {
|
|||
if (feeManager != address(0)) {
|
||||
uint256 fee = calculateFee(valueToMint, false, feeManager);
|
||||
feeManager.delegatecall(abi.encodeWithSignature("distributeFeeFromAffirmation(uint256)", fee));
|
||||
valueToMint = valueToMint - fee;
|
||||
valueToMint = valueToMint.sub(fee);
|
||||
}
|
||||
|
||||
blockReward.addExtraReceiver(valueToMint, _recipient);
|
||||
return true;
|
||||
}
|
||||
|
@ -99,12 +98,4 @@ contract HomeBridgeErcToNative is EternalStorage, BasicBridge, BasicHomeBridge {
|
|||
function setTotalBurntCoins(uint256 _amount) internal {
|
||||
uintStorage[keccak256(abi.encodePacked("totalBurntCoins"))] = _amount;
|
||||
}
|
||||
|
||||
function setFee(uint256 _fee) external onlyOwner {
|
||||
require(feeManagerContract().delegatecall(abi.encodeWithSignature("setFee(uint256)", _fee)));
|
||||
}
|
||||
|
||||
function getFee() public view returns(uint256) {
|
||||
return uintStorage[keccak256(abi.encodePacked("fee"))];
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue