Consider Impeach Status in Rpt
current rpt calculation method.
type RptService interface {
CalcRptInfoList (addresses []common.Address , number uint64 ) RptList
}
func (rs * RptServiceImpl ) CalcRptInfoList (addresses []common.Address , number uint64 ) RptList {
rpts := RptList {}
for _ , address := range addresses {
rpts = append (rpts , rs .CalcRptInfo (address , addresses , number ))
}
return rpts
}
func (rs * RptServiceImpl ) CalcRptInfo (address common.Address , addresses []common.Address , number uint64 ) Rpt {
return rs .rptCollector .RptOf (address , addresses , number )
}
type RptCollector interface {
RptOf (addr common.Address , addrs []common.Address , num uint64 ) Rpt
}
func (rc * RptCollectorImpl ) RptOf (addr common.Address , addrs []common.Address , num uint64 ) Rpt {
rpt = alpha * rc .BalanceValueOf (addr , addrs , num , windowSize ) +
beta * rc .TxsValueOf (addr , addrs , num , windowSize ) +
gamma * rc .MaintenanceValueOf (addr , addrs , num , windowSize ) +
psi * rc .UploadValueOf (addr , addrs , num , windowSize ) +
omega * rc .ProxyValueOf (addr , addrs , num , windowSize )
return Rpt {Address : addr , Rpt : rpt }
}
consider impeach status, subtract some value according to impeach status.
func (rc * RptCollectorImpl2 ) RptOf (addr common.Address , addrs []common.Address , num uint64 ) Rpt {
rpt = alpha * rc .BalanceValueOf (addr , addrs , num , windowSize ) +
beta * rc .TxsValueOf (addr , addrs , num , windowSize ) +
gamma * rc .MaintenanceValueOf (addr , addrs , num , windowSize ) +
psi * rc .UploadValueOf (addr , addrs , num , windowSize ) +
omega * rc .ProxyValueOf (addr , addrs , num , windowSize ) -
... // impeach status here
return Rpt {Address : addr , Rpt : rpt }
}