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) {
gameIDs
,
_
:=
cmd
.
Flags
()
.
GetString
(
"gameIDs"
)
var
params
types
.
Query4Cli
params
.
Execer
=
pkt
.
PokerBull
X
req
:=
&
pkt
.
Query
PB
GameInfo
{
params
.
Execer
=
pkt
.
Guess
X
req
:=
&
pkt
.
Query
Guess
GameInfo
{
GameId
:
gameID
,
Addr
:
address
,
Status
:
int32
(
status
),
...
...
@@ -252,7 +252,7 @@ func guessQuery(cmd *cobra.Command, args []string) {
params
.
Payload
=
req
if
gameID
!=
""
{
params
.
FuncName
=
pkt
.
FuncName_QueryGameById
var
res
pkt
.
Reply
PBGame
var
res
pkt
.
Reply
GuessGameInfo
ctx
:=
jsonrpc
.
NewRpcCtx
(
rpcLaddr
,
"Chain33.Query"
,
params
,
&
res
)
ctx
.
Run
()
}
else
if
address
!=
""
{
...
...
@@ -272,7 +272,7 @@ func guessQuery(cmd *cobra.Command, args []string) {
gameIDsS
=
append
(
gameIDsS
,
gameIDs
)
req
:=
&
pkt
.
QueryPBGameInfos
{
gameIDsS
}
params
.
Payload
=
req
var
res
pkt
.
Reply
PBGameList
var
res
pkt
.
Reply
GuessGameInfos
ctx
:=
jsonrpc
.
NewRpcCtx
(
rpcLaddr
,
"Chain33.Query"
,
params
,
&
res
)
ctx
.
Run
()
}
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)
if
!
log
.
IsWaiting
{
for
_
,
v
:=
range
log
.
Players
{
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
))
}
...
...
plugin/dapp/guess/executor/guess.go
View file @
9fe46fb1
...
...
@@ -65,25 +65,21 @@ func calcGuessGameStatusKey(status int32, index int64) []byte {
return
[]
byte
(
key
)
}
func
calc
PBGameStatusAndPlayerKey
(
status
,
player
int32
,
value
,
index
int64
)
[]
byte
{
key
:=
fmt
.
Sprintf
(
"LODB-guess-
status:%d:%d:%d:%018d"
,
status
,
player
,
value
,
index
)
func
calc
GuessGameStatusAndPlayerKey
(
category
string
,
status
,
index
int64
)
[]
byte
{
key
:=
fmt
.
Sprintf
(
"LODB-guess-
category-status:%s:%d:%018d"
,
category
,
status
,
index
)
return
[]
byte
(
key
)
}
func
calc
PBGameStatusAndPlayerPrefix
(
status
,
player
int32
,
value
int64
)
[]
byte
{
func
calc
GuessGameStatusAndPlayerPrefix
(
category
string
,
status
int32
)
[]
byte
{
var
key
string
if
value
==
0
{
key
=
fmt
.
Sprintf
(
"LODB-guess-status:%d:%d:"
,
status
,
player
)
}
else
{
key
=
fmt
.
Sprintf
(
"LODB-guess-status:%d:%d:%d"
,
status
,
player
,
value
)
}
key
=
fmt
.
Sprintf
(
"LODB-guess-category-status:%s:%d"
,
category
,
status
)
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
.
Key
=
calc
PB
GameStatusKey
(
status
,
index
)
kv
.
Key
=
calc
Guess
GameStatusKey
(
status
,
index
)
record
:=
&
pkt
.
PBGameIndexRecord
{
GameId
:
gameID
,
Index
:
index
,
...
...
@@ -92,16 +88,16 @@ func addPBGameStatusIndexKey(status int32, gameID string, index int64) *types.Ke
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
.
Key
=
calc
PB
GameStatusKey
(
status
,
index
)
kv
.
Key
=
calc
Guess
GameStatusKey
(
status
,
index
)
kv
.
Value
=
nil
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
.
Key
=
calc
PB
GameAddrKey
(
addr
,
index
)
kv
.
Key
=
calc
Guess
GameAddrKey
(
addr
,
index
)
record
:=
&
pkt
.
PBGameRecord
{
GameId
:
gameID
,
Status
:
status
,
...
...
@@ -111,16 +107,16 @@ func addPBGameAddrIndexKey(status int32, addr, gameID string, index int64) *type
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
.
Key
=
calc
PB
GameAddrKey
(
addr
,
index
)
kv
.
Key
=
calc
Guess
GameAddrKey
(
addr
,
index
)
kv
.
Value
=
nil
return
kv
}
func
addPBGameStatusAndPlayer
(
status
int32
,
player
int32
,
value
,
index
int64
,
gameId
string
)
*
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
{
GameId
:
gameId
,
Index
:
index
,
...
...
@@ -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
{
kv
:=
&
types
.
KeyValue
{}
kv
.
Key
=
calc
PB
GameStatusAndPlayerKey
(
status
,
player
,
value
,
index
)
kv
.
Key
=
calc
Guess
GameStatusAndPlayerKey
(
status
,
player
,
value
,
index
)
kv
.
Value
=
nil
return
kv
}
plugin/dapp/guess/executor/guessdb.go
View file @
9fe46fb1
...
...
@@ -26,14 +26,14 @@ const (
ListASC
=
int32
(
1
)
DefaultCount
=
int32
(
20
)
//默认一次取多少条记录
MaxBets
=
10000
MaxBetsNumber
=
100000
MaxHeight
=
10000000000
MaxBets
=
10000
//一次最多下多少注
MaxBetsNumber
=
100000
//一局游戏最多接受多少注
MaxHeight
=
10000000000
//最大区块高度
MinBetBlockNum
=
720
MinBetTimeInterval
=
"2h"
//2h
MinBetTimeoutNum
=
8640
MinBetTimeoutInterval
=
"24h"
//
24h
MinBetBlockNum
=
720
//从创建游戏开始,一局游戏最少的可下注区块数量
MinBetTimeInterval
=
"2h"
//从创建游戏开始,一局游戏最短的可下注时间
MinBetTimeoutNum
=
8640
//从游戏结束下注开始,一局游戏最少的超时块数
MinBetTimeoutInterval
=
"24h"
//
从游戏结束下注开始,一局游戏最短的超时时间
MIN_PLAY_VALUE
=
10
*
types
.
Coin
//DefaultStyle = pkt.PlayStyleDefault
...
...
@@ -72,11 +72,6 @@ func NewAction(guess *Guess, tx *types.Transaction, index int) *Action {
}
func
(
action
*
Action
)
CheckExecAccountBalance
(
fromAddr
string
,
ToFrozen
,
ToActive
int64
)
bool
{
// 赌注为零,按照最小赌注冻结
if
ToFrozen
==
0
{
ToFrozen
=
MIN_PLAY_VALUE
}
acc
:=
action
.
coinsAccount
.
LoadExecAccount
(
fromAddr
,
action
.
execaddr
)
if
acc
.
GetBalance
()
>=
ToFrozen
&&
acc
.
GetFrozen
()
>=
ToActive
{
return
true
...
...
@@ -119,8 +114,8 @@ func GetGameList(db dbm.KV, values []string) []*pkt.GuessGame {
return
games
}
func
Infos
(
db
dbm
.
KV
,
infos
*
pkt
.
Query
PB
GameInfos
)
(
types
.
Message
,
error
)
{
var
games
[]
*
pkt
.
PokerBull
func
Infos
(
db
dbm
.
KV
,
infos
*
pkt
.
Query
Guess
GameInfos
)
(
types
.
Message
,
error
)
{
var
games
[]
*
pkt
.
GuessGame
for
i
:=
0
;
i
<
len
(
infos
.
GameIds
);
i
++
{
id
:=
infos
.
GameIds
[
i
]
game
,
err
:=
readGame
(
db
,
id
)
...
...
@@ -129,7 +124,7 @@ func Infos(db dbm.KV, infos *pkt.QueryPBGameInfos) (types.Message, error) {
}
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
)
{
...
...
@@ -216,17 +211,17 @@ func (action *Action) GetReceiptLog(game *pkt.GuessGame) *types.ReceiptLog {
log
:=
&
types
.
ReceiptLog
{}
r
:=
&
pkt
.
ReceiptGuessGame
{}
r
.
Addr
=
action
.
fromaddr
if
game
.
Status
==
pkt
.
GuessGame
Action
Start
{
if
game
.
Status
==
pkt
.
GuessGame
Status
Start
{
log
.
Ty
=
pkt
.
TyLogGuessGameStart
}
else
if
game
.
Status
==
pkt
.
GuessGame
Action
Bet
{
}
else
if
game
.
Status
==
pkt
.
GuessGame
Status
Bet
{
log
.
Ty
=
pkt
.
TyLogGuessGameBet
}
else
if
game
.
Status
==
pkt
.
GuessGame
Action
StopBet
{
}
else
if
game
.
Status
==
pkt
.
GuessGame
Status
StopBet
{
log
.
Ty
=
pkt
.
TyLogGuessGameStopBet
}
else
if
game
.
Status
==
pkt
.
GuessGame
Action
Abort
{
}
else
if
game
.
Status
==
pkt
.
GuessGame
Status
Abort
{
log
.
Ty
=
pkt
.
TyLogGuessGameAbort
}
else
if
game
.
Status
==
pkt
.
GuessGame
Action
Publish
{
}
else
if
game
.
Status
==
pkt
.
GuessGame
Status
Publish
{
log
.
Ty
=
pkt
.
TyLogGuessGamePublish
}
else
if
game
.
Status
==
pkt
.
GuessGame
Action
TimeOut
{
}
else
if
game
.
Status
==
pkt
.
GuessGame
Status
TimeOut
{
log
.
Ty
=
pkt
.
TyLogGuessGameTimeout
}
...
...
@@ -459,17 +454,6 @@ func (action *Action) genTxRnd(txhash []byte) (int64, error) {
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
)
{
var
game
*
pkt
.
GuessGame
...
...
@@ -500,52 +484,6 @@ func (action *Action) newGame(gameId string, start *pkt.GuessGameStart) (*pkt.Gu
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
)
{
var
logs
[]
*
types
.
ReceiptLog
...
...
@@ -606,7 +544,7 @@ func (action *Action) GameStart(start *pkt.GuessGameStart) (*types.Receipt, erro
game
.
StartTime
=
action
.
blocktime
game
.
AdminAddr
=
action
.
fromaddr
game
.
Index
=
action
.
getIndex
()
game
.
Status
=
pkt
.
GuessGame
Action
Start
game
.
Status
=
pkt
.
GuessGame
Status
Start
receiptLog
:=
action
.
GetReceiptLog
(
game
)
logs
=
append
(
logs
,
receiptLog
)
kv
=
append
(
kv
,
action
.
saveGame
(
game
)
...
)
...
...
@@ -644,13 +582,15 @@ func (action *Action) GameBet(pbBet *pkt.GuessGameBet) (*types.Receipt, error) {
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"
,
game
.
GetStatus
())
return
nil
,
errors
.
New
(
"ErrGameStatus"
)
}
if
action
.
RefreshStatusByTime
(
game
)
{
canBet
:=
action
.
RefreshStatusByTime
(
game
)
if
canBet
==
false
{
receiptLog
:=
action
.
GetReceiptLog
(
game
)
logs
=
append
(
logs
,
receiptLog
)
kv
=
append
(
kv
,
action
.
saveGame
(
game
)
...
)
...
...
@@ -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
}
//
更新游戏状态
game
.
Status
=
pkt
.
GuessGame
Action
Bet
//
如果当前游戏状态可以下注,统一设定游戏状态为GuessGameStatusBet
game
.
Status
=
pkt
.
GuessGame
Status
Bet
//检查竞猜选项是否合法
options
,
legal
:=
getOptions
(
game
.
GetOptions
())
...
...
@@ -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
)
{
logger
.
Error
(
"GameBet"
,
"addr"
,
action
.
fromaddr
,
"execaddr"
,
action
.
execaddr
,
"id"
,
pbBet
.
GetGameId
(),
"err"
,
types
.
ErrNoBalance
)
...
...
@@ -746,7 +686,7 @@ func (action *Action) GamePublish(publish *pkt.GuessGamePublish) (*types.Receipt
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"
,
game
.
GetStatus
())
return
nil
,
errors
.
New
(
"ErrGameStatus"
)
...
...
@@ -766,24 +706,22 @@ func (action *Action) GamePublish(publish *pkt.GuessGamePublish) (*types.Receipt
return
nil
,
types
.
ErrInvalidParam
}
game
.
Status
=
pkt
.
GuessGame
Action
Publish
game
.
Status
=
pkt
.
GuessGame
Status
Publish
game
.
Result
=
publish
.
Result
//先遍历所有下注数据,对于输家,转移资金到Admin账户合约地址;
for
i
:=
0
;
i
<
len
(
game
.
Plays
);
i
++
{
player
:=
game
.
Plays
[
i
]
//if player.Bet.Option != game.Result {
value
:=
int64
(
player
.
Bet
.
BetsNumber
*
game
.
OneBet
)
receipt
,
err
:=
action
.
coinsAccount
.
ExecTransfer
(
player
.
Addr
,
game
.
AdminAddr
,
action
.
execaddr
,
value
)
if
err
!=
nil
{
action
.
coinsAccount
.
ExecFrozen
(
game
.
AdminAddr
,
action
.
execaddr
,
value
)
// rollback
logger
.
Error
(
"GamePublish"
,
"addr"
,
game
.
AdminAddr
,
"execaddr"
,
action
.
execaddr
,
"amount"
,
value
,
"err"
,
err
)
return
nil
,
err
}
logs
=
append
(
logs
,
receipt
.
Logs
...
)
kv
=
append
(
kv
,
receipt
.
KV
...
)
//}
value
:=
int64
(
player
.
Bet
.
BetsNumber
*
game
.
OneBet
+
game
.
Fee
)
receipt
,
err
:=
action
.
coinsAccount
.
ExecTransfer
(
player
.
Addr
,
game
.
AdminAddr
,
action
.
execaddr
,
value
)
if
err
!=
nil
{
action
.
coinsAccount
.
ExecFrozen
(
game
.
AdminAddr
,
action
.
execaddr
,
value
)
// rollback
logger
.
Error
(
"GamePublish"
,
"addr"
,
game
.
AdminAddr
,
"execaddr"
,
action
.
execaddr
,
"amount"
,
value
,
"err"
,
err
)
return
nil
,
err
}
logs
=
append
(
logs
,
receipt
.
Logs
...
)
kv
=
append
(
kv
,
receipt
.
KV
...
)
}
//计算竞猜正确的筹码总数
totalBetsNumber
:=
uint32
(
0
)
...
...
@@ -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
)
logs
=
append
(
logs
,
receiptLog
)
kv
=
append
(
kv
,
action
.
saveGame
(
game
)
...
)
...
...
@@ -834,7 +785,7 @@ func (action *Action) GameAbort(pbend *pkt.GuessGameAbort) (*types.Receipt, erro
action
.
RefreshStatusByTime
(
game
)
//如果游戏超时,则任何地址都可以Abort,否则只有创建游戏的地址可以Abort
if
game
.
Status
!=
pkt
.
GuessGame
Action
TimeOut
{
if
game
.
Status
!=
pkt
.
GuessGame
Status
TimeOut
{
if
game
.
AdminAddr
!=
action
.
fromaddr
{
logger
.
Error
(
"GameAbort"
,
"addr"
,
action
.
fromaddr
,
"execaddr"
,
action
.
execaddr
,
"Only admin can abort"
,
action
.
fromaddr
,
"status"
,
game
.
Status
)
...
...
@@ -845,8 +796,8 @@ func (action *Action) GameAbort(pbend *pkt.GuessGameAbort) (*types.Receipt, erro
//激活冻结账户
for
i
:=
0
;
i
<
len
(
game
.
Plays
);
i
++
{
player
:=
game
.
Plays
[
i
]
value
:=
int64
(
player
.
Bet
.
BetsNumber
*
game
.
OneBet
)
receipt
,
err
:=
action
.
coinsAccount
.
ExecActive
(
player
.
Addr
,
action
.
execaddr
,
)
value
:=
int64
(
player
.
Bet
.
BetsNumber
*
game
.
OneBet
+
game
.
Fee
)
receipt
,
err
:=
action
.
coinsAccount
.
ExecActive
(
player
.
Addr
,
action
.
execaddr
,
value
)
if
err
!=
nil
{
logger
.
Error
(
"GameAbort"
,
"addr"
,
player
.
Addr
,
"execaddr"
,
action
.
execaddr
,
"amount"
,
value
,
"err"
,
err
)
continue
...
...
@@ -854,7 +805,7 @@ func (action *Action) GameAbort(pbend *pkt.GuessGameAbort) (*types.Receipt, erro
logs
=
append
(
logs
,
receipt
.
Logs
...
)
kv
=
append
(
kv
,
receipt
.
KV
...
)
}
game
.
Status
=
pkt
.
GuessGame
Action
Abort
game
.
Status
=
pkt
.
GuessGame
Status
Abort
game
.
Index
=
action
.
getIndex
(
game
)
receiptLog
:=
action
.
GetReceiptLog
(
game
)
...
...
@@ -891,18 +842,19 @@ func isLegalOption(options []string, option string) bool {
return
false
}
func
(
action
*
Action
)
RefreshStatusByTime
(
game
*
pkt
.
GuessGame
)
bool
{
func
(
action
*
Action
)
RefreshStatusByTime
(
game
*
pkt
.
GuessGame
)
(
canBet
bool
)
{
// 检查区块高度是否超过最大下注高度限制,看是否可以下注
if
game
.
GetMaxHeight
()
<=
action
.
height
{
logger
.
Error
(
"GameBet"
,
"addr"
,
action
.
fromaddr
,
"execaddr"
,
action
.
execaddr
,
"Height over limit"
,
action
.
height
,
"MaxHeight"
,
game
.
GetMaxHeight
())
if
game
.
GetExpireHeight
()
>
action
.
height
{
game
.
Status
=
pkt
.
GuessGame
Action
StopBet
game
.
Status
=
pkt
.
GuessGame
Status
StopBet
}
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 {
if
err
!=
nil
{
logger
.
Error
(
"GameBet"
,
"addr"
,
action
.
fromaddr
,
"execaddr"
,
action
.
execaddr
,
"Parse MaxTime failed"
,
game
.
GetMaxTime
())
return
false
canBet
=
true
return
canBet
}
tExpire
,
err
:=
time
.
Parse
(
"2006-01-02 15:04:05"
,
game
.
GetExpire
())
if
err
!=
nil
{
logger
.
Error
(
"GameBet"
,
"addr"
,
action
.
fromaddr
,
"execaddr"
,
action
.
execaddr
,
"Parse Expire failed"
,
game
.
GetExpire
())
return
false
canBet
=
true
return
canBet
}
tNow
:=
time
.
Now
()
...
...
@@ -927,16 +881,18 @@ func (action *Action) RefreshStatusByTime(game *pkt.GuessGame) bool {
game
.
GetMaxTime
())
if
tNow
.
After
(
tExpire
)
{
game
.
Status
=
pkt
.
GuessGame
Action
TimeOut
game
.
Status
=
pkt
.
GuessGame
Status
TimeOut
}
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
{
...
...
@@ -980,4 +936,4 @@ func (action *Action) CheckTime(start *pkt.GuessGameStart) bool {
}
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
import
(
"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
)
}
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
())
if
err
!=
nil
{
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
)
if
err
!=
nil
{
return
nil
,
err
...
...
@@ -30,7 +30,7 @@ func (g *PokerBull) Query_QueryGameByAddr(in *pkt.QueryPBGameInfo) (types.Messag
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
)
if
err
!=
nil
{
return
nil
,
err
...
...
plugin/dapp/guess/proto/guess.proto
View file @
9fe46fb1
...
...
@@ -8,28 +8,30 @@ package types;
message
GuessGame
{
string
gameId
=
1
;
//游戏ID
uint32
status
=
2
;
//游戏的状态:创建->投注->截止投注->开奖
int64
startTime
=
3
;
//创建游戏的时间
string
startTxHash
=
4
;
//创建游戏的交易hash
string
topic
=
5
;
//主题
string
category
=
6
;
//分类
string
options
=
7
;
//选项
string
maxTime
=
8
;
//截止下注时间
int64
maxHeight
=
9
;
//截止下注的块高
string
symbol
=
10
;
//bty或者具体token
string
exec
=
11
;
//coins或者token
uint32
oneBet
=
12
;
//一注等于多少bty或者token
uint32
maxBets
=
13
;
//单次可以下多少注,默认100
uint32
maxBetsNumber
=
14
;
//最多可以下多少注
uint32
fee
=
15
;
//收取费用,不带则表示不收费
string
feeAddr
=
16
;
//收费地址
string
expire
=
17
;
//游戏过期时间
int64
expireHeight
=
18
;
//游戏过期区块高度
string
adminAddr
=
19
;
//游戏创建者地址,只有该地址可以开奖
uint32
betsNumber
=
20
;
//已下注数,如果数量达到maxBetsNumber,则不允许再下注
repeated
GuessPlayer
plays
=
21
;
//参与游戏下注的玩家投注信息
string
result
=
22
;
repeated
GuessBet
bets
=
23
;
int64
index
=
24
;
uint32
preStatus
=
3
;
int64
startTime
=
4
;
//创建游戏的时间
string
startTxHash
=
5
;
//创建游戏的交易hash
string
topic
=
6
;
//主题
string
category
=
7
;
//分类
string
options
=
8
;
//选项
string
maxTime
=
9
;
//截止下注时间
int64
maxHeight
=
10
;
//截止下注的块高
string
symbol
=
11
;
//bty或者具体token
string
exec
=
12
;
//coins或者token
uint32
oneBet
=
13
;
//一注等于多少bty或者token
uint32
maxBets
=
14
;
//单次可以下多少注,默认100
uint32
maxBetsNumber
=
15
;
//最多可以下多少注
uint32
fee
=
16
;
//收取费用,不带则表示不收费
string
feeAddr
=
17
;
//收费地址
string
expire
=
18
;
//游戏过期时间
int64
expireHeight
=
19
;
//游戏过期区块高度
string
adminAddr
=
20
;
//游戏创建者地址,只有该地址可以开奖
uint32
betsNumber
=
21
;
//已下注数,如果数量达到maxBetsNumber,则不允许再下注
repeated
GuessPlayer
plays
=
22
;
//参与游戏下注的玩家投注信息
string
result
=
23
;
repeated
GuessBet
bets
=
24
;
int64
index
=
25
;
int64
preIndex
=
26
;
}
message
GuessPlayer
{
...
...
@@ -40,6 +42,10 @@ message GuessPlayer {
message
GuessBet
{
string
option
=
1
;
uint32
betsNumber
=
2
;
bool
isWinner
=
3
;
uint32
profit
=
4
;
int64
index
=
5
;
int64
preIndex
=
6
;
}
...
...
@@ -224,6 +230,25 @@ message ReplyPBGameList {
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
{
string
gameId
=
1
;
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
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
{
return
types
.
ErrInvalidParam
}
head
:=
&
pb
.
PB
GameQuery
{
head
:=
&
pb
.
Guess
GameQuery
{
GameId
:
parm
.
GameId
,
}
reply
,
err
:=
c
.
cli
.
Show
(
context
.
Background
(),
head
)
...
...
plugin/dapp/guess/rpc/rpc.go
View file @
9fe46fb1
...
...
@@ -6,21 +6,14 @@ package rpc
import
(
"context"
"fmt"
"github.com/33cn/chain33/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
)
{
if
head
.
MaxBetsNumber
>
executor
.
MaxBetsNumber
{
return
nil
,
fmt
.
Errorf
(
"Max Bets Number Should Be Maximum %d"
,
executor
.
MaxBetsNumber
)
}
val
:=
&
pb
.
GuessGameAction
{
Ty
:
pb
.
GuessGameActionStart
,
Value
:
&
pb
.
GuessGameAction_Start
{
head
},
Value
:
&
pb
.
GuessGameAction_Start
{
head
},
}
tx
,
err
:=
types
.
CreateFormatTx
(
pb
.
GuessX
,
types
.
Encode
(
val
))
if
err
!=
nil
{
...
...
@@ -69,12 +62,12 @@ func (c *channelClient) GuessPublish(ctx context.Context, head *pb.GuessGamePubl
return
&
types
.
UnsignTx
{
Data
:
data
},
nil
}
func
(
c
*
channelClient
)
Show
(
ctx
context
.
Context
,
head
*
pb
.
PB
GameQuery
)
(
*
types
.
UnsignTx
,
error
)
{
val
:=
&
pb
.
PB
GameAction
{
Ty
:
pb
.
PB
GameActionQuery
,
Value
:
&
pb
.
PB
GameAction_Query
{
head
},
func
(
c
*
channelClient
)
Show
(
ctx
context
.
Context
,
head
*
pb
.
Guess
GameQuery
)
(
*
types
.
UnsignTx
,
error
)
{
val
:=
&
pb
.
Guess
GameAction
{
Ty
:
pb
.
Guess
GameActionQuery
,
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
{
return
nil
,
err
}
...
...
plugin/dapp/guess/types/const.go
View file @
9fe46fb1
...
...
@@ -13,10 +13,16 @@ const (
GuessGameActionStart
=
iota
+
1
GuessGameActionBet
GuessGameActionStopBet
GuessGameActionAbort
GuessGameActionPublish
GuessGameActionTimeOut
GuessGameActionQuery
GuessGameStatusStart
=
iota
+
1
GuessGameStatusBet
GuessGameStatusStopBet
GuessGameStatusAbort
GuessGameStatusPublish
GuessGameStatusTimeOut
)
const
(
...
...
@@ -43,10 +49,6 @@ const (
//建议用github的组织名称,或者用户名字开头, 再加上自己的插件的名字
//如果发生重名,可以通过配置文件修改这些名字
var
(
JRPCName
=
"pokerbull"
PokerBullX
=
"pokerbull"
ExecerPokerBull
=
[]
byte
(
PokerBullX
)
JRPCName
=
"guess"
GuessX
=
"guess"
ExecerGuess
=
[]
byte
(
GuessX
)
...
...
@@ -58,4 +60,6 @@ const (
FuncName_QueryGameById
=
"QueryGameById"
FuncName_QueryGameByAddr
=
"QueryGameByAddr"
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
type
GuessGame
struct
{
GameId
string
`protobuf:"bytes,1,opt,name=gameId,proto3" json:"gameId,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"`
StartTxHash
string
`protobuf:"bytes,4,opt,name=startTxHash,proto3" json:"startTxHash,omitempty"`
Topic
string
`protobuf:"bytes,5,opt,name=topic,proto3" json:"topic,omitempty"`
Category
string
`protobuf:"bytes,6,opt,name=category,proto3" json:"category,omitempty"`
Options
string
`protobuf:"bytes,7,opt,name=options,proto3" json:"options,omitempty"`
MaxTime
string
`protobuf:"bytes,8,opt,name=maxTime,proto3" json:"maxTime,omitempty"`
MaxHeight
int64
`protobuf:"varint,9,opt,name=maxHeight,proto3" json:"maxHeight,omitempty"`
Symbol
string
`protobuf:"bytes,10,opt,name=symbol,proto3" json:"symbol,omitempty"`
Exec
string
`protobuf:"bytes,11,opt,name=exec,proto3" json:"exec,omitempty"`
OneBet
uint32
`protobuf:"varint,12,opt,name=oneBet,proto3" json:"oneBet,omitempty"`
MaxBets
uint32
`protobuf:"varint,13,opt,name=maxBets,proto3" json:"maxBets,omitempty"`
MaxBetsNumber
uint32
`protobuf:"varint,14,opt,name=maxBetsNumber,proto3" json:"maxBetsNumber,omitempty"`
Fee
uint32
`protobuf:"varint,15,opt,name=fee,proto3" json:"fee,omitempty"`
FeeAddr
string
`protobuf:"bytes,16,opt,name=feeAddr,proto3" json:"feeAddr,omitempty"`
Expire
string
`protobuf:"bytes,17,opt,name=expire,proto3" json:"expire,omitempty"`
ExpireHeight
int64
`protobuf:"varint,18,opt,name=expireHeight,proto3" json:"expireHeight,omitempty"`
AdminAddr
string
`protobuf:"bytes,19,opt,name=adminAddr,proto3" json:"adminAddr,omitempty"`
BetsNumber
uint32
`protobuf:"varint,20,opt,name=betsNumber,proto3" json:"betsNumber,omitempty"`
Plays
[]
*
GuessPlayer
`protobuf:"bytes,21,rep,name=plays,proto3" json:"plays,omitempty"`
Result
string
`protobuf:"bytes,22,opt,name=result,proto3" json:"result,omitempty"`
Bets
[]
*
GuessBet
`protobuf:"bytes,23,rep,name=bets,proto3" json:"bets,omitempty"`
Index
int64
`protobuf:"varint,24,opt,name=index,proto3" json:"index,omitempty"`
PreStatus
uint32
`protobuf:"varint,3,opt,name=preStatus,proto3" json:"preStatus,omitempty"`
StartTime
int64
`protobuf:"varint,4,opt,name=startTime,proto3" json:"startTime,omitempty"`
StartTxHash
string
`protobuf:"bytes,5,opt,name=startTxHash,proto3" json:"startTxHash,omitempty"`
Topic
string
`protobuf:"bytes,6,opt,name=topic,proto3" json:"topic,omitempty"`
Category
string
`protobuf:"bytes,7,opt,name=category,proto3" json:"category,omitempty"`
Options
string
`protobuf:"bytes,8,opt,name=options,proto3" json:"options,omitempty"`
MaxTime
string
`protobuf:"bytes,9,opt,name=maxTime,proto3" json:"maxTime,omitempty"`
MaxHeight
int64
`protobuf:"varint,10,opt,name=maxHeight,proto3" json:"maxHeight,omitempty"`
Symbol
string
`protobuf:"bytes,11,opt,name=symbol,proto3" json:"symbol,omitempty"`
Exec
string
`protobuf:"bytes,12,opt,name=exec,proto3" json:"exec,omitempty"`
OneBet
uint32
`protobuf:"varint,13,opt,name=oneBet,proto3" json:"oneBet,omitempty"`
MaxBets
uint32
`protobuf:"varint,14,opt,name=maxBets,proto3" json:"maxBets,omitempty"`
MaxBetsNumber
uint32
`protobuf:"varint,15,opt,name=maxBetsNumber,proto3" json:"maxBetsNumber,omitempty"`
Fee
uint32
`protobuf:"varint,16,opt,name=fee,proto3" json:"fee,omitempty"`
FeeAddr
string
`protobuf:"bytes,17,opt,name=feeAddr,proto3" json:"feeAddr,omitempty"`
Expire
string
`protobuf:"bytes,18,opt,name=expire,proto3" json:"expire,omitempty"`
ExpireHeight
int64
`protobuf:"varint,19,opt,name=expireHeight,proto3" json:"expireHeight,omitempty"`
AdminAddr
string
`protobuf:"bytes,20,opt,name=adminAddr,proto3" json:"adminAddr,omitempty"`
BetsNumber
uint32
`protobuf:"varint,21,opt,name=betsNumber,proto3" json:"betsNumber,omitempty"`
Plays
[]
*
GuessPlayer
`protobuf:"bytes,22,rep,name=plays,proto3" json:"plays,omitempty"`
Result
string
`protobuf:"bytes,23,opt,name=result,proto3" json:"result,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_unrecognized
[]
byte
`json:"-"`
XXX_sizecache
int32
`json:"-"`
...
...
@@ -93,6 +95,13 @@ func (m *GuessGame) GetStatus() uint32 {
return
0
}
func
(
m
*
GuessGame
)
GetPreStatus
()
uint32
{
if
m
!=
nil
{
return
m
.
PreStatus
}
return
0
}
func
(
m
*
GuessGame
)
GetStartTime
()
int64
{
if
m
!=
nil
{
return
m
.
StartTime
...
...
@@ -247,6 +256,13 @@ func (m *GuessGame) GetIndex() int64 {
return
0
}
func
(
m
*
GuessGame
)
GetPreIndex
()
int64
{
if
m
!=
nil
{
return
m
.
PreIndex
}
return
0
}
type
GuessPlayer
struct
{
Addr
string
`protobuf:"bytes,1,opt,name=addr,proto3" json:"addr,omitempty"`
Bet
*
GuessBet
`protobuf:"bytes,2,opt,name=bet,proto3" json:"bet,omitempty"`
...
...
@@ -297,6 +313,10 @@ func (m *GuessPlayer) GetBet() *GuessBet {
type
GuessBet
struct
{
Option
string
`protobuf:"bytes,1,opt,name=option,proto3" json:"option,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_unrecognized
[]
byte
`json:"-"`
XXX_sizecache
int32
`json:"-"`
...
...
@@ -341,6 +361,34 @@ func (m *GuessBet) GetBetsNumber() uint32 {
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
{
GameId
string
`protobuf:"bytes,1,opt,name=gameId,proto3" json:"gameId,omitempty"`
...
...
@@ -2114,6 +2162,186 @@ func (m *ReplyPBGameList) GetGames() []*PokerBull {
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
{
GameId
string
`protobuf:"bytes,1,opt,name=gameId,proto3" json:"gameId,omitempty"`
Status
int32
`protobuf:"varint,2,opt,name=status,proto3" json:"status,omitempty"`
...
...
@@ -2134,7 +2362,7 @@ func (m *ReceiptPBGame) Reset() { *m = ReceiptPBGame{} }
func
(
m
*
ReceiptPBGame
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
ReceiptPBGame
)
ProtoMessage
()
{}
func
(
*
ReceiptPBGame
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
27
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
31
}
}
func
(
m
*
ReceiptPBGame
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
...
@@ -2239,7 +2467,7 @@ func (m *ReceiptGuessGame) Reset() { *m = ReceiptGuessGame{} }
func
(
m
*
ReceiptGuessGame
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
ReceiptGuessGame
)
ProtoMessage
()
{}
func
(
*
ReceiptGuessGame
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
28
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
32
}
}
func
(
m
*
ReceiptGuessGame
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
...
@@ -2312,7 +2540,7 @@ func (m *GuessStartTxReq) Reset() { *m = GuessStartTxReq{} }
func
(
m
*
GuessStartTxReq
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
GuessStartTxReq
)
ProtoMessage
()
{}
func
(
*
GuessStartTxReq
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
29
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
33
}
}
func
(
m
*
GuessStartTxReq
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
...
@@ -2444,7 +2672,7 @@ func (m *GuessBetTxReq) Reset() { *m = GuessBetTxReq{} }
func
(
m
*
GuessBetTxReq
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
GuessBetTxReq
)
ProtoMessage
()
{}
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
{
...
...
@@ -2497,7 +2725,7 @@ func (m *GuessAbortTxReq) Reset() { *m = GuessAbortTxReq{} }
func
(
m
*
GuessAbortTxReq
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
GuessAbortTxReq
)
ProtoMessage
()
{}
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
{
...
...
@@ -2537,7 +2765,7 @@ func (m *GuessPublishTxReq) Reset() { *m = GuessPublishTxReq{} }
func
(
m
*
GuessPublishTxReq
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
GuessPublishTxReq
)
ProtoMessage
()
{}
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
{
...
...
@@ -2584,7 +2812,7 @@ func (m *PBContinueTxReq) Reset() { *m = PBContinueTxReq{} }
func
(
m
*
PBContinueTxReq
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
PBContinueTxReq
)
ProtoMessage
()
{}
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
{
...
...
@@ -2631,7 +2859,7 @@ func (m *PBQuitTxReq) Reset() { *m = PBQuitTxReq{} }
func
(
m
*
PBQuitTxReq
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
PBQuitTxReq
)
ProtoMessage
()
{}
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
{
...
...
@@ -2678,7 +2906,7 @@ func (m *PBQueryReq) Reset() { *m = PBQueryReq{} }
func
(
m
*
PBQueryReq
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
PBQueryReq
)
ProtoMessage
()
{}
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
{
...
...
@@ -2727,7 +2955,7 @@ func (m *GuessGameRecord) Reset() { *m = GuessGameRecord{} }
func
(
m
*
GuessGameRecord
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
GuessGameRecord
)
ProtoMessage
()
{}
func
(
*
GuessGameRecord
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
36
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
40
}
}
func
(
m
*
GuessGameRecord
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
...
@@ -2781,7 +3009,7 @@ func (m *GuessGameIndexRecord) Reset() { *m = GuessGameIndexRecord{} }
func
(
m
*
GuessGameIndexRecord
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
GuessGameIndexRecord
)
ProtoMessage
()
{}
func
(
*
GuessGameIndexRecord
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
37
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
41
}
}
func
(
m
*
GuessGameIndexRecord
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
...
@@ -2827,7 +3055,7 @@ func (m *GuessGameRecords) Reset() { *m = GuessGameRecords{} }
func
(
m
*
GuessGameRecords
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
GuessGameRecords
)
ProtoMessage
()
{}
func
(
*
GuessGameRecords
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
38
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
42
}
}
func
(
m
*
GuessGameRecords
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
...
@@ -2883,6 +3111,10 @@ func init() {
proto
.
RegisterType
((
*
ReplyPBGame
)(
nil
),
"types.ReplyPBGame"
)
proto
.
RegisterType
((
*
QueryPBGameInfos
)(
nil
),
"types.QueryPBGameInfos"
)
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
((
*
ReceiptGuessGame
)(
nil
),
"types.ReceiptGuessGame"
)
proto
.
RegisterType
((
*
GuessStartTxReq
)(
nil
),
"types.GuessStartTxReq"
)
...
...
@@ -2900,106 +3132,112 @@ func init() {
func
init
()
{
proto
.
RegisterFile
(
"guess.proto"
,
fileDescriptor_7574406c5d3430e8
)
}
var
fileDescriptor_7574406c5d3430e8
=
[]
byte
{
// 1573 bytes of a gzipped FileDescriptorProto
0x1f
,
0x8b
,
0x08
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x02
,
0xff
,
0xe4
,
0x58
,
0x5f
,
0x6f
,
0x13
,
0x47
,
0x10
,
0x8f
,
0x7d
,
0x3e
,
0xff
,
0x19
,
0xc7
,
0x4e
,
0xb2
,
0x40
,
0x58
,
0xa1
,
0xaa
,
0x4a
,
0x8f
,
0x14
,
0x42
,
0x55
,
0x50
,
0x95
,
0x48
,
0xb4
,
0xb4
,
0x52
,
0xa5
,
0x1c
,
0x48
,
0x04
,
0x09
,
0x21
,
0xb3
,
0xa1
,
0xa2
,
0xaf
,
0x17
,
0x7b
,
0x09
,
0x27
,
0xec
,
0x3b
,
0xe7
,
0xee
,
0x0c
,
0xf1
,
0x5b
,
0xd5
,
0x7e
,
0x82
,
0x3e
,
0xf4
,
0x13
,
0x54
,
0xea
,
0xb7
,
0xea
,
0x73
,
0x3f
,
0x42
,
0x5f
,
0xab
,
0x9d
,
0xd9
,
0xf5
,
0xed
,
0x5d
,
0xce
,
0x86
,
0x20
,
0xde
,
0xfa
,
0xb6
,
0xb3
,
0x33
,
0x3b
,
0x3b
,
0x7f
,
0x77
,
0x7e
,
0x77
,
0xd0
,
0x3d
,
0x9d
,
0xc9
,
0x34
,
0xbd
,
0x37
,
0x4d
,
0xe2
,
0x2c
,
0x66
,
0x6e
,
0x36
,
0x9f
,
0xca
,
0xf4
,
0xc6
,
0x56
,
0x96
,
0x04
,
0x51
,
0x1a
,
0x0c
,
0xb3
,
0x30
,
0x8e
,
0x88
,
0xe3
,
0xfd
,
0xe5
,
0x42
,
0xe7
,
0xb1
,
0x92
,
0x7c
,
0x1c
,
0x4c
,
0x24
,
0xdb
,
0x86
,
0xe6
,
0x69
,
0x30
,
0x91
,
0x4f
,
0x46
,
0xbc
,
0xb6
,
0x53
,
0xdb
,
0xeb
,
0x08
,
0x4d
,
0xa9
,
0xfd
,
0x34
,
0x0b
,
0xb2
,
0x59
,
0xca
,
0xeb
,
0x3b
,
0xb5
,
0xbd
,
0x9e
,
0xd0
,
0x14
,
0xfb
,
0x0c
,
0x3a
,
0x69
,
0x16
,
0x24
,
0xd9
,
0x8b
,
0x70
,
0x22
,
0xb9
,
0xb3
,
0x53
,
0xdb
,
0x73
,
0x44
,
0xbe
,
0xc1
,
0x76
,
0xa0
,
0x4b
,
0xc4
,
0xf9
,
0x51
,
0x90
,
0xbe
,
0xe6
,
0x0d
,
0x54
,
0x69
,
0x6f
,
0xb1
,
0xab
,
0xe0
,
0x66
,
0xf1
,
0x34
,
0x1c
,
0x72
,
0x17
,
0x79
,
0x44
,
0xb0
,
0x1b
,
0xd0
,
0x1e
,
0x06
,
0x99
,
0x3c
,
0x8d
,
0x93
,
0x39
,
0x6f
,
0x22
,
0x63
,
0x41
,
0x33
,
0x0e
,
0xad
,
0x78
,
0xaa
,
0xec
,
0x4f
,
0x79
,
0x0b
,
0x59
,
0x86
,
0x54
,
0x9c
,
0x49
,
0x70
,
0x8e
,
0x96
,
0xb4
,
0x89
,
0xa3
,
0x49
,
0x65
,
0xe5
,
0x24
,
0x38
,
0x3f
,
0x92
,
0xe1
,
0xe9
,
0xeb
,
0x8c
,
0x77
,
0xc8
,
0xca
,
0xc5
,
0x06
,
0xfa
,
0x36
,
0x9f
,
0x9c
,
0xc4
,
0x63
,
0x0e
,
0xe4
,
0x33
,
0x51
,
0x8c
,
0x41
,
0x43
,
0x9e
,
0xcb
,
0x21
,
0xef
,
0xe2
,
0x2e
,
0xae
,
0x95
,
0x6c
,
0x1c
,
0x49
,
0x5f
,
0x66
,
0x7c
,
0x9d
,
0xe2
,
0x40
,
0x94
,
0xbe
,
0xdb
,
0x97
,
0x59
,
0xca
,
0x7b
,
0xc8
,
0x30
,
0x24
,
0xdb
,
0x85
,
0x9e
,
0x5e
,
0x3e
,
0x9b
,
0x4d
,
0x4e
,
0x64
,
0xc2
,
0xfb
,
0xc8
,
0x2f
,
0x6e
,
0xb2
,
0x4d
,
0x70
,
0x5e
,
0x49
,
0xc9
,
0x37
,
0x90
,
0xa7
,
0x96
,
0x4a
,
0xe3
,
0x2b
,
0x29
,
0x0f
,
0x47
,
0xa3
,
0x84
,
0x6f
,
0x92
,
0x37
,
0x9a
,
0x54
,
0x36
,
0xc8
,
0xf3
,
0x69
,
0x98
,
0x48
,
0xbe
,
0x45
,
0xf6
,
0x12
,
0xc5
,
0x3c
,
0x58
,
0xa7
,
0x95
,
0x76
,
0x94
,
0xa1
,
0xa3
,
0x85
,
0x3d
,
0x15
,
0x89
,
0x60
,
0x34
,
0x09
,
0x23
,
0xd4
,
0x7b
,
0x05
,
0x8f
,
0xe7
,
0x1b
,
0xec
,
0x73
,
0x80
,
0x93
,
0xdc
,
0xd0
,
0xab
,
0x68
,
0x8c
,
0xb5
,
0xc3
,
0xf6
,
0xc0
,
0x9d
,
0x8e
,
0x83
,
0x79
,
0xca
,
0xaf
,
0xed
,
0x38
,
0x7b
,
0xdd
,
0x7d
,
0x76
,
0x0f
,
0xab
,
0xea
,
0x1e
,
0x96
,
0xcf
,
0x60
,
0x1c
,
0xcc
,
0x65
,
0x22
,
0x48
,
0x40
,
0xd9
,
0x98
,
0xc8
,
0x74
,
0x36
,
0xce
,
0xf8
,
0x36
,
0xd9
,
0x48
,
0x14
,
0xbb
,
0x09
,
0x0d
,
0xa5
,
0x8f
,
0x5f
,
0x47
,
0x05
,
0x1b
,
0xb6
,
0x02
,
0x5f
,
0x66
,
0x02
,
0x99
,
0xaa
,
0x28
,
0xc2
,
0x68
,
0x24
,
0xcf
,
0x39
,
0x47
,
0x0f
,
0x88
,
0xf0
,
0x1e
,
0x41
,
0xd7
,
0xba
,
0x48
,
0x65
,
0x27
,
0x50
,
0x4e
,
0x50
,
0x9d
,
0xe2
,
0x9a
,
0x7d
,
0x01
,
0xce
,
0x89
,
0xcc
,
0xb0
,
0x44
,
0x2b
,
0x94
,
0x2b
,
0x9e
,
0xe7
,
0x43
,
0xdb
,
0x6c
,
0x60
,
0x32
,
0xb1
,
0x76
,
0x4c
,
0xb1
,
0x13
,
0x55
,
0x0a
,
0x43
,
0xbd
,
0x1c
,
0x06
,
0xef
,
0x5f
,
0x07
,
0x3a
,
0x83
,
0xf8
,
0x8d
,
0x4c
,
0xfc
,
0xd9
,
0x78
,
0xfc
,
0x81
,
0x2d
,
0xe3
,
0x7e
,
0xca
,
0x96
,
0x79
,
0x1b
,
0x8c
,
0x67
,
0x12
,
0x5b
,
0xc6
,
0x11
,
0x44
,
0xb0
,
0x5d
,
0x70
,
0xa7
,
0xca
,
0x24
,
0xec
,
0x97
,
0xee
,
0x7e
,
0x5f
,
0x3b
,
0x3f
,
0xf0
,
0xd1
,
0x50
,
0x41
,
0x4c
,
0x76
,
0x07
,
0x5a
,
0x53
,
0x0c
,
0x9f
,
0x6a
,
0x1e
,
0x3b
,
0x03
,
0x03
,
0x5f
,
0xe7
,
0xcf
,
0xf0
,
0x95
,
0x99
,
0xb4
,
0x7c
,
0x36
,
0x9b
,
0x60
,
0x3f
,
0xb9
,
0x22
,
0xdf
,
0x50
,
0x8a
,
0x28
,
0xa3
,
0x29
,
0xef
,
0x94
,
0x14
,
0x09
,
0xdc
,
0x17
,
0x86
,
0x9f
,
0x67
,
0x13
,
0xac
,
0x6c
,
0xa2
,
0xfa
,
0x44
,
0xbe
,
0x7d
,
0x82
,
0x9c
,
0x2e
,
0x45
,
0x61
,
0xb1
,
0xa1
,
0x1e
,
0x80
,
0xb3
,
0x59
,
0x48
,
0x21
,
0x5a
,
0x47
,
0xe6
,
0x82
,
0x56
,
0xd9
,
0xc1
,
0x35
,
0x05
,
0xa8
,
0x87
,
0x01
,
0xb2
,
0x76
,
0x14
,
0x7f
,
0x24
,
0x83
,
0xb1
,
0x4c
,
0xb0
,
0xc6
,
0xfb
,
0xc4
,
0xcf
,
0x77
,
0xd4
,
0xcd
,
0x61
,
0xfa
,
0x32
,
0x08
,
0xb3
,
0x30
,
0x3a
,
0xc5
,
0x86
,
0x6b
,
0x8b
,
0x7c
,
0x43
,
0xdb
,
0x75
,
0x4c
,
0x89
,
0xdb
,
0xd4
,
0x6e
,
0x9b
,
0x0d
,
0xef
,
0xd7
,
0x1a
,
0x34
,
0x07
,
0xfe
,
0x51
,
0x10
,
0x8d
,
0x94
,
0x5b
,
0xc3
,
0x20
,
0x19
,
0xa5
,
0xbc
,
0xb6
,
0xe3
,
0xec
,
0xb9
,
0x82
,
0x08
,
0xab
,
0xee
,
0x75
,
0xd2
,
0x75
,
0xdd
,
0x73
,
0x68
,
0xa9
,
0x0a
,
0x95
,
0x69
,
0x8a
,
0x29
,
0xef
,
0x08
,
0x43
,
0x62
,
0x78
,
0xd2
,
0x97
,
0x61
,
0x84
,
0xa9
,
0x6e
,
0x0b
,
0x22
,
0x54
,
0x00
,
0xc6
,
0xf2
,
0xad
,
0x4c
,
0x82
,
0x53
,
0xca
,
0xb3
,
0x2b
,
0x16
,
0xb4
,
0xf7
,
0x0e
,
0xda
,
0x26
,
0x5d
,
0xec
,
0x26
,
0xb8
,
0xaf
,
0x83
,
0x48
,
0x5b
,
0xd1
,
0xdd
,
0xef
,
0x2d
,
0xb2
,
0xa0
,
0x6c
,
0x14
,
0xc4
,
0xb3
,
0x2f
,
0xaf
,
0x17
,
0x2f
,
0xdf
,
0x86
,
0x66
,
0x46
,
0x71
,
0xa4
,
0x42
,
0xd4
,
0x94
,
0x32
,
0x2a
,
0x91
,
0xc1
,
0x68
,
0x6e
,
0x8c
,
0x42
,
0xc2
,
0xfb
,
0xb3
,
0xa6
,
0x6e
,
0x16
,
0xa6
,
0x93
,
0x3f
,
0xe0
,
0xe6
,
0x6d
,
0x68
,
0xbe
,
0x0b
,
0xa3
,
0x48
,
0x77
,
0x51
,
0x47
,
0x68
,
0xaa
,
0xe0
,
0x9e
,
0x53
,
0x74
,
0x4f
,
0x9d
,
0xa1
,
0x6c
,
0xe9
,
0xe2
,
0xd7
,
0x14
,
0xbb
,
0x05
,
0x7d
,
0x5a
,
0x3d
,
0x2d
,
0x06
,
0xa6
,
0xb4
,
0xeb
,
0x3d
,
0x80
,
0x96
,
0xae
,
0xfa
,
0x25
,
0x39
,
0xe2
,
0xd0
,
0x9a
,
0xc6
,
0x61
,
0x94
,
0x69
,
0xab
,
0x5c
,
0x61
,
0x48
,
0xef
,
0xef
,
0x1a
,
0xac
,
0x0f
,
0x7c
,
0x35
,
0x08
,
0x0f
,
0x71
,
0x44
,
0xb2
,
0xaf
,
0xc0
,
0xc5
,
0xd6
,
0xc3
,
0xd6
,
0xce
,
0x1f
,
0x3c
,
0x92
,
0x39
,
0x56
,
0x9c
,
0xa3
,
0x35
,
0x41
,
0x22
,
0xec
,
0x00
,
0xda
,
0xc3
,
0x38
,
0xca
,
0xc2
,
0x68
,
0x26
,
0xf5
,
0x0b
,
0x74
,
0xad
,
0x20
,
0xfe
,
0x50
,
0x33
,
0x8f
,
0xd6
,
0xc4
,
0x42
,
0x90
,
0xdd
,
0x86
,
0x86
,
0x2a
,
0x5d
,
0x0c
,
0x42
,
0x77
,
0x7f
,
0xab
,
0x70
,
0xe0
,
0xf9
,
0x2c
,
0x54
,
0xea
,
0x51
,
0x40
,
0x59
,
0x72
,
0x36
,
0x93
,
0x09
,
0x65
,
0xa4
,
0x6c
,
0xc9
,
0x73
,
0xc5
,
0x51
,
0x96
,
0xa0
,
0x08
,
0xeb
,
0x43
,
0x3d
,
0x9b
,
0x63
,
0xbb
,
0xb9
,
0xa2
,
0x9e
,
0xcd
,
0xfd
,
0x96
,
0x7e
,
0x31
,
0xbc
,
0x43
,
0xe8
,
0x5a
,
0xa6
,
0xe7
,
0x2f
,
0x49
,
0xcd
,
0x7e
,
0x49
,
0x0a
,
0x8d
,
0x5f
,
0x2f
,
0x35
,
0xbe
,
0xb7
,
0x07
,
0xfd
,
0xa2
,
0x3b
,
0xcb
,
0xde
,
0x3f
,
0x6f
,
0x17
,
0x20
,
0xf7
,
0x63
,
0xa9
,
0xd4
,
0x97
,
0xc6
,
0x24
,
0xf4
,
0x61
,
0xa9
,
0xd8
,
0x1f
,
0x75
,
0xd8
,
0x58
,
0xa0
,
0x14
,
0x9d
,
0x9c
,
0xbb
,
0xc5
,
0xe4
,
0x5c
,
0xb3
,
0xdf
,
0xfb
,
0x8a
,
0xfc
,
0xdc
,
0xb6
,
0x87
,
0xc3
,
0x95
,
0xb2
,
0xb0
,
0x2f
,
0x95
,
0xa8
,
0x92
,
0x50
,
0x7a
,
0x83
,
0x93
,
0x38
,
0x31
,
0x49
,
0xb9
,
0xa0
,
0xf7
,
0x50
,
0x31
,
0x95
,
0x5e
,
0x94
,
0x62
,
0x07
,
0xd0
,
0x9a
,
0xce
,
0x4e
,
0xc6
,
0xa1
,
0x7e
,
0xad
,
0xbb
,
0xfb
,
0xd7
,
0xcb
,
0x07
,
0x06
,
0xc4
,
0x3e
,
0x5a
,
0x13
,
0x46
,
0x52
,
0xdd
,
0x41
,
0xe9
,
0x74
,
0xab
,
0xef
,
0xa8
,
0xcc
,
0x68
,
0x13
,
0x27
,
0x51
,
0x21
,
0xa3
,
0xbf
,
0x38
,
0xd0
,
0x2f
,
0x3a
,
0x9c
,
0x43
,
0xaa
,
0x9a
,
0x0d
,
0xa9
,
0x2c
,
0xd8
,
0x54
,
0x2f
,
0xc2
,
0x26
,
0x1b
,
0x6c
,
0x39
,
0x17
,
0xc1
,
0x96
,
0x81
,
0x54
,
0x8d
,
0x15
,
0x90
,
0xca
,
0x5d
,
0x0e
,
0xa9
,
0x9a
,
0x95
,
0x90
,
0xaa
,
0x55
,
0x09
,
0xa9
,
0xda
,
0xcb
,
0x20
,
0x55
,
0xe7
,
0x3d
,
0x90
,
0x0a
,
0x56
,
0x40
,
0x2a
,
0x35
,
0x5b
,
0x1a
,
0x17
,
0x20
,
0xd5
,
0xfa
,
0x32
,
0x48
,
0xd5
,
0x5b
,
0x09
,
0xa9
,
0xfa
,
0x17
,
0x21
,
0x95
,
0xf7
,
0x33
,
0xac
,
0xdb
,
0x55
,
0xb4
,
0x0a
,
0x0f
,
0x68
,
0xb4
,
0x51
,
0x2f
,
0xa0
,
0x0d
,
0x0e
,
0x2d
,
0x8d
,
0x2d
,
0x30
,
0xfc
,
0x3d
,
0x61
,
0x48
,
0xd5
,
0x6b
,
0xc5
,
0xa2
,
0x5b
,
0xda
,
0x1e
,
0x3e
,
0x6c
,
0x96
,
0xab
,
0x6d
,
0x95
,
0x1d
,
0xd6
,
0x88
,
0x5a
,
0x40
,
0x33
,
0xef
,
0x3b
,
0xeb
,
0xb6
,
0x95
,
0xcd
,
0xa8
,
0xab
,
0xb1
,
0x6e
,
0xaa
,
0xd1
,
0x3b
,
0x83
,
0x9b
,
0x78
,
0x80
,
0x1a
,
0xf9
,
0x69
,
0x98
,
0x66
,
0xfe
,
0x9c
,
0x06
,
0xe6
,
0x61
,
0x34
,
0x1a
,
0x2c
,
0x30
,
0x43
,
0x0e
,
0x88
,
0x6a
,
0x65
,
0x40
,
0xb4
,
0xfc
,
0xc1
,
0xc9
,
0xe1
,
0x83
,
0x63
,
0x83
,
0xc1
,
0x17
,
0xe6
,
0xa1
,
0x16
,
0x72
,
0x18
,
0x27
,
0xa3
,
0x4b
,
0x83
,
0xb0
,
0x6a
,
0xad
,
0x87
,
0xb0
,
0x45
,
0x5a
,
0x11
,
0x85
,
0xbc
,
0x47
,
0xf5
,
0x42
,
0x45
,
0xdd
,
0x56
,
0xf1
,
0x23
,
0xf4
,
0x6c
,
0xc3
,
0x52
,
0x76
,
0x57
,
0x21
,
0x25
,
0x5c
,
0xea
,
0x49
,
0x79
,
0xa5
,
0xf0
,
0x74
,
0x93
,
0x98
,
0x30
,
0x32
,
0xde
,
0x1b
,
0xd8
,
0xb0
,
0x62
,
0xf9
,
0x24
,
0x7a
,
0x15
,
0x2f
,
0x35
,
0xc0
,
0x20
,
0xe0
,
0xba
,
0x85
,
0x80
,
0x73
,
0x7f
,
0x9d
,
0x6a
,
0x7f
,
0x1b
,
0xb6
,
0xb1
,
0x07
,
0xd0
,
0x15
,
0x72
,
0x3a
,
0xd6
,
0x97
,
0xb1
,
0x5d
,
0x68
,
0x28
,
0xd5
,
0xfa
,
0x3d
,
0xdd
,
0x34
,
0x76
,
0x1a
,
0xa4
,
0x2b
,
0x90
,
0xeb
,
0x7d
,
0x0d
,
0x9b
,
0x25
,
0x0b
,
0x71
,
0xa4
,
0x92
,
0x51
,
0xe4
,
0x64
,
0x47
,
0x18
,
0xd2
,
0x7b
,
0x00
,
0x1b
,
0xd6
,
0x15
,
0xaa
,
0x36
,
0xd8
,
0x2d
,
0x70
,
0x15
,
0xd7
,
0xc4
,
0xe3
,
0xe2
,
0x3d
,
0xc4
,
0xf6
,
0x7e
,
0xaf
,
0x43
,
0x4f
,
0xc8
,
0xa1
,
0x0c
,
0xa7
,
0x99
,
0x36
,
0xf0
,
0xb2
,
0x59
,
0x36
,
0x11
,
0x72
,
0xac
,
0x08
,
0x55
,
0x46
,
0xa2
,
0x08
,
0x47
,
0xdd
,
0x32
,
0x1c
,
0x2d
,
0x54
,
0x68
,
0xb3
,
0xa2
,
0x42
,
0x69
,
0x8c
,
0xb6
,
0x4a
,
0x63
,
0x34
,
0x87
,
0x99
,
0xed
,
0x32
,
0xcc
,
0xe4
,
0x39
,
0x10
,
0xef
,
0x50
,
0xc0
,
0x6c
,
0xdc
,
0xbd
,
0x00
,
0xa0
,
0x50
,
0x06
,
0xa0
,
0x63
,
0xd8
,
0xd4
,
0x21
,
0xf9
,
0xf8
,
0x6f
,
0xf6
,
0x0f
,
0x8e
,
0x8a
,
0xf7
,
0x9b
,
0xa3
,
0xa7
,
0xee
,
0x31
,
0x7d
,
0x7f
,
0x08
,
0x79
,
0x76
,
0xe9
,
0xf1
,
0xb2
,
0xfa
,
0x73
,
0xe7
,
0x12
,
0x03
,
0xa6
,
0xf7
,
0x7f
,
0x19
,
0x30
,
0xbd
,
0xd2
,
0x80
,
0x39
,
0x86
,
0x9e
,
0xf9
,
0x64
,
0xa5
,
0x14
,
0x5c
,
0x76
,
0xc2
,
0x30
,
0xfd
,
0xd1
,
0x4d
,
0xe3
,
0x05
,
0xd7
,
0xde
,
0x1d
,
0x9d
,
0x59
,
0x9c
,
0x2b
,
0x2b
,
0xd5
,
0x7a
,
0x0f
,
0x61
,
0x8b
,
0x3e
,
0xbc
,
0x69
,
0xb0
,
0xbc
,
0xd7
,
0x86
,
0xca
,
0xe9
,
0xf2
,
0x03
,
0x6c
,
0x0c
,
0x7c
,
0x83
,
0x19
,
0x57
,
0xab
,
0xd0
,
0x71
,
0xa5
,
0x67
,
0x55
,
0x2d
,
0xbd
,
0x6f
,
0x15
,
0x48
,
0x7c
,
0x8e
,
0x9f
,
0x78
,
0x97
,
0x3b
,
0x78
,
0x5f
,
0x61
,
0x50
,
0x7c
,
0xad
,
0x2e
,
0x77
,
0xee
,
0xa5
,
0x85
,
0x36
,
0x3f
,
0xe9
,
0x84
,
0x79
,
0x04
,
0x57
,
0x17
,
0x8a
,
0x3f
,
0x7e
,
0xc8
,
0x3c
,
0xb2
,
0xc6
,
0xbd
,
0x99
,
0x33
,
0xdf
,
0x94
,
0xe7
,
0xcc
,
0x76
,
0x19
,
0x53
,
0x96
,
0x46
,
0xcd
,
0xfe
,
0x3f
,
0x35
,
0x70
,
0xf1
,
0x1f
,
0x21
,
0xbb
,
0x0f
,
0x90
,
0xb7
,
0x39
,
0xab
,
0x06
,
0xd2
,
0x37
,
0xcc
,
0x17
,
0xfe
,
0x4f
,
0x51
,
0x1a
,
0x9e
,
0x46
,
0x2f
,
0xce
,
0xbd
,
0x35
,
0xb6
,
0x6f
,
0xfd
,
0x4c
,
0xa9
,
0x42
,
0xd4
,
0x55
,
0x67
,
0xcc
,
0x5d
,
0x04
,
0x68
,
0xaa
,
0xc1
,
0x75
,
0xd5
,
0xb9
,
0xef
,
0x35
,
0xcc
,
0x32
,
0xf0
,
0x66
,
0x19
,
0xca
,
0xae
,
0x38
,
0x7b
,
0xd2
,
0xc4
,
0x5f
,
0x9d
,
0x07
,
0xff
,
0x05
,
0x00
,
0x00
,
0xff
,
0xff
,
0xe4
,
0x81
,
0xc1
,
0x51
,
0x13
,
0x15
,
0x00
,
0x00
,
// 1678 bytes of a gzipped FileDescriptorProto
0x1f
,
0x8b
,
0x08
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x02
,
0xff
,
0xe4
,
0x58
,
0xcd
,
0x6e
,
0xdb
,
0xc6
,
0x13
,
0xb7
,
0x3e
,
0xa8
,
0x8f
,
0x91
,
0x25
,
0xdb
,
0xeb
,
0xc4
,
0xe1
,
0xdf
,
0xf8
,
0xa3
,
0x70
,
0x19
,
0x37
,
0x71
,
0x8a
,
0x26
,
0x2d
,
0x6c
,
0x20
,
0x6d
,
0x52
,
0xb4
,
0x80
,
0x95
,
0x00
,
0x71
,
0x80
,
0x20
,
0x50
,
0xd6
,
0x29
,
0xd2
,
0x2b
,
0x2d
,
0xad
,
0x1d
,
0x22
,
0x12
,
0x49
,
0x93
,
0x54
,
0x62
,
0xdd
,
0x8a
,
0xf6
,
0x09
,
0x7a
,
0xe8
,
0x13
,
0xf4
,
0xd2
,
0x97
,
0x2a
,
0xd0
,
0x5b
,
0x1f
,
0xa1
,
0xd7
,
0x62
,
0x67
,
0x76
,
0xc9
,
0x25
,
0x45
,
0xc9
,
0x71
,
0xd0
,
0x9e
,
0x7a
,
0xdb
,
0xd9
,
0xd9
,
0xdd
,
0xf9
,
0x9e
,
0xf9
,
0x91
,
0xd0
,
0x39
,
0x9b
,
0x8a
,
0x38
,
0xbe
,
0x17
,
0x46
,
0x41
,
0x12
,
0x30
,
0x2b
,
0x99
,
0x85
,
0x22
,
0xde
,
0xde
,
0x48
,
0x22
,
0xd7
,
0x8f
,
0xdd
,
0x61
,
0xe2
,
0x05
,
0x3e
,
0x71
,
0x9c
,
0x3f
,
0x2c
,
0x68
,
0x3f
,
0x91
,
0x27
,
0x9f
,
0xb8
,
0x13
,
0xc1
,
0xb6
,
0xa0
,
0x71
,
0xe6
,
0x4e
,
0xc4
,
0xd3
,
0x91
,
0x5d
,
0xd9
,
0xa9
,
0xec
,
0xb5
,
0xb9
,
0xa2
,
0xe4
,
0x7e
,
0x9c
,
0xb8
,
0xc9
,
0x34
,
0xb6
,
0xab
,
0x3b
,
0x95
,
0xbd
,
0x2e
,
0x57
,
0x14
,
0xfb
,
0x3f
,
0xb4
,
0xc3
,
0x48
,
0x1c
,
0x13
,
0xab
,
0x86
,
0xac
,
0x6c
,
0x43
,
0x72
,
0xe3
,
0xc4
,
0x8d
,
0x92
,
0x97
,
0xde
,
0x44
,
0xd8
,
0xf5
,
0x9d
,
0xca
,
0x5e
,
0x8d
,
0x67
,
0x1b
,
0x6c
,
0x07
,
0x3a
,
0x44
,
0x5c
,
0x1c
,
0xb9
,
0xf1
,
0x6b
,
0xdb
,
0x42
,
0x81
,
0xe6
,
0x16
,
0xbb
,
0x06
,
0x56
,
0x12
,
0x84
,
0xde
,
0xd0
,
0x6e
,
0x20
,
0x8f
,
0x08
,
0xb6
,
0x0d
,
0xad
,
0xa1
,
0x9b
,
0x88
,
0xb3
,
0x20
,
0x9a
,
0xd9
,
0x4d
,
0x64
,
0xa4
,
0x34
,
0xb3
,
0xa1
,
0x19
,
0x84
,
0xd2
,
0xba
,
0xd8
,
0x6e
,
0x21
,
0x4b
,
0x93
,
0x92
,
0x33
,
0x71
,
0x2f
,
0x50
,
0x93
,
0x36
,
0x71
,
0x14
,
0x29
,
0xb5
,
0x9c
,
0xb8
,
0x17
,
0x47
,
0xc2
,
0x3b
,
0x7b
,
0x9d
,
0xd8
,
0x40
,
0x5a
,
0xa6
,
0x1b
,
0x68
,
0xf9
,
0x6c
,
0x72
,
0x12
,
0x8c
,
0xed
,
0x0e
,
0x79
,
0x84
,
0x28
,
0xc6
,
0xa0
,
0x2e
,
0x2e
,
0xc4
,
0xd0
,
0x5e
,
0xc5
,
0x5d
,
0x5c
,
0xcb
,
0xb3
,
0x81
,
0x2f
,
0xfa
,
0x22
,
0xb1
,
0xbb
,
0xe4
,
0x25
,
0xa2
,
0x94
,
0xec
,
0xbe
,
0x48
,
0x62
,
0xbb
,
0x87
,
0x0c
,
0x4d
,
0xb2
,
0x5d
,
0xe8
,
0xaa
,
0xe5
,
0xf3
,
0xe9
,
0xe4
,
0x44
,
0x44
,
0xf6
,
0x1a
,
0xf2
,
0xf3
,
0x9b
,
0x6c
,
0x1d
,
0x6a
,
0xa7
,
0x42
,
0xd8
,
0xeb
,
0xc8
,
0x93
,
0x4b
,
0xf9
,
0xe2
,
0xa9
,
0x10
,
0x87
,
0xa3
,
0x51
,
0x64
,
0x6f
,
0x90
,
0x35
,
0x8a
,
0x94
,
0x3a
,
0x88
,
0x8b
,
0xd0
,
0x8b
,
0x84
,
0xcd
,
0x48
,
0x5f
,
0xa2
,
0x98
,
0x03
,
0xab
,
0xb4
,
0x52
,
0x86
,
0x6e
,
0xa2
,
0xa1
,
0xb9
,
0x3d
,
0xe9
,
0x09
,
0x77
,
0x34
,
0xf1
,
0x7c
,
0x7c
,
0xf7
,
0x1a
,
0x5e
,
0xcf
,
0x36
,
0xd8
,
0x47
,
0x00
,
0x27
,
0x99
,
0xa2
,
0xd7
,
0x51
,
0x19
,
0x63
,
0x87
,
0xed
,
0x81
,
0x15
,
0x8e
,
0xdd
,
0x59
,
0x6c
,
0x6f
,
0xed
,
0xd4
,
0xf6
,
0x3a
,
0xfb
,
0xec
,
0x1e
,
0xe6
,
0xdc
,
0x3d
,
0x4c
,
0xae
,
0xc1
,
0xd8
,
0x9d
,
0x89
,
0x88
,
0xd3
,
0x01
,
0xa9
,
0x63
,
0x24
,
0xe2
,
0xe9
,
0x38
,
0xb1
,
0x6f
,
0x90
,
0x8e
,
0x44
,
0xb1
,
0x9b
,
0x50
,
0x97
,
0xef
,
0xd9
,
0x36
,
0x3e
,
0xb0
,
0x66
,
0x3e
,
0xd0
,
0x17
,
0x09
,
0x47
,
0xa6
,
0x4c
,
0x0a
,
0xcf
,
0x1f
,
0x89
,
0x0b
,
0xfb
,
0x7f
,
0x68
,
0x01
,
0x11
,
0x32
,
0x29
,
0xc2
,
0x48
,
0x3c
,
0x45
,
0xc6
,
0x36
,
0x32
,
0x52
,
0xda
,
0x79
,
0x0c
,
0x1d
,
0x43
,
0x09
,
0x19
,
0x39
,
0x57
,
0x1a
,
0x48
,
0x19
,
0x8e
,
0x6b
,
0xf6
,
0x31
,
0xd4
,
0x4e
,
0x44
,
0x82
,
0xc9
,
0x5d
,
0x22
,
0x58
,
0xf2
,
0x9c
,
0xdf
,
0x2a
,
0xd0
,
0xd2
,
0x3b
,
0x18
,
0x69
,
0x4c
,
0x2c
,
0x5d
,
0x27
,
0x44
,
0x15
,
0x7c
,
0x54
,
0x9d
,
0xf3
,
0xd1
,
0x36
,
0xb4
,
0xbc
,
0xf8
,
0x95
,
0xe7
,
0xfb
,
0x22
,
0xc2
,
0x72
,
0x69
,
0xf1
,
0x94
,
0x96
,
0x6f
,
0x86
,
0x51
,
0x70
,
0xea
,
0x25
,
0x58
,
0x2a
,
0x5d
,
0xae
,
0xa8
,
0xcc
,
0x60
,
0x6b
,
0x91
,
0xc1
,
0x8d
,
0x82
,
0xc1
,
0x7f
,
0xd5
,
0xa0
,
0x3d
,
0x08
,
0xde
,
0x88
,
0xa8
,
0x3f
,
0x1d
,
0x8f
,
0xdf
,
0xb3
,
0xa6
,
0x2d
,
0xb3
,
0xa6
,
0xb3
,
0xaa
,
0xad
,
0x5d
,
0x52
,
0xb5
,
0xf5
,
0xd2
,
0xaa
,
0x7d
,
0xeb
,
0x8e
,
0xa7
,
0x42
,
0xeb
,
0x8b
,
0x04
,
0xdb
,
0x05
,
0x2b
,
0x94
,
0x2a
,
0xa1
,
0xb2
,
0x9d
,
0xfd
,
0x9e
,
0xf2
,
0xf1
,
0xa0
,
0x8f
,
0x8a
,
0x72
,
0x62
,
0xb2
,
0x3b
,
0xd0
,
0x0c
,
0x31
,
0x4a
,
0xb1
,
0xdd
,
0xcc
,
0x25
,
0xc1
,
0xa0
,
0xaf
,
0x52
,
0x48
,
0xf3
,
0xb1
,
0xf5
,
0xe0
,
0xf2
,
0xf9
,
0x74
,
0x82
,
0xc5
,
0x6e
,
0xf1
,
0x6c
,
0x43
,
0x3e
,
0x44
,
0x49
,
0x15
,
0xdb
,
0xed
,
0xc2
,
0x43
,
0x1c
,
0xf7
,
0xb9
,
0xe6
,
0x67
,
0xfe
,
0x05
,
0xd3
,
0xbf
,
0xd4
,
0xd9
,
0xde
,
0x92
,
0x83
,
0x3b
,
0xe4
,
0x85
,
0x74
,
0x43
,
0x7a
,
0xff
,
0x7c
,
0xea
,
0x91
,
0x8b
,
0x56
,
0xc9
,
0xfb
,
0x9a
,
0x96
,
0x39
,
0x80
,
0x6b
,
0x72
,
0x50
,
0x17
,
0x1d
,
0x64
,
0xec
,
0x48
,
0xfe
,
0x48
,
0xb8
,
0x63
,
0x11
,
0x61
,
0x99
,
0xf5
,
0x88
,
0x9f
,
0xed
,
0x48
,
0xc9
,
0x5e
,
0xfc
,
0xca
,
0xf5
,
0x12
,
0xcf
,
0x3f
,
0xc3
,
0x7e
,
0xd0
,
0xe2
,
0xd9
,
0x46
,
0xbe
,
0xe3
,
0xae
,
0x2b
,
0xb3
,
0xf5
,
0x86
,
0xf3
,
0x63
,
0x05
,
0x1a
,
0x83
,
0xfe
,
0x91
,
0xeb
,
0x8f
,
0xa4
,
0x59
,
0x43
,
0x37
,
0x1a
,
0xc5
,
0x76
,
0x65
,
0xa7
,
0xb6
,
0x67
,
0x71
,
0x22
,
0x8c
,
0xd2
,
0x53
,
0x41
,
0x57
,
0xa5
,
0x67
,
0x43
,
0x53
,
0x16
,
0x82
,
0x88
,
0xa9
,
0x8d
,
0xb7
,
0xb9
,
0x26
,
0xd1
,
0x3d
,
0x32
,
0x45
,
0x31
,
0xd4
,
0x2d
,
0x4e
,
0x84
,
0x74
,
0xc0
,
0x58
,
0xbc
,
0x15
,
0x91
,
0x7b
,
0x46
,
0x71
,
0xb6
,
0x78
,
0x4a
,
0x3b
,
0xef
,
0xa0
,
0xa5
,
0xc3
,
0xc5
,
0x6e
,
0x82
,
0xf5
,
0xda
,
0xf5
,
0x95
,
0x16
,
0x9d
,
0xfd
,
0x6e
,
0x1a
,
0x05
,
0xa9
,
0x23
,
0x27
,
0x9e
,
0x29
,
0xbc
,
0x9a
,
0x17
,
0xbe
,
0x05
,
0x8d
,
0x84
,
0xfc
,
0x48
,
0x89
,
0xa8
,
0x28
,
0xa9
,
0x54
,
0x24
,
0xdc
,
0xd1
,
0x4c
,
0x2b
,
0x85
,
0x84
,
0xf3
,
0x6b
,
0x45
,
0x4a
,
0xe6
,
0xba
,
0x99
,
0xbc
,
0x87
,
0xe4
,
0x2d
,
0x68
,
0xbc
,
0xa3
,
0x6a
,
0x24
,
0xc1
,
0x8a
,
0xca
,
0x99
,
0x57
,
0xcb
,
0x9b
,
0x27
,
0xef
,
0x50
,
0xb4
,
0x54
,
0xf2
,
0x2b
,
0x8a
,
0xdd
,
0x82
,
0x1e
,
0xad
,
0x9e
,
0xe5
,
0x1d
,
0x53
,
0xd8
,
0x75
,
0x1e
,
0x40
,
0x53
,
0x65
,
0xfd
,
0x82
,
0x18
,
0xd9
,
0xd0
,
0x0c
,
0x03
,
0xcf
,
0x4f
,
0x94
,
0x56
,
0x16
,
0xd7
,
0xa4
,
0xf3
,
0x7b
,
0x05
,
0x56
,
0x07
,
0x7d
,
0x39
,
0xa9
,
0x0f
,
0x71
,
0x86
,
0xb3
,
0x4f
,
0xc1
,
0xc2
,
0xd2
,
0xc3
,
0xd2
,
0xce
,
0x7a
,
0x2e
,
0x9d
,
0x39
,
0x96
,
0x9c
,
0xa3
,
0x15
,
0x4e
,
0x47
,
0xd8
,
0x01
,
0xb4
,
0x86
,
0x81
,
0x9f
,
0x78
,
0xfe
,
0x54
,
0xa8
,
0x46
,
0x77
,
0x3d
,
0x77
,
0xfc
,
0x91
,
0x62
,
0x1e
,
0xad
,
0xf0
,
0xf4
,
0x20
,
0xbb
,
0x0d
,
0x75
,
0x99
,
0xba
,
0xe8
,
0x84
,
0xce
,
0xfe
,
0x46
,
0xee
,
0xc2
,
0x8b
,
0xa9
,
0x27
,
0x9f
,
0xc7
,
0x03
,
0x52
,
0x93
,
0xf3
,
0xa9
,
0x88
,
0x28
,
0x22
,
0x45
,
0x4d
,
0x5e
,
0x48
,
0x8e
,
0xd4
,
0x04
,
0x8f
,
0xb0
,
0x1e
,
0x54
,
0x93
,
0x19
,
0x96
,
0x9b
,
0xc5
,
0xab
,
0xc9
,
0xac
,
0xdf
,
0x54
,
0x1d
,
0xc3
,
0x39
,
0x84
,
0x8e
,
0xa1
,
0x7a
,
0xd6
,
0x49
,
0x2a
,
0x66
,
0x27
,
0xc9
,
0x15
,
0x7e
,
0xb5
,
0x50
,
0xf8
,
0xce
,
0x1e
,
0xf4
,
0xf2
,
0xe6
,
0x2c
,
0xea
,
0x7f
,
0xce
,
0x2e
,
0x40
,
0x66
,
0xc7
,
0xc2
,
0x53
,
0x9f
,
0x68
,
0x95
,
0xd0
,
0x86
,
0x85
,
0xc7
,
0x7e
,
0xa9
,
0xc2
,
0x5a
,
0x0a
,
0xa3
,
0x54
,
0x70
,
0xee
,
0xe6
,
0x83
,
0x73
,
0xdd
,
0x1c
,
0x2b
,
0x25
,
0xf1
,
0xb9
,
0x6d
,
0xce
,
0xa0
,
0xcd
,
0xe2
,
0xe1
,
0xbe
,
0x90
,
0x47
,
0xe5
,
0x09
,
0xf9
,
0xae
,
0x7b
,
0x12
,
0x44
,
0x3a
,
0x28
,
0x73
,
0xef
,
0x1e
,
0x4a
,
0xa6
,
0x7c
,
0x17
,
0x4f
,
0xb1
,
0x03
,
0x68
,
0x86
,
0xd3
,
0x93
,
0xb1
,
0xa7
,
0xba
,
0x75
,
0x67
,
0xff
,
0x46
,
0xf1
,
0xc2
,
0x80
,
0xd8
,
0x47
,
0x2b
,
0x5c
,
0x9f
,
0x94
,
0x32
,
0x28
,
0x9c
,
0x56
,
0xb9
,
0x8c
,
0xd2
,
0x88
,
0x36
,
0x70
,
0x6e
,
0xe5
,
0x22
,
0xfa
,
0x43
,
0x0d
,
0x7a
,
0x79
,
0x83
,
0x33
,
0x54
,
0x57
,
0x31
,
0x51
,
0x9d
,
0x81
,
0xdc
,
0xaa
,
0x79
,
0xe4
,
0x66
,
0xe2
,
0xbd
,
0xda
,
0x3c
,
0xde
,
0xd3
,
0xa8
,
0xae
,
0xbe
,
0x04
,
0xd5
,
0x59
,
0x8b
,
0x51
,
0x5d
,
0xa3
,
0x14
,
0xd5
,
0x35
,
0x4b
,
0x51
,
0x5d
,
0x6b
,
0x11
,
0xaa
,
0x6b
,
0x5f
,
0x82
,
0xea
,
0x60
,
0x09
,
0xaa
,
0x93
,
0xb3
,
0xa5
,
0x3e
,
0x87
,
0xea
,
0x56
,
0x17
,
0xa1
,
0xba
,
0xee
,
0x52
,
0x54
,
0xd7
,
0x9b
,
0x47
,
0x75
,
0xce
,
0xf7
,
0xb0
,
0x6a
,
0x66
,
0xd1
,
0x32
,
0x3c
,
0xa0
,
0x30
,
0x4d
,
0x35
,
0x87
,
0x69
,
0x6c
,
0x68
,
0x2a
,
0x04
,
0xa3
,
0x10
,
0xbe
,
0x26
,
0x65
,
0xad
,
0xe5
,
0x93
,
0x6e
,
0x61
,
0x79
,
0xf4
,
0x61
,
0xbd
,
0x98
,
0x6d
,
0xcb
,
0xf4
,
0x30
,
0x46
,
0x54
,
0x8a
,
0x0e
,
0x9d
,
0xaf
,
0x0c
,
0x69
,
0x4b
,
0x8b
,
0x51
,
0x65
,
0x63
,
0x55
,
0x67
,
0xa3
,
0x73
,
0x0e
,
0x37
,
0xf1
,
0x02
,
0x15
,
0xf2
,
0x33
,
0x2f
,
0x4e
,
0xfa
,
0x33
,
0x1a
,
0x98
,
0x87
,
0xfe
,
0x68
,
0x90
,
0x62
,
0x86
,
0x0c
,
0x10
,
0x55
,
0x8a
,
0x80
,
0x68
,
0x71
,
0xc3
,
0xc9
,
0xe0
,
0x43
,
0xcd
,
0x80
,
0x0f
,
0xce
,
0x4b
,
0xdd
,
0xa8
,
0xb9
,
0x18
,
0x06
,
0xd1
,
0xe8
,
0xca
,
0x20
,
0xac
,
0xfc
,
0xd5
,
0x43
,
0xd8
,
0xa0
,
0x57
,
0x11
,
0x85
,
0x5c
,
0xf2
,
0x74
,
0xfa
,
0x44
,
0xd5
,
0x7c
,
0xe2
,
0x5b
,
0xe8
,
0x9a
,
0x8a
,
0xc5
,
0xec
,
0xae
,
0x44
,
0x4a
,
0xb8
,
0x54
,
0x93
,
0x72
,
0x33
,
0xd7
,
0xba
,
0xe9
,
0x18
,
0xd7
,
0x67
,
0x9c
,
0x37
,
0xb0
,
0x66
,
0xf8
,
0xf2
,
0xa9
,
0x7f
,
0x1a
,
0x2c
,
0x54
,
0x40
,
0x03
,
0xed
,
0xaa
,
0x01
,
0xb4
,
0x33
,
0x7b
,
0x6b
,
0xe5
,
0xf6
,
0xd6
,
0x4d
,
0x65
,
0x0f
,
0xa0
,
0xc3
,
0x45
,
0x38
,
0x56
,
0xc2
,
0xd8
,
0x2e
,
0xd4
,
0xe5
,
0xd3
,
0xaa
,
0x9f
,
0xae
,
0x6b
,
0x3d
,
0x35
,
0xd2
,
0xe5
,
0xc8
,
0x75
,
0x3e
,
0x83
,
0xf5
,
0x82
,
0x86
,
0x38
,
0x52
,
0x49
,
0x29
,
0x32
,
0xb2
,
0xcd
,
0x35
,
0xe9
,
0x3c
,
0x80
,
0x35
,
0x43
,
0x84
,
0xcc
,
0x0d
,
0x76
,
0x0b
,
0x2c
,
0xc9
,
0xd5
,
0xfe
,
0x98
,
0x97
,
0x43
,
0x6c
,
0xc7
,
0x07
,
0x86
,
0x82
,
0xd2
,
0xac
,
0xfc
,
0x97
,
0xbd
,
0xf1
,
0x10
,
0x18
,
0xaa
,
0x9a
,
0x97
,
0x57
,
0xee
,
0x94
,
0xf4
,
0x8c
,
0x72
,
0xca
,
0xe7
,
0xb0
,
0x39
,
0xaf
,
0xeb
,
0x32
,
0xbf
,
0x7c
,
0x03
,
0x9b
,
0xf3
,
0xc2
,
0xe2
,
0x45
,
0xbe
,
0xc9
,
0xc4
,
0x29
,
0xdf
,
0xfc
,
0x5c
,
0x85
,
0x2e
,
0x17
,
0x43
,
0xe1
,
0x85
,
0x89
,
0x0a
,
0xde
,
0x55
,
0x2b
,
0x40
,
0xfb
,
0xab
,
0x66
,
0xf8
,
0xab
,
0xd4
,
0x2f
,
0x79
,
0xa8
,
0x6e
,
0x15
,
0xa1
,
0x7a
,
0xae
,
0x7a
,
0x1b
,
0x25
,
0xd5
,
0x4b
,
0x10
,
0xa3
,
0x59
,
0x80
,
0x18
,
0x19
,
0x04
,
0x6f
,
0x15
,
0x21
,
0xb8
,
0x9d
,
0x7d
,
0xa4
,
0xb4
,
0xc9
,
0x69
,
0xe6
,
0x37
,
0x49
,
0x0a
,
0xce
,
0xa1
,
0x08
,
0xce
,
0xc7
,
0xb0
,
0xae
,
0x5c
,
0xf2
,
0xe1
,
0x3f
,
0x5c
,
0xde
,
0xdb
,
0x2b
,
0xce
,
0x4f
,
0x35
,
0x85
,
0x48
,
0x8e
,
0xe9
,
0xdb
,
0x8c
,
0x8b
,
0xf3
,
0x2b
,
0x8f
,
0xde
,
0xe5
,
0x9f
,
0x82
,
0x57
,
0x18
,
0xbe
,
0xdd
,
0xff
,
0xca
,
0xf0
,
0xed
,
0x16
,
0x86
,
0xef
,
0x31
,
0x74
,
0xf5
,
0x4f
,
0x03
,
0x0a
,
0xc1
,
0x55
,
0xa7
,
0x2f
,
0x53
,
0xff
,
0x44
,
0x68
,
0xf4
,
0xe2
,
0xda
,
0xb9
,
0xa3
,
0x22
,
0x8b
,
0x33
,
0x77
,
0xe9
,
0xb3
,
0xce
,
0x23
,
0xd8
,
0xa0
,
0x7f
,
0x1f
,
0x34
,
0x74
,
0x2f
,
0xd5
,
0xa1
,
0x74
,
0xf2
,
0x7e
,
0x0d
,
0x6b
,
0x83
,
0xbe
,
0xc6
,
0xd3
,
0xcb
,
0x9f
,
0x50
,
0x7e
,
0xa5
,
0x91
,
0x23
,
0x97
,
0xce
,
0x97
,
0x12
,
0x40
,
0xbf
,
0xc0
,
0xcf
,
0xdf
,
0xab
,
0x5d
,
0xbc
,
0x2f
,
0xf1
,
0x39
,
0x36
,
0xad
,
0xab
,
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.
...
...
plugin/dapp/guess/types/types.go
View file @
9fe46fb1
...
...
@@ -38,6 +38,7 @@ func (t *GuessType) GetTypeMap() map[string]int32 {
"Bet"
:
GuessGameActionBet
,
"Abort"
:
GuessGameActionAbort
,
"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