github.com/Gessiux/neatchain@v1.3.1/chain/consensus/neatcon/epoch/scheme.go (about) 1 package epoch 2 3 import ( 4 "fmt" 5 "math/big" 6 "sync" 7 8 dbm "github.com/Gessiux/go-db" 9 "github.com/Gessiux/go-wire" 10 tmTypes "github.com/Gessiux/neatchain/chain/consensus/neatcon/types" 11 "github.com/Gessiux/neatchain/chain/log" 12 ) 13 14 const rewardSchemeKey = "REWARDSCHEME" 15 16 type RewardScheme struct { 17 mtx sync.Mutex 18 db dbm.DB 19 20 TotalReward *big.Int 21 RewardFirstYear *big.Int 22 EpochNumberPerYear uint64 23 TotalYear uint64 24 } 25 26 // Load Reward Scheme 27 func LoadRewardScheme(db dbm.DB) *RewardScheme { 28 buf := db.Get([]byte(rewardSchemeKey)) 29 if len(buf) == 0 { 30 return nil 31 } else { 32 rs := &RewardScheme{} 33 err := wire.ReadBinaryBytes(buf, rs) 34 if err != nil { 35 log.Errorf("LoadRewardScheme Failed, error: %v", err) 36 return nil 37 } 38 return rs 39 } 40 } 41 42 // Convert Reward Scheme from json to struct 43 func MakeRewardScheme(db dbm.DB, rsDoc *tmTypes.RewardSchemeDoc) *RewardScheme { 44 45 rs := &RewardScheme{ 46 db: db, 47 TotalReward: rsDoc.TotalReward, 48 RewardFirstYear: rsDoc.RewardFirstYear, 49 EpochNumberPerYear: rsDoc.EpochNumberPerYear, 50 TotalYear: rsDoc.TotalYear, 51 } 52 53 return rs 54 } 55 56 // Save the Reward Scheme to DB 57 func (rs *RewardScheme) Save() { 58 rs.mtx.Lock() 59 defer rs.mtx.Unlock() 60 rs.db.SetSync([]byte(rewardSchemeKey), wire.BinaryBytes(*rs)) 61 } 62 63 func (rs *RewardScheme) String() string { 64 65 return fmt.Sprintf("RewardScheme : {"+ 66 "totalReward : %v,\n"+ 67 "rewardFirstYear : %v,\n"+ 68 "epochNumberPerYear : %v,\n"+ 69 "}", 70 rs.TotalReward, 71 rs.RewardFirstYear, 72 rs.EpochNumberPerYear) 73 }