private CalculateFeeCoefficientsOfType GetTxFeeInitialCoefficient() { var totalParameter = new CalculateFeeCoefficientsOfType(); var txFeeParameter1 = new CalculateFeeCoefficient { FeeType = FeeTypeEnum.Tx, FunctionType = CalculateFunctionTypeEnum.Liner, PieceKey = 1000000, CoefficientDic = { { "numerator", 1 }, { "denominator", 800 }, { "constantValue".ToLower(), 10000 } } }; var txFeeParameter2 = new CalculateFeeCoefficient { FeeType = FeeTypeEnum.Tx, FunctionType = CalculateFunctionTypeEnum.Power, PieceKey = int.MaxValue, CoefficientDic = { { "numerator", 1 }, { "denominator", 800 }, { "power", 2 }, { "changeSpanBase".ToLower(), 100 }, { "weight", 1 }, { "weightBase".ToLower(), 1 } } }; totalParameter.Coefficients.Add(txFeeParameter1); totalParameter.Coefficients.Add(txFeeParameter2); return(totalParameter); }
private bool UpdatePowerAlgorithm(CoefficientFromSender sender, CalculateFeeCoefficient dbData) { var coefficient = sender.PowerCoefficient; if (coefficient.Denominator <= 0) { return(false); } if (coefficient.Numerator < 0) { return(false); } if (coefficient.Weight <= 0) { return(false); } if (coefficient.WeightBase <= 0) { return(false); } if (coefficient.ChangeSpanBase <= 0) { return(false); } dbData.CoefficientDic[nameof(coefficient.Denominator).ToLower()] = coefficient.Denominator; dbData.CoefficientDic[nameof(coefficient.Numerator).ToLower()] = coefficient.Numerator; dbData.CoefficientDic[nameof(coefficient.Weight).ToLower()] = coefficient.Weight; dbData.CoefficientDic[nameof(coefficient.WeightBase).ToLower()] = coefficient.WeightBase; dbData.CoefficientDic[nameof(coefficient.ChangeSpanBase).ToLower()] = coefficient.ChangeSpanBase; return(true); }
public async Task Net_Token_Fee_Calculate_After_Update_Piecewise_Function_Test() { await InitializeCoefficientAsync(); var calculateNetCostStrategy = Application.ServiceProvider.GetRequiredService <ICalculateTrafficCostStrategy>(); var ps = await GetCoefficientByType(FeeTypeEnum.Traffic); var apiParam = new CalculateFeeCoefficient { FeeType = FeeTypeEnum.Traffic, FunctionType = CalculateFunctionTypeEnum.Liner, PieceKey = 1000000, CoefficientDic = { { "numerator", 1 }, { "denominator", 400 } } }; var blockIndex = new BlockIndex(); IChainContext chainContext = new ChainContext { BlockHash = blockIndex.BlockHash, BlockHeight = blockIndex.BlockHeight }; var theOne = ps.Coefficients.SingleOrDefault(x => x.PieceKey == 1000000); ps.Coefficients.Remove(theOne); ps.Coefficients.Add(apiParam); await HandleTestAsync(ps, blockIndex); var size = 10000; var updatedFee = await calculateNetCostStrategy.GetCostAsync(chainContext, size); updatedFee.ShouldBe(25_0000_0000); }
private bool ChangeFeePieceKey(CoefficientFromSender coefficient, CalculateFeeCoefficient dbData) { var newPieceKey = coefficient.NewPieceKeyCoefficient.NewPieceKey; if (newPieceKey == coefficient.PieceKey || newPieceKey <= 0) { return(false); } dbData.PieceKey = newPieceKey; return(true); }
private bool IsModifiedDbData(CoefficientFromSender coefficientInput, CalculateFeeCoefficient funcCoefficient) { bool isChanged; if (coefficientInput.IsChangePieceKey) { isChanged = ChangeFeePieceKey(coefficientInput, funcCoefficient); } else if (coefficientInput.IsLiner) { isChanged = UpdateLinerAlgorithm(coefficientInput, funcCoefficient); } else { isChanged = UpdatePowerAlgorithm(coefficientInput, funcCoefficient); } return(isChanged); }
private bool UpdateLinerAlgorithm(CoefficientFromSender sender, CalculateFeeCoefficient dbData) { var coefficient = sender.LinerCoefficient; if (coefficient.Denominator <= 0) { return(false); } if (coefficient.Numerator < 0) { return(false); } if (coefficient.ConstantValue < 0) { return(false); } dbData.CoefficientDic[nameof(coefficient.Denominator).ToLower()] = coefficient.Denominator; dbData.CoefficientDic[nameof(coefficient.Numerator).ToLower()] = coefficient.Numerator; dbData.CoefficientDic[nameof(coefficient.ConstantValue).ToLower()] = coefficient.ConstantValue; return(true); }