payments: don't redefine compensation rates twice
Change-Id: Ic00abe3795a000d4f0284c99f270180123a2f663
This commit is contained in:
parent
e83e98e46a
commit
3fff61f04a
@ -416,10 +416,6 @@ func (planet *Planet) newSatellite(ctx context.Context, prefix string, index int
|
|||||||
config.Tally.ReadRollupBatchSize = 0
|
config.Tally.ReadRollupBatchSize = 0
|
||||||
config.Rollup.DeleteTallies = false
|
config.Rollup.DeleteTallies = false
|
||||||
config.Payments.BonusRate = 0
|
config.Payments.BonusRate = 0
|
||||||
config.Payments.NodeEgressBandwidthPrice = 0
|
|
||||||
config.Payments.NodeRepairBandwidthPrice = 0
|
|
||||||
config.Payments.NodeAuditBandwidthPrice = 0
|
|
||||||
config.Payments.NodeDiskSpacePrice = 0
|
|
||||||
config.Identity.CertPath = ""
|
config.Identity.CertPath = ""
|
||||||
config.Identity.KeyPath = ""
|
config.Identity.KeyPath = ""
|
||||||
config.Metainfo.DatabaseURL = ""
|
config.Metainfo.DatabaseURL = ""
|
||||||
|
@ -639,6 +639,7 @@ func NewAPI(log *zap.Logger, full *identity.FullIdentity, db DB,
|
|||||||
peer.Reputation.Service,
|
peer.Reputation.Service,
|
||||||
peer.DB.StoragenodeAccounting(),
|
peer.DB.StoragenodeAccounting(),
|
||||||
config.Payments,
|
config.Payments,
|
||||||
|
config.Compensation,
|
||||||
)
|
)
|
||||||
if err := pb.DRPCRegisterNodeStats(peer.Server.DRPC(), peer.NodeStats.Endpoint); err != nil {
|
if err := pb.DRPCRegisterNodeStats(peer.Server.DRPC(), peer.NodeStats.Endpoint); err != nil {
|
||||||
return nil, errs.Combine(err, peer.Close())
|
return nil, errs.Combine(err, peer.Close())
|
||||||
|
@ -11,7 +11,7 @@ import (
|
|||||||
// Config contains configuration for the calculations this package performs.
|
// Config contains configuration for the calculations this package performs.
|
||||||
type Config struct {
|
type Config struct {
|
||||||
Rates struct {
|
Rates struct {
|
||||||
AtRestGBHours Rate `user:"true" help:"rate for data at rest per GB/hour" default:"0.00000205"`
|
AtRestGBHours Rate `user:"true" help:"rate for data at rest per GB/hour" default:"0.00000208"`
|
||||||
GetTB Rate `user:"true" help:"rate for egress bandwidth per TB" default:"20.00"`
|
GetTB Rate `user:"true" help:"rate for egress bandwidth per TB" default:"20.00"`
|
||||||
PutTB Rate `user:"true" help:"rate for ingress bandwidth per TB" default:"0"`
|
PutTB Rate `user:"true" help:"rate for ingress bandwidth per TB" default:"0"`
|
||||||
GetRepairTB Rate `user:"true" help:"rate for repair egress bandwidth per TB" default:"10.00"`
|
GetRepairTB Rate `user:"true" help:"rate for repair egress bandwidth per TB" default:"10.00"`
|
||||||
|
@ -6,6 +6,7 @@ package nodestats
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
|
"github.com/shopspring/decimal"
|
||||||
"github.com/spacemonkeygo/monkit/v3"
|
"github.com/spacemonkeygo/monkit/v3"
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
|
|
||||||
@ -13,6 +14,7 @@ import (
|
|||||||
"storj.io/common/pb"
|
"storj.io/common/pb"
|
||||||
"storj.io/common/rpc/rpcstatus"
|
"storj.io/common/rpc/rpcstatus"
|
||||||
"storj.io/storj/satellite/accounting"
|
"storj.io/storj/satellite/accounting"
|
||||||
|
"storj.io/storj/satellite/compensation"
|
||||||
"storj.io/storj/satellite/overlay"
|
"storj.io/storj/satellite/overlay"
|
||||||
"storj.io/storj/satellite/payments/paymentsconfig"
|
"storj.io/storj/satellite/payments/paymentsconfig"
|
||||||
"storj.io/storj/satellite/reputation"
|
"storj.io/storj/satellite/reputation"
|
||||||
@ -33,16 +35,18 @@ type Endpoint struct {
|
|||||||
reputation *reputation.Service
|
reputation *reputation.Service
|
||||||
accounting accounting.StoragenodeAccounting
|
accounting accounting.StoragenodeAccounting
|
||||||
config paymentsconfig.Config
|
config paymentsconfig.Config
|
||||||
|
compConfig compensation.Config
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewEndpoint creates new endpoint.
|
// NewEndpoint creates new endpoint.
|
||||||
func NewEndpoint(log *zap.Logger, overlay overlay.DB, reputation *reputation.Service, accounting accounting.StoragenodeAccounting, config paymentsconfig.Config) *Endpoint {
|
func NewEndpoint(log *zap.Logger, overlay overlay.DB, reputation *reputation.Service, accounting accounting.StoragenodeAccounting, config paymentsconfig.Config, compConfig compensation.Config) *Endpoint {
|
||||||
return &Endpoint{
|
return &Endpoint{
|
||||||
log: log,
|
log: log,
|
||||||
overlay: overlay,
|
overlay: overlay,
|
||||||
reputation: reputation,
|
reputation: reputation,
|
||||||
accounting: accounting,
|
accounting: accounting,
|
||||||
config: config,
|
config: config,
|
||||||
|
compConfig: compConfig,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -127,15 +131,24 @@ func (e *Endpoint) DailyStorageUsage(ctx context.Context, req *pb.DailyStorageUs
|
|||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var dollarsToCents = decimal.NewFromInt(100)
|
||||||
|
var dollarsPerGBHourTocentsPerTBMonth = decimal.NewFromInt(100 * 1000 * 720)
|
||||||
|
|
||||||
// PricingModel returns pricing model for storagenode.
|
// PricingModel returns pricing model for storagenode.
|
||||||
func (e *Endpoint) PricingModel(ctx context.Context, req *pb.PricingModelRequest) (_ *pb.PricingModelResponse, err error) {
|
func (e *Endpoint) PricingModel(ctx context.Context, req *pb.PricingModelRequest) (_ *pb.PricingModelResponse, err error) {
|
||||||
defer mon.Task()(&ctx)(&err)
|
defer mon.Task()(&ctx)(&err)
|
||||||
|
|
||||||
|
// PricingModelResponse wants cents/TB and cents/TB-mo.
|
||||||
|
// e.compConfig values are in $/TB and $/GB-h.
|
||||||
|
// For converting monthly rates into hourly rates, months have been
|
||||||
|
// standardized as being a 720 hour interval. This pricing model response
|
||||||
|
// is purely for display and is okay to convert backwards.
|
||||||
|
|
||||||
return &pb.PricingModelResponse{
|
return &pb.PricingModelResponse{
|
||||||
EgressBandwidthPrice: e.config.NodeEgressBandwidthPrice,
|
EgressBandwidthPrice: decimal.Decimal(e.compConfig.Rates.GetTB).Mul(dollarsToCents).IntPart(),
|
||||||
RepairBandwidthPrice: e.config.NodeRepairBandwidthPrice,
|
RepairBandwidthPrice: decimal.Decimal(e.compConfig.Rates.GetRepairTB).Mul(dollarsToCents).IntPart(),
|
||||||
DiskSpacePrice: e.config.NodeDiskSpacePrice,
|
AuditBandwidthPrice: decimal.Decimal(e.compConfig.Rates.GetAuditTB).Mul(dollarsToCents).IntPart(),
|
||||||
AuditBandwidthPrice: e.config.NodeAuditBandwidthPrice,
|
DiskSpacePrice: decimal.Decimal(e.compConfig.Rates.AtRestGBHours).Mul(dollarsPerGBHourTocentsPerTBMonth).IntPart(),
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -27,17 +27,13 @@ type Config struct {
|
|||||||
Provider string `help:"payments provider to use" default:""`
|
Provider string `help:"payments provider to use" default:""`
|
||||||
MockProvider stripe.Client `internal:"true"`
|
MockProvider stripe.Client `internal:"true"`
|
||||||
|
|
||||||
BillingConfig billing.Config
|
BillingConfig billing.Config
|
||||||
StripeCoinPayments stripe.Config
|
StripeCoinPayments stripe.Config
|
||||||
Storjscan storjscan.Config
|
Storjscan storjscan.Config
|
||||||
UsagePrice ProjectUsagePrice
|
UsagePrice ProjectUsagePrice
|
||||||
BonusRate int64 `help:"amount of percents that user will earn as bonus credits by depositing in STORJ tokens" default:"10"`
|
BonusRate int64 `help:"amount of percents that user will earn as bonus credits by depositing in STORJ tokens" default:"10"`
|
||||||
NodeEgressBandwidthPrice int64 `help:"price node receive for storing TB of egress in cents" default:"2000"`
|
UsagePriceOverrides ProjectUsagePriceOverrides `help:"semicolon-separated usage price overrides in the format partner:storage,egress,segment,egress_discount_ratio. The egress discount ratio is the ratio of free egress per unit-month of storage"`
|
||||||
NodeRepairBandwidthPrice int64 `help:"price node receive for storing TB of repair in cents" default:"1000"`
|
PackagePlans PackagePlans `help:"semicolon-separated partner package plans in the format partner:price,credit. Price and credit are in cents USD."`
|
||||||
NodeAuditBandwidthPrice int64 `help:"price node receive for storing TB of audit in cents" default:"1000"`
|
|
||||||
NodeDiskSpacePrice int64 `help:"price node receive for storing disk space in cents/TB" default:"150"`
|
|
||||||
UsagePriceOverrides ProjectUsagePriceOverrides `help:"semicolon-separated usage price overrides in the format partner:storage,egress,segment,egress_discount_ratio. The egress discount ratio is the ratio of free egress per unit-month of storage"`
|
|
||||||
PackagePlans PackagePlans `help:"semicolon-separated partner package plans in the format partner:price,credit. Price and credit are in cents USD."`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ProjectUsagePrice holds the configuration for the satellite's project usage price model.
|
// ProjectUsagePrice holds the configuration for the satellite's project usage price model.
|
||||||
|
14
scripts/testdata/satellite-config.yaml.lock
vendored
14
scripts/testdata/satellite-config.yaml.lock
vendored
@ -113,7 +113,7 @@
|
|||||||
compensation.dispose-percent: 50
|
compensation.dispose-percent: 50
|
||||||
|
|
||||||
# rate for data at rest per GB/hour
|
# rate for data at rest per GB/hour
|
||||||
compensation.rates.at-rest-gb-hours: "0.00000205"
|
compensation.rates.at-rest-gb-hours: "0.00000208"
|
||||||
|
|
||||||
# rate for audit egress bandwidth per TB
|
# rate for audit egress bandwidth per TB
|
||||||
compensation.rates.get-audit-tb: "10"
|
compensation.rates.get-audit-tb: "10"
|
||||||
@ -844,18 +844,6 @@ identity.key-path: /root/.local/share/storj/identity/satellite/identity.key
|
|||||||
# amount of percents that user will earn as bonus credits by depositing in STORJ tokens
|
# amount of percents that user will earn as bonus credits by depositing in STORJ tokens
|
||||||
# payments.bonus-rate: 10
|
# payments.bonus-rate: 10
|
||||||
|
|
||||||
# price node receive for storing TB of audit in cents
|
|
||||||
# payments.node-audit-bandwidth-price: 1000
|
|
||||||
|
|
||||||
# price node receive for storing disk space in cents/TB
|
|
||||||
# payments.node-disk-space-price: 150
|
|
||||||
|
|
||||||
# price node receive for storing TB of egress in cents
|
|
||||||
# payments.node-egress-bandwidth-price: 2000
|
|
||||||
|
|
||||||
# price node receive for storing TB of repair in cents
|
|
||||||
# payments.node-repair-bandwidth-price: 1000
|
|
||||||
|
|
||||||
# semicolon-separated partner package plans in the format partner:price,credit. Price and credit are in cents USD.
|
# semicolon-separated partner package plans in the format partner:price,credit. Price and credit are in cents USD.
|
||||||
# payments.package-plans: ""
|
# payments.package-plans: ""
|
||||||
|
|
||||||
|
@ -19,6 +19,7 @@ import (
|
|||||||
"storj.io/common/testcontext"
|
"storj.io/common/testcontext"
|
||||||
"storj.io/storj/private/testplanet"
|
"storj.io/storj/private/testplanet"
|
||||||
"storj.io/storj/satellite"
|
"storj.io/storj/satellite"
|
||||||
|
"storj.io/storj/satellite/compensation"
|
||||||
"storj.io/storj/storagenode/payouts/estimatedpayouts"
|
"storj.io/storj/storagenode/payouts/estimatedpayouts"
|
||||||
"storj.io/storj/storagenode/pricing"
|
"storj.io/storj/storagenode/pricing"
|
||||||
"storj.io/storj/storagenode/reputation"
|
"storj.io/storj/storagenode/reputation"
|
||||||
@ -52,10 +53,10 @@ func TestStorageNodeApi(t *testing.T) {
|
|||||||
StorageNodeCount: 1,
|
StorageNodeCount: 1,
|
||||||
Reconfigure: testplanet.Reconfigure{
|
Reconfigure: testplanet.Reconfigure{
|
||||||
Satellite: func(log *zap.Logger, index int, config *satellite.Config) {
|
Satellite: func(log *zap.Logger, index int, config *satellite.Config) {
|
||||||
config.Payments.NodeEgressBandwidthPrice = 2000
|
config.Compensation.Rates.GetTB = compensation.RequireRateFromString("20")
|
||||||
config.Payments.NodeAuditBandwidthPrice = 1000
|
config.Compensation.Rates.GetAuditTB = compensation.RequireRateFromString("10")
|
||||||
config.Payments.NodeRepairBandwidthPrice = 1000
|
config.Compensation.Rates.GetRepairTB = compensation.RequireRateFromString("10")
|
||||||
config.Payments.NodeDiskSpacePrice = 150
|
config.Compensation.Rates.AtRestGBHours = compensation.RequireRateFromString(".00000208")
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
Loading…
Reference in New Issue
Block a user