Source Code
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
FeeManagerV1
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "./../IRadarBridgeFeeManager.sol";
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
contract FeeManagerV1 is IRadarBridgeFeeManager {
mapping(address => uint256) private maxTokenFee;
uint256 constant FEE_BASE = 1000000;
address private owner;
uint256 private percentageFee;
modifier onlyOwner() {
require(msg.sender == owner, "Unauthorized");
_;
}
constructor (
uint256 _percentageFee,
address[] memory _tokens,
uint256[] memory _maxFees
) {
require(_percentageFee < FEE_BASE, "Fee too big");
require(_tokens.length == _maxFees.length, "Invalid maxFees data");
owner = msg.sender;
percentageFee = _percentageFee;
for(uint8 i = 0; i < _tokens.length; i++) {
maxTokenFee[_tokens[i]] = _maxFees[i];
}
}
// DAO Functions
function passOwnership(address _newOwner) external onlyOwner {
owner = _newOwner;
}
function changePercentageFee(uint256 _newFee) external onlyOwner {
require(_newFee < FEE_BASE, "Fee too big");
percentageFee = _newFee;
}
function changeTokenMaxFee(address _token, uint256 _maxFee) external onlyOwner {
maxTokenFee[_token] = _maxFee;
}
function withdrawTokens(address _token, uint256 _amount, address _receiver) external onlyOwner {
uint256 _bal = IERC20(_token).balanceOf(address(this));
uint256 _withdrawAmount = _amount;
if (_withdrawAmount > _bal) {
_withdrawAmount = _bal;
}
IERC20(_token).transfer(_receiver, _withdrawAmount);
}
// Fee Manager Functions
function getBridgeFee(address _token, address, uint256 _amount, bytes32, address) external override view returns (uint256) {
uint256 _percFee = percentageFee;
if (((_amount * _percFee) / FEE_BASE) > maxTokenFee[_token]) {
if (_amount != 0) {
_percFee = (maxTokenFee[_token] * FEE_BASE) / _amount;
} else {
_percFee = 0;
}
}
return _percFee;
}
function getFeeBase() external override view returns (uint256) {
return FEE_BASE;
}
// State Getters
function getFixedPercRate() external view returns (uint256) {
return percentageFee;
}
function getMaxFeeForToken(address _token) external view returns (uint256) {
return maxTokenFee[_token];
}
function getOwner() external view returns (address) {
return owner;
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address recipient, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address sender,
address recipient,
uint256 amount
) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
interface IRadarBridgeFeeManager {
function getBridgeFee(address _token, address _sender, uint256 _amount, bytes32 _destChain, address _destAddress) external view returns (uint256);
function getFeeBase() external view returns (uint256);
}{
"evmVersion": "istanbul",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs",
"useLiteralContent": true
},
"optimizer": {
"details": {
"constantOptimizer": true,
"cse": true,
"deduplicate": true,
"jumpdestRemover": true,
"orderLiterals": true,
"peephole": true,
"yul": false
},
"runs": 200
},
"remappings": [],
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"uint256","name":"_percentageFee","type":"uint256"},{"internalType":"address[]","name":"_tokens","type":"address[]"},{"internalType":"uint256[]","name":"_maxFees","type":"uint256[]"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"_newFee","type":"uint256"}],"name":"changePercentageFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_maxFee","type":"uint256"}],"name":"changeTokenMaxFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"address","name":"","type":"address"}],"name":"getBridgeFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFeeBase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFixedPercRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"getMaxFeeForToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"passOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"withdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60806040523480156200001157600080fd5b5060405162000c5438038062000c5483398101604081905262000034916200028e565b620f42408310620000625760405162461bcd60e51b8152600401620000599062000388565b60405180910390fd5b8051825114620000865760405162461bcd60e51b8152600401620000599062000376565b600180546001600160a01b03191633179055600283905560005b82518160ff1610156200014257818160ff1681518110620000d157634e487b7160e01b600052603260045260246000fd5b6020026020010151600080858460ff16815181106200010057634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020819055508080620001399062000410565b915050620000a0565b505050506200048b565b6000620001636200015d84620003c6565b6200039a565b905080838252602082019050828560208602820111156200018357600080fd5b60005b85811015620001b357816200019c88826200021e565b845250602092830192919091019060010162000186565b5050509392505050565b6000620001ce6200015d84620003c6565b90508083825260208201905082856020860282011115620001ee57600080fd5b60005b85811015620001b3578162000207888262000281565b8452506020928301929190910190600101620001f1565b80516200022b8162000466565b92915050565b600082601f8301126200024357600080fd5b8151620002558482602086016200014c565b949350505050565b600082601f8301126200026f57600080fd5b815162000255848260208601620001bd565b80516200022b8162000480565b600080600060608486031215620002a457600080fd5b6000620002b2868662000281565b93505060208401516001600160401b03811115620002cf57600080fd5b620002dd8682870162000231565b92505060408401516001600160401b03811115620002fa57600080fd5b62000308868287016200025d565b9150509250925092565b600062000321601483620003ec565b7f496e76616c6964206d6178466565732064617461000000000000000000000000815260200192915050565b60006200035c600b83620003ec565b6a46656520746f6f2062696760a81b815260200192915050565b602080825281016200022b8162000312565b602080825281016200022b816200034d565b6040518181016001600160401b0381118282101715620003be57620003be62000450565b604052919050565b60006001600160401b03821115620003e257620003e262000450565b5060209081020190565b90815260200190565b60006001600160a01b0382166200022b565b90565b60ff1690565b60006200041d826200040a565b915060ff8214156200043357620004336200043a565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6200047181620003f5565b81146200047d57600080fd5b50565b620004718162000407565b6107b9806200049b6000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c80637d468655116100665780637d468655146100fc578063893d20e8146101045780639bc5c50914610119578063aefcde311461012c578063dc9337771461013f57610093565b806349cfc692146100985780634d2df765146100c1578063620996df146100d4578063764bb245146100e9575b600080fd5b6100ab6100a636600461048c565b610147565b6040516100b89190610699565b60405180910390f35b6100ab6100cf366004610466565b6101d2565b6100e76100e2366004610466565b6101ed565b005b6100e76100f7366004610501565b610242565b6100ab610288565b61010c61028e565b6040516100b89190610649565b6100e761012736600461053b565b61029d565b6100e761013a3660046105a6565b6103dc565b6100ab61042d565b6002546001600160a01b038616600090815260208190526040812054909190620f424061017483886106da565b61017e91906106b0565b11156101c85784156101c4576001600160a01b03871660009081526020819052604090205485906101b390620f4240906106da565b6101bd91906106b0565b90506101c8565b5060005b9695505050505050565b6001600160a01b031660009081526020819052604090205490565b6001546001600160a01b031633146102205760405162461bcd60e51b815260040161021790610679565b60405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b0316331461026c5760405162461bcd60e51b815260040161021790610679565b6001600160a01b03909116600090815260208190526040902055565b60025490565b6001546001600160a01b031690565b6001546001600160a01b031633146102c75760405162461bcd60e51b815260040161021790610679565b6040516370a0823160e01b81526000906001600160a01b038516906370a08231906102f6903090600401610649565b60206040518083038186803b15801561030e57600080fd5b505afa158015610322573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061034691906105c4565b905082818111156103545750805b60405163a9059cbb60e01b81526001600160a01b0386169063a9059cbb906103829086908590600401610657565b602060405180830381600087803b15801561039c57600080fd5b505af11580156103b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d49190610588565b505050505050565b6001546001600160a01b031633146104065760405162461bcd60e51b815260040161021790610679565b620f424081106104285760405162461bcd60e51b815260040161021790610689565b600255565b620f424090565b803561043f8161075a565b92915050565b805161043f81610771565b803561043f8161077a565b805161043f8161077a565b60006020828403121561047857600080fd5b60006104848484610434565b949350505050565b600080600080600060a086880312156104a457600080fd5b60006104b08888610434565b95505060206104c188828901610434565b94505060406104d288828901610450565b93505060606104e388828901610450565b92505060806104f488828901610434565b9150509295509295909350565b6000806040838503121561051457600080fd5b60006105208585610434565b925050602061053185828601610450565b9150509250929050565b60008060006060848603121561055057600080fd5b600061055c8686610434565b935050602061056d86828701610450565b925050604061057e86828701610434565b9150509250925092565b60006020828403121561059a57600080fd5b60006104848484610445565b6000602082840312156105b857600080fd5b60006104848484610450565b6000602082840312156105d657600080fd5b6000610484848461045b565b6105eb8161070f565b82525050565b60006105fe600c836106a7565b6b155b985d5d1a1bdc9a5e995960a21b815260200192915050565b6000610626600b836106a7565b6a46656520746f6f2062696760a81b815260200192915050565b6105eb8161071f565b6020810161043f82846105e2565b6040810161066582856105e2565b6106726020830184610640565b9392505050565b6020808252810161043f816105f1565b6020808252810161043f81610619565b6020810161043f8284610640565b90815260200190565b60006106bb8261071f565b91506106c68361071f565b9250826106d5576106d5610744565b500490565b60006106e58261071f565b91506106f08361071f565b925081600019048311821515161561070a5761070a61072e565b500290565b600061043f82610722565b151590565b90565b6001600160a01b031690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6107638161070f565b811461076e57600080fd5b50565b6107638161071a565b6107638161071f56fea2646970667358221220d3a1f5d4884122ea056552e42d289def6efba789b84b93e28842830d4916c1a564736f6c634300080000330000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f9fbe825bfb2bf3e387af0dc18cac8d87f29dea800000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000056bc75e2d63100000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100935760003560e01c80637d468655116100665780637d468655146100fc578063893d20e8146101045780639bc5c50914610119578063aefcde311461012c578063dc9337771461013f57610093565b806349cfc692146100985780634d2df765146100c1578063620996df146100d4578063764bb245146100e9575b600080fd5b6100ab6100a636600461048c565b610147565b6040516100b89190610699565b60405180910390f35b6100ab6100cf366004610466565b6101d2565b6100e76100e2366004610466565b6101ed565b005b6100e76100f7366004610501565b610242565b6100ab610288565b61010c61028e565b6040516100b89190610649565b6100e761012736600461053b565b61029d565b6100e761013a3660046105a6565b6103dc565b6100ab61042d565b6002546001600160a01b038616600090815260208190526040812054909190620f424061017483886106da565b61017e91906106b0565b11156101c85784156101c4576001600160a01b03871660009081526020819052604090205485906101b390620f4240906106da565b6101bd91906106b0565b90506101c8565b5060005b9695505050505050565b6001600160a01b031660009081526020819052604090205490565b6001546001600160a01b031633146102205760405162461bcd60e51b815260040161021790610679565b60405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b0316331461026c5760405162461bcd60e51b815260040161021790610679565b6001600160a01b03909116600090815260208190526040902055565b60025490565b6001546001600160a01b031690565b6001546001600160a01b031633146102c75760405162461bcd60e51b815260040161021790610679565b6040516370a0823160e01b81526000906001600160a01b038516906370a08231906102f6903090600401610649565b60206040518083038186803b15801561030e57600080fd5b505afa158015610322573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061034691906105c4565b905082818111156103545750805b60405163a9059cbb60e01b81526001600160a01b0386169063a9059cbb906103829086908590600401610657565b602060405180830381600087803b15801561039c57600080fd5b505af11580156103b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d49190610588565b505050505050565b6001546001600160a01b031633146104065760405162461bcd60e51b815260040161021790610679565b620f424081106104285760405162461bcd60e51b815260040161021790610689565b600255565b620f424090565b803561043f8161075a565b92915050565b805161043f81610771565b803561043f8161077a565b805161043f8161077a565b60006020828403121561047857600080fd5b60006104848484610434565b949350505050565b600080600080600060a086880312156104a457600080fd5b60006104b08888610434565b95505060206104c188828901610434565b94505060406104d288828901610450565b93505060606104e388828901610450565b92505060806104f488828901610434565b9150509295509295909350565b6000806040838503121561051457600080fd5b60006105208585610434565b925050602061053185828601610450565b9150509250929050565b60008060006060848603121561055057600080fd5b600061055c8686610434565b935050602061056d86828701610450565b925050604061057e86828701610434565b9150509250925092565b60006020828403121561059a57600080fd5b60006104848484610445565b6000602082840312156105b857600080fd5b60006104848484610450565b6000602082840312156105d657600080fd5b6000610484848461045b565b6105eb8161070f565b82525050565b60006105fe600c836106a7565b6b155b985d5d1a1bdc9a5e995960a21b815260200192915050565b6000610626600b836106a7565b6a46656520746f6f2062696760a81b815260200192915050565b6105eb8161071f565b6020810161043f82846105e2565b6040810161066582856105e2565b6106726020830184610640565b9392505050565b6020808252810161043f816105f1565b6020808252810161043f81610619565b6020810161043f8284610640565b90815260200190565b60006106bb8261071f565b91506106c68361071f565b9250826106d5576106d5610744565b500490565b60006106e58261071f565b91506106f08361071f565b925081600019048311821515161561070a5761070a61072e565b500290565b600061043f82610722565b151590565b90565b6001600160a01b031690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6107638161070f565b811461076e57600080fd5b50565b6107638161071a565b6107638161071f56fea2646970667358221220d3a1f5d4884122ea056552e42d289def6efba789b84b93e28842830d4916c1a564736f6c63430008000033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f9fbe825bfb2bf3e387af0dc18cac8d87f29dea800000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000056bc75e2d63100000
-----Decoded View---------------
Arg [0] : _percentageFee (uint256): 10000
Arg [1] : _tokens (address[]): 0xf9FBE825BFB2bF3E387af0Dc18caC8d87F29DEa8
Arg [2] : _maxFees (uint256[]): 100000000000000000000
-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000002710
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [4] : 000000000000000000000000f9fbe825bfb2bf3e387af0dc18cac8d87f29dea8
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [6] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.