Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
FeeHelper
Compiler Version
v0.8.26+commit.8a97fa7a
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity 0.8.26; interface ICrossConfig { function getCrossChainAgentFee( string calldata symbol, uint256 srcChainID, uint256 destChainID ) external view returns (uint256 numerator, uint256 denominator, uint256 fixedFee, uint256 minFeeLimit, uint256 maxFeeLimit); } interface IBridge { struct GetFeesParam { uint256 srcChainID; uint256 destChainID; } struct GetFeesReturn { uint256 contractFee; uint256 agentFee; } function getFee( GetFeesParam calldata param ) external view returns (GetFeesReturn memory fee); function getTokenPairFee(uint256 tokenPairID) external view returns(uint256 contractFee); } interface ITokenManager { function getAncestorInfo(uint id) external view returns (bytes memory account, string memory name, string memory symbol, uint8 decimals, uint chainId); } interface IDecimals { function decimals() external view returns (uint8); } interface IDiscount { function discount(address user) external view returns (uint256 discountE18); } contract FeeHelper { struct ServiceFeeInput { uint256 fromChainId; uint256 toChainId; uint256 tokenPairId; uint256 decimals; uint256 toAmount; bytes toAddress; } address public bridge; address public crossConfig; address public tokenManager; address public discountSC; constructor(address _bridge, address _crossConfig, address _tokenManager, address _discountSC) { bridge = _bridge; crossConfig = _crossConfig; tokenManager = _tokenManager; discountSC = _discountSC; } function getNetworkFee(uint fromChainId, uint toChainId, uint tokenPairId) public view returns (uint256) { IBridge.GetFeesParam memory param = IBridge.GetFeesParam(fromChainId, toChainId); IBridge.GetFeesReturn memory fee = IBridge(bridge).getFee(param); uint tokenPairFee = IBridge(bridge).getTokenPairFee(tokenPairId); return tokenPairFee > 0 ? tokenPairFee : fee.contractFee; } function getServiceFee(ServiceFeeInput memory params) public view returns (uint256 serviceFee) { if (crossConfig == address(0)) { return 0; } (,,string memory symbol,,) = ITokenManager(tokenManager).getAncestorInfo(params.tokenPairId); { (uint256 numerator, uint256 denominator, uint256 fixedFee, uint256 minFeeLimit, uint256 maxFeeLimit) = ICrossConfig(crossConfig).getCrossChainAgentFee(symbol, params.fromChainId, params.toChainId); serviceFee = calculateFee(numerator, denominator, fixedFee, minFeeLimit, maxFeeLimit, params.toAmount, params.decimals); } serviceFee = discount(bytesToAddress(params.toAddress), serviceFee); } function calculateFee( uint256 numerator, uint256 denominator, uint256 fixedFee, uint256 minFeeLimit, uint256 maxFeeLimit, uint256 amount, uint256 decimals ) public pure returns (uint256) { // Convert amount to 1e18 unit uint256 amountIn18 = amount * 1e18 / (10 ** decimals); // Calculate the dynamic fee uint256 dynamicFee = (amountIn18 * numerator) / denominator; uint256 totalFeeIn18 = dynamicFee; if (totalFeeIn18 == 0 && fixedFee > 0) { totalFeeIn18 = fixedFee; } else { // Ensure the total fee is within the limits if (totalFeeIn18 < minFeeLimit) { totalFeeIn18 = minFeeLimit; } else if (totalFeeIn18 > maxFeeLimit) { totalFeeIn18 = maxFeeLimit; } } // Convert total fee back to original decimals uint256 totalFee = totalFeeIn18 * (10 ** decimals) / 1e18; return totalFee; } function discount(address user, uint256 amount) internal view returns (uint256 amountAfterDiscount) { if (discountSC == address(0)) { return amount; } uint _discount = IDiscount(discountSC).discount(user); return amount * _discount / 1 ether; } function bytesToAddress(bytes memory b) public pure returns (address) { require(b.length >= 20, "Invalid address length"); address addr; assembly { addr := mload(add(b, 20)) } return addr; } }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "remappings": [] }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_bridge","type":"address"},{"internalType":"address","name":"_crossConfig","type":"address"},{"internalType":"address","name":"_tokenManager","type":"address"},{"internalType":"address","name":"_discountSC","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"bridge","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"b","type":"bytes"}],"name":"bytesToAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"denominator","type":"uint256"},{"internalType":"uint256","name":"fixedFee","type":"uint256"},{"internalType":"uint256","name":"minFeeLimit","type":"uint256"},{"internalType":"uint256","name":"maxFeeLimit","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"decimals","type":"uint256"}],"name":"calculateFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"crossConfig","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"discountSC","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"fromChainId","type":"uint256"},{"internalType":"uint256","name":"toChainId","type":"uint256"},{"internalType":"uint256","name":"tokenPairId","type":"uint256"}],"name":"getNetworkFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"fromChainId","type":"uint256"},{"internalType":"uint256","name":"toChainId","type":"uint256"},{"internalType":"uint256","name":"tokenPairId","type":"uint256"},{"internalType":"uint256","name":"decimals","type":"uint256"},{"internalType":"uint256","name":"toAmount","type":"uint256"},{"internalType":"bytes","name":"toAddress","type":"bytes"}],"internalType":"struct FeeHelper.ServiceFeeInput","name":"params","type":"tuple"}],"name":"getServiceFee","outputs":[{"internalType":"uint256","name":"serviceFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405234801561000f575f80fd5b50604051610c07380380610c0783398101604081905261002e9161009b565b5f80546001600160a01b039586166001600160a01b03199182161790915560018054948616948216949094179093556002805492851692841692909217909155600380549190931691161790556100ec565b80516001600160a01b0381168114610096575f80fd5b919050565b5f805f80608085870312156100ae575f80fd5b6100b785610080565b93506100c560208601610080565b92506100d360408601610080565b91506100e160608601610080565b905092959194509250565b610b0e806100f95f395ff3fe608060405234801561000f575f80fd5b5060043610610085575f3560e01c8063ab045bab11610058578063ab045bab14610100578063ab49b1c814610113578063d791376c14610126578063e78cea9214610139575f80fd5b80632752f2f7146100895780632a709b14146100af57806342526e4e146100da5780635d95ecaf146100ed575b5f80fd5b61009c610097366004610655565b61014b565b6040519081526020015b60405180910390f35b6002546100c2906001600160a01b031681565b6040516001600160a01b0390911681526020016100a6565b6100c26100e83660046106f3565b6102a5565b61009c6100fb366004610725565b6102fd565b6003546100c2906001600160a01b031681565b61009c61012136600461076c565b6103ad565b6001546100c2906001600160a01b031681565b5f546100c2906001600160a01b031681565b6001545f906001600160a01b031661016457505f919050565b6002546040838101519051639027e6f760e01b815260048101919091525f916001600160a01b031690639027e6f7906024015f60405180830381865afa1580156101b0573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526101d791908101906107fe565b505060015486516020880151604051639a1aca0f60e01b81529396505f95508594508493849384936001600160a01b0390911692639a1aca0f92610221928b9290916004016108bb565b60a060405180830381865afa15801561023c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061026091906108fe565b9450945094509450945061028185858585858d608001518e606001516102fd565b9650505050505061029e6102988460a001516102a5565b836104c0565b9392505050565b5f6014825110156102f55760405162461bcd60e51b8152602060048201526016602482015275092dcecc2d8d2c840c2c8c8e4cae6e640d8cadccee8d60531b604482015260640160405180910390fd5b506014015190565b5f8061030a83600a610a31565b61031c85670de0b6b3a7640000610a3c565b6103269190610a53565b90505f886103348b84610a3c565b61033e9190610a53565b9050808015801561034e57505f89115b1561035a575087610374565b87811015610369575086610374565b868111156103745750855b5f670de0b6b3a764000061038987600a610a31565b6103939084610a3c565b61039d9190610a53565b9c9b505050505050505050505050565b604080518082018252848152602081018481525f80549351630ec61b7960e01b815283516004820152915160248301529283916001600160a01b0390911690630ec61b79906044016040805180830381865afa15801561040f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104339190610a72565b5f805460405163392a62b960e01b81526004810188905292935090916001600160a01b039091169063392a62b990602401602060405180830381865afa15801561047f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104a39190610ac1565b90505f81116104b35781516104b5565b805b979650505050505050565b6003545f906001600160a01b03166104d9575080610568565b60035460405163019c0d1360e71b81526001600160a01b0385811660048301525f92169063ce06898090602401602060405180830381865afa158015610521573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105459190610ac1565b9050670de0b6b3a764000061055a8285610a3c565b6105649190610a53565b9150505b92915050565b634e487b7160e01b5f52604160045260245ffd5b60405160c0810167ffffffffffffffff811182821017156105a5576105a561056e565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156105d4576105d461056e565b604052919050565b5f67ffffffffffffffff8211156105f5576105f561056e565b50601f01601f191660200190565b5f82601f830112610612575f80fd5b8135610625610620826105dc565b6105ab565b818152846020838601011115610639575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60208284031215610665575f80fd5b813567ffffffffffffffff81111561067b575f80fd5b820160c0818503121561068c575f80fd5b610694610582565b813581526020808301359082015260408083013590820152606080830135908201526080808301359082015260a082013567ffffffffffffffff8111156106d9575f80fd5b6106e586828501610603565b60a083015250949350505050565b5f60208284031215610703575f80fd5b813567ffffffffffffffff811115610719575f80fd5b61056484828501610603565b5f805f805f805f60e0888a03121561073b575f80fd5b505085359760208701359750604087013596606081013596506080810135955060a0810135945060c0013592509050565b5f805f6060848603121561077e575f80fd5b505081359360208301359350604090920135919050565b5f6107a2610620846105dc565b90508281528383830111156107b5575f80fd5b8282602083015e5f602084830101529392505050565b5f82601f8301126107da575f80fd5b61029e83835160208501610795565b805160ff811681146107f9575f80fd5b919050565b5f805f805f60a08688031215610812575f80fd5b855167ffffffffffffffff811115610828575f80fd5b8601601f81018813610838575f80fd5b61084788825160208401610795565b955050602086015167ffffffffffffffff811115610863575f80fd5b61086f888289016107cb565b945050604086015167ffffffffffffffff81111561088b575f80fd5b610897888289016107cb565b9350506108a6606087016107e9565b60809690960151949793965091949392915050565b606081525f84518060608401528060208701608085015e5f608082850101526080601f19601f830116840101915050836020830152826040830152949350505050565b5f805f805f60a08688031215610912575f80fd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b634e487b7160e01b5f52601160045260245ffd5b6001815b60018411156109895780850481111561096d5761096d61093a565b600184161561097b57908102905b60019390931c928002610952565b935093915050565b5f8261099f57506001610568565b816109ab57505f610568565b81600181146109c157600281146109cb576109e7565b6001915050610568565b60ff8411156109dc576109dc61093a565b50506001821b610568565b5060208310610133831016604e8410600b8410161715610a0a575081810a610568565b610a165f19848461094e565b805f1904821115610a2957610a2961093a565b029392505050565b5f61029e8383610991565b80820281158282048414176105685761056861093a565b5f82610a6d57634e487b7160e01b5f52601260045260245ffd5b500490565b5f6040828403128015610a83575f80fd5b506040805190810167ffffffffffffffff81118282101715610aa757610aa761056e565b604052825181526020928301519281019290925250919050565b5f60208284031215610ad1575f80fd5b505191905056fea26469706673582212207bf3027db002b305c0d7c9b86dad206cddc60eda41163234b5033882fdc0ed8f64736f6c634300081a0033000000000000000000000000fceaaaeb8d564a9d0e71ef36f027b9d162bc334e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561000f575f80fd5b5060043610610085575f3560e01c8063ab045bab11610058578063ab045bab14610100578063ab49b1c814610113578063d791376c14610126578063e78cea9214610139575f80fd5b80632752f2f7146100895780632a709b14146100af57806342526e4e146100da5780635d95ecaf146100ed575b5f80fd5b61009c610097366004610655565b61014b565b6040519081526020015b60405180910390f35b6002546100c2906001600160a01b031681565b6040516001600160a01b0390911681526020016100a6565b6100c26100e83660046106f3565b6102a5565b61009c6100fb366004610725565b6102fd565b6003546100c2906001600160a01b031681565b61009c61012136600461076c565b6103ad565b6001546100c2906001600160a01b031681565b5f546100c2906001600160a01b031681565b6001545f906001600160a01b031661016457505f919050565b6002546040838101519051639027e6f760e01b815260048101919091525f916001600160a01b031690639027e6f7906024015f60405180830381865afa1580156101b0573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526101d791908101906107fe565b505060015486516020880151604051639a1aca0f60e01b81529396505f95508594508493849384936001600160a01b0390911692639a1aca0f92610221928b9290916004016108bb565b60a060405180830381865afa15801561023c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061026091906108fe565b9450945094509450945061028185858585858d608001518e606001516102fd565b9650505050505061029e6102988460a001516102a5565b836104c0565b9392505050565b5f6014825110156102f55760405162461bcd60e51b8152602060048201526016602482015275092dcecc2d8d2c840c2c8c8e4cae6e640d8cadccee8d60531b604482015260640160405180910390fd5b506014015190565b5f8061030a83600a610a31565b61031c85670de0b6b3a7640000610a3c565b6103269190610a53565b90505f886103348b84610a3c565b61033e9190610a53565b9050808015801561034e57505f89115b1561035a575087610374565b87811015610369575086610374565b868111156103745750855b5f670de0b6b3a764000061038987600a610a31565b6103939084610a3c565b61039d9190610a53565b9c9b505050505050505050505050565b604080518082018252848152602081018481525f80549351630ec61b7960e01b815283516004820152915160248301529283916001600160a01b0390911690630ec61b79906044016040805180830381865afa15801561040f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104339190610a72565b5f805460405163392a62b960e01b81526004810188905292935090916001600160a01b039091169063392a62b990602401602060405180830381865afa15801561047f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104a39190610ac1565b90505f81116104b35781516104b5565b805b979650505050505050565b6003545f906001600160a01b03166104d9575080610568565b60035460405163019c0d1360e71b81526001600160a01b0385811660048301525f92169063ce06898090602401602060405180830381865afa158015610521573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105459190610ac1565b9050670de0b6b3a764000061055a8285610a3c565b6105649190610a53565b9150505b92915050565b634e487b7160e01b5f52604160045260245ffd5b60405160c0810167ffffffffffffffff811182821017156105a5576105a561056e565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156105d4576105d461056e565b604052919050565b5f67ffffffffffffffff8211156105f5576105f561056e565b50601f01601f191660200190565b5f82601f830112610612575f80fd5b8135610625610620826105dc565b6105ab565b818152846020838601011115610639575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60208284031215610665575f80fd5b813567ffffffffffffffff81111561067b575f80fd5b820160c0818503121561068c575f80fd5b610694610582565b813581526020808301359082015260408083013590820152606080830135908201526080808301359082015260a082013567ffffffffffffffff8111156106d9575f80fd5b6106e586828501610603565b60a083015250949350505050565b5f60208284031215610703575f80fd5b813567ffffffffffffffff811115610719575f80fd5b61056484828501610603565b5f805f805f805f60e0888a03121561073b575f80fd5b505085359760208701359750604087013596606081013596506080810135955060a0810135945060c0013592509050565b5f805f6060848603121561077e575f80fd5b505081359360208301359350604090920135919050565b5f6107a2610620846105dc565b90508281528383830111156107b5575f80fd5b8282602083015e5f602084830101529392505050565b5f82601f8301126107da575f80fd5b61029e83835160208501610795565b805160ff811681146107f9575f80fd5b919050565b5f805f805f60a08688031215610812575f80fd5b855167ffffffffffffffff811115610828575f80fd5b8601601f81018813610838575f80fd5b61084788825160208401610795565b955050602086015167ffffffffffffffff811115610863575f80fd5b61086f888289016107cb565b945050604086015167ffffffffffffffff81111561088b575f80fd5b610897888289016107cb565b9350506108a6606087016107e9565b60809690960151949793965091949392915050565b606081525f84518060608401528060208701608085015e5f608082850101526080601f19601f830116840101915050836020830152826040830152949350505050565b5f805f805f60a08688031215610912575f80fd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b634e487b7160e01b5f52601160045260245ffd5b6001815b60018411156109895780850481111561096d5761096d61093a565b600184161561097b57908102905b60019390931c928002610952565b935093915050565b5f8261099f57506001610568565b816109ab57505f610568565b81600181146109c157600281146109cb576109e7565b6001915050610568565b60ff8411156109dc576109dc61093a565b50506001821b610568565b5060208310610133831016604e8410600b8410161715610a0a575081810a610568565b610a165f19848461094e565b805f1904821115610a2957610a2961093a565b029392505050565b5f61029e8383610991565b80820281158282048414176105685761056861093a565b5f82610a6d57634e487b7160e01b5f52601260045260245ffd5b500490565b5f6040828403128015610a83575f80fd5b506040805190810167ffffffffffffffff81118282101715610aa757610aa761056e565b604052825181526020928301519281019290925250919050565b5f60208284031215610ad1575f80fd5b505191905056fea26469706673582212207bf3027db002b305c0d7c9b86dad206cddc60eda41163234b5033882fdc0ed8f64736f6c634300081a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000fceaaaeb8d564a9d0e71ef36f027b9d162bc334e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _bridge (address): 0xfCeAAaEB8D564a9D0e71Ef36f027b9D162bC334e
Arg [1] : _crossConfig (address): 0x0000000000000000000000000000000000000000
Arg [2] : _tokenManager (address): 0x0000000000000000000000000000000000000000
Arg [3] : _discountSC (address): 0x0000000000000000000000000000000000000000
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000fceaaaeb8d564a9d0e71ef36f027b9d162bc334e
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
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.