tokenbridge-contracts/contracts/upgradeable_contracts/erc20_to_native/RewardableHomeBridgeErcToNa...

52 lines
1.8 KiB
Solidity

pragma solidity 0.4.24;
import "../RewardableBridge.sol";
contract RewardableHomeBridgeErcToNative is RewardableBridge {
bytes4 internal constant GET_AMOUNT_TO_BURN = 0x916850e9; // getAmountToBurn(uint256)
/**
* @dev Updates the fee percentage for home->foreign bridge operations.
* Only owner is allowed to call this method.
* If during this operation, home fee is changed, it is highly recommended to stop the bridge operations first.
* Otherwise, pending signature requests can become a reason for imbalance between two bridge sides.
* @param _fee new value for fee percentage.
*/
function setHomeFee(uint256 _fee) external onlyOwner {
_setFee(feeManagerContract(), _fee, HOME_FEE);
}
/**
* @dev Updates the fee percentage for foreign->home bridge operations.
* Only owner is allowed to call this method.
* @param _fee new value for fee percentage.
*/
function setForeignFee(uint256 _fee) external onlyOwner {
_setFee(feeManagerContract(), _fee, FOREIGN_FEE);
}
function getHomeFee() public view returns (uint256) {
return _getFee(HOME_FEE);
}
function getForeignFee() public view returns (uint256) {
return _getFee(FOREIGN_FEE);
}
function getAmountToBurn(uint256 _value) public view returns (uint256 amount) {
bytes memory callData = abi.encodeWithSelector(GET_AMOUNT_TO_BURN, _value);
address feeManager = feeManagerContract();
assembly {
let result := callcode(gas, feeManager, 0x0, add(callData, 0x20), mload(callData), 0, 32)
switch and(eq(returndatasize, 32), result)
case 1 {
amount := mload(0)
}
default {
revert(0, 0)
}
}
}
}