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