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 }