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  }