github.com/sixexorg/magnetic-ring@v0.0.0-20191119090307-31705a21e419/store/mainchain/account_level/account_level.go (about)

     1  package account_level
     2  
     3  import (
     4  	//"encoding/gob"
     5  	"math/big"
     6  )
     7  
     8  const (
     9  	lv0 EasyLevel = iota
    10  	lv1
    11  	lv2
    12  	lv3
    13  	lv4
    14  	lv5
    15  	lv6
    16  	lv7
    17  	lv8
    18  	lv9
    19  )
    20  
    21  func init() {
    22  	//gob.Register(lv0)
    23  }
    24  
    25  var (
    26  	lv1_b = big.NewInt(1e8)
    27  	lv2_b = big.NewInt(1e11)
    28  	lv3_b = big.NewInt(2e11)
    29  	lv4_b = big.NewInt(4e11)
    30  	lv5_b = big.NewInt(8e11)
    31  	lv6_b = big.NewInt(16e11)
    32  	lv7_b = big.NewInt(32e11)
    33  	lv8_b = big.NewInt(64e11)
    34  	lv9_b = big.NewInt(128e11)
    35  
    36  	lvPrec = new(big.Rat).SetInt(lv1_b)
    37  )
    38  
    39  //uint8 [0,255]
    40  //hundreds: 0->next cycle ,1->the cycel after next
    41  //tens:next level
    42  //ones:the level match the balance, ones == 0 case tens is the real level
    43  type AccountLevel uint8
    44  type EasyLevel uint8
    45  
    46  func newAccountLevel(immediately bool, next, tagert EasyLevel) AccountLevel {
    47  	if next > 9 || tagert > 9 {
    48  		return 0
    49  	}
    50  	hundred := EasyLevel(1)
    51  	if immediately {
    52  		hundred = 0
    53  	}
    54  	lv := AccountLevel(hundred*100 + next*10 + tagert)
    55  	return lv
    56  }
    57  func (al AccountLevel) Decode() (immediately bool, left, tagert, curLv EasyLevel) {
    58  	immediately = al/100 == 0
    59  	left = EasyLevel(al % 100 / 10)
    60  	tagert = EasyLevel(al % 10)
    61  	curLv = left
    62  	if tagert > 0 {
    63  		curLv--
    64  	}
    65  	return
    66  }
    67  
    68  type LvlItem struct {
    69  	Lvl uint8
    70  	Min *big.Int
    71  }
    72  
    73  func rankLevel(crystal *big.Int) (level EasyLevel) {
    74  	if crystal.Cmp(lv1_b) == -1 {
    75  		return 0
    76  	} else if crystal.Cmp(lv2_b) == -1 {
    77  		return 1
    78  	} else if crystal.Cmp(lv3_b) == -1 {
    79  		return 2
    80  	} else if crystal.Cmp(lv4_b) == -1 {
    81  		return 3
    82  	} else if crystal.Cmp(lv5_b) == -1 {
    83  		return 4
    84  	} else if crystal.Cmp(lv6_b) == -1 {
    85  		return 5
    86  	} else if crystal.Cmp(lv7_b) == -1 {
    87  		return 6
    88  	} else if crystal.Cmp(lv8_b) == -1 {
    89  		return 7
    90  	} else if crystal.Cmp(lv9_b) == -1 {
    91  		return 8
    92  	}
    93  	return 9
    94  }
    95  
    96  type LvlAmount struct {
    97  	Lv     AccountLevel
    98  	Amount *big.Int
    99  }