Fixes on Fee related methods

This commit is contained in:
Gerardo Nardelli 2019-01-10 08:44:40 -03:00
parent 8eb4809735
commit fbf81a83b9
2 changed files with 13 additions and 12 deletions

View File

@ -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;
}
}

View File

@ -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"))];
}
}