function _calcSrcFees(
string memory _appID,
uint256 _toChainID,
uint256 _dataLength
) internal view returns (uint256) {
SrcFeeConfig memory customFees = srcCustomFees[_appID][_toChainID];
uint256 customBaseFees = customFees.baseFees;
uint256 customFeesPerBytes = customFees.feesPerByte;
if (isUseCustomSrcFees(_appID, _toChainID)) {
return customBaseFees + _dataLength * customFeesPerBytes;
}
SrcFeeConfig memory defaultFees = srcDefaultFees[_toChainID];
uint256 defaultBaseFees = defaultFees.baseFees;
uint256 defaultFeesPerBytes = defaultFees.feesPerByte;
uint256 baseFees = (customBaseFees > defaultBaseFees) ? customBaseFees : defaultBaseFees;
uint256 feesPerByte = (customFeesPerBytes > defaultFeesPerBytes) ? customFeesPerBytes : defaultFeesPerBytes;
return baseFees + _dataLength * feesPerByte;
}
}