Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
P
plugin
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
JIRA
JIRA
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
link33
plugin
Commits
9fe46fb1
Commit
9fe46fb1
authored
Nov 29, 2018
by
张振华
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
guess
parent
e22ff037
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
532 additions
and
554 deletions
+532
-554
game.go
plugin/dapp/guess/commands/game.go
+4
-4
exec_local.go
plugin/dapp/guess/executor/exec_local.go
+1
-1
guess.go
plugin/dapp/guess/executor/guess.go
+14
-18
guessdb.go
plugin/dapp/guess/executor/guessdb.go
+69
-114
poker.go
plugin/dapp/guess/executor/poker.go
+0
-234
query.go
plugin/dapp/guess/executor/query.go
+6
-6
guess.proto
plugin/dapp/guess/proto/guess.proto
+47
-22
jrpc.go
plugin/dapp/guess/rpc/jrpc.go
+2
-2
rpc.go
plugin/dapp/guess/rpc/rpc.go
+6
-13
const.go
plugin/dapp/guess/types/const.go
+10
-6
guess.pb.go
plugin/dapp/guess/types/guess.pb.go
+372
-134
types.go
plugin/dapp/guess/types/types.go
+1
-0
No files found.
plugin/dapp/guess/commands/game.go
View file @
9fe46fb1
...
@@ -242,8 +242,8 @@ func guessQuery(cmd *cobra.Command, args []string) {
...
@@ -242,8 +242,8 @@ func guessQuery(cmd *cobra.Command, args []string) {
gameIDs
,
_
:=
cmd
.
Flags
()
.
GetString
(
"gameIDs"
)
gameIDs
,
_
:=
cmd
.
Flags
()
.
GetString
(
"gameIDs"
)
var
params
types
.
Query4Cli
var
params
types
.
Query4Cli
params
.
Execer
=
pkt
.
PokerBull
X
params
.
Execer
=
pkt
.
Guess
X
req
:=
&
pkt
.
Query
PB
GameInfo
{
req
:=
&
pkt
.
Query
Guess
GameInfo
{
GameId
:
gameID
,
GameId
:
gameID
,
Addr
:
address
,
Addr
:
address
,
Status
:
int32
(
status
),
Status
:
int32
(
status
),
...
@@ -252,7 +252,7 @@ func guessQuery(cmd *cobra.Command, args []string) {
...
@@ -252,7 +252,7 @@ func guessQuery(cmd *cobra.Command, args []string) {
params
.
Payload
=
req
params
.
Payload
=
req
if
gameID
!=
""
{
if
gameID
!=
""
{
params
.
FuncName
=
pkt
.
FuncName_QueryGameById
params
.
FuncName
=
pkt
.
FuncName_QueryGameById
var
res
pkt
.
Reply
PBGame
var
res
pkt
.
Reply
GuessGameInfo
ctx
:=
jsonrpc
.
NewRpcCtx
(
rpcLaddr
,
"Chain33.Query"
,
params
,
&
res
)
ctx
:=
jsonrpc
.
NewRpcCtx
(
rpcLaddr
,
"Chain33.Query"
,
params
,
&
res
)
ctx
.
Run
()
ctx
.
Run
()
}
else
if
address
!=
""
{
}
else
if
address
!=
""
{
...
@@ -272,7 +272,7 @@ func guessQuery(cmd *cobra.Command, args []string) {
...
@@ -272,7 +272,7 @@ func guessQuery(cmd *cobra.Command, args []string) {
gameIDsS
=
append
(
gameIDsS
,
gameIDs
)
gameIDsS
=
append
(
gameIDsS
,
gameIDs
)
req
:=
&
pkt
.
QueryPBGameInfos
{
gameIDsS
}
req
:=
&
pkt
.
QueryPBGameInfos
{
gameIDsS
}
params
.
Payload
=
req
params
.
Payload
=
req
var
res
pkt
.
Reply
PBGameList
var
res
pkt
.
Reply
GuessGameInfos
ctx
:=
jsonrpc
.
NewRpcCtx
(
rpcLaddr
,
"Chain33.Query"
,
params
,
&
res
)
ctx
:=
jsonrpc
.
NewRpcCtx
(
rpcLaddr
,
"Chain33.Query"
,
params
,
&
res
)
ctx
.
Run
()
ctx
.
Run
()
}
else
{
}
else
{
...
...
plugin/dapp/guess/executor/exec_local.go
View file @
9fe46fb1
...
@@ -41,7 +41,7 @@ func (c *PokerBull) updateIndex(log *pkt.ReceiptPBGame) (kvs []*types.KeyValue)
...
@@ -41,7 +41,7 @@ func (c *PokerBull) updateIndex(log *pkt.ReceiptPBGame) (kvs []*types.KeyValue)
if
!
log
.
IsWaiting
{
if
!
log
.
IsWaiting
{
for
_
,
v
:=
range
log
.
Players
{
for
_
,
v
:=
range
log
.
Players
{
if
v
!=
log
.
Addr
{
if
v
!=
log
.
Addr
{
kvs
=
append
(
kvs
,
add
PB
GameAddrIndexKey
(
log
.
Status
,
v
,
log
.
GameId
,
log
.
Index
))
kvs
=
append
(
kvs
,
add
Guess
GameAddrIndexKey
(
log
.
Status
,
v
,
log
.
GameId
,
log
.
Index
))
}
}
kvs
=
append
(
kvs
,
delPBGameAddrIndexKey
(
v
,
log
.
PrevIndex
))
kvs
=
append
(
kvs
,
delPBGameAddrIndexKey
(
v
,
log
.
PrevIndex
))
}
}
...
...
plugin/dapp/guess/executor/guess.go
View file @
9fe46fb1
...
@@ -65,25 +65,21 @@ func calcGuessGameStatusKey(status int32, index int64) []byte {
...
@@ -65,25 +65,21 @@ func calcGuessGameStatusKey(status int32, index int64) []byte {
return
[]
byte
(
key
)
return
[]
byte
(
key
)
}
}
func
calc
PBGameStatusAndPlayerKey
(
status
,
player
int32
,
value
,
index
int64
)
[]
byte
{
func
calc
GuessGameStatusAndPlayerKey
(
category
string
,
status
,
index
int64
)
[]
byte
{
key
:=
fmt
.
Sprintf
(
"LODB-guess-
status:%d:%d:%d:%018d"
,
status
,
player
,
value
,
index
)
key
:=
fmt
.
Sprintf
(
"LODB-guess-
category-status:%s:%d:%018d"
,
category
,
status
,
index
)
return
[]
byte
(
key
)
return
[]
byte
(
key
)
}
}
func
calc
PBGameStatusAndPlayerPrefix
(
status
,
player
int32
,
value
int64
)
[]
byte
{
func
calc
GuessGameStatusAndPlayerPrefix
(
category
string
,
status
int32
)
[]
byte
{
var
key
string
var
key
string
if
value
==
0
{
key
=
fmt
.
Sprintf
(
"LODB-guess-category-status:%s:%d"
,
category
,
status
)
key
=
fmt
.
Sprintf
(
"LODB-guess-status:%d:%d:"
,
status
,
player
)
}
else
{
key
=
fmt
.
Sprintf
(
"LODB-guess-status:%d:%d:%d"
,
status
,
player
,
value
)
}
return
[]
byte
(
key
)
return
[]
byte
(
key
)
}
}
func
add
PB
GameStatusIndexKey
(
status
int32
,
gameID
string
,
index
int64
)
*
types
.
KeyValue
{
func
add
Guess
GameStatusIndexKey
(
status
int32
,
gameID
string
,
index
int64
)
*
types
.
KeyValue
{
kv
:=
&
types
.
KeyValue
{}
kv
:=
&
types
.
KeyValue
{}
kv
.
Key
=
calc
PB
GameStatusKey
(
status
,
index
)
kv
.
Key
=
calc
Guess
GameStatusKey
(
status
,
index
)
record
:=
&
pkt
.
PBGameIndexRecord
{
record
:=
&
pkt
.
PBGameIndexRecord
{
GameId
:
gameID
,
GameId
:
gameID
,
Index
:
index
,
Index
:
index
,
...
@@ -92,16 +88,16 @@ func addPBGameStatusIndexKey(status int32, gameID string, index int64) *types.Ke
...
@@ -92,16 +88,16 @@ func addPBGameStatusIndexKey(status int32, gameID string, index int64) *types.Ke
return
kv
return
kv
}
}
func
del
PB
GameStatusIndexKey
(
status
int32
,
index
int64
)
*
types
.
KeyValue
{
func
del
Guess
GameStatusIndexKey
(
status
int32
,
index
int64
)
*
types
.
KeyValue
{
kv
:=
&
types
.
KeyValue
{}
kv
:=
&
types
.
KeyValue
{}
kv
.
Key
=
calc
PB
GameStatusKey
(
status
,
index
)
kv
.
Key
=
calc
Guess
GameStatusKey
(
status
,
index
)
kv
.
Value
=
nil
kv
.
Value
=
nil
return
kv
return
kv
}
}
func
add
PB
GameAddrIndexKey
(
status
int32
,
addr
,
gameID
string
,
index
int64
)
*
types
.
KeyValue
{
func
add
Guess
GameAddrIndexKey
(
status
int32
,
addr
,
gameID
string
,
index
int64
)
*
types
.
KeyValue
{
kv
:=
&
types
.
KeyValue
{}
kv
:=
&
types
.
KeyValue
{}
kv
.
Key
=
calc
PB
GameAddrKey
(
addr
,
index
)
kv
.
Key
=
calc
Guess
GameAddrKey
(
addr
,
index
)
record
:=
&
pkt
.
PBGameRecord
{
record
:=
&
pkt
.
PBGameRecord
{
GameId
:
gameID
,
GameId
:
gameID
,
Status
:
status
,
Status
:
status
,
...
@@ -111,16 +107,16 @@ func addPBGameAddrIndexKey(status int32, addr, gameID string, index int64) *type
...
@@ -111,16 +107,16 @@ func addPBGameAddrIndexKey(status int32, addr, gameID string, index int64) *type
return
kv
return
kv
}
}
func
del
PB
GameAddrIndexKey
(
addr
string
,
index
int64
)
*
types
.
KeyValue
{
func
del
Guess
GameAddrIndexKey
(
addr
string
,
index
int64
)
*
types
.
KeyValue
{
kv
:=
&
types
.
KeyValue
{}
kv
:=
&
types
.
KeyValue
{}
kv
.
Key
=
calc
PB
GameAddrKey
(
addr
,
index
)
kv
.
Key
=
calc
Guess
GameAddrKey
(
addr
,
index
)
kv
.
Value
=
nil
kv
.
Value
=
nil
return
kv
return
kv
}
}
func
addPBGameStatusAndPlayer
(
status
int32
,
player
int32
,
value
,
index
int64
,
gameId
string
)
*
types
.
KeyValue
{
func
addPBGameStatusAndPlayer
(
status
int32
,
player
int32
,
value
,
index
int64
,
gameId
string
)
*
types
.
KeyValue
{
kv
:=
&
types
.
KeyValue
{}
kv
:=
&
types
.
KeyValue
{}
kv
.
Key
=
calc
PB
GameStatusAndPlayerKey
(
status
,
player
,
value
,
index
)
kv
.
Key
=
calc
Guess
GameStatusAndPlayerKey
(
status
,
player
,
value
,
index
)
record
:=
&
pkt
.
PBGameIndexRecord
{
record
:=
&
pkt
.
PBGameIndexRecord
{
GameId
:
gameId
,
GameId
:
gameId
,
Index
:
index
,
Index
:
index
,
...
@@ -131,7 +127,7 @@ func addPBGameStatusAndPlayer(status int32, player int32, value, index int64, ga
...
@@ -131,7 +127,7 @@ func addPBGameStatusAndPlayer(status int32, player int32, value, index int64, ga
func
delPBGameStatusAndPlayer
(
status
int32
,
player
int32
,
value
,
index
int64
)
*
types
.
KeyValue
{
func
delPBGameStatusAndPlayer
(
status
int32
,
player
int32
,
value
,
index
int64
)
*
types
.
KeyValue
{
kv
:=
&
types
.
KeyValue
{}
kv
:=
&
types
.
KeyValue
{}
kv
.
Key
=
calc
PB
GameStatusAndPlayerKey
(
status
,
player
,
value
,
index
)
kv
.
Key
=
calc
Guess
GameStatusAndPlayerKey
(
status
,
player
,
value
,
index
)
kv
.
Value
=
nil
kv
.
Value
=
nil
return
kv
return
kv
}
}
plugin/dapp/guess/executor/guessdb.go
View file @
9fe46fb1
...
@@ -26,14 +26,14 @@ const (
...
@@ -26,14 +26,14 @@ const (
ListASC
=
int32
(
1
)
ListASC
=
int32
(
1
)
DefaultCount
=
int32
(
20
)
//默认一次取多少条记录
DefaultCount
=
int32
(
20
)
//默认一次取多少条记录
MaxBets
=
10000
MaxBets
=
10000
//一次最多下多少注
MaxBetsNumber
=
100000
MaxBetsNumber
=
100000
//一局游戏最多接受多少注
MaxHeight
=
10000000000
MaxHeight
=
10000000000
//最大区块高度
MinBetBlockNum
=
720
MinBetBlockNum
=
720
//从创建游戏开始,一局游戏最少的可下注区块数量
MinBetTimeInterval
=
"2h"
//2h
MinBetTimeInterval
=
"2h"
//从创建游戏开始,一局游戏最短的可下注时间
MinBetTimeoutNum
=
8640
MinBetTimeoutNum
=
8640
//从游戏结束下注开始,一局游戏最少的超时块数
MinBetTimeoutInterval
=
"24h"
//
24h
MinBetTimeoutInterval
=
"24h"
//
从游戏结束下注开始,一局游戏最短的超时时间
MIN_PLAY_VALUE
=
10
*
types
.
Coin
MIN_PLAY_VALUE
=
10
*
types
.
Coin
//DefaultStyle = pkt.PlayStyleDefault
//DefaultStyle = pkt.PlayStyleDefault
...
@@ -72,11 +72,6 @@ func NewAction(guess *Guess, tx *types.Transaction, index int) *Action {
...
@@ -72,11 +72,6 @@ func NewAction(guess *Guess, tx *types.Transaction, index int) *Action {
}
}
func
(
action
*
Action
)
CheckExecAccountBalance
(
fromAddr
string
,
ToFrozen
,
ToActive
int64
)
bool
{
func
(
action
*
Action
)
CheckExecAccountBalance
(
fromAddr
string
,
ToFrozen
,
ToActive
int64
)
bool
{
// 赌注为零,按照最小赌注冻结
if
ToFrozen
==
0
{
ToFrozen
=
MIN_PLAY_VALUE
}
acc
:=
action
.
coinsAccount
.
LoadExecAccount
(
fromAddr
,
action
.
execaddr
)
acc
:=
action
.
coinsAccount
.
LoadExecAccount
(
fromAddr
,
action
.
execaddr
)
if
acc
.
GetBalance
()
>=
ToFrozen
&&
acc
.
GetFrozen
()
>=
ToActive
{
if
acc
.
GetBalance
()
>=
ToFrozen
&&
acc
.
GetFrozen
()
>=
ToActive
{
return
true
return
true
...
@@ -119,8 +114,8 @@ func GetGameList(db dbm.KV, values []string) []*pkt.GuessGame {
...
@@ -119,8 +114,8 @@ func GetGameList(db dbm.KV, values []string) []*pkt.GuessGame {
return
games
return
games
}
}
func
Infos
(
db
dbm
.
KV
,
infos
*
pkt
.
Query
PB
GameInfos
)
(
types
.
Message
,
error
)
{
func
Infos
(
db
dbm
.
KV
,
infos
*
pkt
.
Query
Guess
GameInfos
)
(
types
.
Message
,
error
)
{
var
games
[]
*
pkt
.
PokerBull
var
games
[]
*
pkt
.
GuessGame
for
i
:=
0
;
i
<
len
(
infos
.
GameIds
);
i
++
{
for
i
:=
0
;
i
<
len
(
infos
.
GameIds
);
i
++
{
id
:=
infos
.
GameIds
[
i
]
id
:=
infos
.
GameIds
[
i
]
game
,
err
:=
readGame
(
db
,
id
)
game
,
err
:=
readGame
(
db
,
id
)
...
@@ -129,7 +124,7 @@ func Infos(db dbm.KV, infos *pkt.QueryPBGameInfos) (types.Message, error) {
...
@@ -129,7 +124,7 @@ func Infos(db dbm.KV, infos *pkt.QueryPBGameInfos) (types.Message, error) {
}
}
games
=
append
(
games
,
game
)
games
=
append
(
games
,
game
)
}
}
return
&
pkt
.
Reply
PBGameList
{
Games
:
games
},
nil
return
&
pkt
.
Reply
GuessGameInfos
{
Games
:
games
},
nil
}
}
func
getGameListByAddr
(
db
dbm
.
Lister
,
addr
string
,
index
int64
)
(
types
.
Message
,
error
)
{
func
getGameListByAddr
(
db
dbm
.
Lister
,
addr
string
,
index
int64
)
(
types
.
Message
,
error
)
{
...
@@ -216,17 +211,17 @@ func (action *Action) GetReceiptLog(game *pkt.GuessGame) *types.ReceiptLog {
...
@@ -216,17 +211,17 @@ func (action *Action) GetReceiptLog(game *pkt.GuessGame) *types.ReceiptLog {
log
:=
&
types
.
ReceiptLog
{}
log
:=
&
types
.
ReceiptLog
{}
r
:=
&
pkt
.
ReceiptGuessGame
{}
r
:=
&
pkt
.
ReceiptGuessGame
{}
r
.
Addr
=
action
.
fromaddr
r
.
Addr
=
action
.
fromaddr
if
game
.
Status
==
pkt
.
GuessGame
Action
Start
{
if
game
.
Status
==
pkt
.
GuessGame
Status
Start
{
log
.
Ty
=
pkt
.
TyLogGuessGameStart
log
.
Ty
=
pkt
.
TyLogGuessGameStart
}
else
if
game
.
Status
==
pkt
.
GuessGame
Action
Bet
{
}
else
if
game
.
Status
==
pkt
.
GuessGame
Status
Bet
{
log
.
Ty
=
pkt
.
TyLogGuessGameBet
log
.
Ty
=
pkt
.
TyLogGuessGameBet
}
else
if
game
.
Status
==
pkt
.
GuessGame
Action
StopBet
{
}
else
if
game
.
Status
==
pkt
.
GuessGame
Status
StopBet
{
log
.
Ty
=
pkt
.
TyLogGuessGameStopBet
log
.
Ty
=
pkt
.
TyLogGuessGameStopBet
}
else
if
game
.
Status
==
pkt
.
GuessGame
Action
Abort
{
}
else
if
game
.
Status
==
pkt
.
GuessGame
Status
Abort
{
log
.
Ty
=
pkt
.
TyLogGuessGameAbort
log
.
Ty
=
pkt
.
TyLogGuessGameAbort
}
else
if
game
.
Status
==
pkt
.
GuessGame
Action
Publish
{
}
else
if
game
.
Status
==
pkt
.
GuessGame
Status
Publish
{
log
.
Ty
=
pkt
.
TyLogGuessGamePublish
log
.
Ty
=
pkt
.
TyLogGuessGamePublish
}
else
if
game
.
Status
==
pkt
.
GuessGame
Action
TimeOut
{
}
else
if
game
.
Status
==
pkt
.
GuessGame
Status
TimeOut
{
log
.
Ty
=
pkt
.
TyLogGuessGameTimeout
log
.
Ty
=
pkt
.
TyLogGuessGameTimeout
}
}
...
@@ -459,17 +454,6 @@ func (action *Action) genTxRnd(txhash []byte) (int64, error) {
...
@@ -459,17 +454,6 @@ func (action *Action) genTxRnd(txhash []byte) (int64, error) {
return
randint
,
nil
return
randint
,
nil
}
}
func
(
action
*
Action
)
checkDupPlayerAddress
(
id
string
,
pbPlayers
[]
*
pkt
.
PBPlayer
)
error
{
for
_
,
player
:=
range
pbPlayers
{
if
action
.
fromaddr
==
player
.
Address
{
logger
.
Error
(
"Poker bull game start"
,
"addr"
,
action
.
fromaddr
,
"execaddr"
,
action
.
execaddr
,
"Already in a game"
,
id
)
return
errors
.
New
(
"Address is already in a game"
)
}
}
return
nil
}
// 新建一局游戏
// 新建一局游戏
func
(
action
*
Action
)
newGame
(
gameId
string
,
start
*
pkt
.
GuessGameStart
)
(
*
pkt
.
GuessGame
,
error
)
{
func
(
action
*
Action
)
newGame
(
gameId
string
,
start
*
pkt
.
GuessGameStart
)
(
*
pkt
.
GuessGame
,
error
)
{
var
game
*
pkt
.
GuessGame
var
game
*
pkt
.
GuessGame
...
@@ -500,52 +484,6 @@ func (action *Action) newGame(gameId string, start *pkt.GuessGameStart) (*pkt.Gu
...
@@ -500,52 +484,6 @@ func (action *Action) newGame(gameId string, start *pkt.GuessGameStart) (*pkt.Gu
return
game
,
nil
return
game
,
nil
}
}
// 筛选合适的牌局
func
(
action
*
Action
)
selectGameFromIds
(
ids
[]
string
,
value
int64
)
*
pkt
.
PokerBull
{
var
gameRet
*
pkt
.
PokerBull
=
nil
for
_
,
id
:=
range
ids
{
game
,
err
:=
action
.
readGame
(
id
)
if
err
!=
nil
{
logger
.
Error
(
"Poker bull game start"
,
"addr"
,
action
.
fromaddr
,
"execaddr"
,
action
.
execaddr
,
"get game failed"
,
id
,
"err"
,
err
)
continue
}
//不能自己和自己玩
if
action
.
checkDupPlayerAddress
(
id
,
game
.
Players
)
!=
nil
{
continue
}
//选择合适赌注的游戏
if
value
==
0
&&
game
.
GetValue
()
!=
MIN_PLAY_VALUE
{
if
!
action
.
CheckExecAccountBalance
(
action
.
fromaddr
,
game
.
GetValue
(),
0
)
{
logger
.
Error
(
"GameStart"
,
"addr"
,
action
.
fromaddr
,
"execaddr"
,
action
.
execaddr
,
"id"
,
id
,
"err"
,
types
.
ErrNoBalance
)
continue
}
}
gameRet
=
game
break
}
return
gameRet
}
func
(
action
*
Action
)
checkPlayerExistInGame
()
bool
{
values
,
err
:=
action
.
localDB
.
List
(
calcPBGameAddrPrefix
(
action
.
fromaddr
),
nil
,
DefaultCount
,
ListDESC
)
if
err
==
types
.
ErrNotFound
{
return
false
}
var
value
pkt
.
PBGameRecord
lenght
:=
len
(
values
)
if
lenght
!=
0
{
valueBytes
:=
values
[
lenght
-
1
]
err
:=
types
.
Decode
(
valueBytes
,
&
value
)
if
err
==
nil
&&
value
.
Status
==
pkt
.
PBGameActionQuit
{
return
false
}
}
return
true
}
func
(
action
*
Action
)
GameStart
(
start
*
pkt
.
GuessGameStart
)
(
*
types
.
Receipt
,
error
)
{
func
(
action
*
Action
)
GameStart
(
start
*
pkt
.
GuessGameStart
)
(
*
types
.
Receipt
,
error
)
{
var
logs
[]
*
types
.
ReceiptLog
var
logs
[]
*
types
.
ReceiptLog
...
@@ -606,7 +544,7 @@ func (action *Action) GameStart(start *pkt.GuessGameStart) (*types.Receipt, erro
...
@@ -606,7 +544,7 @@ func (action *Action) GameStart(start *pkt.GuessGameStart) (*types.Receipt, erro
game
.
StartTime
=
action
.
blocktime
game
.
StartTime
=
action
.
blocktime
game
.
AdminAddr
=
action
.
fromaddr
game
.
AdminAddr
=
action
.
fromaddr
game
.
Index
=
action
.
getIndex
()
game
.
Index
=
action
.
getIndex
()
game
.
Status
=
pkt
.
GuessGame
Action
Start
game
.
Status
=
pkt
.
GuessGame
Status
Start
receiptLog
:=
action
.
GetReceiptLog
(
game
)
receiptLog
:=
action
.
GetReceiptLog
(
game
)
logs
=
append
(
logs
,
receiptLog
)
logs
=
append
(
logs
,
receiptLog
)
kv
=
append
(
kv
,
action
.
saveGame
(
game
)
...
)
kv
=
append
(
kv
,
action
.
saveGame
(
game
)
...
)
...
@@ -644,13 +582,15 @@ func (action *Action) GameBet(pbBet *pkt.GuessGameBet) (*types.Receipt, error) {
...
@@ -644,13 +582,15 @@ func (action *Action) GameBet(pbBet *pkt.GuessGameBet) (*types.Receipt, error) {
return
nil
,
err
return
nil
,
err
}
}
if
game
.
Status
!=
pkt
.
GuessGame
ActionStart
&&
game
.
Status
!=
pkt
.
GuessGameActionBet
&&
game
.
Status
!=
pkt
.
GuessGameAction
StopBet
{
if
game
.
Status
!=
pkt
.
GuessGame
StatusStart
&&
game
.
Status
!=
pkt
.
GuessGameStatusBet
&&
game
.
Status
!=
pkt
.
GuessGameStatus
StopBet
{
logger
.
Error
(
"GameBet"
,
"addr"
,
action
.
fromaddr
,
"execaddr"
,
action
.
execaddr
,
"Status error"
,
logger
.
Error
(
"GameBet"
,
"addr"
,
action
.
fromaddr
,
"execaddr"
,
action
.
execaddr
,
"Status error"
,
game
.
GetStatus
())
game
.
GetStatus
())
return
nil
,
errors
.
New
(
"ErrGameStatus"
)
return
nil
,
errors
.
New
(
"ErrGameStatus"
)
}
}
if
action
.
RefreshStatusByTime
(
game
)
{
canBet
:=
action
.
RefreshStatusByTime
(
game
)
if
canBet
==
false
{
receiptLog
:=
action
.
GetReceiptLog
(
game
)
receiptLog
:=
action
.
GetReceiptLog
(
game
)
logs
=
append
(
logs
,
receiptLog
)
logs
=
append
(
logs
,
receiptLog
)
kv
=
append
(
kv
,
action
.
saveGame
(
game
)
...
)
kv
=
append
(
kv
,
action
.
saveGame
(
game
)
...
)
...
@@ -658,8 +598,8 @@ func (action *Action) GameBet(pbBet *pkt.GuessGameBet) (*types.Receipt, error) {
...
@@ -658,8 +598,8 @@ func (action *Action) GameBet(pbBet *pkt.GuessGameBet) (*types.Receipt, error) {
return
&
types
.
Receipt
{
Ty
:
types
.
ExecOk
,
KV
:
kv
,
Logs
:
logs
},
nil
return
&
types
.
Receipt
{
Ty
:
types
.
ExecOk
,
KV
:
kv
,
Logs
:
logs
},
nil
}
}
//
更新游戏状态
//
如果当前游戏状态可以下注,统一设定游戏状态为GuessGameStatusBet
game
.
Status
=
pkt
.
GuessGame
Action
Bet
game
.
Status
=
pkt
.
GuessGame
Status
Bet
//检查竞猜选项是否合法
//检查竞猜选项是否合法
options
,
legal
:=
getOptions
(
game
.
GetOptions
())
options
,
legal
:=
getOptions
(
game
.
GetOptions
())
...
@@ -687,7 +627,7 @@ func (action *Action) GameBet(pbBet *pkt.GuessGameBet) (*types.Receipt, error) {
...
@@ -687,7 +627,7 @@ func (action *Action) GameBet(pbBet *pkt.GuessGameBet) (*types.Receipt, error) {
}
}
// 检查余额账户余额
// 检查余额账户余额
checkValue
:=
int64
(
game
.
GetOneBet
()
*
pbBet
.
BetsNum
)
checkValue
:=
int64
(
game
.
GetOneBet
()
*
pbBet
.
BetsNum
+
game
.
Fee
)
if
!
action
.
CheckExecAccountBalance
(
action
.
fromaddr
,
checkValue
,
0
)
{
if
!
action
.
CheckExecAccountBalance
(
action
.
fromaddr
,
checkValue
,
0
)
{
logger
.
Error
(
"GameBet"
,
"addr"
,
action
.
fromaddr
,
"execaddr"
,
action
.
execaddr
,
"id"
,
logger
.
Error
(
"GameBet"
,
"addr"
,
action
.
fromaddr
,
"execaddr"
,
action
.
execaddr
,
"id"
,
pbBet
.
GetGameId
(),
"err"
,
types
.
ErrNoBalance
)
pbBet
.
GetGameId
(),
"err"
,
types
.
ErrNoBalance
)
...
@@ -746,7 +686,7 @@ func (action *Action) GamePublish(publish *pkt.GuessGamePublish) (*types.Receipt
...
@@ -746,7 +686,7 @@ func (action *Action) GamePublish(publish *pkt.GuessGamePublish) (*types.Receipt
return
nil
,
types
.
ErrInvalidParam
return
nil
,
types
.
ErrInvalidParam
}
}
if
game
.
Status
!=
pkt
.
GuessGame
ActionStart
&&
game
.
Status
!=
pkt
.
GuessGameActionBet
&&
game
.
Status
!=
pkt
.
GuessGameAction
StopBet
{
if
game
.
Status
!=
pkt
.
GuessGame
StatusStart
&&
game
.
Status
!=
pkt
.
GuessGameStatusBet
&&
game
.
Status
!=
pkt
.
GuessGameStatus
StopBet
{
logger
.
Error
(
"GamePublish"
,
"addr"
,
action
.
fromaddr
,
"execaddr"
,
action
.
execaddr
,
"Status error"
,
logger
.
Error
(
"GamePublish"
,
"addr"
,
action
.
fromaddr
,
"execaddr"
,
action
.
execaddr
,
"Status error"
,
game
.
GetStatus
())
game
.
GetStatus
())
return
nil
,
errors
.
New
(
"ErrGameStatus"
)
return
nil
,
errors
.
New
(
"ErrGameStatus"
)
...
@@ -766,24 +706,22 @@ func (action *Action) GamePublish(publish *pkt.GuessGamePublish) (*types.Receipt
...
@@ -766,24 +706,22 @@ func (action *Action) GamePublish(publish *pkt.GuessGamePublish) (*types.Receipt
return
nil
,
types
.
ErrInvalidParam
return
nil
,
types
.
ErrInvalidParam
}
}
game
.
Status
=
pkt
.
GuessGame
Action
Publish
game
.
Status
=
pkt
.
GuessGame
Status
Publish
game
.
Result
=
publish
.
Result
game
.
Result
=
publish
.
Result
//先遍历所有下注数据,对于输家,转移资金到Admin账户合约地址;
//先遍历所有下注数据,对于输家,转移资金到Admin账户合约地址;
for
i
:=
0
;
i
<
len
(
game
.
Plays
);
i
++
{
for
i
:=
0
;
i
<
len
(
game
.
Plays
);
i
++
{
player
:=
game
.
Plays
[
i
]
player
:=
game
.
Plays
[
i
]
//if player.Bet.Option != game.Result {
value
:=
int64
(
player
.
Bet
.
BetsNumber
*
game
.
OneBet
+
game
.
Fee
)
value
:=
int64
(
player
.
Bet
.
BetsNumber
*
game
.
OneBet
)
receipt
,
err
:=
action
.
coinsAccount
.
ExecTransfer
(
player
.
Addr
,
game
.
AdminAddr
,
action
.
execaddr
,
value
)
receipt
,
err
:=
action
.
coinsAccount
.
ExecTransfer
(
player
.
Addr
,
game
.
AdminAddr
,
action
.
execaddr
,
value
)
if
err
!=
nil
{
if
err
!=
nil
{
action
.
coinsAccount
.
ExecFrozen
(
game
.
AdminAddr
,
action
.
execaddr
,
value
)
// rollback
action
.
coinsAccount
.
ExecFrozen
(
game
.
AdminAddr
,
action
.
execaddr
,
value
)
// rollback
logger
.
Error
(
"GamePublish"
,
"addr"
,
game
.
AdminAddr
,
"execaddr"
,
action
.
execaddr
,
logger
.
Error
(
"GamePublish"
,
"addr"
,
game
.
AdminAddr
,
"execaddr"
,
action
.
execaddr
,
"amount"
,
value
,
"err"
,
err
)
"amount"
,
value
,
"err"
,
err
)
return
nil
,
err
return
nil
,
err
}
}
logs
=
append
(
logs
,
receipt
.
Logs
...
)
logs
=
append
(
logs
,
receipt
.
Logs
...
)
kv
=
append
(
kv
,
receipt
.
KV
...
)
kv
=
append
(
kv
,
receipt
.
KV
...
)
//}
}
}
//计算竞猜正确的筹码总数
//计算竞猜正确的筹码总数
totalBetsNumber
:=
uint32
(
0
)
totalBetsNumber
:=
uint32
(
0
)
...
@@ -812,6 +750,19 @@ func (action *Action) GamePublish(publish *pkt.GuessGamePublish) (*types.Receipt
...
@@ -812,6 +750,19 @@ func (action *Action) GamePublish(publish *pkt.GuessGamePublish) (*types.Receipt
}
}
}
}
//如果设置了手续费专用地址,则将本局游戏收取的手续费转移到专用地址
if
game
.
Fee
>
0
&&
len
(
game
.
FeeAddr
)
!=
0
&&
game
.
FeeAddr
!=
game
.
AdminAddr
{
value
:=
int64
(
game
.
Fee
*
uint32
(
len
(
game
.
Plays
))
receipt
,
err
:=
action
.
coinsAccount
.
ExecTransfer
(
game
.
AdminAddr
,
game
.
FeeAddr
,
action
.
execaddr
,
value
)
if
err
!=
nil
{
action
.
coinsAccount
.
ExecFrozen
(
game
.
FeeAddr
,
action
.
execaddr
,
value
)
// rollback
logger
.
Error
(
"GamePublish"
,
"addr"
,
game
.
FeeAddr
,
"execaddr"
,
action
.
execaddr
,
"amount"
,
value
,
"err"
,
err
)
return
nil
,
err
}
logs
=
append
(
logs
,
receipt
.
Logs
...
)
kv
=
append
(
kv
,
receipt
.
KV
...
)
}
receiptLog
:=
action
.
GetReceiptLog
(
game
)
receiptLog
:=
action
.
GetReceiptLog
(
game
)
logs
=
append
(
logs
,
receiptLog
)
logs
=
append
(
logs
,
receiptLog
)
kv
=
append
(
kv
,
action
.
saveGame
(
game
)
...
)
kv
=
append
(
kv
,
action
.
saveGame
(
game
)
...
)
...
@@ -834,7 +785,7 @@ func (action *Action) GameAbort(pbend *pkt.GuessGameAbort) (*types.Receipt, erro
...
@@ -834,7 +785,7 @@ func (action *Action) GameAbort(pbend *pkt.GuessGameAbort) (*types.Receipt, erro
action
.
RefreshStatusByTime
(
game
)
action
.
RefreshStatusByTime
(
game
)
//如果游戏超时,则任何地址都可以Abort,否则只有创建游戏的地址可以Abort
//如果游戏超时,则任何地址都可以Abort,否则只有创建游戏的地址可以Abort
if
game
.
Status
!=
pkt
.
GuessGame
Action
TimeOut
{
if
game
.
Status
!=
pkt
.
GuessGame
Status
TimeOut
{
if
game
.
AdminAddr
!=
action
.
fromaddr
{
if
game
.
AdminAddr
!=
action
.
fromaddr
{
logger
.
Error
(
"GameAbort"
,
"addr"
,
action
.
fromaddr
,
"execaddr"
,
action
.
execaddr
,
"Only admin can abort"
,
logger
.
Error
(
"GameAbort"
,
"addr"
,
action
.
fromaddr
,
"execaddr"
,
action
.
execaddr
,
"Only admin can abort"
,
action
.
fromaddr
,
"status"
,
game
.
Status
)
action
.
fromaddr
,
"status"
,
game
.
Status
)
...
@@ -845,8 +796,8 @@ func (action *Action) GameAbort(pbend *pkt.GuessGameAbort) (*types.Receipt, erro
...
@@ -845,8 +796,8 @@ func (action *Action) GameAbort(pbend *pkt.GuessGameAbort) (*types.Receipt, erro
//激活冻结账户
//激活冻结账户
for
i
:=
0
;
i
<
len
(
game
.
Plays
);
i
++
{
for
i
:=
0
;
i
<
len
(
game
.
Plays
);
i
++
{
player
:=
game
.
Plays
[
i
]
player
:=
game
.
Plays
[
i
]
value
:=
int64
(
player
.
Bet
.
BetsNumber
*
game
.
OneBet
)
value
:=
int64
(
player
.
Bet
.
BetsNumber
*
game
.
OneBet
+
game
.
Fee
)
receipt
,
err
:=
action
.
coinsAccount
.
ExecActive
(
player
.
Addr
,
action
.
execaddr
,
)
receipt
,
err
:=
action
.
coinsAccount
.
ExecActive
(
player
.
Addr
,
action
.
execaddr
,
value
)
if
err
!=
nil
{
if
err
!=
nil
{
logger
.
Error
(
"GameAbort"
,
"addr"
,
player
.
Addr
,
"execaddr"
,
action
.
execaddr
,
"amount"
,
value
,
"err"
,
err
)
logger
.
Error
(
"GameAbort"
,
"addr"
,
player
.
Addr
,
"execaddr"
,
action
.
execaddr
,
"amount"
,
value
,
"err"
,
err
)
continue
continue
...
@@ -854,7 +805,7 @@ func (action *Action) GameAbort(pbend *pkt.GuessGameAbort) (*types.Receipt, erro
...
@@ -854,7 +805,7 @@ func (action *Action) GameAbort(pbend *pkt.GuessGameAbort) (*types.Receipt, erro
logs
=
append
(
logs
,
receipt
.
Logs
...
)
logs
=
append
(
logs
,
receipt
.
Logs
...
)
kv
=
append
(
kv
,
receipt
.
KV
...
)
kv
=
append
(
kv
,
receipt
.
KV
...
)
}
}
game
.
Status
=
pkt
.
GuessGame
Action
Abort
game
.
Status
=
pkt
.
GuessGame
Status
Abort
game
.
Index
=
action
.
getIndex
(
game
)
game
.
Index
=
action
.
getIndex
(
game
)
receiptLog
:=
action
.
GetReceiptLog
(
game
)
receiptLog
:=
action
.
GetReceiptLog
(
game
)
...
@@ -891,18 +842,19 @@ func isLegalOption(options []string, option string) bool {
...
@@ -891,18 +842,19 @@ func isLegalOption(options []string, option string) bool {
return
false
return
false
}
}
func
(
action
*
Action
)
RefreshStatusByTime
(
game
*
pkt
.
GuessGame
)
bool
{
func
(
action
*
Action
)
RefreshStatusByTime
(
game
*
pkt
.
GuessGame
)
(
canBet
bool
)
{
// 检查区块高度是否超过最大下注高度限制,看是否可以下注
// 检查区块高度是否超过最大下注高度限制,看是否可以下注
if
game
.
GetMaxHeight
()
<=
action
.
height
{
if
game
.
GetMaxHeight
()
<=
action
.
height
{
logger
.
Error
(
"GameBet"
,
"addr"
,
action
.
fromaddr
,
"execaddr"
,
action
.
execaddr
,
"Height over limit"
,
logger
.
Error
(
"GameBet"
,
"addr"
,
action
.
fromaddr
,
"execaddr"
,
action
.
execaddr
,
"Height over limit"
,
action
.
height
,
"MaxHeight"
,
game
.
GetMaxHeight
())
action
.
height
,
"MaxHeight"
,
game
.
GetMaxHeight
())
if
game
.
GetExpireHeight
()
>
action
.
height
{
if
game
.
GetExpireHeight
()
>
action
.
height
{
game
.
Status
=
pkt
.
GuessGame
Action
StopBet
game
.
Status
=
pkt
.
GuessGame
Status
StopBet
}
else
{
}
else
{
game
.
Status
=
pkt
.
GuessGame
Action
TimeOut
game
.
Status
=
pkt
.
GuessGame
Status
TimeOut
}
}
return
true
canBet
=
false
return
canBet
}
}
// 检查区块高度是否超过下注时间限制,看是否可以下注
// 检查区块高度是否超过下注时间限制,看是否可以下注
...
@@ -911,14 +863,16 @@ func (action *Action) RefreshStatusByTime(game *pkt.GuessGame) bool {
...
@@ -911,14 +863,16 @@ func (action *Action) RefreshStatusByTime(game *pkt.GuessGame) bool {
if
err
!=
nil
{
if
err
!=
nil
{
logger
.
Error
(
"GameBet"
,
"addr"
,
action
.
fromaddr
,
"execaddr"
,
action
.
execaddr
,
"Parse MaxTime failed"
,
logger
.
Error
(
"GameBet"
,
"addr"
,
action
.
fromaddr
,
"execaddr"
,
action
.
execaddr
,
"Parse MaxTime failed"
,
game
.
GetMaxTime
())
game
.
GetMaxTime
())
return
false
canBet
=
true
return
canBet
}
}
tExpire
,
err
:=
time
.
Parse
(
"2006-01-02 15:04:05"
,
game
.
GetExpire
())
tExpire
,
err
:=
time
.
Parse
(
"2006-01-02 15:04:05"
,
game
.
GetExpire
())
if
err
!=
nil
{
if
err
!=
nil
{
logger
.
Error
(
"GameBet"
,
"addr"
,
action
.
fromaddr
,
"execaddr"
,
action
.
execaddr
,
"Parse Expire failed"
,
logger
.
Error
(
"GameBet"
,
"addr"
,
action
.
fromaddr
,
"execaddr"
,
action
.
execaddr
,
"Parse Expire failed"
,
game
.
GetExpire
())
game
.
GetExpire
())
return
false
canBet
=
true
return
canBet
}
}
tNow
:=
time
.
Now
()
tNow
:=
time
.
Now
()
...
@@ -927,16 +881,18 @@ func (action *Action) RefreshStatusByTime(game *pkt.GuessGame) bool {
...
@@ -927,16 +881,18 @@ func (action *Action) RefreshStatusByTime(game *pkt.GuessGame) bool {
game
.
GetMaxTime
())
game
.
GetMaxTime
())
if
tNow
.
After
(
tExpire
)
{
if
tNow
.
After
(
tExpire
)
{
game
.
Status
=
pkt
.
GuessGame
Action
TimeOut
game
.
Status
=
pkt
.
GuessGame
Status
TimeOut
}
else
{
}
else
{
game
.
Status
=
pkt
.
GuessGame
Action
StopBet
game
.
Status
=
pkt
.
GuessGame
Status
StopBet
}
}
return
true
canBet
=
false
return
canBet
}
}
}
}
return
false
canBet
=
true
return
canBet
}
}
func
(
action
*
Action
)
CheckTime
(
start
*
pkt
.
GuessGameStart
)
bool
{
func
(
action
*
Action
)
CheckTime
(
start
*
pkt
.
GuessGameStart
)
bool
{
...
@@ -980,4 +936,4 @@ func (action *Action) CheckTime(start *pkt.GuessGameStart) bool {
...
@@ -980,4 +936,4 @@ func (action *Action) CheckTime(start *pkt.GuessGameStart) bool {
}
}
return
false
return
false
}
}
\ No newline at end of file
plugin/dapp/guess/executor/poker.go
deleted
100644 → 0
View file @
e22ff037
// Copyright Fuzamei Corp. 2018 All Rights Reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package
executor
import
(
"fmt"
"math/rand"
"sort"
"github.com/33cn/plugin/plugin/dapp/pokerbull/types"
)
var
POKER_CARD_NUM
=
52
//4 * 13 不带大小王
var
COLOR_OFFSET
uint32
=
8
var
COLOR_BIT_MAST
=
0xFF
var
COLOR_NUM
=
4
var
CARD_NUM_PER_COLOR
=
13
var
CARD_NUM_PER_GAME
=
5
const
(
POKERBULL_RESULT_X1
=
1
POKERBULL_RESULT_X2
=
2
POKERBULL_RESULT_X3
=
3
POKERBULL_RESULT_X4
=
4
POKERBULL_RESULT_X5
=
5
POKERBULL_LEVERAGE_MAX
=
POKERBULL_RESULT_X1
)
func
NewPoker
()
*
types
.
PBPoker
{
poker
:=
new
(
types
.
PBPoker
)
poker
.
Cards
=
make
([]
int32
,
POKER_CARD_NUM
)
poker
.
Pointer
=
int32
(
POKER_CARD_NUM
-
1
)
for
i
:=
0
;
i
<
POKER_CARD_NUM
;
i
++
{
color
:=
i
/
CARD_NUM_PER_COLOR
num
:=
i
%
CARD_NUM_PER_COLOR
+
1
poker
.
Cards
[
i
]
=
int32
(
color
<<
COLOR_OFFSET
+
num
)
}
return
poker
}
// 洗牌
func
Shuffle
(
poker
*
types
.
PBPoker
,
rng
int64
)
{
rndn
:=
rand
.
New
(
rand
.
NewSource
(
rng
))
for
i
:=
0
;
i
<
POKER_CARD_NUM
;
i
++
{
idx
:=
rndn
.
Intn
(
POKER_CARD_NUM
-
1
)
tmpV
:=
poker
.
Cards
[
idx
]
poker
.
Cards
[
idx
]
=
poker
.
Cards
[
POKER_CARD_NUM
-
i
-
1
]
poker
.
Cards
[
POKER_CARD_NUM
-
i
-
1
]
=
tmpV
}
poker
.
Pointer
=
int32
(
POKER_CARD_NUM
-
1
)
}
// 发牌
func
Deal
(
poker
*
types
.
PBPoker
,
rng
int64
)
[]
int32
{
if
poker
.
Pointer
<
int32
(
CARD_NUM_PER_GAME
)
{
logger
.
Error
(
fmt
.
Sprintf
(
"Wait to be shuffled: deal cards [%d], left [%d]"
,
CARD_NUM_PER_GAME
,
poker
.
Pointer
+
1
))
Shuffle
(
poker
,
rng
+
int64
(
poker
.
Cards
[
0
]))
}
rndn
:=
rand
.
New
(
rand
.
NewSource
(
rng
))
res
:=
make
([]
int32
,
CARD_NUM_PER_GAME
)
for
i
:=
0
;
i
<
CARD_NUM_PER_GAME
;
i
++
{
idx
:=
rndn
.
Intn
(
int
(
poker
.
Pointer
))
tmpV
:=
poker
.
Cards
[
poker
.
Pointer
]
res
[
i
]
=
poker
.
Cards
[
idx
]
poker
.
Cards
[
idx
]
=
tmpV
poker
.
Cards
[
poker
.
Pointer
]
=
res
[
i
]
poker
.
Pointer
--
}
return
res
}
// 计算斗牛结果
func
Result
(
cards
[]
int32
)
int32
{
temp
:=
0
r
:=
-
1
//是否有牛标志
pk
:=
newcolorCard
(
cards
)
//花牌等于10
cardsC
:=
make
([]
int
,
len
(
cards
))
for
i
:=
0
;
i
<
len
(
pk
);
i
++
{
if
pk
[
i
]
.
num
>
10
{
cardsC
[
i
]
=
10
}
else
{
cardsC
[
i
]
=
pk
[
i
]
.
num
}
}
//斗牛算法
result
:=
make
([]
int
,
10
)
var
offset
=
0
for
x
:=
0
;
x
<
3
;
x
++
{
for
y
:=
x
+
1
;
y
<
4
;
y
++
{
for
z
:=
y
+
1
;
z
<
5
;
z
++
{
if
(
cardsC
[
x
]
+
cardsC
[
y
]
+
cardsC
[
z
])
%
10
==
0
{
for
j
:=
0
;
j
<
len
(
cardsC
);
j
++
{
if
j
!=
x
&&
j
!=
y
&&
j
!=
z
{
temp
+=
cardsC
[
j
]
}
}
if
temp
%
10
==
0
{
r
=
10
//若有牛,且剩下的两个数也是牛十
}
else
{
r
=
temp
%
10
//若有牛,剩下的不是牛十
}
result
[
offset
]
=
r
offset
++
}
}
}
}
//没有牛
if
r
==
-
1
{
return
-
1
}
return
int32
(
result
[
0
])
}
// 计算结果倍数
func
Leverage
(
hand
*
types
.
PBHand
)
int32
{
result
:=
hand
.
Result
// 小牛 [1, 6]
if
result
<
7
{
return
POKERBULL_RESULT_X1
}
// 大牛 [7, 9]
if
result
>=
7
&&
result
<
10
{
return
POKERBULL_RESULT_X2
}
var
flowers
=
0
if
result
==
10
{
for
_
,
card
:=
range
hand
.
Cards
{
if
(
int
(
card
)
&
COLOR_BIT_MAST
)
>
10
{
flowers
++
}
}
// 牛牛
if
flowers
<
4
{
return
POKERBULL_RESULT_X3
}
// 四花
if
flowers
==
4
{
return
POKERBULL_RESULT_X4
}
// 五花
if
flowers
==
5
{
return
POKERBULL_RESULT_X5
}
}
return
POKERBULL_RESULT_X1
}
type
pokerCard
struct
{
num
int
color
int
}
type
colorCardSlice
[]
*
pokerCard
func
(
p
colorCardSlice
)
Len
()
int
{
return
len
(
p
)
}
func
(
p
colorCardSlice
)
Swap
(
i
,
j
int
)
{
p
[
i
],
p
[
j
]
=
p
[
j
],
p
[
i
]
}
func
(
p
colorCardSlice
)
Less
(
i
,
j
int
)
bool
{
if
i
>=
p
.
Len
()
||
j
>=
p
.
Len
()
{
logger
.
Error
(
"length error. slice length:"
,
p
.
Len
(),
" compare lenth: "
,
i
,
" "
,
j
)
}
if
p
[
i
]
==
nil
||
p
[
j
]
==
nil
{
logger
.
Error
(
"nil pointer at "
,
i
,
" "
,
j
)
}
return
p
[
i
]
.
num
<
p
[
j
]
.
num
}
func
newcolorCard
(
a
[]
int32
)
colorCardSlice
{
var
cardS
[]
*
pokerCard
for
i
:=
0
;
i
<
len
(
a
);
i
++
{
num
:=
int
(
a
[
i
])
&
COLOR_BIT_MAST
color
:=
int
(
a
[
i
])
>>
COLOR_OFFSET
cardS
=
append
(
cardS
,
&
pokerCard
{
num
,
color
})
}
return
cardS
}
func
CompareResult
(
i
,
j
*
types
.
PBHand
)
bool
{
if
i
.
Result
<
j
.
Result
{
return
true
}
if
i
.
Result
==
j
.
Result
{
return
Compare
(
i
.
Cards
,
j
.
Cards
)
}
return
false
}
func
Compare
(
a
[]
int32
,
b
[]
int32
)
bool
{
cardA
:=
newcolorCard
(
a
)
cardB
:=
newcolorCard
(
b
)
if
!
sort
.
IsSorted
(
cardA
)
{
sort
.
Sort
(
cardA
)
}
if
!
sort
.
IsSorted
(
cardB
)
{
sort
.
Sort
(
cardB
)
}
maxA
:=
cardA
[
len
(
a
)
-
1
]
maxB
:=
cardB
[
len
(
b
)
-
1
]
if
maxA
.
num
!=
maxB
.
num
{
return
maxA
.
num
<
maxB
.
num
}
return
maxA
.
color
<
maxB
.
color
}
plugin/dapp/guess/executor/query.go
View file @
9fe46fb1
...
@@ -6,22 +6,22 @@ package executor
...
@@ -6,22 +6,22 @@ package executor
import
(
import
(
"github.com/33cn/chain33/types"
"github.com/33cn/chain33/types"
pkt
"github.com/33cn/plugin/plugin/dapp/
pokerbull
/types"
pkt
"github.com/33cn/plugin/plugin/dapp/
guess
/types"
)
)
func
(
g
*
PokerBull
)
Query_QueryGameListByIds
(
in
*
pkt
.
QueryPB
GameInfos
)
(
types
.
Message
,
error
)
{
func
(
g
*
Guess
)
Query_QueryGameListByIds
(
in
*
pkt
.
QueryGuess
GameInfos
)
(
types
.
Message
,
error
)
{
return
Infos
(
g
.
GetStateDB
(),
in
)
return
Infos
(
g
.
GetStateDB
(),
in
)
}
}
func
(
g
*
PokerBull
)
Query_QueryGameById
(
in
*
pkt
.
QueryPB
GameInfo
)
(
types
.
Message
,
error
)
{
func
(
g
*
Guess
)
Query_QueryGameById
(
in
*
pkt
.
QueryGuess
GameInfo
)
(
types
.
Message
,
error
)
{
game
,
err
:=
readGame
(
g
.
GetStateDB
(),
in
.
GetGameId
())
game
,
err
:=
readGame
(
g
.
GetStateDB
(),
in
.
GetGameId
())
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
return
&
pkt
.
Reply
PBGame
{
game
},
nil
return
&
pkt
.
Reply
GuessGameInfo
{
game
},
nil
}
}
func
(
g
*
PokerBull
)
Query_QueryGameByAddr
(
in
*
pkt
.
QueryPB
GameInfo
)
(
types
.
Message
,
error
)
{
func
(
g
*
Guess
)
Query_QueryGameByAddr
(
in
*
pkt
.
QueryGuess
GameInfo
)
(
types
.
Message
,
error
)
{
gameIds
,
err
:=
getGameListByAddr
(
g
.
GetLocalDB
(),
in
.
Addr
,
in
.
Index
)
gameIds
,
err
:=
getGameListByAddr
(
g
.
GetLocalDB
(),
in
.
Addr
,
in
.
Index
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
...
@@ -30,7 +30,7 @@ func (g *PokerBull) Query_QueryGameByAddr(in *pkt.QueryPBGameInfo) (types.Messag
...
@@ -30,7 +30,7 @@ func (g *PokerBull) Query_QueryGameByAddr(in *pkt.QueryPBGameInfo) (types.Messag
return
gameIds
,
nil
return
gameIds
,
nil
}
}
func
(
g
*
PokerBull
)
Query_QueryGameByStatus
(
in
*
pkt
.
QueryPB
GameInfo
)
(
types
.
Message
,
error
)
{
func
(
g
*
Guess
)
Query_QueryGameByStatus
(
in
*
pkt
.
QueryGuess
GameInfo
)
(
types
.
Message
,
error
)
{
gameIds
,
err
:=
getGameListByStatus
(
g
.
GetLocalDB
(),
in
.
Status
,
in
.
Index
)
gameIds
,
err
:=
getGameListByStatus
(
g
.
GetLocalDB
(),
in
.
Status
,
in
.
Index
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
...
...
plugin/dapp/guess/proto/guess.proto
View file @
9fe46fb1
...
@@ -8,28 +8,30 @@ package types;
...
@@ -8,28 +8,30 @@ package types;
message
GuessGame
{
message
GuessGame
{
string
gameId
=
1
;
//游戏ID
string
gameId
=
1
;
//游戏ID
uint32
status
=
2
;
//游戏的状态:创建->投注->截止投注->开奖
uint32
status
=
2
;
//游戏的状态:创建->投注->截止投注->开奖
int64
startTime
=
3
;
//创建游戏的时间
uint32
preStatus
=
3
;
string
startTxHash
=
4
;
//创建游戏的交易hash
int64
startTime
=
4
;
//创建游戏的时间
string
topic
=
5
;
//主题
string
startTxHash
=
5
;
//创建游戏的交易hash
string
category
=
6
;
//分类
string
topic
=
6
;
//主题
string
options
=
7
;
//选项
string
category
=
7
;
//分类
string
maxTime
=
8
;
//截止下注时间
string
options
=
8
;
//选项
int64
maxHeight
=
9
;
//截止下注的块高
string
maxTime
=
9
;
//截止下注时间
string
symbol
=
10
;
//bty或者具体token
int64
maxHeight
=
10
;
//截止下注的块高
string
exec
=
11
;
//coins或者token
string
symbol
=
11
;
//bty或者具体token
uint32
oneBet
=
12
;
//一注等于多少bty或者token
string
exec
=
12
;
//coins或者token
uint32
maxBets
=
13
;
//单次可以下多少注,默认100
uint32
oneBet
=
13
;
//一注等于多少bty或者token
uint32
maxBetsNumber
=
14
;
//最多可以下多少注
uint32
maxBets
=
14
;
//单次可以下多少注,默认100
uint32
fee
=
15
;
//收取费用,不带则表示不收费
uint32
maxBetsNumber
=
15
;
//最多可以下多少注
string
feeAddr
=
16
;
//收费地址
uint32
fee
=
16
;
//收取费用,不带则表示不收费
string
expire
=
17
;
//游戏过期时间
string
feeAddr
=
17
;
//收费地址
int64
expireHeight
=
18
;
//游戏过期区块高度
string
expire
=
18
;
//游戏过期时间
string
adminAddr
=
19
;
//游戏创建者地址,只有该地址可以开奖
int64
expireHeight
=
19
;
//游戏过期区块高度
uint32
betsNumber
=
20
;
//已下注数,如果数量达到maxBetsNumber,则不允许再下注
string
adminAddr
=
20
;
//游戏创建者地址,只有该地址可以开奖
repeated
GuessPlayer
plays
=
21
;
//参与游戏下注的玩家投注信息
uint32
betsNumber
=
21
;
//已下注数,如果数量达到maxBetsNumber,则不允许再下注
string
result
=
22
;
repeated
GuessPlayer
plays
=
22
;
//参与游戏下注的玩家投注信息
repeated
GuessBet
bets
=
23
;
string
result
=
23
;
int64
index
=
24
;
repeated
GuessBet
bets
=
24
;
int64
index
=
25
;
int64
preIndex
=
26
;
}
}
message
GuessPlayer
{
message
GuessPlayer
{
...
@@ -40,6 +42,10 @@ message GuessPlayer {
...
@@ -40,6 +42,10 @@ message GuessPlayer {
message
GuessBet
{
message
GuessBet
{
string
option
=
1
;
string
option
=
1
;
uint32
betsNumber
=
2
;
uint32
betsNumber
=
2
;
bool
isWinner
=
3
;
uint32
profit
=
4
;
int64
index
=
5
;
int64
preIndex
=
6
;
}
}
...
@@ -224,6 +230,25 @@ message ReplyPBGameList {
...
@@ -224,6 +230,25 @@ message ReplyPBGameList {
repeated
PokerBull
games
=
1
;
repeated
PokerBull
games
=
1
;
}
}
message
QueryGuessGameInfo
{
string
gameId
=
1
;
string
addr
=
2
;
int32
status
=
3
;
int64
index
=
4
;
}
message
ReplyGuessGameInfo
{
GuessGame
game
=
1
;
}
message
QueryGuessGameInfos
{
repeated
string
gameIds
=
1
;
}
message
ReplyGuessGameInfos
{
repeated
GuessGame
games
=
1
;
}
message
ReceiptPBGame
{
message
ReceiptPBGame
{
string
gameId
=
1
;
string
gameId
=
1
;
int32
status
=
2
;
int32
status
=
2
;
...
...
plugin/dapp/guess/rpc/jrpc.go
View file @
9fe46fb1
...
@@ -93,11 +93,11 @@ func (c *Jrpc) GuessPublishTx(parm *pb.GuessPublishTxReq, result *interface{}) e
...
@@ -93,11 +93,11 @@ func (c *Jrpc) GuessPublishTx(parm *pb.GuessPublishTxReq, result *interface{}) e
return
nil
return
nil
}
}
func
(
c
*
Jrpc
)
PokerBull
QueryTx
(
parm
*
pb
.
PBQueryReq
,
result
*
interface
{})
error
{
func
(
c
*
Jrpc
)
Guess
QueryTx
(
parm
*
pb
.
PBQueryReq
,
result
*
interface
{})
error
{
if
parm
==
nil
{
if
parm
==
nil
{
return
types
.
ErrInvalidParam
return
types
.
ErrInvalidParam
}
}
head
:=
&
pb
.
PB
GameQuery
{
head
:=
&
pb
.
Guess
GameQuery
{
GameId
:
parm
.
GameId
,
GameId
:
parm
.
GameId
,
}
}
reply
,
err
:=
c
.
cli
.
Show
(
context
.
Background
(),
head
)
reply
,
err
:=
c
.
cli
.
Show
(
context
.
Background
(),
head
)
...
...
plugin/dapp/guess/rpc/rpc.go
View file @
9fe46fb1
...
@@ -6,21 +6,14 @@ package rpc
...
@@ -6,21 +6,14 @@ package rpc
import
(
import
(
"context"
"context"
"fmt"
"github.com/33cn/chain33/types"
"github.com/33cn/chain33/types"
pb
"github.com/33cn/plugin/plugin/dapp/guess/types"
pb
"github.com/33cn/plugin/plugin/dapp/guess/types"
"github.com/33cn/plugin/plugin/dapp/guess/executor"
)
)
func
(
c
*
channelClient
)
GuessStart
(
ctx
context
.
Context
,
head
*
pb
.
GuessGameStart
)
(
*
types
.
UnsignTx
,
error
)
{
func
(
c
*
channelClient
)
GuessStart
(
ctx
context
.
Context
,
head
*
pb
.
GuessGameStart
)
(
*
types
.
UnsignTx
,
error
)
{
if
head
.
MaxBetsNumber
>
executor
.
MaxBetsNumber
{
return
nil
,
fmt
.
Errorf
(
"Max Bets Number Should Be Maximum %d"
,
executor
.
MaxBetsNumber
)
}
val
:=
&
pb
.
GuessGameAction
{
val
:=
&
pb
.
GuessGameAction
{
Ty
:
pb
.
GuessGameActionStart
,
Ty
:
pb
.
GuessGameActionStart
,
Value
:
&
pb
.
GuessGameAction_Start
{
head
},
Value
:
&
pb
.
GuessGameAction_Start
{
head
},
}
}
tx
,
err
:=
types
.
CreateFormatTx
(
pb
.
GuessX
,
types
.
Encode
(
val
))
tx
,
err
:=
types
.
CreateFormatTx
(
pb
.
GuessX
,
types
.
Encode
(
val
))
if
err
!=
nil
{
if
err
!=
nil
{
...
@@ -69,12 +62,12 @@ func (c *channelClient) GuessPublish(ctx context.Context, head *pb.GuessGamePubl
...
@@ -69,12 +62,12 @@ func (c *channelClient) GuessPublish(ctx context.Context, head *pb.GuessGamePubl
return
&
types
.
UnsignTx
{
Data
:
data
},
nil
return
&
types
.
UnsignTx
{
Data
:
data
},
nil
}
}
func
(
c
*
channelClient
)
Show
(
ctx
context
.
Context
,
head
*
pb
.
PB
GameQuery
)
(
*
types
.
UnsignTx
,
error
)
{
func
(
c
*
channelClient
)
Show
(
ctx
context
.
Context
,
head
*
pb
.
Guess
GameQuery
)
(
*
types
.
UnsignTx
,
error
)
{
val
:=
&
pb
.
PB
GameAction
{
val
:=
&
pb
.
Guess
GameAction
{
Ty
:
pb
.
PB
GameActionQuery
,
Ty
:
pb
.
Guess
GameActionQuery
,
Value
:
&
pb
.
PB
GameAction_Query
{
head
},
Value
:
&
pb
.
Guess
GameAction_Query
{
head
},
}
}
tx
,
err
:=
types
.
CreateFormatTx
(
pb
.
PokerBull
X
,
types
.
Encode
(
val
))
tx
,
err
:=
types
.
CreateFormatTx
(
pb
.
Guess
X
,
types
.
Encode
(
val
))
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
...
...
plugin/dapp/guess/types/const.go
View file @
9fe46fb1
...
@@ -13,10 +13,16 @@ const (
...
@@ -13,10 +13,16 @@ const (
GuessGameActionStart
=
iota
+
1
GuessGameActionStart
=
iota
+
1
GuessGameActionBet
GuessGameActionBet
GuessGameActionStopBet
GuessGameActionAbort
GuessGameActionAbort
GuessGameActionPublish
GuessGameActionPublish
GuessGameActionTimeOut
GuessGameActionQuery
GuessGameStatusStart
=
iota
+
1
GuessGameStatusBet
GuessGameStatusStopBet
GuessGameStatusAbort
GuessGameStatusPublish
GuessGameStatusTimeOut
)
)
const
(
const
(
...
@@ -43,10 +49,6 @@ const (
...
@@ -43,10 +49,6 @@ const (
//建议用github的组织名称,或者用户名字开头, 再加上自己的插件的名字
//建议用github的组织名称,或者用户名字开头, 再加上自己的插件的名字
//如果发生重名,可以通过配置文件修改这些名字
//如果发生重名,可以通过配置文件修改这些名字
var
(
var
(
JRPCName
=
"pokerbull"
PokerBullX
=
"pokerbull"
ExecerPokerBull
=
[]
byte
(
PokerBullX
)
JRPCName
=
"guess"
JRPCName
=
"guess"
GuessX
=
"guess"
GuessX
=
"guess"
ExecerGuess
=
[]
byte
(
GuessX
)
ExecerGuess
=
[]
byte
(
GuessX
)
...
@@ -58,4 +60,6 @@ const (
...
@@ -58,4 +60,6 @@ const (
FuncName_QueryGameById
=
"QueryGameById"
FuncName_QueryGameById
=
"QueryGameById"
FuncName_QueryGameByAddr
=
"QueryGameByAddr"
FuncName_QueryGameByAddr
=
"QueryGameByAddr"
FuncName_QueryGameByStatus
=
"QueryGameByStatus"
FuncName_QueryGameByStatus
=
"QueryGameByStatus"
//FuncName_QueryGameByAdminAddr = "QueryGameByAdminAddr"
//FuncName_QueryGameByCategory = "QueryGameByCategory"
)
)
plugin/dapp/guess/types/guess.pb.go
View file @
9fe46fb1
...
@@ -27,28 +27,30 @@ const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
...
@@ -27,28 +27,30 @@ const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
type
GuessGame
struct
{
type
GuessGame
struct
{
GameId
string
`protobuf:"bytes,1,opt,name=gameId,proto3" json:"gameId,omitempty"`
GameId
string
`protobuf:"bytes,1,opt,name=gameId,proto3" json:"gameId,omitempty"`
Status
uint32
`protobuf:"varint,2,opt,name=status,proto3" json:"status,omitempty"`
Status
uint32
`protobuf:"varint,2,opt,name=status,proto3" json:"status,omitempty"`
StartTime
int64
`protobuf:"varint,3,opt,name=startTime,proto3" json:"startTime,omitempty"`
PreStatus
uint32
`protobuf:"varint,3,opt,name=preStatus,proto3" json:"preStatus,omitempty"`
StartTxHash
string
`protobuf:"bytes,4,opt,name=startTxHash,proto3" json:"startTxHash,omitempty"`
StartTime
int64
`protobuf:"varint,4,opt,name=startTime,proto3" json:"startTime,omitempty"`
Topic
string
`protobuf:"bytes,5,opt,name=topic,proto3" json:"topic,omitempty"`
StartTxHash
string
`protobuf:"bytes,5,opt,name=startTxHash,proto3" json:"startTxHash,omitempty"`
Category
string
`protobuf:"bytes,6,opt,name=category,proto3" json:"category,omitempty"`
Topic
string
`protobuf:"bytes,6,opt,name=topic,proto3" json:"topic,omitempty"`
Options
string
`protobuf:"bytes,7,opt,name=options,proto3" json:"options,omitempty"`
Category
string
`protobuf:"bytes,7,opt,name=category,proto3" json:"category,omitempty"`
MaxTime
string
`protobuf:"bytes,8,opt,name=maxTime,proto3" json:"maxTime,omitempty"`
Options
string
`protobuf:"bytes,8,opt,name=options,proto3" json:"options,omitempty"`
MaxHeight
int64
`protobuf:"varint,9,opt,name=maxHeight,proto3" json:"maxHeight,omitempty"`
MaxTime
string
`protobuf:"bytes,9,opt,name=maxTime,proto3" json:"maxTime,omitempty"`
Symbol
string
`protobuf:"bytes,10,opt,name=symbol,proto3" json:"symbol,omitempty"`
MaxHeight
int64
`protobuf:"varint,10,opt,name=maxHeight,proto3" json:"maxHeight,omitempty"`
Exec
string
`protobuf:"bytes,11,opt,name=exec,proto3" json:"exec,omitempty"`
Symbol
string
`protobuf:"bytes,11,opt,name=symbol,proto3" json:"symbol,omitempty"`
OneBet
uint32
`protobuf:"varint,12,opt,name=oneBet,proto3" json:"oneBet,omitempty"`
Exec
string
`protobuf:"bytes,12,opt,name=exec,proto3" json:"exec,omitempty"`
MaxBets
uint32
`protobuf:"varint,13,opt,name=maxBets,proto3" json:"maxBets,omitempty"`
OneBet
uint32
`protobuf:"varint,13,opt,name=oneBet,proto3" json:"oneBet,omitempty"`
MaxBetsNumber
uint32
`protobuf:"varint,14,opt,name=maxBetsNumber,proto3" json:"maxBetsNumber,omitempty"`
MaxBets
uint32
`protobuf:"varint,14,opt,name=maxBets,proto3" json:"maxBets,omitempty"`
Fee
uint32
`protobuf:"varint,15,opt,name=fee,proto3" json:"fee,omitempty"`
MaxBetsNumber
uint32
`protobuf:"varint,15,opt,name=maxBetsNumber,proto3" json:"maxBetsNumber,omitempty"`
FeeAddr
string
`protobuf:"bytes,16,opt,name=feeAddr,proto3" json:"feeAddr,omitempty"`
Fee
uint32
`protobuf:"varint,16,opt,name=fee,proto3" json:"fee,omitempty"`
Expire
string
`protobuf:"bytes,17,opt,name=expire,proto3" json:"expire,omitempty"`
FeeAddr
string
`protobuf:"bytes,17,opt,name=feeAddr,proto3" json:"feeAddr,omitempty"`
ExpireHeight
int64
`protobuf:"varint,18,opt,name=expireHeight,proto3" json:"expireHeight,omitempty"`
Expire
string
`protobuf:"bytes,18,opt,name=expire,proto3" json:"expire,omitempty"`
AdminAddr
string
`protobuf:"bytes,19,opt,name=adminAddr,proto3" json:"adminAddr,omitempty"`
ExpireHeight
int64
`protobuf:"varint,19,opt,name=expireHeight,proto3" json:"expireHeight,omitempty"`
BetsNumber
uint32
`protobuf:"varint,20,opt,name=betsNumber,proto3" json:"betsNumber,omitempty"`
AdminAddr
string
`protobuf:"bytes,20,opt,name=adminAddr,proto3" json:"adminAddr,omitempty"`
Plays
[]
*
GuessPlayer
`protobuf:"bytes,21,rep,name=plays,proto3" json:"plays,omitempty"`
BetsNumber
uint32
`protobuf:"varint,21,opt,name=betsNumber,proto3" json:"betsNumber,omitempty"`
Result
string
`protobuf:"bytes,22,opt,name=result,proto3" json:"result,omitempty"`
Plays
[]
*
GuessPlayer
`protobuf:"bytes,22,rep,name=plays,proto3" json:"plays,omitempty"`
Bets
[]
*
GuessBet
`protobuf:"bytes,23,rep,name=bets,proto3" json:"bets,omitempty"`
Result
string
`protobuf:"bytes,23,opt,name=result,proto3" json:"result,omitempty"`
Index
int64
`protobuf:"varint,24,opt,name=index,proto3" json:"index,omitempty"`
Bets
[]
*
GuessBet
`protobuf:"bytes,24,rep,name=bets,proto3" json:"bets,omitempty"`
Index
int64
`protobuf:"varint,25,opt,name=index,proto3" json:"index,omitempty"`
PreIndex
int64
`protobuf:"varint,26,opt,name=preIndex,proto3" json:"preIndex,omitempty"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_sizecache
int32
`json:"-"`
XXX_sizecache
int32
`json:"-"`
...
@@ -93,6 +95,13 @@ func (m *GuessGame) GetStatus() uint32 {
...
@@ -93,6 +95,13 @@ func (m *GuessGame) GetStatus() uint32 {
return
0
return
0
}
}
func
(
m
*
GuessGame
)
GetPreStatus
()
uint32
{
if
m
!=
nil
{
return
m
.
PreStatus
}
return
0
}
func
(
m
*
GuessGame
)
GetStartTime
()
int64
{
func
(
m
*
GuessGame
)
GetStartTime
()
int64
{
if
m
!=
nil
{
if
m
!=
nil
{
return
m
.
StartTime
return
m
.
StartTime
...
@@ -247,6 +256,13 @@ func (m *GuessGame) GetIndex() int64 {
...
@@ -247,6 +256,13 @@ func (m *GuessGame) GetIndex() int64 {
return
0
return
0
}
}
func
(
m
*
GuessGame
)
GetPreIndex
()
int64
{
if
m
!=
nil
{
return
m
.
PreIndex
}
return
0
}
type
GuessPlayer
struct
{
type
GuessPlayer
struct
{
Addr
string
`protobuf:"bytes,1,opt,name=addr,proto3" json:"addr,omitempty"`
Addr
string
`protobuf:"bytes,1,opt,name=addr,proto3" json:"addr,omitempty"`
Bet
*
GuessBet
`protobuf:"bytes,2,opt,name=bet,proto3" json:"bet,omitempty"`
Bet
*
GuessBet
`protobuf:"bytes,2,opt,name=bet,proto3" json:"bet,omitempty"`
...
@@ -297,6 +313,10 @@ func (m *GuessPlayer) GetBet() *GuessBet {
...
@@ -297,6 +313,10 @@ func (m *GuessPlayer) GetBet() *GuessBet {
type
GuessBet
struct
{
type
GuessBet
struct
{
Option
string
`protobuf:"bytes,1,opt,name=option,proto3" json:"option,omitempty"`
Option
string
`protobuf:"bytes,1,opt,name=option,proto3" json:"option,omitempty"`
BetsNumber
uint32
`protobuf:"varint,2,opt,name=betsNumber,proto3" json:"betsNumber,omitempty"`
BetsNumber
uint32
`protobuf:"varint,2,opt,name=betsNumber,proto3" json:"betsNumber,omitempty"`
IsWinner
bool
`protobuf:"varint,3,opt,name=isWinner,proto3" json:"isWinner,omitempty"`
Profit
uint32
`protobuf:"varint,4,opt,name=profit,proto3" json:"profit,omitempty"`
Index
int64
`protobuf:"varint,5,opt,name=index,proto3" json:"index,omitempty"`
PreIndex
int64
`protobuf:"varint,6,opt,name=preIndex,proto3" json:"preIndex,omitempty"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_sizecache
int32
`json:"-"`
XXX_sizecache
int32
`json:"-"`
...
@@ -341,6 +361,34 @@ func (m *GuessBet) GetBetsNumber() uint32 {
...
@@ -341,6 +361,34 @@ func (m *GuessBet) GetBetsNumber() uint32 {
return
0
return
0
}
}
func
(
m
*
GuessBet
)
GetIsWinner
()
bool
{
if
m
!=
nil
{
return
m
.
IsWinner
}
return
false
}
func
(
m
*
GuessBet
)
GetProfit
()
uint32
{
if
m
!=
nil
{
return
m
.
Profit
}
return
0
}
func
(
m
*
GuessBet
)
GetIndex
()
int64
{
if
m
!=
nil
{
return
m
.
Index
}
return
0
}
func
(
m
*
GuessBet
)
GetPreIndex
()
int64
{
if
m
!=
nil
{
return
m
.
PreIndex
}
return
0
}
//斗牛游戏内容
//斗牛游戏内容
type
PokerBull
struct
{
type
PokerBull
struct
{
GameId
string
`protobuf:"bytes,1,opt,name=gameId,proto3" json:"gameId,omitempty"`
GameId
string
`protobuf:"bytes,1,opt,name=gameId,proto3" json:"gameId,omitempty"`
...
@@ -2114,6 +2162,186 @@ func (m *ReplyPBGameList) GetGames() []*PokerBull {
...
@@ -2114,6 +2162,186 @@ func (m *ReplyPBGameList) GetGames() []*PokerBull {
return
nil
return
nil
}
}
type
QueryGuessGameInfo
struct
{
GameId
string
`protobuf:"bytes,1,opt,name=gameId,proto3" json:"gameId,omitempty"`
Addr
string
`protobuf:"bytes,2,opt,name=addr,proto3" json:"addr,omitempty"`
Status
int32
`protobuf:"varint,3,opt,name=status,proto3" json:"status,omitempty"`
Index
int64
`protobuf:"varint,4,opt,name=index,proto3" json:"index,omitempty"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_sizecache
int32
`json:"-"`
}
func
(
m
*
QueryGuessGameInfo
)
Reset
()
{
*
m
=
QueryGuessGameInfo
{}
}
func
(
m
*
QueryGuessGameInfo
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
QueryGuessGameInfo
)
ProtoMessage
()
{}
func
(
*
QueryGuessGameInfo
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
27
}
}
func
(
m
*
QueryGuessGameInfo
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
return
xxx_messageInfo_QueryGuessGameInfo
.
Unmarshal
(
m
,
b
)
}
func
(
m
*
QueryGuessGameInfo
)
XXX_Marshal
(
b
[]
byte
,
deterministic
bool
)
([]
byte
,
error
)
{
return
xxx_messageInfo_QueryGuessGameInfo
.
Marshal
(
b
,
m
,
deterministic
)
}
func
(
m
*
QueryGuessGameInfo
)
XXX_Merge
(
src
proto
.
Message
)
{
xxx_messageInfo_QueryGuessGameInfo
.
Merge
(
m
,
src
)
}
func
(
m
*
QueryGuessGameInfo
)
XXX_Size
()
int
{
return
xxx_messageInfo_QueryGuessGameInfo
.
Size
(
m
)
}
func
(
m
*
QueryGuessGameInfo
)
XXX_DiscardUnknown
()
{
xxx_messageInfo_QueryGuessGameInfo
.
DiscardUnknown
(
m
)
}
var
xxx_messageInfo_QueryGuessGameInfo
proto
.
InternalMessageInfo
func
(
m
*
QueryGuessGameInfo
)
GetGameId
()
string
{
if
m
!=
nil
{
return
m
.
GameId
}
return
""
}
func
(
m
*
QueryGuessGameInfo
)
GetAddr
()
string
{
if
m
!=
nil
{
return
m
.
Addr
}
return
""
}
func
(
m
*
QueryGuessGameInfo
)
GetStatus
()
int32
{
if
m
!=
nil
{
return
m
.
Status
}
return
0
}
func
(
m
*
QueryGuessGameInfo
)
GetIndex
()
int64
{
if
m
!=
nil
{
return
m
.
Index
}
return
0
}
type
ReplyGuessGameInfo
struct
{
Game
*
GuessGame
`protobuf:"bytes,1,opt,name=game,proto3" json:"game,omitempty"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_sizecache
int32
`json:"-"`
}
func
(
m
*
ReplyGuessGameInfo
)
Reset
()
{
*
m
=
ReplyGuessGameInfo
{}
}
func
(
m
*
ReplyGuessGameInfo
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
ReplyGuessGameInfo
)
ProtoMessage
()
{}
func
(
*
ReplyGuessGameInfo
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
28
}
}
func
(
m
*
ReplyGuessGameInfo
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
return
xxx_messageInfo_ReplyGuessGameInfo
.
Unmarshal
(
m
,
b
)
}
func
(
m
*
ReplyGuessGameInfo
)
XXX_Marshal
(
b
[]
byte
,
deterministic
bool
)
([]
byte
,
error
)
{
return
xxx_messageInfo_ReplyGuessGameInfo
.
Marshal
(
b
,
m
,
deterministic
)
}
func
(
m
*
ReplyGuessGameInfo
)
XXX_Merge
(
src
proto
.
Message
)
{
xxx_messageInfo_ReplyGuessGameInfo
.
Merge
(
m
,
src
)
}
func
(
m
*
ReplyGuessGameInfo
)
XXX_Size
()
int
{
return
xxx_messageInfo_ReplyGuessGameInfo
.
Size
(
m
)
}
func
(
m
*
ReplyGuessGameInfo
)
XXX_DiscardUnknown
()
{
xxx_messageInfo_ReplyGuessGameInfo
.
DiscardUnknown
(
m
)
}
var
xxx_messageInfo_ReplyGuessGameInfo
proto
.
InternalMessageInfo
func
(
m
*
ReplyGuessGameInfo
)
GetGame
()
*
GuessGame
{
if
m
!=
nil
{
return
m
.
Game
}
return
nil
}
type
QueryGuessGameInfos
struct
{
GameIds
[]
string
`protobuf:"bytes,1,rep,name=gameIds,proto3" json:"gameIds,omitempty"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_sizecache
int32
`json:"-"`
}
func
(
m
*
QueryGuessGameInfos
)
Reset
()
{
*
m
=
QueryGuessGameInfos
{}
}
func
(
m
*
QueryGuessGameInfos
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
QueryGuessGameInfos
)
ProtoMessage
()
{}
func
(
*
QueryGuessGameInfos
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
29
}
}
func
(
m
*
QueryGuessGameInfos
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
return
xxx_messageInfo_QueryGuessGameInfos
.
Unmarshal
(
m
,
b
)
}
func
(
m
*
QueryGuessGameInfos
)
XXX_Marshal
(
b
[]
byte
,
deterministic
bool
)
([]
byte
,
error
)
{
return
xxx_messageInfo_QueryGuessGameInfos
.
Marshal
(
b
,
m
,
deterministic
)
}
func
(
m
*
QueryGuessGameInfos
)
XXX_Merge
(
src
proto
.
Message
)
{
xxx_messageInfo_QueryGuessGameInfos
.
Merge
(
m
,
src
)
}
func
(
m
*
QueryGuessGameInfos
)
XXX_Size
()
int
{
return
xxx_messageInfo_QueryGuessGameInfos
.
Size
(
m
)
}
func
(
m
*
QueryGuessGameInfos
)
XXX_DiscardUnknown
()
{
xxx_messageInfo_QueryGuessGameInfos
.
DiscardUnknown
(
m
)
}
var
xxx_messageInfo_QueryGuessGameInfos
proto
.
InternalMessageInfo
func
(
m
*
QueryGuessGameInfos
)
GetGameIds
()
[]
string
{
if
m
!=
nil
{
return
m
.
GameIds
}
return
nil
}
type
ReplyGuessGameInfos
struct
{
Games
[]
*
GuessGame
`protobuf:"bytes,1,rep,name=games,proto3" json:"games,omitempty"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_sizecache
int32
`json:"-"`
}
func
(
m
*
ReplyGuessGameInfos
)
Reset
()
{
*
m
=
ReplyGuessGameInfos
{}
}
func
(
m
*
ReplyGuessGameInfos
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
ReplyGuessGameInfos
)
ProtoMessage
()
{}
func
(
*
ReplyGuessGameInfos
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
30
}
}
func
(
m
*
ReplyGuessGameInfos
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
return
xxx_messageInfo_ReplyGuessGameInfos
.
Unmarshal
(
m
,
b
)
}
func
(
m
*
ReplyGuessGameInfos
)
XXX_Marshal
(
b
[]
byte
,
deterministic
bool
)
([]
byte
,
error
)
{
return
xxx_messageInfo_ReplyGuessGameInfos
.
Marshal
(
b
,
m
,
deterministic
)
}
func
(
m
*
ReplyGuessGameInfos
)
XXX_Merge
(
src
proto
.
Message
)
{
xxx_messageInfo_ReplyGuessGameInfos
.
Merge
(
m
,
src
)
}
func
(
m
*
ReplyGuessGameInfos
)
XXX_Size
()
int
{
return
xxx_messageInfo_ReplyGuessGameInfos
.
Size
(
m
)
}
func
(
m
*
ReplyGuessGameInfos
)
XXX_DiscardUnknown
()
{
xxx_messageInfo_ReplyGuessGameInfos
.
DiscardUnknown
(
m
)
}
var
xxx_messageInfo_ReplyGuessGameInfos
proto
.
InternalMessageInfo
func
(
m
*
ReplyGuessGameInfos
)
GetGames
()
[]
*
GuessGame
{
if
m
!=
nil
{
return
m
.
Games
}
return
nil
}
type
ReceiptPBGame
struct
{
type
ReceiptPBGame
struct
{
GameId
string
`protobuf:"bytes,1,opt,name=gameId,proto3" json:"gameId,omitempty"`
GameId
string
`protobuf:"bytes,1,opt,name=gameId,proto3" json:"gameId,omitempty"`
Status
int32
`protobuf:"varint,2,opt,name=status,proto3" json:"status,omitempty"`
Status
int32
`protobuf:"varint,2,opt,name=status,proto3" json:"status,omitempty"`
...
@@ -2134,7 +2362,7 @@ func (m *ReceiptPBGame) Reset() { *m = ReceiptPBGame{} }
...
@@ -2134,7 +2362,7 @@ func (m *ReceiptPBGame) Reset() { *m = ReceiptPBGame{} }
func
(
m
*
ReceiptPBGame
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
m
*
ReceiptPBGame
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
ReceiptPBGame
)
ProtoMessage
()
{}
func
(
*
ReceiptPBGame
)
ProtoMessage
()
{}
func
(
*
ReceiptPBGame
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
ReceiptPBGame
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
27
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
31
}
}
}
func
(
m
*
ReceiptPBGame
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
func
(
m
*
ReceiptPBGame
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
@@ -2239,7 +2467,7 @@ func (m *ReceiptGuessGame) Reset() { *m = ReceiptGuessGame{} }
...
@@ -2239,7 +2467,7 @@ func (m *ReceiptGuessGame) Reset() { *m = ReceiptGuessGame{} }
func
(
m
*
ReceiptGuessGame
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
m
*
ReceiptGuessGame
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
ReceiptGuessGame
)
ProtoMessage
()
{}
func
(
*
ReceiptGuessGame
)
ProtoMessage
()
{}
func
(
*
ReceiptGuessGame
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
ReceiptGuessGame
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
28
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
32
}
}
}
func
(
m
*
ReceiptGuessGame
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
func
(
m
*
ReceiptGuessGame
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
@@ -2312,7 +2540,7 @@ func (m *GuessStartTxReq) Reset() { *m = GuessStartTxReq{} }
...
@@ -2312,7 +2540,7 @@ func (m *GuessStartTxReq) Reset() { *m = GuessStartTxReq{} }
func
(
m
*
GuessStartTxReq
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
m
*
GuessStartTxReq
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
GuessStartTxReq
)
ProtoMessage
()
{}
func
(
*
GuessStartTxReq
)
ProtoMessage
()
{}
func
(
*
GuessStartTxReq
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
GuessStartTxReq
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
29
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
33
}
}
}
func
(
m
*
GuessStartTxReq
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
func
(
m
*
GuessStartTxReq
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
@@ -2444,7 +2672,7 @@ func (m *GuessBetTxReq) Reset() { *m = GuessBetTxReq{} }
...
@@ -2444,7 +2672,7 @@ func (m *GuessBetTxReq) Reset() { *m = GuessBetTxReq{} }
func
(
m
*
GuessBetTxReq
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
m
*
GuessBetTxReq
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
GuessBetTxReq
)
ProtoMessage
()
{}
func
(
*
GuessBetTxReq
)
ProtoMessage
()
{}
func
(
*
GuessBetTxReq
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
GuessBetTxReq
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
3
0
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
3
4
}
}
}
func
(
m
*
GuessBetTxReq
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
func
(
m
*
GuessBetTxReq
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
@@ -2497,7 +2725,7 @@ func (m *GuessAbortTxReq) Reset() { *m = GuessAbortTxReq{} }
...
@@ -2497,7 +2725,7 @@ func (m *GuessAbortTxReq) Reset() { *m = GuessAbortTxReq{} }
func
(
m
*
GuessAbortTxReq
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
m
*
GuessAbortTxReq
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
GuessAbortTxReq
)
ProtoMessage
()
{}
func
(
*
GuessAbortTxReq
)
ProtoMessage
()
{}
func
(
*
GuessAbortTxReq
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
GuessAbortTxReq
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
3
1
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
3
5
}
}
}
func
(
m
*
GuessAbortTxReq
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
func
(
m
*
GuessAbortTxReq
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
@@ -2537,7 +2765,7 @@ func (m *GuessPublishTxReq) Reset() { *m = GuessPublishTxReq{} }
...
@@ -2537,7 +2765,7 @@ func (m *GuessPublishTxReq) Reset() { *m = GuessPublishTxReq{} }
func
(
m
*
GuessPublishTxReq
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
m
*
GuessPublishTxReq
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
GuessPublishTxReq
)
ProtoMessage
()
{}
func
(
*
GuessPublishTxReq
)
ProtoMessage
()
{}
func
(
*
GuessPublishTxReq
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
GuessPublishTxReq
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
3
2
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
3
6
}
}
}
func
(
m
*
GuessPublishTxReq
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
func
(
m
*
GuessPublishTxReq
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
@@ -2584,7 +2812,7 @@ func (m *PBContinueTxReq) Reset() { *m = PBContinueTxReq{} }
...
@@ -2584,7 +2812,7 @@ func (m *PBContinueTxReq) Reset() { *m = PBContinueTxReq{} }
func
(
m
*
PBContinueTxReq
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
m
*
PBContinueTxReq
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
PBContinueTxReq
)
ProtoMessage
()
{}
func
(
*
PBContinueTxReq
)
ProtoMessage
()
{}
func
(
*
PBContinueTxReq
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
PBContinueTxReq
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
3
3
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
3
7
}
}
}
func
(
m
*
PBContinueTxReq
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
func
(
m
*
PBContinueTxReq
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
@@ -2631,7 +2859,7 @@ func (m *PBQuitTxReq) Reset() { *m = PBQuitTxReq{} }
...
@@ -2631,7 +2859,7 @@ func (m *PBQuitTxReq) Reset() { *m = PBQuitTxReq{} }
func
(
m
*
PBQuitTxReq
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
m
*
PBQuitTxReq
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
PBQuitTxReq
)
ProtoMessage
()
{}
func
(
*
PBQuitTxReq
)
ProtoMessage
()
{}
func
(
*
PBQuitTxReq
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
PBQuitTxReq
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
3
4
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
3
8
}
}
}
func
(
m
*
PBQuitTxReq
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
func
(
m
*
PBQuitTxReq
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
@@ -2678,7 +2906,7 @@ func (m *PBQueryReq) Reset() { *m = PBQueryReq{} }
...
@@ -2678,7 +2906,7 @@ func (m *PBQueryReq) Reset() { *m = PBQueryReq{} }
func
(
m
*
PBQueryReq
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
m
*
PBQueryReq
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
PBQueryReq
)
ProtoMessage
()
{}
func
(
*
PBQueryReq
)
ProtoMessage
()
{}
func
(
*
PBQueryReq
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
PBQueryReq
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
3
5
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
3
9
}
}
}
func
(
m
*
PBQueryReq
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
func
(
m
*
PBQueryReq
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
@@ -2727,7 +2955,7 @@ func (m *GuessGameRecord) Reset() { *m = GuessGameRecord{} }
...
@@ -2727,7 +2955,7 @@ func (m *GuessGameRecord) Reset() { *m = GuessGameRecord{} }
func
(
m
*
GuessGameRecord
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
m
*
GuessGameRecord
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
GuessGameRecord
)
ProtoMessage
()
{}
func
(
*
GuessGameRecord
)
ProtoMessage
()
{}
func
(
*
GuessGameRecord
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
GuessGameRecord
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
36
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
40
}
}
}
func
(
m
*
GuessGameRecord
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
func
(
m
*
GuessGameRecord
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
@@ -2781,7 +3009,7 @@ func (m *GuessGameIndexRecord) Reset() { *m = GuessGameIndexRecord{} }
...
@@ -2781,7 +3009,7 @@ func (m *GuessGameIndexRecord) Reset() { *m = GuessGameIndexRecord{} }
func
(
m
*
GuessGameIndexRecord
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
m
*
GuessGameIndexRecord
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
GuessGameIndexRecord
)
ProtoMessage
()
{}
func
(
*
GuessGameIndexRecord
)
ProtoMessage
()
{}
func
(
*
GuessGameIndexRecord
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
GuessGameIndexRecord
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
37
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
41
}
}
}
func
(
m
*
GuessGameIndexRecord
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
func
(
m
*
GuessGameIndexRecord
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
@@ -2827,7 +3055,7 @@ func (m *GuessGameRecords) Reset() { *m = GuessGameRecords{} }
...
@@ -2827,7 +3055,7 @@ func (m *GuessGameRecords) Reset() { *m = GuessGameRecords{} }
func
(
m
*
GuessGameRecords
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
m
*
GuessGameRecords
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
GuessGameRecords
)
ProtoMessage
()
{}
func
(
*
GuessGameRecords
)
ProtoMessage
()
{}
func
(
*
GuessGameRecords
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
GuessGameRecords
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
38
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
42
}
}
}
func
(
m
*
GuessGameRecords
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
func
(
m
*
GuessGameRecords
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
@@ -2883,6 +3111,10 @@ func init() {
...
@@ -2883,6 +3111,10 @@ func init() {
proto
.
RegisterType
((
*
ReplyPBGame
)(
nil
),
"types.ReplyPBGame"
)
proto
.
RegisterType
((
*
ReplyPBGame
)(
nil
),
"types.ReplyPBGame"
)
proto
.
RegisterType
((
*
QueryPBGameInfos
)(
nil
),
"types.QueryPBGameInfos"
)
proto
.
RegisterType
((
*
QueryPBGameInfos
)(
nil
),
"types.QueryPBGameInfos"
)
proto
.
RegisterType
((
*
ReplyPBGameList
)(
nil
),
"types.ReplyPBGameList"
)
proto
.
RegisterType
((
*
ReplyPBGameList
)(
nil
),
"types.ReplyPBGameList"
)
proto
.
RegisterType
((
*
QueryGuessGameInfo
)(
nil
),
"types.QueryGuessGameInfo"
)
proto
.
RegisterType
((
*
ReplyGuessGameInfo
)(
nil
),
"types.ReplyGuessGameInfo"
)
proto
.
RegisterType
((
*
QueryGuessGameInfos
)(
nil
),
"types.QueryGuessGameInfos"
)
proto
.
RegisterType
((
*
ReplyGuessGameInfos
)(
nil
),
"types.ReplyGuessGameInfos"
)
proto
.
RegisterType
((
*
ReceiptPBGame
)(
nil
),
"types.ReceiptPBGame"
)
proto
.
RegisterType
((
*
ReceiptPBGame
)(
nil
),
"types.ReceiptPBGame"
)
proto
.
RegisterType
((
*
ReceiptGuessGame
)(
nil
),
"types.ReceiptGuessGame"
)
proto
.
RegisterType
((
*
ReceiptGuessGame
)(
nil
),
"types.ReceiptGuessGame"
)
proto
.
RegisterType
((
*
GuessStartTxReq
)(
nil
),
"types.GuessStartTxReq"
)
proto
.
RegisterType
((
*
GuessStartTxReq
)(
nil
),
"types.GuessStartTxReq"
)
...
@@ -2900,106 +3132,112 @@ func init() {
...
@@ -2900,106 +3132,112 @@ func init() {
func
init
()
{
proto
.
RegisterFile
(
"guess.proto"
,
fileDescriptor_7574406c5d3430e8
)
}
func
init
()
{
proto
.
RegisterFile
(
"guess.proto"
,
fileDescriptor_7574406c5d3430e8
)
}
var
fileDescriptor_7574406c5d3430e8
=
[]
byte
{
var
fileDescriptor_7574406c5d3430e8
=
[]
byte
{
// 1573 bytes of a gzipped FileDescriptorProto
// 1678 bytes of a gzipped FileDescriptorProto
0x1f
,
0x8b
,
0x08
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x02
,
0xff
,
0xe4
,
0x58
,
0x5f
,
0x6f
,
0x13
,
0x47
,
0x1f
,
0x8b
,
0x08
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x02
,
0xff
,
0xe4
,
0x58
,
0xcd
,
0x6e
,
0xdb
,
0xc6
,
0x10
,
0x8f
,
0x7d
,
0x3e
,
0xff
,
0x19
,
0xc7
,
0x4e
,
0xb2
,
0x40
,
0x58
,
0xa1
,
0xaa
,
0x4a
,
0x8f
,
0x14
,
0x13
,
0xb7
,
0x3e
,
0xa8
,
0x8f
,
0x91
,
0x25
,
0xdb
,
0xeb
,
0xc4
,
0xe1
,
0xdf
,
0xf8
,
0xa3
,
0x70
,
0x19
,
0x42
,
0x55
,
0x50
,
0x95
,
0x48
,
0xb4
,
0xb4
,
0x52
,
0xa5
,
0x1c
,
0x48
,
0x04
,
0x09
,
0x21
,
0xb3
,
0xa1
,
0x37
,
0x71
,
0x8a
,
0x26
,
0x2d
,
0x6c
,
0x20
,
0x6d
,
0x52
,
0xb4
,
0x80
,
0x95
,
0x00
,
0x71
,
0x80
,
0x20
,
0xa2
,
0xaf
,
0x17
,
0x7b
,
0x09
,
0x27
,
0xec
,
0x3b
,
0xe7
,
0xee
,
0x0c
,
0xf1
,
0x5b
,
0xd5
,
0x7e
,
0x82
,
0x50
,
0xd6
,
0x29
,
0xd2
,
0x2b
,
0x2d
,
0xad
,
0x1d
,
0x22
,
0x12
,
0x49
,
0x93
,
0x54
,
0x62
,
0xdd
,
0x8a
,
0x3e
,
0xf4
,
0x13
,
0x54
,
0xea
,
0xb7
,
0xea
,
0x73
,
0x3f
,
0x42
,
0x5f
,
0xab
,
0x9d
,
0xd9
,
0xf5
,
0xed
,
0xf6
,
0x09
,
0x7a
,
0xe8
,
0x13
,
0xf4
,
0xd2
,
0x97
,
0x2a
,
0xd0
,
0x5b
,
0x1f
,
0xa1
,
0xd7
,
0x62
,
0x67
,
0x5d
,
0xce
,
0x86
,
0x20
,
0xde
,
0xfa
,
0xb6
,
0xb3
,
0x33
,
0x3b
,
0x3b
,
0x7f
,
0x77
,
0x7e
,
0x77
,
0xd0
,
0x76
,
0xc9
,
0x25
,
0x45
,
0xc9
,
0x71
,
0xd0
,
0x9e
,
0x7a
,
0xdb
,
0xd9
,
0xd9
,
0xdd
,
0xf9
,
0x9e
,
0xf9
,
0x3d
,
0x9d
,
0xc9
,
0x34
,
0xbd
,
0x37
,
0x4d
,
0xe2
,
0x2c
,
0x66
,
0x6e
,
0x36
,
0x9f
,
0xca
,
0xf4
,
0xc6
,
0x91
,
0xd0
,
0x39
,
0x9b
,
0x8a
,
0x38
,
0xbe
,
0x17
,
0x46
,
0x41
,
0x12
,
0x30
,
0x2b
,
0x99
,
0x85
,
0x22
,
0x56
,
0x96
,
0x04
,
0x51
,
0x1a
,
0x0c
,
0xb3
,
0x30
,
0x8e
,
0x88
,
0xe3
,
0xfd
,
0xe5
,
0x42
,
0xe7
,
0xb1
,
0xde
,
0xde
,
0x48
,
0x22
,
0xd7
,
0x8f
,
0xdd
,
0x61
,
0xe2
,
0x05
,
0x3e
,
0x71
,
0x9c
,
0x3f
,
0x2c
,
0x68
,
0x92
,
0x7c
,
0x1c
,
0x4c
,
0x24
,
0xdb
,
0x86
,
0xe6
,
0x69
,
0x30
,
0x91
,
0x4f
,
0x46
,
0xbc
,
0xb6
,
0x53
,
0x3f
,
0x91
,
0x27
,
0x9f
,
0xb8
,
0x13
,
0xc1
,
0xb6
,
0xa0
,
0x71
,
0xe6
,
0x4e
,
0xc4
,
0xd3
,
0x91
,
0x5d
,
0xdb
,
0xeb
,
0x08
,
0x4d
,
0xa9
,
0xfd
,
0x34
,
0x0b
,
0xb2
,
0x59
,
0xca
,
0xeb
,
0x3b
,
0xb5
,
0xbd
,
0x9e
,
0xd9
,
0xa9
,
0xec
,
0xb5
,
0xb9
,
0xa2
,
0xe4
,
0x7e
,
0x9c
,
0xb8
,
0xc9
,
0x34
,
0xb6
,
0xab
,
0x3b
,
0x95
,
0xd0
,
0x14
,
0xfb
,
0x0c
,
0x3a
,
0x69
,
0x16
,
0x24
,
0xd9
,
0x8b
,
0x70
,
0x22
,
0xb9
,
0xb3
,
0x53
,
0xdb
,
0xbd
,
0x2e
,
0x57
,
0x14
,
0xfb
,
0x3f
,
0xb4
,
0xc3
,
0x48
,
0x1c
,
0x13
,
0xab
,
0x86
,
0xac
,
0x6c
,
0x43
,
0x73
,
0x44
,
0xbe
,
0xc1
,
0x76
,
0xa0
,
0x4b
,
0xc4
,
0xf9
,
0x51
,
0x90
,
0xbe
,
0xe6
,
0x0d
,
0x54
,
0x69
,
0x72
,
0xe3
,
0xc4
,
0x8d
,
0x92
,
0x97
,
0xde
,
0x44
,
0xd8
,
0xf5
,
0x9d
,
0xca
,
0x5e
,
0x8d
,
0x67
,
0x1b
,
0x6f
,
0xb1
,
0xab
,
0xe0
,
0x66
,
0xf1
,
0x34
,
0x1c
,
0x72
,
0x17
,
0x79
,
0x44
,
0xb0
,
0x1b
,
0xd0
,
0x1e
,
0x6c
,
0x07
,
0x3a
,
0x44
,
0x5c
,
0x1c
,
0xb9
,
0xf1
,
0x6b
,
0xdb
,
0x42
,
0x81
,
0xe6
,
0x16
,
0xbb
,
0x06
,
0x06
,
0x99
,
0x3c
,
0x8d
,
0x93
,
0x39
,
0x6f
,
0x22
,
0x63
,
0x41
,
0x33
,
0x0e
,
0xad
,
0x78
,
0xaa
,
0xec
,
0x56
,
0x12
,
0x84
,
0xde
,
0xd0
,
0x6e
,
0x20
,
0x8f
,
0x08
,
0xb6
,
0x0d
,
0xad
,
0xa1
,
0x9b
,
0x88
,
0xb3
,
0x4f
,
0x79
,
0x0b
,
0x59
,
0x86
,
0x54
,
0x9c
,
0x49
,
0x70
,
0x8e
,
0x96
,
0xb4
,
0x89
,
0xa3
,
0x49
,
0x65
,
0x20
,
0x9a
,
0xd9
,
0x4d
,
0x64
,
0xa4
,
0x34
,
0xb3
,
0xa1
,
0x19
,
0x84
,
0xd2
,
0xba
,
0xd8
,
0x6e
,
0x21
,
0xe5
,
0x24
,
0x38
,
0x3f
,
0x92
,
0xe1
,
0xe9
,
0xeb
,
0x8c
,
0x77
,
0xc8
,
0xca
,
0xc5
,
0x06
,
0xfa
,
0x36
,
0x4b
,
0x93
,
0x92
,
0x33
,
0x71
,
0x2f
,
0x50
,
0x93
,
0x36
,
0x71
,
0x14
,
0x29
,
0xb5
,
0x9c
,
0xb8
,
0x17
,
0x9f
,
0x9c
,
0xc4
,
0x63
,
0x0e
,
0xe4
,
0x33
,
0x51
,
0x8c
,
0x41
,
0x43
,
0x9e
,
0xcb
,
0x21
,
0xef
,
0xe2
,
0x47
,
0xc2
,
0x3b
,
0x7b
,
0x9d
,
0xd8
,
0x40
,
0x5a
,
0xa6
,
0x1b
,
0x68
,
0xf9
,
0x6c
,
0x72
,
0x12
,
0x8c
,
0x2e
,
0xae
,
0x95
,
0x6c
,
0x1c
,
0x49
,
0x5f
,
0x66
,
0x7c
,
0x9d
,
0xe2
,
0x40
,
0x94
,
0xbe
,
0xdb
,
0x97
,
0xed
,
0x0e
,
0x79
,
0x84
,
0x28
,
0xc6
,
0xa0
,
0x2e
,
0x2e
,
0xc4
,
0xd0
,
0x5e
,
0xc5
,
0x5d
,
0x5c
,
0xcb
,
0x59
,
0xca
,
0x7b
,
0xc8
,
0x30
,
0x24
,
0xdb
,
0x85
,
0x9e
,
0x5e
,
0x3e
,
0x9b
,
0x4d
,
0x4e
,
0x64
,
0xc2
,
0xb3
,
0x81
,
0x2f
,
0xfa
,
0x22
,
0xb1
,
0xbb
,
0xe4
,
0x25
,
0xa2
,
0x94
,
0xec
,
0xbe
,
0x48
,
0x62
,
0xbb
,
0xfb
,
0xc8
,
0x2f
,
0x6e
,
0xb2
,
0x4d
,
0x70
,
0x5e
,
0x49
,
0xc9
,
0x37
,
0x90
,
0xa7
,
0x96
,
0x4a
,
0xe3
,
0x87
,
0x0c
,
0x4d
,
0xb2
,
0x5d
,
0xe8
,
0xaa
,
0xe5
,
0xf3
,
0xe9
,
0xe4
,
0x44
,
0x44
,
0xf6
,
0x1a
,
0xf2
,
0x2b
,
0x29
,
0x0f
,
0x47
,
0xa3
,
0x84
,
0x6f
,
0x92
,
0x37
,
0x9a
,
0x54
,
0x36
,
0xc8
,
0xf3
,
0x69
,
0x98
,
0xf3
,
0x9b
,
0x6c
,
0x1d
,
0x6a
,
0xa7
,
0x42
,
0xd8
,
0xeb
,
0xc8
,
0x93
,
0x4b
,
0xf9
,
0xe2
,
0xa9
,
0x10
,
0x48
,
0xbe
,
0x45
,
0xf6
,
0x12
,
0xc5
,
0x3c
,
0x58
,
0xa7
,
0x95
,
0x76
,
0x94
,
0xa1
,
0xa3
,
0x85
,
0x3d
,
0x87
,
0xa3
,
0x51
,
0x64
,
0x6f
,
0x90
,
0x35
,
0x8a
,
0x94
,
0x3a
,
0x88
,
0x8b
,
0xd0
,
0x8b
,
0x84
,
0xcd
,
0x15
,
0x89
,
0x60
,
0x34
,
0x09
,
0x23
,
0xd4
,
0x7b
,
0x05
,
0x8f
,
0xe7
,
0x1b
,
0xec
,
0x73
,
0x80
,
0x93
,
0x48
,
0x5f
,
0xa2
,
0x98
,
0x03
,
0xab
,
0xb4
,
0x52
,
0x86
,
0x6e
,
0xa2
,
0xa1
,
0xb9
,
0x3d
,
0xe9
,
0x09
,
0xdc
,
0xd0
,
0xab
,
0x68
,
0x8c
,
0xb5
,
0xc3
,
0xf6
,
0xc0
,
0x9d
,
0x8e
,
0x83
,
0x79
,
0xca
,
0xaf
,
0xed
,
0x77
,
0x34
,
0xf1
,
0x7c
,
0x7c
,
0xf7
,
0x1a
,
0x5e
,
0xcf
,
0x36
,
0xd8
,
0x47
,
0x00
,
0x27
,
0x99
,
0xa2
,
0x38
,
0x7b
,
0xdd
,
0x7d
,
0x76
,
0x0f
,
0xab
,
0xea
,
0x1e
,
0x96
,
0xcf
,
0x60
,
0x1c
,
0xcc
,
0x65
,
0x22
,
0xd7
,
0x51
,
0x19
,
0x63
,
0x87
,
0xed
,
0x81
,
0x15
,
0x8e
,
0xdd
,
0x59
,
0x6c
,
0x6f
,
0xed
,
0xd4
,
0xf6
,
0x48
,
0x40
,
0xd9
,
0x98
,
0xc8
,
0x74
,
0x36
,
0xce
,
0xf8
,
0x36
,
0xd9
,
0x48
,
0x14
,
0xbb
,
0x09
,
0x0d
,
0x3a
,
0xfb
,
0xec
,
0x1e
,
0xe6
,
0xdc
,
0x3d
,
0x4c
,
0xae
,
0xc1
,
0xd8
,
0x9d
,
0x89
,
0x88
,
0xd3
,
0x01
,
0xa5
,
0x8f
,
0x5f
,
0x47
,
0x05
,
0x1b
,
0xb6
,
0x02
,
0x5f
,
0x66
,
0x02
,
0x99
,
0xaa
,
0x28
,
0xc2
,
0x68
,
0xa9
,
0x63
,
0x24
,
0xe2
,
0xe9
,
0x38
,
0xb1
,
0x6f
,
0x90
,
0x8e
,
0x44
,
0xb1
,
0x9b
,
0x50
,
0x97
,
0xef
,
0x24
,
0xcf
,
0x39
,
0x47
,
0x0f
,
0x88
,
0xf0
,
0x1e
,
0x41
,
0xd7
,
0xba
,
0x48
,
0x65
,
0x27
,
0x50
,
0x4e
,
0xd9
,
0x36
,
0x3e
,
0xb0
,
0x66
,
0x3e
,
0xd0
,
0x17
,
0x09
,
0x47
,
0xa6
,
0x4c
,
0x0a
,
0xcf
,
0x1f
,
0x89
,
0x50
,
0x9d
,
0xe2
,
0x9a
,
0x7d
,
0x01
,
0xce
,
0x89
,
0xcc
,
0xb0
,
0x44
,
0x2b
,
0x94
,
0x2b
,
0x9e
,
0xe7
,
0x0b
,
0xfb
,
0x7f
,
0x68
,
0x01
,
0x11
,
0x32
,
0x29
,
0xc2
,
0x48
,
0x3c
,
0x45
,
0xc6
,
0x36
,
0x32
,
0x52
,
0x43
,
0xdb
,
0x6c
,
0x60
,
0x32
,
0xb1
,
0x76
,
0x4c
,
0xb1
,
0x13
,
0x55
,
0x0a
,
0x43
,
0xbd
,
0x1c
,
0x06
,
0xda
,
0x79
,
0x0c
,
0x1d
,
0x43
,
0x09
,
0x19
,
0x39
,
0x57
,
0x1a
,
0x48
,
0x19
,
0x8e
,
0x6b
,
0xf6
,
0x31
,
0xef
,
0x5f
,
0x07
,
0x3a
,
0x83
,
0xf8
,
0x8d
,
0x4c
,
0xfc
,
0xd9
,
0x78
,
0xfc
,
0x81
,
0x2d
,
0xe3
,
0x7e
,
0xd4
,
0x4e
,
0x44
,
0x82
,
0xc9
,
0x5d
,
0x22
,
0x58
,
0xf2
,
0x9c
,
0xdf
,
0x2a
,
0xd0
,
0xd2
,
0x3b
,
0x18
,
0xca
,
0x96
,
0x79
,
0x1b
,
0x8c
,
0x67
,
0x12
,
0x5b
,
0xc6
,
0x11
,
0x44
,
0xb0
,
0x5d
,
0x70
,
0xa7
,
0xca
,
0x69
,
0x4c
,
0x2c
,
0x5d
,
0x27
,
0x44
,
0x15
,
0x7c
,
0x54
,
0x9d
,
0xf3
,
0xd1
,
0x36
,
0xb4
,
0xbc
,
0xf8
,
0x24
,
0xec
,
0x97
,
0xee
,
0x7e
,
0x5f
,
0x3b
,
0x3f
,
0xf0
,
0xd1
,
0x50
,
0x41
,
0x4c
,
0x76
,
0x07
,
0x5a
,
0x95
,
0xe7
,
0xfb
,
0x22
,
0xc2
,
0x72
,
0x69
,
0xf1
,
0x94
,
0x96
,
0x6f
,
0x86
,
0x51
,
0x70
,
0xea
,
0x25
,
0x53
,
0x0c
,
0x9f
,
0x6a
,
0x1e
,
0x3b
,
0x03
,
0x03
,
0x5f
,
0xe7
,
0xcf
,
0xf0
,
0x95
,
0x99
,
0xb4
,
0x7c
,
0x58
,
0x2a
,
0x5d
,
0xae
,
0xa8
,
0xcc
,
0x60
,
0x6b
,
0x91
,
0xc1
,
0x8d
,
0x82
,
0xc1
,
0x7f
,
0xd5
,
0xa0
,
0x36
,
0x9b
,
0x60
,
0x3f
,
0xb9
,
0x22
,
0xdf
,
0x50
,
0x8a
,
0x28
,
0xa3
,
0x29
,
0xef
,
0x94
,
0x14
,
0x09
,
0x3d
,
0x08
,
0xde
,
0x88
,
0xa8
,
0x3f
,
0x1d
,
0x8f
,
0xdf
,
0xb3
,
0xa6
,
0x2d
,
0xb3
,
0xa6
,
0xb3
,
0xaa
,
0xdc
,
0x17
,
0x86
,
0x9f
,
0x67
,
0x13
,
0xac
,
0x6c
,
0xa2
,
0xfa
,
0x44
,
0xbe
,
0x7d
,
0x82
,
0x9c
,
0x2e
,
0xad
,
0x5d
,
0x52
,
0xb5
,
0xf5
,
0xd2
,
0xaa
,
0x7d
,
0xeb
,
0x8e
,
0xa7
,
0x42
,
0xeb
,
0x8b
,
0x04
,
0xdb
,
0x45
,
0x61
,
0xb1
,
0xa1
,
0x1e
,
0x80
,
0xb3
,
0x59
,
0x48
,
0x21
,
0x5a
,
0x47
,
0xe6
,
0x82
,
0x56
,
0xd9
,
0x05
,
0x2b
,
0x94
,
0x2a
,
0xa1
,
0xb2
,
0x9d
,
0xfd
,
0x9e
,
0xf2
,
0xf1
,
0xa0
,
0x8f
,
0x8a
,
0x72
,
0x62
,
0xc1
,
0x35
,
0x05
,
0xa8
,
0x87
,
0x01
,
0xb2
,
0x76
,
0x14
,
0x7f
,
0x24
,
0x83
,
0xb1
,
0x4c
,
0xb0
,
0xc6
,
0xb2
,
0x3b
,
0xd0
,
0x0c
,
0x31
,
0x4a
,
0xb1
,
0xdd
,
0xcc
,
0x25
,
0xc1
,
0xa0
,
0xaf
,
0x52
,
0x48
,
0xf3
,
0xfb
,
0xc4
,
0xcf
,
0x77
,
0xd4
,
0xcd
,
0x61
,
0xfa
,
0x32
,
0x08
,
0xb3
,
0x30
,
0x3a
,
0xc5
,
0x86
,
0x6b
,
0xb1
,
0xf5
,
0xe0
,
0xf2
,
0xf9
,
0x74
,
0x82
,
0xc5
,
0x6e
,
0xf1
,
0x6c
,
0x43
,
0x3e
,
0x44
,
0x49
,
0x15
,
0x8b
,
0x7c
,
0x43
,
0xdb
,
0x75
,
0x4c
,
0x89
,
0xdb
,
0xd4
,
0x6e
,
0x9b
,
0x0d
,
0xef
,
0xd7
,
0x1a
,
0x34
,
0xdb
,
0xed
,
0xc2
,
0x43
,
0x1c
,
0xf7
,
0xb9
,
0xe6
,
0x67
,
0xfe
,
0x05
,
0xd3
,
0xbf
,
0xd4
,
0xd9
,
0xde
,
0x07
,
0xfe
,
0x51
,
0x10
,
0x8d
,
0x94
,
0x5b
,
0xc3
,
0x20
,
0x19
,
0xa5
,
0xbc
,
0xb6
,
0xe3
,
0xec
,
0xb9
,
0x92
,
0x83
,
0x3b
,
0xe4
,
0x85
,
0x74
,
0x43
,
0x7a
,
0xff
,
0x7c
,
0xea
,
0x91
,
0x8b
,
0x56
,
0xc9
,
0xfb
,
0x82
,
0x08
,
0xab
,
0xee
,
0x75
,
0xd2
,
0x75
,
0xdd
,
0x73
,
0x68
,
0xa9
,
0x0a
,
0x95
,
0x69
,
0x8a
,
0x29
,
0x9a
,
0x96
,
0x39
,
0x80
,
0x6b
,
0x72
,
0x50
,
0x17
,
0x1d
,
0x64
,
0xec
,
0x48
,
0xfe
,
0x48
,
0xb8
,
0x63
,
0xef
,
0x08
,
0x43
,
0x62
,
0x78
,
0xd2
,
0x97
,
0x61
,
0x84
,
0xa9
,
0x6e
,
0x0b
,
0x22
,
0x54
,
0x00
,
0xc6
,
0x11
,
0x61
,
0x99
,
0xf5
,
0x88
,
0x9f
,
0xed
,
0x48
,
0xc9
,
0x5e
,
0xfc
,
0xca
,
0xf5
,
0x12
,
0xcf
,
0x3f
,
0xf2
,
0xad
,
0x4c
,
0x82
,
0x53
,
0xca
,
0xb3
,
0x2b
,
0x16
,
0xb4
,
0xf7
,
0x0e
,
0xda
,
0x26
,
0x5d
,
0xec
,
0xc3
,
0x7e
,
0xd0
,
0xe2
,
0xd9
,
0x46
,
0xbe
,
0xe3
,
0xae
,
0x2b
,
0xb3
,
0xf5
,
0x86
,
0xf3
,
0x63
,
0x05
,
0x26
,
0xb8
,
0xaf
,
0x83
,
0x48
,
0x5b
,
0xd1
,
0xdd
,
0xef
,
0x2d
,
0xb2
,
0xa0
,
0x6c
,
0x14
,
0xc4
,
0xb3
,
0x1a
,
0x83
,
0xfe
,
0x91
,
0xeb
,
0x8f
,
0xa4
,
0x59
,
0x43
,
0x37
,
0x1a
,
0xc5
,
0x76
,
0x65
,
0xa7
,
0xb6
,
0x2f
,
0xaf
,
0x17
,
0x2f
,
0xdf
,
0x86
,
0x66
,
0x46
,
0x71
,
0xa4
,
0x42
,
0xd4
,
0x94
,
0x32
,
0x2a
,
0x91
,
0x67
,
0x71
,
0x22
,
0x8c
,
0xd2
,
0x53
,
0x41
,
0x57
,
0xa5
,
0x67
,
0x43
,
0x53
,
0x16
,
0x82
,
0x88
,
0xa9
,
0xc1
,
0x68
,
0x6e
,
0x8c
,
0x42
,
0xc2
,
0xfb
,
0xb3
,
0xa6
,
0x6e
,
0x16
,
0xa6
,
0x93
,
0x3f
,
0xe0
,
0xe6
,
0x8d
,
0xb7
,
0xb9
,
0x26
,
0xd1
,
0x3d
,
0x32
,
0x45
,
0x31
,
0xd4
,
0x2d
,
0x4e
,
0x84
,
0x74
,
0xc0
,
0x58
,
0x6d
,
0x68
,
0xbe
,
0x0b
,
0xa3
,
0x48
,
0x77
,
0x51
,
0x47
,
0x68
,
0xaa
,
0xe0
,
0x9e
,
0x53
,
0x74
,
0x4f
,
0xbc
,
0x15
,
0x91
,
0x7b
,
0x46
,
0x71
,
0xb6
,
0x78
,
0x4a
,
0x3b
,
0xef
,
0xa0
,
0xa5
,
0xc3
,
0xc5
,
0x6e
,
0x9d
,
0xa1
,
0x6c
,
0xe9
,
0xe2
,
0xd7
,
0x14
,
0xbb
,
0x05
,
0x7d
,
0x5a
,
0x3d
,
0x2d
,
0x06
,
0xa6
,
0xb4
,
0x82
,
0xf5
,
0xda
,
0xf5
,
0x95
,
0x16
,
0x9d
,
0xfd
,
0x6e
,
0x1a
,
0x05
,
0xa9
,
0x23
,
0x27
,
0x9e
,
0x29
,
0xeb
,
0x3d
,
0x80
,
0x96
,
0xae
,
0xfa
,
0x25
,
0x39
,
0xe2
,
0xd0
,
0x9a
,
0xc6
,
0x61
,
0x94
,
0x69
,
0xab
,
0xbc
,
0x9a
,
0x17
,
0xbe
,
0x05
,
0x8d
,
0x84
,
0xfc
,
0x48
,
0x89
,
0xa8
,
0x28
,
0xa9
,
0x54
,
0x24
,
0xdc
,
0x5c
,
0x61
,
0x48
,
0xef
,
0xef
,
0x1a
,
0xac
,
0x0f
,
0x7c
,
0x35
,
0x08
,
0x0f
,
0x71
,
0x44
,
0xb2
,
0xaf
,
0xd1
,
0x4c
,
0x2b
,
0x85
,
0x84
,
0xf3
,
0x6b
,
0x45
,
0x4a
,
0xe6
,
0xba
,
0x99
,
0xbc
,
0x87
,
0xe4
,
0x2d
,
0xc0
,
0xc5
,
0xd6
,
0xc3
,
0xd6
,
0xce
,
0x1f
,
0x3c
,
0x92
,
0x39
,
0x56
,
0x9c
,
0xa3
,
0x35
,
0x41
,
0x22
,
0x68
,
0xbc
,
0xa3
,
0x6a
,
0x24
,
0xc1
,
0x8a
,
0xca
,
0x99
,
0x57
,
0xcb
,
0x9b
,
0x27
,
0xef
,
0x50
,
0xb4
,
0xec
,
0x00
,
0xda
,
0xc3
,
0x38
,
0xca
,
0xc2
,
0x68
,
0x26
,
0xf5
,
0x0b
,
0x74
,
0xad
,
0x20
,
0xfe
,
0x50
,
0x54
,
0xf2
,
0x2b
,
0x8a
,
0xdd
,
0x82
,
0x1e
,
0xad
,
0x9e
,
0xe5
,
0x1d
,
0x53
,
0xd8
,
0x75
,
0x1e
,
0x40
,
0x33
,
0x8f
,
0xd6
,
0xc4
,
0x42
,
0x90
,
0xdd
,
0x86
,
0x86
,
0x2a
,
0x5d
,
0x0c
,
0x42
,
0x77
,
0x7f
,
0xab
,
0x53
,
0x65
,
0xfd
,
0x82
,
0x18
,
0xd9
,
0xd0
,
0x0c
,
0x03
,
0xcf
,
0x4f
,
0x94
,
0x56
,
0x16
,
0xd7
,
0xa4
,
0x70
,
0xe0
,
0xf9
,
0x2c
,
0x54
,
0xea
,
0x51
,
0x40
,
0x59
,
0x72
,
0x36
,
0x93
,
0x09
,
0x65
,
0xa4
,
0x6c
,
0xf3
,
0x7b
,
0x05
,
0x56
,
0x07
,
0x7d
,
0x39
,
0xa9
,
0x0f
,
0x71
,
0x86
,
0xb3
,
0x4f
,
0xc1
,
0xc2
,
0xd2
,
0xc9
,
0x73
,
0xc5
,
0x51
,
0x96
,
0xa0
,
0x08
,
0xeb
,
0x43
,
0x3d
,
0x9b
,
0x63
,
0xbb
,
0xb9
,
0xa2
,
0x9e
,
0xc3
,
0xd2
,
0xce
,
0x7a
,
0x2e
,
0x9d
,
0x39
,
0x96
,
0x9c
,
0xa3
,
0x15
,
0x4e
,
0x47
,
0xd8
,
0x01
,
0xb4
,
0xcd
,
0xfd
,
0x96
,
0x7e
,
0x31
,
0xbc
,
0x43
,
0xe8
,
0x5a
,
0xa6
,
0xe7
,
0x2f
,
0x49
,
0xcd
,
0x7e
,
0x49
,
0x86
,
0x81
,
0x9f
,
0x78
,
0xfe
,
0x54
,
0xa8
,
0x46
,
0x77
,
0x3d
,
0x77
,
0xfc
,
0x91
,
0x62
,
0x1e
,
0xad
,
0x0a
,
0x8d
,
0x5f
,
0x2f
,
0x35
,
0xbe
,
0xb7
,
0x07
,
0xfd
,
0xa2
,
0x3b
,
0xcb
,
0xde
,
0x3f
,
0x6f
,
0x17
,
0xf0
,
0xf4
,
0x20
,
0xbb
,
0x0d
,
0x75
,
0x99
,
0xba
,
0xe8
,
0x84
,
0xce
,
0xfe
,
0x46
,
0xee
,
0xc2
,
0x8b
,
0x20
,
0xf7
,
0x63
,
0xa9
,
0xd4
,
0x97
,
0xc6
,
0x24
,
0xf4
,
0x61
,
0xa9
,
0xd8
,
0x1f
,
0x75
,
0xd8
,
0x58
,
0xa9
,
0x27
,
0x9f
,
0xc7
,
0x03
,
0x52
,
0x93
,
0xf3
,
0xa9
,
0x88
,
0x28
,
0x22
,
0x45
,
0x4d
,
0x5e
,
0x48
,
0xa0
,
0x14
,
0x9d
,
0x9c
,
0xbb
,
0xc5
,
0xe4
,
0x5c
,
0xb3
,
0xdf
,
0xfb
,
0x8a
,
0xfc
,
0xdc
,
0xb6
,
0x87
,
0x8e
,
0xd4
,
0x04
,
0x8f
,
0xb0
,
0x1e
,
0x54
,
0x93
,
0x19
,
0x96
,
0x9b
,
0xc5
,
0xab
,
0xc9
,
0xac
,
0xdf
,
0xc3
,
0x95
,
0xb2
,
0xb0
,
0x2f
,
0x95
,
0xa8
,
0x92
,
0x50
,
0x7a
,
0x83
,
0x93
,
0x38
,
0x31
,
0x49
,
0xb9
,
0x54
,
0x1d
,
0xc3
,
0x39
,
0x84
,
0x8e
,
0xa1
,
0x7a
,
0xd6
,
0x49
,
0x2a
,
0x66
,
0x27
,
0xc9
,
0x15
,
0x7e
,
0xa0
,
0xf7
,
0x50
,
0x31
,
0x95
,
0x5e
,
0x94
,
0x62
,
0x07
,
0xd0
,
0x9a
,
0xce
,
0x4e
,
0xc6
,
0xa1
,
0x7e
,
0xb5
,
0x50
,
0xf8
,
0xce
,
0x1e
,
0xf4
,
0xf2
,
0xe6
,
0x2c
,
0xea
,
0x7f
,
0xce
,
0x2e
,
0x40
,
0x66
,
0xc7
,
0xad
,
0xbb
,
0xfb
,
0xd7
,
0xcb
,
0x07
,
0x06
,
0xc4
,
0x3e
,
0x5a
,
0x13
,
0x46
,
0x52
,
0xdd
,
0x41
,
0xe9
,
0xc2
,
0x53
,
0x9f
,
0x68
,
0x95
,
0xd0
,
0x86
,
0x85
,
0xc7
,
0x7e
,
0xa9
,
0xc2
,
0x5a
,
0x0a
,
0xa3
,
0x54
,
0x74
,
0xab
,
0xef
,
0xa8
,
0xcc
,
0x68
,
0x13
,
0x27
,
0x51
,
0x21
,
0xa3
,
0xbf
,
0x38
,
0xd0
,
0x2f
,
0x3a
,
0x70
,
0xee
,
0xe6
,
0x83
,
0x73
,
0xdd
,
0x1c
,
0x2b
,
0x25
,
0xf1
,
0xb9
,
0x6d
,
0xce
,
0xa0
,
0xcd
,
0xe2
,
0x9c
,
0x43
,
0xaa
,
0x9a
,
0x0d
,
0xa9
,
0x2c
,
0xd8
,
0x54
,
0x2f
,
0xc2
,
0x26
,
0x1b
,
0x6c
,
0x39
,
0x17
,
0xe1
,
0xbe
,
0x90
,
0x47
,
0xe5
,
0x09
,
0xf9
,
0xae
,
0x7b
,
0x12
,
0x44
,
0x3a
,
0x28
,
0x73
,
0xef
,
0x1e
,
0xc1
,
0x96
,
0x81
,
0x54
,
0x8d
,
0x15
,
0x90
,
0xca
,
0x5d
,
0x0e
,
0xa9
,
0x9a
,
0x95
,
0x90
,
0xaa
,
0x55
,
0x4a
,
0xa6
,
0x7c
,
0x17
,
0x4f
,
0xb1
,
0x03
,
0x68
,
0x86
,
0xd3
,
0x93
,
0xb1
,
0xa7
,
0xba
,
0x75
,
0x67
,
0x09
,
0xa9
,
0xda
,
0xcb
,
0x20
,
0x55
,
0xe7
,
0x3d
,
0x90
,
0x0a
,
0x56
,
0x40
,
0x2a
,
0x35
,
0x5b
,
0x1a
,
0xff
,
0x46
,
0xf1
,
0xc2
,
0x80
,
0xd8
,
0x47
,
0x2b
,
0x5c
,
0x9f
,
0x94
,
0x32
,
0x28
,
0x9c
,
0x56
,
0xb9
,
0x17
,
0x20
,
0xd5
,
0xfa
,
0x32
,
0x48
,
0xd5
,
0x5b
,
0x09
,
0xa9
,
0xfa
,
0x17
,
0x21
,
0x95
,
0xf7
,
0x33
,
0x8c
,
0xd2
,
0x88
,
0x36
,
0x70
,
0x6e
,
0xe5
,
0x22
,
0xfa
,
0x43
,
0x0d
,
0x7a
,
0x79
,
0x83
,
0x33
,
0x54
,
0xac
,
0xdb
,
0x55
,
0xb4
,
0x0a
,
0x0f
,
0x68
,
0xb4
,
0x51
,
0x2f
,
0xa0
,
0x0d
,
0x0e
,
0x2d
,
0x8d
,
0x2d
,
0x57
,
0x31
,
0x51
,
0x9d
,
0x81
,
0xdc
,
0xaa
,
0x79
,
0xe4
,
0x66
,
0xe2
,
0xbd
,
0xda
,
0x3c
,
0xde
,
0xd3
,
0x30
,
0xfc
,
0x3d
,
0x61
,
0x48
,
0xd5
,
0x6b
,
0xc5
,
0xa2
,
0x5b
,
0xda
,
0x1e
,
0x3e
,
0x6c
,
0x96
,
0xab
,
0xa8
,
0xae
,
0xbe
,
0x04
,
0xd5
,
0x59
,
0x8b
,
0x51
,
0x5d
,
0xa3
,
0x14
,
0xd5
,
0x35
,
0x4b
,
0x51
,
0x5d
,
0x6d
,
0x95
,
0x1d
,
0xd6
,
0x88
,
0x5a
,
0x40
,
0x33
,
0xef
,
0x3b
,
0xeb
,
0xb6
,
0x95
,
0xcd
,
0xa8
,
0xab
,
0x6b
,
0x11
,
0xaa
,
0x6b
,
0x5f
,
0x82
,
0xea
,
0x60
,
0x09
,
0xaa
,
0x93
,
0xb3
,
0xa5
,
0x3e
,
0x87
,
0xea
,
0xb1
,
0x6e
,
0xaa
,
0xd1
,
0x3b
,
0x83
,
0x9b
,
0x78
,
0x80
,
0x1a
,
0xf9
,
0x69
,
0x98
,
0x66
,
0xfe
,
0x9c
,
0x56
,
0x17
,
0xa1
,
0xba
,
0xee
,
0x52
,
0x54
,
0xd7
,
0x9b
,
0x47
,
0x75
,
0xce
,
0xf7
,
0xb0
,
0x6a
,
0x66
,
0x06
,
0xe6
,
0x61
,
0x34
,
0x1a
,
0x2c
,
0x30
,
0x43
,
0x0e
,
0x88
,
0x6a
,
0x65
,
0x40
,
0xb4
,
0xfc
,
0xc1
,
0xd1
,
0x32
,
0x3c
,
0xa0
,
0x30
,
0x4d
,
0x35
,
0x87
,
0x69
,
0x6c
,
0x68
,
0x2a
,
0x04
,
0xa3
,
0x10
,
0xbe
,
0xc9
,
0xe1
,
0x83
,
0x63
,
0x83
,
0xc1
,
0x17
,
0xe6
,
0xa1
,
0x16
,
0x72
,
0x18
,
0x27
,
0xa3
,
0x4b
,
0x83
,
0x26
,
0x65
,
0xad
,
0xe5
,
0x93
,
0x6e
,
0x61
,
0x79
,
0xf4
,
0x61
,
0xbd
,
0x98
,
0x6d
,
0xcb
,
0xf4
,
0x30
,
0xb0
,
0x6a
,
0xad
,
0x87
,
0xb0
,
0x45
,
0x5a
,
0x11
,
0x85
,
0xbc
,
0x47
,
0xf5
,
0x42
,
0x45
,
0xdd
,
0x56
,
0x46
,
0x54
,
0x8a
,
0x0e
,
0x9d
,
0xaf
,
0x0c
,
0x69
,
0x4b
,
0x8b
,
0x51
,
0x65
,
0x63
,
0x55
,
0x67
,
0xa3
,
0xf1
,
0x23
,
0xf4
,
0x6c
,
0xc3
,
0x52
,
0x76
,
0x57
,
0x21
,
0x25
,
0x5c
,
0xea
,
0x49
,
0x79
,
0xa5
,
0xf0
,
0x73
,
0x0e
,
0x37
,
0xf1
,
0x02
,
0x15
,
0xf2
,
0x33
,
0x2f
,
0x4e
,
0xfa
,
0x33
,
0x1a
,
0x98
,
0x87
,
0xfe
,
0x74
,
0x93
,
0x98
,
0x30
,
0x32
,
0xde
,
0x1b
,
0xd8
,
0xb0
,
0x62
,
0xf9
,
0x24
,
0x7a
,
0x15
,
0x2f
,
0x35
,
0x68
,
0x90
,
0x62
,
0x86
,
0x0c
,
0x10
,
0x55
,
0x8a
,
0x80
,
0x68
,
0x71
,
0xc3
,
0xc9
,
0xe0
,
0x43
,
0xcd
,
0xc0
,
0x20
,
0xe0
,
0xba
,
0x85
,
0x80
,
0x73
,
0x7f
,
0x9d
,
0x6a
,
0x7f
,
0x1b
,
0xb6
,
0xb1
,
0x07
,
0xd0
,
0x80
,
0x0f
,
0xce
,
0x4b
,
0xdd
,
0xa8
,
0xb9
,
0x18
,
0x06
,
0xd1
,
0xe8
,
0xca
,
0x20
,
0xac
,
0xfc
,
0xd5
,
0x15
,
0x72
,
0x3a
,
0xd6
,
0x97
,
0xb1
,
0x5d
,
0x68
,
0x28
,
0xd5
,
0xfa
,
0x3d
,
0xdd
,
0x34
,
0x76
,
0x1a
,
0x43
,
0xd8
,
0xa0
,
0x57
,
0x11
,
0x85
,
0x5c
,
0xf2
,
0x74
,
0xfa
,
0x44
,
0xd5
,
0x7c
,
0xe2
,
0x5b
,
0xe8
,
0xa4
,
0x2b
,
0x90
,
0xeb
,
0x7d
,
0x0d
,
0x9b
,
0x25
,
0x0b
,
0x71
,
0xa4
,
0x92
,
0x51
,
0xe4
,
0x64
,
0x47
,
0x9a
,
0x8a
,
0xc5
,
0xec
,
0xae
,
0x44
,
0x4a
,
0xb8
,
0x54
,
0x93
,
0x72
,
0x33
,
0xd7
,
0xba
,
0xe9
,
0x18
,
0x18
,
0xd2
,
0x7b
,
0x00
,
0x1b
,
0xd6
,
0x15
,
0xaa
,
0x36
,
0xd8
,
0x2d
,
0x70
,
0x15
,
0xd7
,
0xc4
,
0xe3
,
0xd7
,
0x67
,
0x9c
,
0x37
,
0xb0
,
0x66
,
0xf8
,
0xf2
,
0xa9
,
0x7f
,
0x1a
,
0x2c
,
0x54
,
0x40
,
0x03
,
0xed
,
0xe2
,
0x3d
,
0xc4
,
0xf6
,
0x7e
,
0xaf
,
0x43
,
0x4f
,
0xc8
,
0xa1
,
0x0c
,
0xa7
,
0x99
,
0x36
,
0xf0
,
0xb2
,
0xaa
,
0x01
,
0xb4
,
0x33
,
0x7b
,
0x6b
,
0xe5
,
0xf6
,
0xd6
,
0x4d
,
0x65
,
0x0f
,
0xa0
,
0xc3
,
0x45
,
0x38
,
0x59
,
0x36
,
0x11
,
0x72
,
0xac
,
0x08
,
0x55
,
0x46
,
0xa2
,
0x08
,
0x47
,
0xdd
,
0x32
,
0x1c
,
0x2d
,
0x54
,
0x56
,
0xc2
,
0xd8
,
0x2e
,
0xd4
,
0xe5
,
0xd3
,
0xaa
,
0x9f
,
0xae
,
0x6b
,
0x3d
,
0x35
,
0xd2
,
0xe5
,
0xc8
,
0x68
,
0xb3
,
0xa2
,
0x42
,
0x69
,
0x8c
,
0xb6
,
0x4a
,
0x63
,
0x34
,
0x87
,
0x99
,
0xed
,
0x32
,
0xcc
,
0xe4
,
0x75
,
0x3e
,
0x83
,
0xf5
,
0x82
,
0x86
,
0x38
,
0x52
,
0x49
,
0x29
,
0x32
,
0xb2
,
0xcd
,
0x35
,
0xe9
,
0x3c
,
0x39
,
0x10
,
0xef
,
0x50
,
0xc0
,
0x6c
,
0xdc
,
0xbd
,
0x00
,
0xa0
,
0x50
,
0x06
,
0xa0
,
0x63
,
0xd8
,
0xd4
,
0x80
,
0x35
,
0x43
,
0x84
,
0xcc
,
0x0d
,
0x76
,
0x0b
,
0x2c
,
0xc9
,
0xd5
,
0xfe
,
0x98
,
0x97
,
0x43
,
0x6c
,
0x21
,
0xf9
,
0xf8
,
0x6f
,
0xf6
,
0x0f
,
0x8e
,
0x8a
,
0xf7
,
0x9b
,
0xa3
,
0xa7
,
0xee
,
0x31
,
0x7d
,
0x7f
,
0xc7
,
0x07
,
0x86
,
0x82
,
0xd2
,
0xac
,
0xfc
,
0x97
,
0xbd
,
0xf1
,
0x10
,
0x18
,
0xaa
,
0x9a
,
0x97
,
0x57
,
0x08
,
0x79
,
0x76
,
0xe9
,
0xf1
,
0xb2
,
0xfa
,
0x73
,
0xe7
,
0x12
,
0x03
,
0xa6
,
0xf7
,
0x7f
,
0x19
,
0x30
,
0xee
,
0x94
,
0xf4
,
0x8c
,
0x72
,
0xca
,
0xe7
,
0xb0
,
0x39
,
0xaf
,
0xeb
,
0x32
,
0xbf
,
0x7c
,
0x03
,
0x9b
,
0xbd
,
0xd2
,
0x80
,
0x39
,
0x86
,
0x9e
,
0xf9
,
0x64
,
0xa5
,
0x14
,
0x5c
,
0x76
,
0xc2
,
0x30
,
0xfd
,
0xd1
,
0xf3
,
0xc2
,
0xe2
,
0x45
,
0xbe
,
0xc9
,
0xc4
,
0x29
,
0xdf
,
0xfc
,
0x5c
,
0x85
,
0x2e
,
0x17
,
0x43
,
0xe1
,
0x4d
,
0xe3
,
0x05
,
0xd7
,
0xde
,
0x1d
,
0x9d
,
0x59
,
0x9c
,
0x2b
,
0x2b
,
0xd5
,
0x7a
,
0x0f
,
0x61
,
0x8b
,
0x85
,
0x89
,
0x0a
,
0xde
,
0x55
,
0x2b
,
0x40
,
0xfb
,
0xab
,
0x66
,
0xf8
,
0xab
,
0xd4
,
0x2f
,
0x79
,
0xa8
,
0x3e
,
0xbc
,
0x69
,
0xb0
,
0xbc
,
0xd7
,
0x86
,
0xca
,
0xe9
,
0xf2
,
0x03
,
0x6c
,
0x0c
,
0x7c
,
0x83
,
0x19
,
0x6e
,
0x15
,
0xa1
,
0x7a
,
0xae
,
0x7a
,
0x1b
,
0x25
,
0xd5
,
0x4b
,
0x10
,
0xa3
,
0x59
,
0x80
,
0x18
,
0x19
,
0x57
,
0xab
,
0xd0
,
0x71
,
0xa5
,
0x67
,
0x55
,
0x2d
,
0xbd
,
0x6f
,
0x15
,
0x48
,
0x7c
,
0x8e
,
0x9f
,
0x78
,
0x04
,
0x6f
,
0x15
,
0x21
,
0xb8
,
0x9d
,
0x7d
,
0xa4
,
0xb4
,
0xc9
,
0x69
,
0xe6
,
0x37
,
0x49
,
0x0a
,
0xce
,
0x97
,
0x3b
,
0x78
,
0x5f
,
0x61
,
0x50
,
0x7c
,
0xad
,
0x2e
,
0x77
,
0xee
,
0xa5
,
0x85
,
0x36
,
0x3f
,
0xe9
,
0xa1
,
0x08
,
0xce
,
0xc7
,
0xb0
,
0xae
,
0x5c
,
0xf2
,
0xe1
,
0x3f
,
0x5c
,
0xde
,
0xdb
,
0x2b
,
0xce
,
0x4f
,
0x84
,
0x79
,
0x04
,
0x57
,
0x17
,
0x8a
,
0x3f
,
0x7e
,
0xc8
,
0x3c
,
0xb2
,
0xc6
,
0xbd
,
0x99
,
0x33
,
0xdf
,
0x35
,
0x85
,
0x48
,
0x8e
,
0xe9
,
0xdb
,
0x8c
,
0x8b
,
0xf3
,
0x2b
,
0x8f
,
0xde
,
0xe5
,
0x9f
,
0x82
,
0x57
,
0x94
,
0xe7
,
0xcc
,
0x76
,
0x19
,
0x53
,
0x96
,
0x46
,
0xcd
,
0xfe
,
0x3f
,
0x35
,
0x70
,
0xf1
,
0x1f
,
0x21
,
0x18
,
0xbe
,
0xdd
,
0xff
,
0xca
,
0xf0
,
0xed
,
0x16
,
0x86
,
0xef
,
0x31
,
0x74
,
0xf5
,
0x4f
,
0x03
,
0x0a
,
0xbb
,
0x0f
,
0x90
,
0xb7
,
0x39
,
0xab
,
0x06
,
0xd2
,
0x37
,
0xcc
,
0x17
,
0xfe
,
0x4f
,
0x51
,
0x1a
,
0x9e
,
0xc1
,
0x55
,
0xa7
,
0x2f
,
0x53
,
0xff
,
0x44
,
0x68
,
0xf4
,
0xe2
,
0xda
,
0xb9
,
0xa3
,
0x22
,
0x8b
,
0x33
,
0x46
,
0x2f
,
0xce
,
0xbd
,
0x35
,
0xb6
,
0x6f
,
0xfd
,
0x4c
,
0xa9
,
0x42
,
0xd4
,
0x55
,
0x67
,
0xcc
,
0x5d
,
0x77
,
0xe9
,
0xb3
,
0xce
,
0x23
,
0xd8
,
0xa0
,
0x7f
,
0x1f
,
0x34
,
0x74
,
0x2f
,
0xd5
,
0xa1
,
0x74
,
0xf2
,
0x04
,
0x68
,
0xaa
,
0xc1
,
0x75
,
0xd5
,
0xb9
,
0xef
,
0x35
,
0xcc
,
0x32
,
0xf0
,
0x66
,
0x19
,
0xca
,
0xae
,
0x7e
,
0x0d
,
0x6b
,
0x83
,
0xbe
,
0xc6
,
0xd3
,
0xcb
,
0x9f
,
0x50
,
0x7e
,
0xa5
,
0x91
,
0x23
,
0x97
,
0xce
,
0x38
,
0x7b
,
0xd2
,
0xc4
,
0x5f
,
0x9d
,
0x07
,
0xff
,
0x05
,
0x00
,
0x00
,
0xff
,
0xff
,
0xe4
,
0x81
,
0xc1
,
0x97
,
0x12
,
0x40
,
0xbf
,
0xc0
,
0xcf
,
0xdf
,
0xab
,
0x5d
,
0xbc
,
0x2f
,
0xf1
,
0x39
,
0x36
,
0xad
,
0xab
,
0x51
,
0x13
,
0x15
,
0x00
,
0x00
,
0xdd
,
0x7b
,
0x65
,
0x20
,
0xf1
,
0x7f
,
0x74
,
0xfa
,
0x3e
,
0x86
,
0x6b
,
0x46
,
0x37
,
0xfc
,
0xd0
,
0x01
,
0xfc
,
0xd8
,
0x80
,
0x42
,
0x7a
,
0x06
,
0x7f
,
0x51
,
0x9c
,
0xc1
,
0x5b
,
0x73
,
0x7d
,
0x35
,
0x3f
,
0x86
,
0xf7
,
0xff
,
0xac
,
0x80
,
0x85
,
0x3f
,
0x78
,
0xd9
,
0x7d
,
0x80
,
0xac
,
0xcc
,
0x59
,
0xf9
,
0x47
,
0xc6
,
0xb6
,
0xfe
,
0xfb
,
0xf1
,
0x9d
,
0x1f
,
0x7b
,
0x67
,
0xfe
,
0xcb
,
0x0b
,
0x67
,
0x85
,
0xed
,
0x1b
,
0xbf
,
0xb3
,
0xca
,
0xbe
,
0x36
,
0xca
,
0xee
,
0x68
,
0x59
,
0x04
,
0xf6
,
0xca
,
0x3f
,
0x3c
,
0xca
,
0xee
,
0x3d
,
0x54
,
0x10
,
0x54
,
0x43
,
0xbf
,
0x45
,
0x5f
,
0x20
,
0x25
,
0x77
,
0x4f
,
0x1a
,
0xf8
,
0x9f
,
0xfa
,
0xe0
,
0xef
,
0x00
,
0x00
,
0x00
,
0xff
,
0xff
,
0x70
,
0xe6
,
0x48
,
0x7b
,
0xd0
,
0x16
,
0x00
,
0x00
,
}
}
// Reference imports to suppress errors if they are not otherwise used.
// Reference imports to suppress errors if they are not otherwise used.
...
...
plugin/dapp/guess/types/types.go
View file @
9fe46fb1
...
@@ -38,6 +38,7 @@ func (t *GuessType) GetTypeMap() map[string]int32 {
...
@@ -38,6 +38,7 @@ func (t *GuessType) GetTypeMap() map[string]int32 {
"Bet"
:
GuessGameActionBet
,
"Bet"
:
GuessGameActionBet
,
"Abort"
:
GuessGameActionAbort
,
"Abort"
:
GuessGameActionAbort
,
"Publish"
:
GuessGameActionPublish
,
"Publish"
:
GuessGameActionPublish
,
"Query"
:
GuessGameActionQuery
,
}
}
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment