X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=application%2Fmov%2Fmatch%2Ffee_strategy.go;fp=application%2Fmov%2Fmatch%2Fmatch_fee.go;h=f3d1dfc3d2165e6ae13845a857df078360e0355c;hb=56da0d14082ccc28c88ad96e46a641e2727ded2a;hp=62e22117ba1f48ee5738ed2b8e3675cdcad3bce6;hpb=a1d6cf12d000c83ba1ad83ce94e3ee1460789bad;p=bytom%2Fvapor.git diff --git a/application/mov/match/match_fee.go b/application/mov/match/fee_strategy.go similarity index 83% rename from application/mov/match/match_fee.go rename to application/mov/match/fee_strategy.go index 62e22117..f3d1dfc3 100644 --- a/application/mov/match/match_fee.go +++ b/application/mov/match/fee_strategy.go @@ -35,13 +35,11 @@ type FeeStrategy interface { } // DefaultFeeStrategy represent the default fee charge strategy -type DefaultFeeStrategy struct { - maxFeeRate float64 -} +type DefaultFeeStrategy struct {} // NewDefaultFeeStrategy return a new instance of DefaultFeeStrategy -func NewDefaultFeeStrategy(maxFeeRate float64) *DefaultFeeStrategy { - return &DefaultFeeStrategy{maxFeeRate: maxFeeRate} +func NewDefaultFeeStrategy() *DefaultFeeStrategy { + return &DefaultFeeStrategy{} } // Allocate will allocate the price differential in matching transaction to the participants and the fee @@ -57,20 +55,18 @@ func (d *DefaultFeeStrategy) Allocate(receiveAmounts, priceDiffs []*bc.AssetAmou for i, receiveAmount := range receiveAmounts { amount := receiveAmount.Amount - minFeeAmount := calcMinFeeAmount(amount) + minFeeAmount := d.calcMinFeeAmount(amount) receives[i] = &bc.AssetAmount{AssetId: receiveAmount.AssetId, Amount: amount - minFeeAmount} feeMap[*receiveAmount.AssetId] += minFeeAmount - maxFeeAmount := calcMaxFeeAmount(amount, d.maxFeeRate) + maxFeeAmount := d.calcMaxFeeAmount(amount) feeAmount, reminder := feeMap[*receiveAmount.AssetId], uint64(0) if feeAmount > maxFeeAmount { reminder = feeAmount - maxFeeAmount feeAmount = maxFeeAmount } - if feeAmount > 0 { - fees = append(fees, &bc.AssetAmount{AssetId: receiveAmount.AssetId, Amount: feeAmount}) - } + fees = append(fees, &bc.AssetAmount{AssetId: receiveAmount.AssetId, Amount: feeAmount}) // There is the remaining amount after paying the handling fee, assign it evenly to participants in the transaction averageAmount := reminder / uint64(len(receiveAmounts)) @@ -94,8 +90,8 @@ func (d *DefaultFeeStrategy) Allocate(receiveAmounts, priceDiffs []*bc.AssetAmou func (d *DefaultFeeStrategy) Validate(receiveAmounts []*bc.AssetAmount, feeAmounts map[bc.AssetID]uint64) error { for _, receiveAmount := range receiveAmounts { feeAmount := feeAmounts[*receiveAmount.AssetId] - maxFeeAmount := calcMaxFeeAmount(receiveAmount.Amount, d.maxFeeRate) - minFeeAmount := calcMinFeeAmount(receiveAmount.Amount) + maxFeeAmount := d.calcMaxFeeAmount(receiveAmount.Amount) + minFeeAmount := d.calcMinFeeAmount(receiveAmount.Amount) if feeAmount < minFeeAmount || feeAmount > maxFeeAmount { return ErrAmountOfFeeOutOfRange } @@ -103,10 +99,10 @@ func (d *DefaultFeeStrategy) Validate(receiveAmounts []*bc.AssetAmount, feeAmoun return nil } -func calcMinFeeAmount(amount uint64) uint64 { +func (d *DefaultFeeStrategy) calcMinFeeAmount(amount uint64) uint64 { return uint64(math.Ceil(float64(amount) / 1000)) } -func calcMaxFeeAmount(amount uint64, maxFeeRate float64) uint64 { - return uint64(math.Ceil(float64(amount) * maxFeeRate)) +func (d *DefaultFeeStrategy) calcMaxFeeAmount(amount uint64) uint64 { + return uint64(math.Ceil(float64(amount) * 0.05)) }