From b7306c639e05eefa3d5822abbd3297672d2cf14e Mon Sep 17 00:00:00 2001 From: Tuna Date: Sat, 5 Jan 2019 16:43:46 +0700 Subject: [PATCH] add GetVoterCap func --- contracts/utils.go | 7 +------ contracts/validatorReader.go | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/contracts/utils.go b/contracts/utils.go index ad7feaeff8..e04418df5e 100644 --- a/contracts/utils.go +++ b/contracts/utils.go @@ -385,12 +385,7 @@ func GetRewardBalancesRate(foundationWalletAddr common.Address, state *state.Sta // Get voters capacities. voterCaps := make(map[common.Address]*big.Int) for _, voteAddr := range voters { - voterCap, err := GetVoterCap(state, masterAddr, voteAddr) - if err != nil { - log.Error("Fail to get vote capacity", "error", err) - return nil, err - } - + voterCap := GetVoterCap(state, masterAddr, voteAddr) totalCap.Add(totalCap, voterCap) voterCaps[voteAddr] = voterCap } diff --git a/contracts/validatorReader.go b/contracts/validatorReader.go index b8b1ea2a84..7318487f6c 100644 --- a/contracts/validatorReader.go +++ b/contracts/validatorReader.go @@ -106,3 +106,17 @@ func GetVoters(statedb *state.StateDB, candidate common.Address) []common.Addres fmt.Printf("Execution time: %s\n", elapsed) return rets } + +func GetVoterCap(state *state.StateDB, candidate, voter common.Address) *big.Int { + //validatorsState[_candidate].voters[_voter] + start := time.Now() + fmt.Printf("--------GetVoterCap---------\n") + slot := slotValidatorMapping["validatorsState"] + locValidatorsState := getLocMappingAtKey(candidate.Hash(), slot) + locCandidateVoters := locValidatorsState.Add(locValidatorsState, new(big.Int).SetUint64(uint64(3))) + locVoters := getLocMappingAtKey(voter.Hash(), locCandidateVoters.Uint64()) + ret := state.GetState(common.HexToAddress(common.MasternodeVotingSMC), common.BigToHash(locVoters)) + elapsed := time.Since(start) + fmt.Printf("Execution time: %s\n", elapsed) + return ret.Big() +}