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
4da6c484
Commit
4da6c484
authored
Jan 04, 2019
by
张振华
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
table refactor
parent
55e2f303
Show whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
723 additions
and
700 deletions
+723
-700
game.go
plugin/dapp/guess/commands/game.go
+15
-2
exec_del_local.go
plugin/dapp/guess/executor/exec_del_local.go
+87
-56
exec_local.go
plugin/dapp/guess/executor/exec_local.go
+60
-59
guessdb.go
plugin/dapp/guess/executor/guessdb.go
+134
-181
keys.go
plugin/dapp/guess/executor/keys.go
+0
-192
query.go
plugin/dapp/guess/executor/query.go
+29
-30
guess.proto
plugin/dapp/guess/proto/guess.proto
+46
-29
errors.go
plugin/dapp/guess/types/errors.go
+4
-0
guess.pb.go
plugin/dapp/guess/types/guess.pb.go
+271
-128
table.go
plugin/dapp/guess/types/table.go
+77
-23
No files found.
plugin/dapp/guess/commands/game.go
View file @
4da6c484
...
...
@@ -6,13 +6,12 @@ package commands
import
(
"fmt"
"strings"
jsonrpc
"github.com/33cn/chain33/rpc/jsonclient"
rpctypes
"github.com/33cn/chain33/rpc/types"
"github.com/33cn/chain33/types"
gty
"github.com/33cn/plugin/plugin/dapp/guess/types"
"github.com/spf13/cobra"
"strings"
)
//GuessCmd Guess合约命令行
...
...
@@ -250,6 +249,8 @@ func addGuessQueryFlags(cmd *cobra.Command) {
cmd
.
Flags
()
.
Int32P
(
"status"
,
"s"
,
0
,
"status"
)
cmd
.
Flags
()
.
StringP
(
"gameIDs"
,
"d"
,
""
,
"gameIDs"
)
cmd
.
Flags
()
.
StringP
(
"category"
,
"c"
,
"default"
,
"game category"
)
cmd
.
Flags
()
.
StringP
(
"primary"
,
"p"
,
""
,
"the primary to query from"
)
}
func
guessQuery
(
cmd
*
cobra
.
Command
,
args
[]
string
)
{
...
...
@@ -262,6 +263,12 @@ func guessQuery(cmd *cobra.Command, args []string) {
index
,
_
:=
cmd
.
Flags
()
.
GetInt64
(
"index"
)
gameIDs
,
_
:=
cmd
.
Flags
()
.
GetString
(
"gameIDs"
)
category
,
_
:=
cmd
.
Flags
()
.
GetString
(
"category"
)
primary
,
_
:=
cmd
.
Flags
()
.
GetString
(
"primary"
)
var
primaryKey
[]
byte
if
len
(
primary
)
>
0
{
primaryKey
=
[]
byte
(
primary
)
}
var
params
rpctypes
.
Query4Jrpc
params
.
Execer
=
gty
.
GuessX
...
...
@@ -301,6 +308,7 @@ func guessQuery(cmd *cobra.Command, args []string) {
req
:=
&
gty
.
QueryGuessGameInfo
{
Addr
:
addr
,
Index
:
index
,
PrimaryKey
:
primaryKey
,
}
params
.
FuncName
=
gty
.
FuncNameQueryGameByAddr
params
.
Payload
=
types
.
MustPBToJSON
(
req
)
...
...
@@ -312,6 +320,7 @@ func guessQuery(cmd *cobra.Command, args []string) {
req
:=
&
gty
.
QueryGuessGameInfo
{
Status
:
status
,
Index
:
index
,
PrimaryKey
:
primaryKey
,
}
params
.
FuncName
=
gty
.
FuncNameQueryGameByStatus
params
.
Payload
=
types
.
MustPBToJSON
(
req
)
...
...
@@ -323,6 +332,7 @@ func guessQuery(cmd *cobra.Command, args []string) {
req
:=
&
gty
.
QueryGuessGameInfo
{
AdminAddr
:
adminAddr
,
Index
:
index
,
PrimaryKey
:
primaryKey
,
}
params
.
FuncName
=
gty
.
FuncNameQueryGameByAdminAddr
params
.
Payload
=
types
.
MustPBToJSON
(
req
)
...
...
@@ -335,6 +345,7 @@ func guessQuery(cmd *cobra.Command, args []string) {
Addr
:
addr
,
Status
:
status
,
Index
:
index
,
PrimaryKey
:
primaryKey
,
}
params
.
FuncName
=
gty
.
FuncNameQueryGameByAddrStatus
params
.
Payload
=
types
.
MustPBToJSON
(
req
)
...
...
@@ -347,6 +358,7 @@ func guessQuery(cmd *cobra.Command, args []string) {
AdminAddr
:
adminAddr
,
Status
:
status
,
Index
:
index
,
PrimaryKey
:
primaryKey
,
}
params
.
FuncName
=
gty
.
FuncNameQueryGameByAdminStatus
params
.
Payload
=
types
.
MustPBToJSON
(
req
)
...
...
@@ -359,6 +371,7 @@ func guessQuery(cmd *cobra.Command, args []string) {
Category
:
category
,
Status
:
status
,
Index
:
index
,
PrimaryKey
:
primaryKey
,
}
params
.
FuncName
=
gty
.
FuncNameQueryGameByCategoryStatus
params
.
Payload
=
types
.
MustPBToJSON
(
req
)
...
...
plugin/dapp/guess/executor/exec_del_local.go
View file @
4da6c484
...
...
@@ -5,52 +5,104 @@
package
executor
import
(
"fmt"
"github.com/33cn/chain33/common/db/table"
"github.com/33cn/chain33/types"
gty
"github.com/33cn/plugin/plugin/dapp/guess/types"
)
func
(
g
*
Guess
)
rollbackIndex
(
log
*
gty
.
ReceiptGuessGame
)
(
kvs
[]
*
types
.
KeyValue
)
{
//新创建游戏,将增加的记录都删除掉
if
log
.
Status
==
gty
.
GuessGameStatusStart
{
//kvs = append(kvs, addGuessGameAddrIndexKey(log.Status, log.Addr, log.GameId, log.Index))
kvs
=
append
(
kvs
,
delGuessGameStatusIndexKey
(
log
.
Status
,
log
.
Index
))
kvs
=
append
(
kvs
,
delGuessGameAdminIndexKey
(
log
.
AdminAddr
,
log
.
Index
))
kvs
=
append
(
kvs
,
delGuessGameAdminStatusIndexKey
(
log
.
Status
,
log
.
AdminAddr
,
log
.
Index
))
kvs
=
append
(
kvs
,
delGuessGameCategoryStatusIndexKey
(
log
.
Status
,
log
.
Category
,
log
.
Index
))
}
else
if
log
.
Status
==
gty
.
GuessGameStatusBet
{
//如果是下注状态,则有用户进行了下注操作,对这些记录进行删除
kvs
=
append
(
kvs
,
delGuessGameAddrIndexKey
(
log
.
Addr
,
log
.
Index
))
kvs
=
append
(
kvs
,
delGuessGameAddrStatusIndexKey
(
log
.
Status
,
log
.
Addr
,
log
.
Index
))
func
(
g
*
Guess
)
rollbackGame
(
game
*
gty
.
GuessGame
,
log
*
gty
.
ReceiptGuessGame
){
if
game
==
nil
||
log
==
nil
{
return
}
//如果发生了状态变化,恢复老状态的记录,删除新添加的状态记录
//如果状态发生了变化,则需要将游戏状态恢复到前一状态
if
log
.
StatusChange
{
kvs
=
append
(
kvs
,
addGuessGameStatusIndexKey
(
log
.
PreStatus
,
log
.
GameID
,
log
.
PreIndex
))
kvs
=
append
(
kvs
,
addGuessGameAdminStatusIndexKey
(
log
.
PreStatus
,
log
.
AdminAddr
,
log
.
GameID
,
log
.
PreIndex
))
kvs
=
append
(
kvs
,
addGuessGameCategoryStatusIndexKey
(
log
.
PreStatus
,
log
.
Category
,
log
.
GameID
,
log
.
PreIndex
))
game
.
Status
=
log
.
PreStatus
game
.
Index
=
log
.
PreIndex
kvs
=
append
(
kvs
,
delGuessGameStatusIndexKey
(
log
.
Status
,
log
.
Index
))
kvs
=
append
(
kvs
,
delGuessGameAdminStatusIndexKey
(
log
.
Status
,
log
.
AdminAddr
,
log
.
Index
))
kvs
=
append
(
kvs
,
delGuessGameCategoryStatusIndexKey
(
log
.
Status
,
log
.
Category
,
log
.
Index
))
//玩家信息中的index回滚
for
i
:=
0
;
i
<
len
(
game
.
Plays
);
i
++
{
player
:=
game
.
Plays
[
i
]
player
.
Bet
.
Index
=
player
.
Bet
.
PreIndex
}
}
else
if
log
.
StatusChange
{
//其他状态时的状态发生变化的情况,要将老状态对应的记录恢复,同时删除新加的状态记录;对于每个地址的下注记录也需要遍历处理。
kvs
=
append
(
kvs
,
addGuessGameStatusIndexKey
(
log
.
PreStatus
,
log
.
GameID
,
log
.
PreIndex
))
kvs
=
append
(
kvs
,
addGuessGameAdminStatusIndexKey
(
log
.
PreStatus
,
log
.
AdminAddr
,
log
.
GameID
,
log
.
PreIndex
))
kvs
=
append
(
kvs
,
addGuessGameCategoryStatusIndexKey
(
log
.
PreStatus
,
log
.
Category
,
log
.
GameID
,
log
.
PreIndex
))
kvs
=
append
(
kvs
,
delGuessGameStatusIndexKey
(
log
.
Status
,
log
.
Index
))
kvs
=
append
(
kvs
,
delGuessGameAdminStatusIndexKey
(
log
.
Status
,
log
.
AdminAddr
,
log
.
Index
))
kvs
=
append
(
kvs
,
delGuessGameCategoryStatusIndexKey
(
log
.
Status
,
log
.
Category
,
log
.
Index
))
//从game中遍历每个地址的记录进行删除新增记录,回复老记录
game
,
err
:=
readGame
(
g
.
GetStateDB
(),
log
.
GameID
)
if
err
==
nil
{
}
//如果下注了,则需要把下注回滚
if
log
.
Bet
{
//统计信息回滚
game
.
BetStat
.
TotalBetTimes
--
game
.
BetStat
.
TotalBetsNumber
-=
log
.
BetsNumber
for
i
:=
0
;
i
<
len
(
game
.
BetStat
.
Items
);
i
++
{
item
:=
game
.
BetStat
.
Items
[
i
]
if
item
.
Option
==
log
.
Option
{
item
.
BetsTimes
--
item
.
BetsNumber
-=
log
.
BetsNumber
break
}
}
//玩家下注信息回滚
for
i
:=
0
;
i
<
len
(
game
.
Plays
);
i
++
{
player
:=
game
.
Plays
[
i
]
kvs
=
append
(
kvs
,
addGuessGameAddrStatusIndexKey
(
log
.
PreStatus
,
player
.
Addr
,
log
.
GameID
,
player
.
Bet
.
PreIndex
))
kvs
=
append
(
kvs
,
delGuessGameAddrStatusIndexKey
(
log
.
Status
,
player
.
Addr
,
log
.
Index
))
if
player
.
Addr
==
log
.
Addr
&&
player
.
Bet
.
Index
==
log
.
Index
{
game
.
Plays
=
append
(
game
.
Plays
[
:
i
],
game
.
Plays
[
i
+
1
:
]
...
)
break
}
}
}
}
func
(
g
*
Guess
)
rollbackIndex
(
log
*
gty
.
ReceiptGuessGame
)
(
kvs
[]
*
types
.
KeyValue
)
{
userTable
:=
gty
.
NewGuessUserTable
(
g
.
GetLocalDB
())
gameTable
:=
gty
.
NewGuessGameTable
(
g
.
GetLocalDB
())
tablejoin
,
err
:=
table
.
NewJoinTable
(
userTable
,
gameTable
,
[]
string
{
"addr#status"
})
if
err
!=
nil
{
return
nil
}
if
log
.
Status
==
gty
.
GuessGameStatusStart
{
//新创建游戏回滚,game表删除记录
err
=
tablejoin
.
MustGetTable
(
"game"
)
.
Del
([]
byte
(
fmt
.
Sprintf
(
"%018d"
,
log
.
StartIndex
)))
if
err
!=
nil
{
return
nil
}
kvs
,
_
=
tablejoin
.
Save
()
return
kvs
}
else
if
log
.
Status
==
gty
.
GuessGameStatusBet
{
//下注阶段,需要更新游戏信息,回滚下注信息
game
:=
log
.
Game
log
.
Game
=
nil
//先回滚游戏信息,再进行更新
g
.
rollbackGame
(
game
,
log
)
err
=
tablejoin
.
MustGetTable
(
"game"
)
.
Replace
(
game
)
if
err
!=
nil
{
return
nil
}
err
=
tablejoin
.
MustGetTable
(
"user"
)
.
Del
([]
byte
(
fmt
.
Sprintf
(
"%018d"
,
log
.
Index
)))
if
err
!=
nil
{
return
nil
}
kvs
,
_
=
tablejoin
.
Save
()
}
else
if
log
.
StatusChange
{
//如果是其他状态下仅发生了状态变化,则需要恢复游戏状态,并更新游戏记录。
game
:=
log
.
Game
log
.
Game
=
nil
//先回滚游戏信息,再进行更新
g
.
rollbackGame
(
game
,
log
)
err
=
tablejoin
.
MustGetTable
(
"game"
)
.
Replace
(
game
)
if
err
!=
nil
{
return
nil
}
kvs
,
_
=
tablejoin
.
Save
()
}
return
kvs
...
...
@@ -62,8 +114,7 @@ func (g *Guess) execDelLocal(receipt *types.ReceiptData) (*types.LocalDBSet, err
return
dbSet
,
nil
}
/*
for _, log := range receiptData.Logs {
for
_
,
log
:=
range
receipt
.
Logs
{
switch
log
.
GetTy
()
{
case
gty
.
TyLogGuessGameStart
,
gty
.
TyLogGuessGameBet
,
gty
.
TyLogGuessGameStopBet
,
gty
.
TyLogGuessGameAbort
,
gty
.
TyLogGuessGamePublish
,
gty
.
TyLogGuessGameTimeout
:
receiptGame
:=
&
gty
.
ReceiptGuessGame
{}
...
...
@@ -73,28 +124,8 @@ func (g *Guess) execDelLocal(receipt *types.ReceiptData) (*types.LocalDBSet, err
kv
:=
g
.
rollbackIndex
(
receiptGame
)
dbSet
.
KV
=
append
(
dbSet
.
KV
,
kv
...
)
}
}*/
table
:=
gty
.
NewTable
(
g
.
GetLocalDB
())
for
_
,
item
:=
range
receipt
.
Logs
{
var
gameLog
gty
.
ReceiptGuessGame
err
:=
types
.
Decode
(
item
.
Log
,
&
gameLog
)
if
err
!=
nil
{
return
nil
,
err
}
gameLog
.
Status
=
gameLog
.
PreStatus
gameLog
.
Index
=
gameLog
.
PreIndex
err
=
table
.
Replace
(
&
gameLog
)
if
err
!=
nil
{
return
nil
,
err
}
kvs
,
err
:=
table
.
Save
()
if
err
!=
nil
{
return
nil
,
err
}
dbSet
.
KV
=
append
(
dbSet
.
KV
,
kvs
...
)
}
return
dbSet
,
nil
}
...
...
plugin/dapp/guess/executor/exec_local.go
View file @
4da6c484
...
...
@@ -5,51 +5,75 @@
package
executor
import
(
"github.com/33cn/chain33/common/db/table"
"github.com/33cn/chain33/types"
gty
"github.com/33cn/plugin/plugin/dapp/guess/types"
)
func
(
g
*
Guess
)
getUserBet
(
log
*
gty
.
ReceiptGuessGame
)
(
userBet
*
gty
.
UserBet
)
{
userBet
=
&
gty
.
UserBet
{}
userBet
.
StartIndex
=
log
.
StartIndex
userBet
.
Index
=
log
.
Index
userBet
.
GameID
=
log
.
GameID
userBet
.
Addr
=
log
.
Addr
if
log
.
Bet
{
userBet
.
Option
=
log
.
Option
userBet
.
BetsNumber
=
log
.
BetsNumber
}
return
userBet
}
func
(
g
*
Guess
)
updateIndex
(
log
*
gty
.
ReceiptGuessGame
)
(
kvs
[]
*
types
.
KeyValue
)
{
//新创建游戏
userTable
:=
gty
.
NewGuessUserTable
(
g
.
GetLocalDB
())
gameTable
:=
gty
.
NewGuessGameTable
(
g
.
GetLocalDB
())
tablejoin
,
err
:=
table
.
NewJoinTable
(
userTable
,
gameTable
,
[]
string
{
"addr#status"
})
if
err
!=
nil
{
return
nil
}
if
log
.
Status
==
gty
.
GuessGameStatusStart
{
//kvs = append(kvs, addGuessGameAddrIndexKey(log.Status, log.Addr, log.GameId, log.Index))
kvs
=
append
(
kvs
,
addGuessGameStatusIndexKey
(
log
.
Status
,
log
.
GameID
,
log
.
Index
))
kvs
=
append
(
kvs
,
addGuessGameAdminIndexKey
(
log
.
Status
,
log
.
AdminAddr
,
log
.
GameID
,
log
.
Index
))
kvs
=
append
(
kvs
,
addGuessGameAdminStatusIndexKey
(
log
.
Status
,
log
.
AdminAddr
,
log
.
GameID
,
log
.
Index
))
kvs
=
append
(
kvs
,
addGuessGameCategoryStatusIndexKey
(
log
.
Status
,
log
.
Category
,
log
.
GameID
,
log
.
Index
))
//新创建游戏,game表新增记录
game
:=
log
.
Game
log
.
Game
=
nil
err
=
tablejoin
.
MustGetTable
(
"game"
)
.
Replace
(
game
)
if
err
!=
nil
{
return
nil
}
kvs
,
_
=
tablejoin
.
Save
()
return
kvs
}
else
if
log
.
Status
==
gty
.
GuessGameStatusBet
{
//如果是下注状态,则有用户进行了下注操作
kvs
=
append
(
kvs
,
addGuessGameAddrIndexKey
(
log
.
Status
,
log
.
Addr
,
log
.
GameID
,
log
.
Index
))
kvs
=
append
(
kvs
,
addGuessGameAddrStatusIndexKey
(
log
.
Status
,
log
.
Addr
,
log
.
GameID
,
log
.
Index
))
//如果发生了状态变化,则是从start->bet,对于老状态的记录进行删除操作,并增加新状态记录
if
log
.
StatusChange
{
kvs
=
append
(
kvs
,
addGuessGameStatusIndexKey
(
log
.
Status
,
log
.
GameID
,
log
.
Index
))
kvs
=
append
(
kvs
,
addGuessGameAdminStatusIndexKey
(
log
.
Status
,
log
.
AdminAddr
,
log
.
GameID
,
log
.
Index
))
kvs
=
append
(
kvs
,
addGuessGameCategoryStatusIndexKey
(
log
.
Status
,
log
.
Category
,
log
.
GameID
,
log
.
Index
))
kvs
=
append
(
kvs
,
delGuessGameStatusIndexKey
(
log
.
PreStatus
,
log
.
PreIndex
))
kvs
=
append
(
kvs
,
delGuessGameAdminStatusIndexKey
(
log
.
PreStatus
,
log
.
AdminAddr
,
log
.
PreIndex
))
kvs
=
append
(
kvs
,
delGuessGameCategoryStatusIndexKey
(
log
.
PreStatus
,
log
.
Category
,
log
.
PreIndex
))
//用户下注,game表发生更新(game中下注信息有更新),user表新增下注记录
game
:=
log
.
Game
log
.
Game
=
nil
userBet
:=
g
.
getUserBet
(
log
)
err
=
tablejoin
.
MustGetTable
(
"game"
)
.
Replace
(
game
)
if
err
!=
nil
{
return
nil
}
}
else
if
log
.
StatusChange
{
//其他状态时的状态发生变化,要将老状态对应的记录删除,同时加入新状态记录;对于每个地址的下注记录也需要遍历处理。
kvs
=
append
(
kvs
,
addGuessGameStatusIndexKey
(
log
.
Status
,
log
.
GameID
,
log
.
Index
))
kvs
=
append
(
kvs
,
addGuessGameAdminStatusIndexKey
(
log
.
Status
,
log
.
AdminAddr
,
log
.
GameID
,
log
.
Index
))
kvs
=
append
(
kvs
,
addGuessGameCategoryStatusIndexKey
(
log
.
Status
,
log
.
Category
,
log
.
GameID
,
log
.
Index
))
kvs
=
append
(
kvs
,
delGuessGameStatusIndexKey
(
log
.
PreStatus
,
log
.
PreIndex
))
kvs
=
append
(
kvs
,
delGuessGameAdminStatusIndexKey
(
log
.
PreStatus
,
log
.
AdminAddr
,
log
.
PreIndex
))
kvs
=
append
(
kvs
,
delGuessGameCategoryStatusIndexKey
(
log
.
PreStatus
,
log
.
Category
,
log
.
PreIndex
))
//从game中遍历每个地址的记录进行新状态记录的增和老状态记录的删除
game
,
err
:=
readGame
(
g
.
GetStateDB
(),
log
.
GameID
)
if
err
==
nil
{
for
i
:=
0
;
i
<
len
(
game
.
Plays
);
i
++
{
player
:=
game
.
Plays
[
i
]
kvs
=
append
(
kvs
,
addGuessGameAddrStatusIndexKey
(
log
.
Status
,
player
.
Addr
,
log
.
GameID
,
log
.
Index
))
kvs
=
append
(
kvs
,
delGuessGameAddrStatusIndexKey
(
log
.
PreStatus
,
player
.
Addr
,
player
.
Bet
.
PreIndex
))
err
=
tablejoin
.
MustGetTable
(
"user"
)
.
Replace
(
userBet
)
if
err
!=
nil
{
return
nil
}
kvs
,
_
=
tablejoin
.
Save
()
return
kvs
}
else
if
log
.
StatusChange
{
//其他状态,游戏状态变化,只需要更新game表
game
:=
log
.
Game
log
.
Game
=
nil
err
=
tablejoin
.
MustGetTable
(
"game"
)
.
Replace
(
game
)
if
err
!=
nil
{
return
nil
}
kvs
,
_
=
tablejoin
.
Save
()
return
kvs
}
return
kvs
...
...
@@ -61,22 +85,6 @@ func (g *Guess) execLocal(receipt *types.ReceiptData) (*types.LocalDBSet, error)
return
dbSet
,
nil
}
/*
for i := 0; i < len(receipt.Logs); i++ {
item := receipt.Logs[i]
if item.Ty >= gty.TyLogGuessGameStart && item.Ty <= gty.TyLogGuessGameTimeout {
var Gamelog gty.ReceiptGuessGame
err := types.Decode(item.Log, &Gamelog)
if err != nil {
panic(err) //数据错误了,已经被修改了
}
kv := g.updateIndex(&Gamelog)
dbSet.KV = append(dbSet.KV, kv...)
}
}
*/
table
:=
gty
.
NewTable
(
g
.
GetLocalDB
())
for
_
,
item
:=
range
receipt
.
Logs
{
if
item
.
Ty
>=
gty
.
TyLogGuessGameStart
&&
item
.
Ty
<=
gty
.
TyLogGuessGameTimeout
{
var
gameLog
gty
.
ReceiptGuessGame
...
...
@@ -84,14 +92,7 @@ func (g *Guess) execLocal(receipt *types.ReceiptData) (*types.LocalDBSet, error)
if
err
!=
nil
{
return
nil
,
err
}
err
=
table
.
Replace
(
&
gameLog
)
if
err
!=
nil
{
return
nil
,
err
}
kvs
,
err
:=
table
.
Save
()
if
err
!=
nil
{
return
nil
,
err
}
kvs
:=
g
.
updateIndex
(
&
gameLog
)
dbSet
.
KV
=
append
(
dbSet
.
KV
,
kvs
...
)
}
}
...
...
plugin/dapp/guess/executor/guessdb.go
View file @
4da6c484
...
...
@@ -7,6 +7,8 @@ package executor
import
(
"context"
"fmt"
"github.com/33cn/chain33/common/db"
"github.com/33cn/chain33/common/db/table"
"strings"
"time"
...
...
@@ -62,7 +64,7 @@ type Action struct {
blocktime
int64
height
int64
execaddr
string
localDB
dbm
.
Lister
localDB
dbm
.
KVDB
index
int
api
client
.
QueueProtocolAPI
conn
*
grpc
.
ClientConn
...
...
@@ -120,184 +122,117 @@ func Key(id string) (key []byte) {
return
key
}
func
readGame
(
db
dbm
.
KV
,
id
string
)
(
*
gty
.
GuessGame
,
error
)
{
data
,
err
:=
db
.
Get
(
Key
(
id
))
if
err
!=
nil
{
logger
.
Error
(
"query data have err:"
,
err
.
Error
())
return
nil
,
err
}
var
game
gty
.
GuessGame
//decode
err
=
types
.
Decode
(
data
,
&
game
)
if
err
!=
nil
{
logger
.
Error
(
"decode game have err:"
,
err
.
Error
())
return
nil
,
err
}
return
&
game
,
nil
}
//Infos 根据游戏id列表查询多个游戏详情信息
func
Infos
(
db
dbm
.
KV
,
infos
*
gty
.
QueryGuessGameInfos
)
(
types
.
Message
,
error
)
{
func
QueryGameInfos
(
kvdb
db
.
KVDB
,
infos
*
gty
.
QueryGuessGameInfos
)
(
types
.
Message
,
error
)
{
var
games
[]
*
gty
.
GuessGame
gameTable
:=
gty
.
NewGuessGameTable
(
kvdb
)
query
:=
gameTable
.
GetQuery
(
kvdb
)
for
i
:=
0
;
i
<
len
(
infos
.
GameIDs
);
i
++
{
id
:=
infos
.
GameIDs
[
i
]
game
,
err
:=
readGame
(
db
,
id
)
rows
,
err
:=
query
.
ListIndex
(
"gameid"
,
[]
byte
(
infos
.
GameIDs
[
i
]),
nil
,
1
,
0
)
if
err
!=
nil
{
return
nil
,
err
}
game
:=
rows
[
0
]
.
Data
.
(
*
gty
.
GuessGame
)
games
=
append
(
games
,
game
)
}
return
&
gty
.
ReplyGuessGameInfos
{
Games
:
games
},
nil
}
func
getGameListByAddr
(
db
dbm
.
Lister
,
addr
string
,
index
int64
)
(
types
.
Message
,
error
)
{
var
values
[][]
byte
var
err
error
if
index
==
0
{
values
,
err
=
db
.
List
(
calcGuessGameAddrPrefix
(
addr
),
nil
,
DefaultCount
,
ListDESC
)
}
else
{
values
,
err
=
db
.
List
(
calcGuessGameAddrPrefix
(
addr
),
calcGuessGameAddrKey
(
addr
,
index
),
DefaultCount
,
ListDESC
)
}
//QueryGameInfo 根据gameid查询game信息
func
QueryGameInfo
(
kvdb
db
.
KVDB
,
gameID
[]
byte
)
(
*
gty
.
GuessGame
,
error
)
{
gameTable
:=
gty
.
NewGuessGameTable
(
kvdb
)
query
:=
gameTable
.
GetQuery
(
kvdb
)
rows
,
err
:=
query
.
ListIndex
(
"gameid"
,
gameID
,
nil
,
1
,
0
)
if
err
!=
nil
{
return
nil
,
err
}
var
records
[]
*
gty
.
GuessGameRecord
for
_
,
value
:=
range
values
{
var
record
gty
.
GuessGameRecord
err
:=
types
.
Decode
(
value
,
&
record
)
if
err
!=
nil
{
continue
}
records
=
append
(
records
,
&
record
)
}
game
:=
rows
[
0
]
.
Data
.
(
*
gty
.
GuessGame
)
return
&
gty
.
GuessGameRecords
{
Records
:
records
}
,
nil
return
game
,
nil
}
func
getGameListByAdminAddr
(
db
dbm
.
Lister
,
addr
string
,
index
int64
)
(
types
.
Message
,
error
)
{
var
values
[][]
byte
var
err
error
if
index
==
0
{
values
,
err
=
db
.
List
(
calcGuessGameAdminPrefix
(
addr
),
nil
,
DefaultCount
,
ListDESC
)
}
else
{
values
,
err
=
db
.
List
(
calcGuessGameAdminPrefix
(
addr
),
calcGuessGameAdminKey
(
addr
,
index
),
DefaultCount
,
ListDESC
)
}
//QueryUserTableData 查询user表数据
func
QueryUserTableData
(
query
*
table
.
Query
,
indexName
string
,
prefix
,
primaryKey
[]
byte
)
(
types
.
Message
,
error
)
{
rows
,
err
:=
query
.
ListIndex
(
indexName
,
prefix
,
primaryKey
,
DefaultCount
,
0
)
if
err
!=
nil
{
return
nil
,
err
}
var
records
[]
*
gty
.
GuessGameRecord
for
_
,
value
:=
range
values
{
for
i
:=
0
;
i
<
len
(
rows
);
i
++
{
userBet
:=
rows
[
i
]
.
Data
.
(
*
gty
.
UserBet
)
var
record
gty
.
GuessGameRecord
err
:=
types
.
Decode
(
value
,
&
record
)
if
err
!=
nil
{
continue
}
record
.
GameID
=
userBet
.
GameID
record
.
StartIndex
=
userBet
.
StartIndex
records
=
append
(
records
,
&
record
)
}
return
&
gty
.
GuessGameRecords
{
Records
:
records
},
nil
}
func
getGameListByStatus
(
db
dbm
.
Lister
,
status
int32
,
index
int64
)
(
types
.
Message
,
error
)
{
var
values
[][]
byte
var
err
error
if
index
==
0
{
values
,
err
=
db
.
List
(
calcGuessGameStatusPrefix
(
status
),
nil
,
DefaultCount
,
ListDESC
)
var
primary
[]
byte
if
len
(
rows
)
==
int
(
DefaultCount
)
{
primary
=
rows
[
len
(
rows
)
-
1
]
.
Primary
}
else
{
values
,
err
=
db
.
List
(
calcGuessGameStatusPrefix
(
status
),
calcGuessGameStatusKey
(
status
,
index
),
DefaultCount
,
ListDESC
)
}
if
err
!=
nil
{
return
nil
,
err
}
var
records
[]
*
gty
.
GuessGameRecord
for
_
,
value
:=
range
values
{
var
record
gty
.
GuessGameRecord
err
:=
types
.
Decode
(
value
,
&
record
)
if
err
!=
nil
{
continue
}
records
=
append
(
records
,
&
record
)
primary
=
nil
}
return
&
gty
.
GuessGameRecords
{
Records
:
records
},
nil
return
&
gty
.
GuessGameRecords
{
Records
:
records
,
PrimaryKey
:
primary
},
nil
}
func
getGameListByAddrStatus
(
db
dbm
.
Lister
,
addr
string
,
status
int32
,
index
int64
)
(
types
.
Message
,
error
)
{
var
values
[][]
byte
var
err
error
if
index
==
0
{
values
,
err
=
db
.
List
(
calcGuessGameAddrStatusPrefix
(
addr
,
status
),
nil
,
DefaultCount
,
ListDESC
)
}
else
{
values
,
err
=
db
.
List
(
calcGuessGameAddrStatusPrefix
(
addr
,
status
),
calcGuessGameAddrStatusKey
(
addr
,
status
,
index
),
DefaultCount
,
ListDESC
)
}
//QueryGameTableData 查询game表数据
func
QueryGameTableData
(
query
*
table
.
Query
,
indexName
string
,
prefix
,
primaryKey
[]
byte
)
(
types
.
Message
,
error
)
{
rows
,
err
:=
query
.
ListIndex
(
indexName
,
prefix
,
primaryKey
,
DefaultCount
,
0
)
if
err
!=
nil
{
return
nil
,
err
}
var
records
[]
*
gty
.
GuessGameRecord
for
_
,
value
:=
range
values
{
for
i
:=
0
;
i
<
len
(
rows
);
i
++
{
game
:=
rows
[
i
]
.
Data
.
(
*
gty
.
GuessGame
)
var
record
gty
.
GuessGameRecord
err
:=
types
.
Decode
(
value
,
&
record
)
if
err
!=
nil
{
continue
}
record
.
GameID
=
game
.
GameID
record
.
StartIndex
=
game
.
StartIndex
records
=
append
(
records
,
&
record
)
}
return
&
gty
.
GuessGameRecords
{
Records
:
records
},
nil
}
func
getGameListByAdminStatus
(
db
dbm
.
Lister
,
admin
string
,
status
int32
,
index
int64
)
(
types
.
Message
,
error
)
{
var
values
[][]
byte
var
err
error
if
index
==
0
{
values
,
err
=
db
.
List
(
calcGuessGameAdminStatusPrefix
(
admin
,
status
),
nil
,
DefaultCount
,
ListDESC
)
var
primary
[]
byte
if
len
(
rows
)
==
int
(
DefaultCount
)
{
primary
=
rows
[
len
(
rows
)
-
1
]
.
Primary
}
else
{
values
,
err
=
db
.
List
(
calcGuessGameAdminStatusPrefix
(
admin
,
status
),
calcGuessGameAdminStatusKey
(
admin
,
status
,
index
),
DefaultCount
,
ListDESC
)
}
if
err
!=
nil
{
return
nil
,
err
}
var
records
[]
*
gty
.
GuessGameRecord
for
_
,
value
:=
range
values
{
var
record
gty
.
GuessGameRecord
err
:=
types
.
Decode
(
value
,
&
record
)
if
err
!=
nil
{
continue
}
records
=
append
(
records
,
&
record
)
primary
=
nil
}
return
&
gty
.
GuessGameRecords
{
Records
:
records
},
nil
return
&
gty
.
GuessGameRecords
{
Records
:
records
,
PrimaryKey
:
primary
},
nil
}
func
getGameListByCategoryStatus
(
db
dbm
.
Lister
,
category
string
,
status
int32
,
index
int64
)
(
types
.
Message
,
error
)
{
var
values
[][]
byte
var
err
error
if
index
==
0
{
values
,
err
=
db
.
List
(
calcGuessGameCategoryStatusPrefix
(
category
,
status
),
nil
,
DefaultCount
,
ListDESC
)
}
else
{
values
,
err
=
db
.
List
(
calcGuessGameCategoryStatusPrefix
(
category
,
status
),
calcGuessGameCategoryStatusKey
(
category
,
status
,
index
),
DefaultCount
,
ListDESC
)
}
//QueryJoinTableData 查询join表数据
func
QueryJoinTableData
(
talbeJoin
*
table
.
JoinTable
,
indexName
string
,
prefix
,
primaryKey
[]
byte
)
(
types
.
Message
,
error
)
{
rows
,
err
:=
talbeJoin
.
ListIndex
(
indexName
,
prefix
,
primaryKey
,
DefaultCount
,
0
)
if
err
!=
nil
{
return
nil
,
err
}
var
records
[]
*
gty
.
GuessGameRecord
for
_
,
value
:=
range
values
{
for
i
:=
0
;
i
<
len
(
rows
);
i
++
{
game
:=
rows
[
i
]
.
Data
.
(
*
table
.
JoinData
)
.
Right
.
(
*
gty
.
GuessGame
)
var
record
gty
.
GuessGameRecord
err
:=
types
.
Decode
(
value
,
&
record
)
if
err
!=
nil
{
continue
}
record
.
GameID
=
game
.
GameID
record
.
StartIndex
=
game
.
StartIndex
records
=
append
(
records
,
&
record
)
}
return
&
gty
.
GuessGameRecords
{
Records
:
records
},
nil
var
primary
[]
byte
if
len
(
rows
)
==
int
(
DefaultCount
)
{
primary
=
rows
[
len
(
rows
)
-
1
]
.
Primary
}
else
{
primary
=
nil
}
return
&
gty
.
GuessGameRecords
{
Records
:
records
,
PrimaryKey
:
primary
},
nil
}
func
(
action
*
Action
)
saveGame
(
game
*
gty
.
GuessGame
)
(
kvset
[]
*
types
.
KeyValue
)
{
...
...
@@ -311,8 +246,8 @@ func (action *Action) getIndex() int64 {
return
action
.
height
*
types
.
MaxTxsPerBlock
+
int64
(
action
.
index
)
}
//
G
etReceiptLog 根据游戏信息生成收据记录
func
(
action
*
Action
)
GetReceiptLog
(
game
*
gty
.
GuessGame
,
statusChange
bool
)
*
types
.
ReceiptLog
{
//
g
etReceiptLog 根据游戏信息生成收据记录
func
(
action
*
Action
)
getReceiptLog
(
game
*
gty
.
GuessGame
,
statusChange
bool
,
bet
*
gty
.
GuessGameBet
)
*
types
.
ReceiptLog
{
log
:=
&
types
.
ReceiptLog
{}
r
:=
&
gty
.
ReceiptGuessGame
{}
r
.
Addr
=
action
.
fromaddr
...
...
@@ -330,7 +265,8 @@ func (action *Action) GetReceiptLog(game *gty.GuessGame, statusChange bool) *typ
log
.
Ty
=
gty
.
TyLogGuessGameTimeout
}
r
.
Index
=
game
.
Index
r
.
StartIndex
=
game
.
StartIndex
r
.
Index
=
action
.
getIndex
()
r
.
GameID
=
game
.
GameID
r
.
Status
=
game
.
Status
r
.
AdminAddr
=
game
.
AdminAddr
...
...
@@ -338,6 +274,12 @@ func (action *Action) GetReceiptLog(game *gty.GuessGame, statusChange bool) *typ
r
.
StatusChange
=
statusChange
r
.
PreIndex
=
game
.
PreIndex
r
.
Category
=
game
.
Category
if
nil
!=
bet
{
r
.
Bet
=
true
r
.
Option
=
bet
.
Option
r
.
BetsNumber
=
bet
.
BetsNum
}
r
.
Game
=
game
log
.
Log
=
types
.
Encode
(
r
)
return
log
}
...
...
@@ -412,14 +354,14 @@ func (action *Action) GameStart(start *gty.GuessGameStart) (*types.Receipt, erro
return
nil
,
types
.
ErrInvalidParam
}
options
,
ok
:=
G
etOptions
(
start
.
Options
)
options
,
ok
:=
g
etOptions
(
start
.
Options
)
if
!
ok
{
logger
.
Error
(
"GameStart"
,
"addr"
,
action
.
fromaddr
,
"execaddr"
,
action
.
execaddr
,
"err"
,
fmt
.
Sprintf
(
"The options is illegal:%s"
,
start
.
Options
))
return
nil
,
types
.
ErrInvalidParam
}
if
!
action
.
C
heckTime
(
start
)
{
if
!
action
.
c
heckTime
(
start
)
{
logger
.
Error
(
"GameStart"
,
"addr"
,
action
.
fromaddr
,
"execaddr"
,
action
.
execaddr
,
"err"
,
fmt
.
Sprintf
(
"The height and time parameters are illegal:MaxHeight %d ,ExpireHeight %d"
,
start
.
MaxBetHeight
,
start
.
ExpireHeight
))
return
nil
,
types
.
ErrInvalidParam
...
...
@@ -449,6 +391,7 @@ func (action *Action) GameStart(start *gty.GuessGameStart) (*types.Receipt, erro
game
.
AdminAddr
=
action
.
fromaddr
game
.
PreIndex
=
0
game
.
Index
=
action
.
getIndex
()
game
.
StartIndex
=
game
.
Index
game
.
Status
=
gty
.
GuessGameStatusStart
game
.
BetStat
=
&
gty
.
GuessBetStat
{
TotalBetTimes
:
0
,
TotalBetsNumber
:
0
}
for
i
:=
0
;
i
<
len
(
options
);
i
++
{
...
...
@@ -456,8 +399,10 @@ func (action *Action) GameStart(start *gty.GuessGameStart) (*types.Receipt, erro
game
.
BetStat
.
Items
=
append
(
game
.
BetStat
.
Items
,
item
)
}
receiptLog
:=
action
.
GetReceiptLog
(
game
,
false
)
receiptLog
:=
action
.
getReceiptLog
(
game
,
false
,
nil
)
logs
=
append
(
logs
,
receiptLog
)
//对于写入statedb中的信息,去除下注信息,只记录主要信息,因为参与用户量大时在不同区块中反复记录这些数据会占用比较多的存储空间,意义不大
game
.
Plays
=
nil
kv
=
append
(
kv
,
action
.
saveGame
(
game
)
...
)
return
&
types
.
Receipt
{
Ty
:
types
.
ExecOk
,
KV
:
kv
,
Logs
:
logs
},
nil
...
...
@@ -468,8 +413,8 @@ func (action *Action) GameBet(pbBet *gty.GuessGameBet) (*types.Receipt, error) {
var
logs
[]
*
types
.
ReceiptLog
var
kv
[]
*
types
.
KeyValue
game
,
err
:=
action
.
readGame
(
pbBet
.
GetGameID
(
))
if
err
!=
nil
{
game
,
err
:=
QueryGameInfo
(
action
.
localDB
,
[]
byte
(
pbBet
.
GetGameID
()
))
if
err
!=
nil
||
game
==
nil
{
logger
.
Error
(
"GameBet"
,
"addr"
,
action
.
fromaddr
,
"execaddr"
,
action
.
execaddr
,
"get game failed"
,
pbBet
.
GetGameID
(),
"err"
,
err
)
return
nil
,
err
...
...
@@ -482,16 +427,16 @@ func (action *Action) GameBet(pbBet *gty.GuessGameBet) (*types.Receipt, error) {
return
nil
,
gty
.
ErrGuessStatus
}
canBet
:=
action
.
R
efreshStatusByTime
(
game
)
canBet
:=
action
.
r
efreshStatusByTime
(
game
)
if
!
canBet
{
var
receiptLog
*
types
.
ReceiptLog
if
prevStatus
!=
game
.
Status
{
//状态发生了变化,且是变到了不可下注的状态,那么对于所有下注的addr来说,其addr:status主键的数据都需要更新
action
.
C
hangeAllAddrIndex
(
game
)
receiptLog
=
action
.
GetReceiptLog
(
game
,
true
)
action
.
c
hangeAllAddrIndex
(
game
)
receiptLog
=
action
.
getReceiptLog
(
game
,
true
,
nil
)
}
else
{
receiptLog
=
action
.
GetReceiptLog
(
game
,
false
)
receiptLog
=
action
.
getReceiptLog
(
game
,
false
,
nil
)
}
logs
=
append
(
logs
,
receiptLog
)
...
...
@@ -501,14 +446,14 @@ func (action *Action) GameBet(pbBet *gty.GuessGameBet) (*types.Receipt, error) {
}
//检查竞猜选项是否合法
options
,
legal
:=
G
etOptions
(
game
.
GetOptions
())
options
,
legal
:=
g
etOptions
(
game
.
GetOptions
())
if
!
legal
||
len
(
options
)
==
0
{
logger
.
Error
(
"GameBet"
,
"addr"
,
action
.
fromaddr
,
"execaddr"
,
action
.
execaddr
,
"Game Options illegal"
,
game
.
GetOptions
())
return
nil
,
types
.
ErrInvalidParam
}
if
!
I
sLegalOption
(
options
,
pbBet
.
GetOption
())
{
if
!
i
sLegalOption
(
options
,
pbBet
.
GetOption
())
{
logger
.
Error
(
"GameBet"
,
"addr"
,
action
.
fromaddr
,
"execaddr"
,
action
.
execaddr
,
"Option illegal"
,
pbBet
.
GetOption
())
return
nil
,
types
.
ErrInvalidParam
...
...
@@ -519,7 +464,7 @@ func (action *Action) GameBet(pbBet *gty.GuessGameBet) (*types.Receipt, error) {
pbBet
.
BetsNum
=
game
.
GetMaxBetsOneTime
()
}
if
game
.
BetsNumber
+
pbBet
.
GetBetsNum
()
>
game
.
MaxBetsNumber
{
if
game
.
BetsNumber
+
pbBet
.
GetBetsNum
()
>
game
.
MaxBetsNumber
{
logger
.
Error
(
"GameBet"
,
"addr"
,
action
.
fromaddr
,
"execaddr"
,
action
.
execaddr
,
"MaxBetsNumber over limit"
,
game
.
MaxBetsNumber
,
"current Bets Number"
,
game
.
BetsNumber
)
return
nil
,
types
.
ErrInvalidParam
...
...
@@ -543,15 +488,17 @@ func (action *Action) GameBet(pbBet *gty.GuessGameBet) (*types.Receipt, error) {
var
receiptLog
*
types
.
ReceiptLog
if
prevStatus
!=
gty
.
GuessGameStatusBet
{
action
.
C
hangeStatus
(
game
,
gty
.
GuessGameStatusBet
)
action
.
A
ddGuessBet
(
game
,
pbBet
)
receiptLog
=
action
.
GetReceiptLog
(
game
,
true
)
action
.
c
hangeStatus
(
game
,
gty
.
GuessGameStatusBet
)
action
.
a
ddGuessBet
(
game
,
pbBet
)
receiptLog
=
action
.
getReceiptLog
(
game
,
true
,
pbBet
)
}
else
{
action
.
A
ddGuessBet
(
game
,
pbBet
)
receiptLog
=
action
.
GetReceiptLog
(
game
,
false
)
action
.
a
ddGuessBet
(
game
,
pbBet
)
receiptLog
=
action
.
getReceiptLog
(
game
,
false
,
pbBet
)
}
logs
=
append
(
logs
,
receiptLog
)
//对于写入statedb中的信息,去除下注信息,只记录主要信息,因为参与用户量大时在不同区块中反复记录这些数据会占用比较多的存储空间,意义不大
game
.
Plays
=
nil
kv
=
append
(
kv
,
action
.
saveGame
(
game
)
...
)
return
&
types
.
Receipt
{
Ty
:
types
.
ExecOk
,
KV
:
kv
,
Logs
:
logs
},
nil
...
...
@@ -562,8 +509,8 @@ func (action *Action) GameStopBet(pbBet *gty.GuessGameStopBet) (*types.Receipt,
var
logs
[]
*
types
.
ReceiptLog
var
kv
[]
*
types
.
KeyValue
game
,
err
:=
action
.
readGame
(
pbBet
.
GetGameID
(
))
if
err
!=
nil
{
game
,
err
:=
QueryGameInfo
(
action
.
localDB
,
[]
byte
(
pbBet
.
GetGameID
()
))
if
err
!=
nil
||
game
==
nil
{
logger
.
Error
(
"GameStopBet"
,
"addr"
,
action
.
fromaddr
,
"execaddr"
,
action
.
execaddr
,
"get game failed"
,
pbBet
.
GetGameID
(),
"err"
,
err
)
return
nil
,
err
...
...
@@ -582,22 +529,24 @@ func (action *Action) GameStopBet(pbBet *gty.GuessGameStopBet) (*types.Receipt,
return
nil
,
gty
.
ErrNoPrivilege
}
action
.
C
hangeStatus
(
game
,
gty
.
GuessGameStatusStopBet
)
action
.
c
hangeStatus
(
game
,
gty
.
GuessGameStatusStopBet
)
var
receiptLog
*
types
.
ReceiptLog
//状态发生变化,更新所有addr对应记录的index
action
.
C
hangeAllAddrIndex
(
game
)
receiptLog
=
action
.
GetReceiptLog
(
game
,
true
)
action
.
c
hangeAllAddrIndex
(
game
)
receiptLog
=
action
.
getReceiptLog
(
game
,
true
,
nil
)
logs
=
append
(
logs
,
receiptLog
)
//对于写入statedb中的信息,去除下注信息,只记录主要信息,因为参与用户量大时在不同区块中反复记录这些数据会占用比较多的存储空间,意义不大
game
.
Plays
=
nil
kv
=
append
(
kv
,
action
.
saveGame
(
game
)
...
)
return
&
types
.
Receipt
{
Ty
:
types
.
ExecOk
,
KV
:
kv
,
Logs
:
logs
},
nil
}
//
A
ddGuessBet 向游戏结构中加入下注信息
func
(
action
*
Action
)
A
ddGuessBet
(
game
*
gty
.
GuessGame
,
pbBet
*
gty
.
GuessGameBet
)
{
bet
:=
&
gty
.
GuessBet
{
Option
:
pbBet
.
GetOption
(),
BetsNumber
:
pbBet
.
BetsNum
,
Index
:
game
.
Index
}
//
a
ddGuessBet 向游戏结构中加入下注信息
func
(
action
*
Action
)
a
ddGuessBet
(
game
*
gty
.
GuessGame
,
pbBet
*
gty
.
GuessGameBet
)
{
bet
:=
&
gty
.
GuessBet
{
Option
:
pbBet
.
GetOption
(),
BetsNumber
:
pbBet
.
BetsNum
,
Index
:
action
.
getIndex
()
}
player
:=
&
gty
.
GuessPlayer
{
Addr
:
action
.
fromaddr
,
Bet
:
bet
}
game
.
Plays
=
append
(
game
.
Plays
,
player
)
...
...
@@ -622,8 +571,8 @@ func (action *Action) GamePublish(publish *gty.GuessGamePublish) (*types.Receipt
var
logs
[]
*
types
.
ReceiptLog
var
kv
[]
*
types
.
KeyValue
game
,
err
:=
action
.
readGame
(
publish
.
GetGameID
(
))
if
err
!=
nil
{
game
,
err
:=
QueryGameInfo
(
action
.
localDB
,
[]
byte
(
publish
.
GetGameID
()
))
if
err
!=
nil
||
game
==
nil
{
logger
.
Error
(
"GamePublish"
,
"addr"
,
action
.
fromaddr
,
"execaddr"
,
action
.
execaddr
,
"get game failed"
,
publish
.
GetGameID
(),
"err"
,
err
)
return
nil
,
err
...
...
@@ -643,14 +592,14 @@ func (action *Action) GamePublish(publish *gty.GuessGamePublish) (*types.Receipt
}
//检查竞猜选项是否合法
options
,
legal
:=
G
etOptions
(
game
.
GetOptions
())
options
,
legal
:=
g
etOptions
(
game
.
GetOptions
())
if
!
legal
||
len
(
options
)
==
0
{
logger
.
Error
(
"GamePublish"
,
"addr"
,
action
.
fromaddr
,
"execaddr"
,
action
.
execaddr
,
"Game Options illegal"
,
game
.
GetOptions
())
return
nil
,
types
.
ErrInvalidParam
}
if
!
I
sLegalOption
(
options
,
publish
.
GetResult
())
{
if
!
i
sLegalOption
(
options
,
publish
.
GetResult
())
{
logger
.
Error
(
"GamePublish"
,
"addr"
,
action
.
fromaddr
,
"execaddr"
,
action
.
execaddr
,
"Option illegal"
,
publish
.
GetResult
())
return
nil
,
types
.
ErrInvalidParam
...
...
@@ -682,7 +631,7 @@ func (action *Action) GamePublish(publish *gty.GuessGamePublish) (*types.Receipt
kv
=
append
(
kv
,
receipt
.
KV
...
)
}
action
.
C
hangeStatus
(
game
,
gty
.
GuessGameStatusPublish
)
action
.
c
hangeStatus
(
game
,
gty
.
GuessGameStatusPublish
)
//计算竞猜正确的筹码总数
totalBetsNumber
:=
game
.
BetStat
.
TotalBetsNumber
winBetsNumber
:=
int64
(
0
)
...
...
@@ -752,10 +701,12 @@ func (action *Action) GamePublish(publish *gty.GuessGamePublish) (*types.Receipt
}
var
receiptLog
*
types
.
ReceiptLog
action
.
C
hangeAllAddrIndex
(
game
)
receiptLog
=
action
.
GetReceiptLog
(
game
,
true
)
action
.
c
hangeAllAddrIndex
(
game
)
receiptLog
=
action
.
getReceiptLog
(
game
,
true
,
nil
)
logs
=
append
(
logs
,
receiptLog
)
//对于写入statedb中的信息,去除下注信息,只记录主要信息,因为参与用户量大时在不同区块中反复记录这些数据会占用比较多的存储空间,意义不大
game
.
Plays
=
nil
kv
=
append
(
kv
,
action
.
saveGame
(
game
)
...
)
return
&
types
.
Receipt
{
Ty
:
types
.
ExecOk
,
KV
:
kv
,
Logs
:
logs
},
nil
...
...
@@ -766,8 +717,8 @@ func (action *Action) GameAbort(pbend *gty.GuessGameAbort) (*types.Receipt, erro
var
logs
[]
*
types
.
ReceiptLog
var
kv
[]
*
types
.
KeyValue
game
,
err
:=
action
.
readGame
(
pbend
.
GetGameID
(
))
if
err
!=
nil
{
game
,
err
:=
QueryGameInfo
(
action
.
localDB
,
[]
byte
(
pbend
.
GetGameID
()
))
if
err
!=
nil
||
game
==
nil
{
logger
.
Error
(
"GameAbort"
,
"addr"
,
action
.
fromaddr
,
"execaddr"
,
action
.
execaddr
,
"get game failed"
,
pbend
.
GetGameID
(),
"err"
,
err
)
return
nil
,
err
...
...
@@ -782,7 +733,7 @@ func (action *Action) GameAbort(pbend *gty.GuessGameAbort) (*types.Receipt, erro
preStatus
:=
game
.
Status
//根据区块链高度或时间刷新游戏状态。
action
.
R
efreshStatusByTime
(
game
)
action
.
r
efreshStatusByTime
(
game
)
//如果游戏超时,则任何地址都可以Abort,否则只有创建游戏的地址可以Abort
if
game
.
Status
!=
gty
.
GuessGameStatusTimeOut
{
...
...
@@ -814,20 +765,22 @@ func (action *Action) GameAbort(pbend *gty.GuessGameAbort) (*types.Receipt, erro
//说明action.RefreshStatusByTime(game)调用时已经更新过状态和index了,这里直接再改状态就行了。
game
.
Status
=
gty
.
GuessGameStatusAbort
}
else
{
action
.
C
hangeStatus
(
game
,
gty
.
GuessGameStatusAbort
)
action
.
c
hangeStatus
(
game
,
gty
.
GuessGameStatusAbort
)
}
//状态发生变化,统一更新所有addr记录的index
action
.
C
hangeAllAddrIndex
(
game
)
action
.
c
hangeAllAddrIndex
(
game
)
receiptLog
:=
action
.
GetReceiptLog
(
game
,
true
)
receiptLog
:=
action
.
getReceiptLog
(
game
,
true
,
nil
)
logs
=
append
(
logs
,
receiptLog
)
//对于写入statedb中的信息,去除下注信息,只记录主要信息,因为参与用户量大时在不同区块中反复记录这些数据会占用比较多的存储空间,意义不大
game
.
Plays
=
nil
kv
=
append
(
kv
,
action
.
saveGame
(
game
)
...
)
return
&
types
.
Receipt
{
Ty
:
types
.
ExecOk
,
KV
:
kv
,
Logs
:
logs
},
nil
}
//
G
etOptions 获得竞猜选项,并判断是否符合约定格式,类似"A:xxxx;B:xxxx;C:xxx",“:”前为选项名称,不能重复,":"后为选项说明。
func
G
etOptions
(
strOptions
string
)
(
options
[]
string
,
legal
bool
)
{
//
g
etOptions 获得竞猜选项,并判断是否符合约定格式,类似"A:xxxx;B:xxxx;C:xxx",“:”前为选项名称,不能重复,":"后为选项说明。
func
g
etOptions
(
strOptions
string
)
(
options
[]
string
,
legal
bool
)
{
legal
=
true
items
:=
strings
.
Split
(
strOptions
,
";"
)
for
i
:=
0
;
i
<
len
(
items
);
i
++
{
...
...
@@ -845,8 +798,8 @@ func GetOptions(strOptions string) (options []string, legal bool) {
return
options
,
legal
}
//
I
sLegalOption 判断选项是否为合法选项
func
I
sLegalOption
(
options
[]
string
,
option
string
)
bool
{
//
i
sLegalOption 判断选项是否为合法选项
func
i
sLegalOption
(
options
[]
string
,
option
string
)
bool
{
for
i
:=
0
;
i
<
len
(
options
);
i
++
{
if
options
[
i
]
==
option
{
return
true
...
...
@@ -856,8 +809,8 @@ func IsLegalOption(options []string, option string) bool {
return
false
}
//
C
hangeStatus 修改游戏状态,同步更新历史记录
func
(
action
*
Action
)
C
hangeStatus
(
game
*
gty
.
GuessGame
,
destStatus
int32
)
{
//
c
hangeStatus 修改游戏状态,同步更新历史记录
func
(
action
*
Action
)
c
hangeStatus
(
game
*
gty
.
GuessGame
,
destStatus
int32
)
{
if
game
.
Status
!=
destStatus
{
game
.
PreStatus
=
game
.
Status
game
.
PreIndex
=
game
.
Index
...
...
@@ -866,17 +819,17 @@ func (action *Action) ChangeStatus(game *gty.GuessGame, destStatus int32) {
}
}
//
C
hangeAllAddrIndex 状态更新时,更新下注记录的历史信息
func
(
action
*
Action
)
C
hangeAllAddrIndex
(
game
*
gty
.
GuessGame
)
{
//
c
hangeAllAddrIndex 状态更新时,更新下注记录的历史信息
func
(
action
*
Action
)
c
hangeAllAddrIndex
(
game
*
gty
.
GuessGame
)
{
for
i
:=
0
;
i
<
len
(
game
.
Plays
);
i
++
{
player
:=
game
.
Plays
[
i
]
player
.
Bet
.
PreIndex
=
player
.
Bet
.
Index
player
.
Bet
.
Index
=
game
.
Index
player
.
Bet
.
Index
=
action
.
getIndex
()
}
}
//
R
efreshStatusByTime 检测游戏是否过期,是否可以下注
func
(
action
*
Action
)
R
efreshStatusByTime
(
game
*
gty
.
GuessGame
)
(
canBet
bool
)
{
//
r
efreshStatusByTime 检测游戏是否过期,是否可以下注
func
(
action
*
Action
)
r
efreshStatusByTime
(
game
*
gty
.
GuessGame
)
(
canBet
bool
)
{
var
mainHeight
int64
if
types
.
IsPara
()
{
...
...
@@ -893,7 +846,7 @@ func (action *Action) RefreshStatusByTime(game *gty.GuessGame) (canBet bool) {
if
game
.
DrivenByAdmin
{
if
(
mainHeight
-
game
.
StartHeight
)
>=
game
.
ExpireHeight
{
action
.
C
hangeStatus
(
game
,
gty
.
GuessGameStatusTimeOut
)
action
.
c
hangeStatus
(
game
,
gty
.
GuessGameStatusTimeOut
)
canBet
=
false
return
canBet
}
...
...
@@ -907,9 +860,9 @@ func (action *Action) RefreshStatusByTime(game *gty.GuessGame) (canBet bool) {
logger
.
Error
(
"GameBet"
,
"addr"
,
action
.
fromaddr
,
"execaddr"
,
action
.
execaddr
,
"Height over limit"
,
mainHeight
,
"startHeight"
,
game
.
StartHeight
,
"MaxHeightDiff"
,
game
.
GetMaxBetHeight
())
if
game
.
ExpireHeight
>
heightDiff
{
action
.
C
hangeStatus
(
game
,
gty
.
GuessGameStatusStopBet
)
action
.
c
hangeStatus
(
game
,
gty
.
GuessGameStatusStopBet
)
}
else
{
action
.
C
hangeStatus
(
game
,
gty
.
GuessGameStatusTimeOut
)
action
.
c
hangeStatus
(
game
,
gty
.
GuessGameStatusTimeOut
)
}
canBet
=
false
...
...
@@ -920,8 +873,8 @@ func (action *Action) RefreshStatusByTime(game *gty.GuessGame) (canBet bool) {
return
canBet
}
//
C
heckTime 检测游戏的过期设置。
func
(
action
*
Action
)
C
heckTime
(
start
*
gty
.
GuessGameStart
)
bool
{
//
c
heckTime 检测游戏的过期设置。
func
(
action
*
Action
)
c
heckTime
(
start
*
gty
.
GuessGameStart
)
bool
{
if
start
.
MaxBetHeight
==
0
&&
start
.
ExpireHeight
==
0
{
//如果上述字段都不携带,则认为完全由admin的指令驱动。
start
.
DrivenByAdmin
=
true
...
...
plugin/dapp/guess/executor/keys.go
deleted
100644 → 0
View file @
55e2f303
package
executor
import
(
"fmt"
"github.com/33cn/chain33/types"
gty
"github.com/33cn/plugin/plugin/dapp/guess/types"
)
//addr prefix
func
calcGuessGameAddrPrefix
(
addr
string
)
[]
byte
{
key
:=
fmt
.
Sprintf
(
"LODB-guess-addr:%s:"
,
addr
)
return
[]
byte
(
key
)
}
//addr index
func
calcGuessGameAddrKey
(
addr
string
,
index
int64
)
[]
byte
{
key
:=
fmt
.
Sprintf
(
"LODB-guess-addr:%s:%018d"
,
addr
,
index
)
return
[]
byte
(
key
)
}
//status prefix
func
calcGuessGameStatusPrefix
(
status
int32
)
[]
byte
{
key
:=
fmt
.
Sprintf
(
"LODB-guess-status-index:%d:"
,
status
)
return
[]
byte
(
key
)
}
//status index
func
calcGuessGameStatusKey
(
status
int32
,
index
int64
)
[]
byte
{
key
:=
fmt
.
Sprintf
(
"LODB-guess-status-index:%d:%018d"
,
status
,
index
)
return
[]
byte
(
key
)
}
//addr status prefix
func
calcGuessGameAddrStatusPrefix
(
addr
string
,
status
int32
)
[]
byte
{
key
:=
fmt
.
Sprintf
(
"LODB-guess-addr-status-index:%s:%d:"
,
addr
,
status
)
return
[]
byte
(
key
)
}
//addr status index
func
calcGuessGameAddrStatusKey
(
addr
string
,
status
int32
,
index
int64
)
[]
byte
{
key
:=
fmt
.
Sprintf
(
"LODB-guess-addr-status-index:%s:%d:%018d"
,
addr
,
status
,
index
)
return
[]
byte
(
key
)
}
//admin prefix
func
calcGuessGameAdminPrefix
(
addr
string
)
[]
byte
{
key
:=
fmt
.
Sprintf
(
"LODB-guess-admin:%s:"
,
addr
)
return
[]
byte
(
key
)
}
//admin index
func
calcGuessGameAdminKey
(
addr
string
,
index
int64
)
[]
byte
{
key
:=
fmt
.
Sprintf
(
"LODB-guess-admin:%s:%018d"
,
addr
,
index
)
return
[]
byte
(
key
)
}
//admin status prefix
func
calcGuessGameAdminStatusPrefix
(
admin
string
,
status
int32
)
[]
byte
{
key
:=
fmt
.
Sprintf
(
"LODB-guess-admin-status-index:%s:%d:"
,
admin
,
status
)
return
[]
byte
(
key
)
}
//admin status index
func
calcGuessGameAdminStatusKey
(
admin
string
,
status
int32
,
index
int64
)
[]
byte
{
key
:=
fmt
.
Sprintf
(
"LODB-guess-admin-status-index:%s:%d:%018d"
,
admin
,
status
,
index
)
return
[]
byte
(
key
)
}
func
calcGuessGameCategoryStatusPrefix
(
category
string
,
status
int32
)
[]
byte
{
key
:=
fmt
.
Sprintf
(
"LODB-guess-category-status-index:%s:%d:"
,
category
,
status
)
return
[]
byte
(
key
)
}
func
calcGuessGameCategoryStatusKey
(
category
string
,
status
int32
,
index
int64
)
[]
byte
{
key
:=
fmt
.
Sprintf
(
"LODB-guess-category-status-index:%s:%d:%018d"
,
category
,
status
,
index
)
return
[]
byte
(
key
)
}
func
addGuessGameAddrIndexKey
(
status
int32
,
addr
,
gameID
string
,
index
int64
)
*
types
.
KeyValue
{
kv
:=
&
types
.
KeyValue
{}
kv
.
Key
=
calcGuessGameAddrKey
(
addr
,
index
)
record
:=
&
gty
.
GuessGameRecord
{
GameID
:
gameID
,
Status
:
status
,
Index
:
index
,
}
kv
.
Value
=
types
.
Encode
(
record
)
return
kv
}
func
delGuessGameAddrIndexKey
(
addr
string
,
index
int64
)
*
types
.
KeyValue
{
kv
:=
&
types
.
KeyValue
{}
kv
.
Key
=
calcGuessGameAddrKey
(
addr
,
index
)
kv
.
Value
=
nil
return
kv
}
func
addGuessGameStatusIndexKey
(
status
int32
,
gameID
string
,
index
int64
)
*
types
.
KeyValue
{
kv
:=
&
types
.
KeyValue
{}
kv
.
Key
=
calcGuessGameStatusKey
(
status
,
index
)
record
:=
&
gty
.
GuessGameRecord
{
GameID
:
gameID
,
Status
:
status
,
Index
:
index
,
}
kv
.
Value
=
types
.
Encode
(
record
)
return
kv
}
func
delGuessGameStatusIndexKey
(
status
int32
,
index
int64
)
*
types
.
KeyValue
{
kv
:=
&
types
.
KeyValue
{}
kv
.
Key
=
calcGuessGameStatusKey
(
status
,
index
)
kv
.
Value
=
nil
return
kv
}
func
addGuessGameAddrStatusIndexKey
(
status
int32
,
addr
,
gameID
string
,
index
int64
)
*
types
.
KeyValue
{
kv
:=
&
types
.
KeyValue
{}
kv
.
Key
=
calcGuessGameAddrStatusKey
(
addr
,
status
,
index
)
record
:=
&
gty
.
GuessGameRecord
{
GameID
:
gameID
,
Status
:
status
,
Index
:
index
,
}
kv
.
Value
=
types
.
Encode
(
record
)
return
kv
}
func
delGuessGameAddrStatusIndexKey
(
status
int32
,
addr
string
,
index
int64
)
*
types
.
KeyValue
{
kv
:=
&
types
.
KeyValue
{}
kv
.
Key
=
calcGuessGameAddrStatusKey
(
addr
,
status
,
index
)
kv
.
Value
=
nil
return
kv
}
func
addGuessGameAdminIndexKey
(
status
int32
,
addr
,
gameID
string
,
index
int64
)
*
types
.
KeyValue
{
kv
:=
&
types
.
KeyValue
{}
kv
.
Key
=
calcGuessGameAdminKey
(
addr
,
index
)
record
:=
&
gty
.
GuessGameRecord
{
GameID
:
gameID
,
Status
:
status
,
Index
:
index
,
}
kv
.
Value
=
types
.
Encode
(
record
)
return
kv
}
func
delGuessGameAdminIndexKey
(
addr
string
,
index
int64
)
*
types
.
KeyValue
{
kv
:=
&
types
.
KeyValue
{}
kv
.
Key
=
calcGuessGameAdminKey
(
addr
,
index
)
kv
.
Value
=
nil
return
kv
}
func
addGuessGameAdminStatusIndexKey
(
status
int32
,
addr
,
gameID
string
,
index
int64
)
*
types
.
KeyValue
{
kv
:=
&
types
.
KeyValue
{}
kv
.
Key
=
calcGuessGameAdminStatusKey
(
addr
,
status
,
index
)
record
:=
&
gty
.
GuessGameRecord
{
GameID
:
gameID
,
Status
:
status
,
Index
:
index
,
}
kv
.
Value
=
types
.
Encode
(
record
)
return
kv
}
func
delGuessGameAdminStatusIndexKey
(
status
int32
,
addr
string
,
index
int64
)
*
types
.
KeyValue
{
kv
:=
&
types
.
KeyValue
{}
kv
.
Key
=
calcGuessGameAdminStatusKey
(
addr
,
status
,
index
)
kv
.
Value
=
nil
return
kv
}
func
addGuessGameCategoryStatusIndexKey
(
status
int32
,
category
,
gameID
string
,
index
int64
)
*
types
.
KeyValue
{
kv
:=
&
types
.
KeyValue
{}
kv
.
Key
=
calcGuessGameCategoryStatusKey
(
category
,
status
,
index
)
record
:=
&
gty
.
GuessGameRecord
{
GameID
:
gameID
,
Status
:
status
,
Index
:
index
,
}
kv
.
Value
=
types
.
Encode
(
record
)
return
kv
}
func
delGuessGameCategoryStatusIndexKey
(
status
int32
,
category
string
,
index
int64
)
*
types
.
KeyValue
{
kv
:=
&
types
.
KeyValue
{}
kv
.
Key
=
calcGuessGameCategoryStatusKey
(
category
,
status
,
index
)
kv
.
Value
=
nil
return
kv
}
plugin/dapp/guess/executor/query.go
View file @
4da6c484
...
...
@@ -5,80 +5,79 @@
package
executor
import
(
"fmt"
"github.com/33cn/chain33/common/db/table"
"github.com/33cn/chain33/types"
gty
"github.com/33cn/plugin/plugin/dapp/guess/types"
)
//Query_QueryGamesByIDs method
func
(
g
*
Guess
)
Query_QueryGamesByIDs
(
in
*
gty
.
QueryGuessGameInfos
)
(
types
.
Message
,
error
)
{
return
Infos
(
g
.
GetState
DB
(),
in
)
return
QueryGameInfos
(
g
.
GetLocal
DB
(),
in
)
}
//Query_QueryGameByID method
func
(
g
*
Guess
)
Query_QueryGameByID
(
in
*
gty
.
QueryGuessGameInfo
)
(
types
.
Message
,
error
)
{
game
,
err
:=
readGame
(
g
.
GetStateDB
(),
in
.
GetGameID
(
))
game
,
err
:=
QueryGameInfo
(
g
.
GetLocalDB
(),
[]
byte
(
in
.
GetGameID
()
))
if
err
!=
nil
{
return
nil
,
err
}
return
&
gty
.
ReplyGuessGameInfo
{
Game
:
game
},
nil
}
//Query_QueryGamesByAddr method
func
(
g
*
Guess
)
Query_QueryGamesByAddr
(
in
*
gty
.
QueryGuessGameInfo
)
(
types
.
Message
,
error
)
{
records
,
err
:=
getGameListByAddr
(
g
.
GetLocalDB
(),
in
.
Addr
,
in
.
Index
)
if
err
!=
nil
{
return
nil
,
err
}
gameTable
:=
gty
.
NewGuessUserTable
(
g
.
GetLocalDB
())
query
:=
gameTable
.
GetQuery
(
g
.
GetLocalDB
())
return
records
,
nil
return
QueryUserTableData
(
query
,
"addr"
,
[]
byte
(
in
.
Addr
),
in
.
PrimaryKey
)
}
//Query_QueryGamesByStatus method
func
(
g
*
Guess
)
Query_QueryGamesByStatus
(
in
*
gty
.
QueryGuessGameInfo
)
(
types
.
Message
,
error
)
{
records
,
err
:=
getGameListByStatus
(
g
.
GetLocalDB
(),
in
.
Status
,
in
.
Index
)
if
err
!=
nil
{
return
nil
,
err
}
gameTable
:=
gty
.
NewGuessGameTable
(
g
.
GetLocalDB
())
query
:=
gameTable
.
GetQuery
(
g
.
GetLocalDB
())
return
records
,
nil
return
QueryGameTableData
(
query
,
"status"
,
[]
byte
(
fmt
.
Sprintf
(
"%2d"
,
in
.
Status
)),
in
.
PrimaryKey
)
}
//Query_QueryGamesByAdminAddr method
func
(
g
*
Guess
)
Query_QueryGamesByAdminAddr
(
in
*
gty
.
QueryGuessGameInfo
)
(
types
.
Message
,
error
)
{
records
,
err
:=
getGameListByAdminAddr
(
g
.
GetLocalDB
(),
in
.
AdminAddr
,
in
.
Index
)
if
err
!=
nil
{
return
nil
,
err
}
return
records
,
nil
gameTable
:=
gty
.
NewGuessGameTable
(
g
.
GetLocalDB
())
query
:=
gameTable
.
GetQuery
(
g
.
GetLocalDB
())
prefix
:=
[]
byte
(
in
.
AdminAddr
)
return
QueryGameTableData
(
query
,
"admin"
,
prefix
,
in
.
PrimaryKey
)
}
//Query_QueryGamesByAddrStatus method
func
(
g
*
Guess
)
Query_QueryGamesByAddrStatus
(
in
*
gty
.
QueryGuessGameInfo
)
(
types
.
Message
,
error
)
{
records
,
err
:=
getGameListByAddrStatus
(
g
.
GetLocalDB
(),
in
.
Addr
,
in
.
Status
,
in
.
Index
)
userTable
:=
gty
.
NewGuessUserTable
(
g
.
GetLocalDB
())
gameTable
:=
gty
.
NewGuessGameTable
(
g
.
GetLocalDB
())
tableJoin
,
err
:=
table
.
NewJoinTable
(
userTable
,
gameTable
,
[]
string
{
"addr#status"
})
if
err
!=
nil
{
return
nil
,
err
}
return
records
,
nil
prefix
:=
table
.
JoinKey
([]
byte
(
fmt
.
Sprintf
(
"%s"
,
in
.
Addr
)),
[]
byte
(
fmt
.
Sprintf
(
"%2d"
,
in
.
Status
)))
return
QueryJoinTableData
(
tableJoin
,
"addr#status"
,
prefix
,
in
.
PrimaryKey
)
}
//Query_QueryGamesByAdminStatus method
func
(
g
*
Guess
)
Query_QueryGamesByAdminStatus
(
in
*
gty
.
QueryGuessGameInfo
)
(
types
.
Message
,
error
)
{
records
,
err
:=
getGameListByAdminStatus
(
g
.
GetLocalDB
(),
in
.
AdminAddr
,
in
.
Status
,
in
.
Index
)
if
err
!=
nil
{
return
nil
,
err
}
gameTable
:=
gty
.
NewGuessGameTable
(
g
.
GetLocalDB
())
query
:=
gameTable
.
GetQuery
(
g
.
GetLocalDB
())
prefix
:=
[]
byte
(
fmt
.
Sprintf
(
"%s:%2d"
,
in
.
AdminAddr
,
in
.
Status
))
return
records
,
nil
return
QueryGameTableData
(
query
,
"admin_status"
,
prefix
,
in
.
PrimaryKey
)
}
//Query_QueryGamesByCategoryStatus method
func
(
g
*
Guess
)
Query_QueryGamesByCategoryStatus
(
in
*
gty
.
QueryGuessGameInfo
)
(
types
.
Message
,
error
)
{
records
,
err
:=
getGameListByCategoryStatus
(
g
.
GetLocalDB
(),
in
.
Category
,
in
.
Status
,
in
.
Index
)
if
err
!=
nil
{
return
nil
,
err
}
gameTable
:=
gty
.
NewGuessGameTable
(
g
.
GetLocalDB
())
query
:=
gameTable
.
GetQuery
(
g
.
GetLocalDB
())
prefix
:=
[]
byte
(
fmt
.
Sprintf
(
"%s:%2d"
,
in
.
Category
,
in
.
Status
))
return
records
,
nil
return
QueryGameTableData
(
query
,
"category_status"
,
prefix
,
in
.
PrimaryKey
)
}
plugin/dapp/guess/proto/guess.proto
View file @
4da6c484
...
...
@@ -12,25 +12,26 @@ message GuessGame {
int64
startTime
=
4
;
//创建游戏的时间
int64
startHeight
=
5
;
//创建游戏的时间
string
startTxHash
=
6
;
//创建游戏的交易hash
string
topic
=
7
;
//主题
string
category
=
8
;
//分类
string
options
=
9
;
//选项
int64
maxBetHeight
=
10
;
//截止下注的块高
int64
maxBetsOneTime
=
11
;
//单次可以下多少注,默认100
int64
maxBetsNumber
=
12
;
//最多可以下多少注
int64
devFeeFactor
=
13
;
//开发者抽成比例
string
devFeeAddr
=
14
;
//开发者地址
int64
platFeeFactor
=
15
;
//平台抽成比例
string
platFeeAddr
=
16
;
//平台地址
int64
expireHeight
=
17
;
//游戏过期区块高度
string
adminAddr
=
18
;
//游戏创建者地址,只有该地址可以开奖
int64
betsNumber
=
19
;
//已下注数,如果数量达到maxBetsNumber,则不允许再下注
repeated
GuessPlayer
plays
=
20
;
//参与游戏下注的玩家投注信息
string
result
=
21
;
//公布的中奖结果
GuessBetStat
betStat
=
22
;
int64
index
=
23
;
int64
preIndex
=
24
;
bool
drivenByAdmin
=
25
;
int64
startIndex
=
7
;
//创建游戏的交易index
string
topic
=
8
;
//主题
string
category
=
9
;
//分类
string
options
=
10
;
//选项
int64
maxBetHeight
=
11
;
//截止下注的块高
int64
maxBetsOneTime
=
12
;
//单次可以下多少注,默认100
int64
maxBetsNumber
=
13
;
//最多可以下多少注
int64
devFeeFactor
=
14
;
//开发者抽成比例
string
devFeeAddr
=
15
;
//开发者地址
int64
platFeeFactor
=
16
;
//平台抽成比例
string
platFeeAddr
=
17
;
//平台地址
int64
expireHeight
=
18
;
//游戏过期区块高度
string
adminAddr
=
19
;
//游戏创建者地址,只有该地址可以开奖
int64
betsNumber
=
20
;
//已下注数,如果数量达到maxBetsNumber,则不允许再下注
repeated
GuessPlayer
plays
=
21
;
//参与游戏下注的玩家投注信息
string
result
=
22
;
//公布的中奖结果
GuessBetStat
betStat
=
23
;
int64
index
=
24
;
int64
preIndex
=
25
;
bool
drivenByAdmin
=
26
;
}
//GuessPlayer 竞猜玩家信息
...
...
@@ -129,6 +130,7 @@ message QueryGuessGameInfo {
int64
index
=
4
;
string
adminAddr
=
5
;
string
category
=
6
;
bytes
primaryKey
=
7
;
}
//ReplyGuessGameInfo 游戏信息查询响应消息
...
...
@@ -148,15 +150,30 @@ message ReplyGuessGameInfos {
//ReceiptGuessGame 竞猜游戏收据信息
message
ReceiptGuessGame
{
string
gameID
=
1
;
int32
preStatus
=
2
;
int32
status
=
3
;
int64
startIndex
=
1
;
string
gameID
=
2
;
int32
preStatus
=
3
;
int32
status
=
4
;
string
addr
=
5
;
string
adminAddr
=
6
;
int64
preIndex
=
7
;
int64
index
=
8
;
string
category
=
9
;
bool
statusChange
=
10
;
bool
bet
=
11
;
string
option
=
12
;
int64
betsNumber
=
13
;
GuessGame
game
=
14
;
}
//UserBet 用户下注信息
message
UserBet
{
int64
startIndex
=
1
;
int64
index
=
2
;
string
gameID
=
3
;
string
addr
=
4
;
string
adminAddr
=
5
;
int64
preIndex
=
6
;
int64
index
=
7
;
string
category
=
8
;
bool
statusChange
=
9
;
string
option
=
5
;
int64
betsNumber
=
6
;
}
//GuessStartTxReq 构造start交易的请求
...
...
@@ -206,13 +223,13 @@ message GuessPublishTxReq {
// GuessGameRecord game信息查询记录
message
GuessGameRecord
{
string
gameID
=
1
;
int32
status
=
2
;
int64
index
=
3
;
int64
startIndex
=
2
;
}
// GuessGameRecords game信息查询记录集
message
GuessGameRecords
{
repeated
GuessGameRecord
records
=
1
;
bytes
primaryKey
=
2
;
}
...
...
plugin/dapp/guess/types/errors.go
View file @
4da6c484
...
...
@@ -11,4 +11,8 @@ var (
ErrNoPrivilege
=
errors
.
New
(
"ErrNoPrivilege"
)
ErrGuessStatus
=
errors
.
New
(
"ErrGuessStatus"
)
ErrOverBetsLimit
=
errors
.
New
(
"ErrOverBetsLimit"
)
ErrParamStatusInvalid
=
errors
.
New
(
"ErrParamStatusInvalid"
)
ErrParamAddressMustnotEmpty
=
errors
.
New
(
"ErrParamAddressMustnotEmpty"
)
ErrGameNotExist
=
errors
.
New
(
"ErrGameNotExist"
)
ErrSaveTable
=
errors
.
New
(
"ErrSaveTable"
)
)
plugin/dapp/guess/types/guess.pb.go
View file @
4da6c484
...
...
@@ -6,11 +6,10 @@ package types
import
(
context
"context"
fmt
"fmt"
math
"math"
types
"github.com/33cn/chain33/types"
proto
"github.com/golang/protobuf/proto"
grpc
"google.golang.org/grpc"
math
"math"
)
// Reference imports to suppress errors if they are not otherwise used.
...
...
@@ -32,25 +31,26 @@ type GuessGame struct {
StartTime
int64
`protobuf:"varint,4,opt,name=startTime,proto3" json:"startTime,omitempty"`
StartHeight
int64
`protobuf:"varint,5,opt,name=startHeight,proto3" json:"startHeight,omitempty"`
StartTxHash
string
`protobuf:"bytes,6,opt,name=startTxHash,proto3" json:"startTxHash,omitempty"`
Topic
string
`protobuf:"bytes,7,opt,name=topic,proto3" json:"topic,omitempty"`
Category
string
`protobuf:"bytes,8,opt,name=category,proto3" json:"category,omitempty"`
Options
string
`protobuf:"bytes,9,opt,name=options,proto3" json:"options,omitempty"`
MaxBetHeight
int64
`protobuf:"varint,10,opt,name=maxBetHeight,proto3" json:"maxBetHeight,omitempty"`
MaxBetsOneTime
int64
`protobuf:"varint,11,opt,name=maxBetsOneTime,proto3" json:"maxBetsOneTime,omitempty"`
MaxBetsNumber
int64
`protobuf:"varint,12,opt,name=maxBetsNumber,proto3" json:"maxBetsNumber,omitempty"`
DevFeeFactor
int64
`protobuf:"varint,13,opt,name=devFeeFactor,proto3" json:"devFeeFactor,omitempty"`
DevFeeAddr
string
`protobuf:"bytes,14,opt,name=devFeeAddr,proto3" json:"devFeeAddr,omitempty"`
PlatFeeFactor
int64
`protobuf:"varint,15,opt,name=platFeeFactor,proto3" json:"platFeeFactor,omitempty"`
PlatFeeAddr
string
`protobuf:"bytes,16,opt,name=platFeeAddr,proto3" json:"platFeeAddr,omitempty"`
ExpireHeight
int64
`protobuf:"varint,17,opt,name=expireHeight,proto3" json:"expireHeight,omitempty"`
AdminAddr
string
`protobuf:"bytes,18,opt,name=adminAddr,proto3" json:"adminAddr,omitempty"`
BetsNumber
int64
`protobuf:"varint,19,opt,name=betsNumber,proto3" json:"betsNumber,omitempty"`
Plays
[]
*
GuessPlayer
`protobuf:"bytes,20,rep,name=plays,proto3" json:"plays,omitempty"`
Result
string
`protobuf:"bytes,21,opt,name=result,proto3" json:"result,omitempty"`
BetStat
*
GuessBetStat
`protobuf:"bytes,22,opt,name=betStat,proto3" json:"betStat,omitempty"`
Index
int64
`protobuf:"varint,23,opt,name=index,proto3" json:"index,omitempty"`
PreIndex
int64
`protobuf:"varint,24,opt,name=preIndex,proto3" json:"preIndex,omitempty"`
DrivenByAdmin
bool
`protobuf:"varint,25,opt,name=drivenByAdmin,proto3" json:"drivenByAdmin,omitempty"`
StartIndex
int64
`protobuf:"varint,7,opt,name=startIndex,proto3" json:"startIndex,omitempty"`
Topic
string
`protobuf:"bytes,8,opt,name=topic,proto3" json:"topic,omitempty"`
Category
string
`protobuf:"bytes,9,opt,name=category,proto3" json:"category,omitempty"`
Options
string
`protobuf:"bytes,10,opt,name=options,proto3" json:"options,omitempty"`
MaxBetHeight
int64
`protobuf:"varint,11,opt,name=maxBetHeight,proto3" json:"maxBetHeight,omitempty"`
MaxBetsOneTime
int64
`protobuf:"varint,12,opt,name=maxBetsOneTime,proto3" json:"maxBetsOneTime,omitempty"`
MaxBetsNumber
int64
`protobuf:"varint,13,opt,name=maxBetsNumber,proto3" json:"maxBetsNumber,omitempty"`
DevFeeFactor
int64
`protobuf:"varint,14,opt,name=devFeeFactor,proto3" json:"devFeeFactor,omitempty"`
DevFeeAddr
string
`protobuf:"bytes,15,opt,name=devFeeAddr,proto3" json:"devFeeAddr,omitempty"`
PlatFeeFactor
int64
`protobuf:"varint,16,opt,name=platFeeFactor,proto3" json:"platFeeFactor,omitempty"`
PlatFeeAddr
string
`protobuf:"bytes,17,opt,name=platFeeAddr,proto3" json:"platFeeAddr,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
int64
`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"`
BetStat
*
GuessBetStat
`protobuf:"bytes,23,opt,name=betStat,proto3" json:"betStat,omitempty"`
Index
int64
`protobuf:"varint,24,opt,name=index,proto3" json:"index,omitempty"`
PreIndex
int64
`protobuf:"varint,25,opt,name=preIndex,proto3" json:"preIndex,omitempty"`
DrivenByAdmin
bool
`protobuf:"varint,26,opt,name=drivenByAdmin,proto3" json:"drivenByAdmin,omitempty"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_sizecache
int32
`json:"-"`
...
...
@@ -123,6 +123,13 @@ func (m *GuessGame) GetStartTxHash() string {
return
""
}
func
(
m
*
GuessGame
)
GetStartIndex
()
int64
{
if
m
!=
nil
{
return
m
.
StartIndex
}
return
0
}
func
(
m
*
GuessGame
)
GetTopic
()
string
{
if
m
!=
nil
{
return
m
.
Topic
...
...
@@ -1151,6 +1158,7 @@ type QueryGuessGameInfo struct {
Index
int64
`protobuf:"varint,4,opt,name=index,proto3" json:"index,omitempty"`
AdminAddr
string
`protobuf:"bytes,5,opt,name=adminAddr,proto3" json:"adminAddr,omitempty"`
Category
string
`protobuf:"bytes,6,opt,name=category,proto3" json:"category,omitempty"`
PrimaryKey
[]
byte
`protobuf:"bytes,7,opt,name=primaryKey,proto3" json:"primaryKey,omitempty"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_sizecache
int32
`json:"-"`
...
...
@@ -1223,6 +1231,13 @@ func (m *QueryGuessGameInfo) GetCategory() string {
return
""
}
func
(
m
*
QueryGuessGameInfo
)
GetPrimaryKey
()
[]
byte
{
if
m
!=
nil
{
return
m
.
PrimaryKey
}
return
nil
}
//ReplyGuessGameInfo 游戏信息查询响应消息
type
ReplyGuessGameInfo
struct
{
Game
*
GuessGame
`protobuf:"bytes,1,opt,name=game,proto3" json:"game,omitempty"`
...
...
@@ -1345,15 +1360,20 @@ func (m *ReplyGuessGameInfos) GetGames() []*GuessGame {
//ReceiptGuessGame 竞猜游戏收据信息
type
ReceiptGuessGame
struct
{
GameID
string
`protobuf:"bytes,1,opt,name=gameID,proto3" json:"gameID,omitempty"`
PreStatus
int32
`protobuf:"varint,2,opt,name=preStatus,proto3" json:"preStatus,omitempty"`
Status
int32
`protobuf:"varint,3,opt,name=status,proto3" json:"status,omitempty"`
Addr
string
`protobuf:"bytes,4,opt,name=addr,proto3" json:"addr,omitempty"`
AdminAddr
string
`protobuf:"bytes,5,opt,name=adminAddr,proto3" json:"adminAddr,omitempty"`
PreIndex
int64
`protobuf:"varint,6,opt,name=preIndex,proto3" json:"preIndex,omitempty"`
Index
int64
`protobuf:"varint,7,opt,name=index,proto3" json:"index,omitempty"`
Category
string
`protobuf:"bytes,8,opt,name=category,proto3" json:"category,omitempty"`
StatusChange
bool
`protobuf:"varint,9,opt,name=statusChange,proto3" json:"statusChange,omitempty"`
StartIndex
int64
`protobuf:"varint,1,opt,name=startIndex,proto3" json:"startIndex,omitempty"`
GameID
string
`protobuf:"bytes,2,opt,name=gameID,proto3" json:"gameID,omitempty"`
PreStatus
int32
`protobuf:"varint,3,opt,name=preStatus,proto3" json:"preStatus,omitempty"`
Status
int32
`protobuf:"varint,4,opt,name=status,proto3" json:"status,omitempty"`
Addr
string
`protobuf:"bytes,5,opt,name=addr,proto3" json:"addr,omitempty"`
AdminAddr
string
`protobuf:"bytes,6,opt,name=adminAddr,proto3" json:"adminAddr,omitempty"`
PreIndex
int64
`protobuf:"varint,7,opt,name=preIndex,proto3" json:"preIndex,omitempty"`
Index
int64
`protobuf:"varint,8,opt,name=index,proto3" json:"index,omitempty"`
Category
string
`protobuf:"bytes,9,opt,name=category,proto3" json:"category,omitempty"`
StatusChange
bool
`protobuf:"varint,10,opt,name=statusChange,proto3" json:"statusChange,omitempty"`
Bet
bool
`protobuf:"varint,11,opt,name=bet,proto3" json:"bet,omitempty"`
Option
string
`protobuf:"bytes,12,opt,name=option,proto3" json:"option,omitempty"`
BetsNumber
int64
`protobuf:"varint,13,opt,name=betsNumber,proto3" json:"betsNumber,omitempty"`
Game
*
GuessGame
`protobuf:"bytes,14,opt,name=game,proto3" json:"game,omitempty"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_sizecache
int32
`json:"-"`
...
...
@@ -1384,6 +1404,13 @@ func (m *ReceiptGuessGame) XXX_DiscardUnknown() {
var
xxx_messageInfo_ReceiptGuessGame
proto
.
InternalMessageInfo
func
(
m
*
ReceiptGuessGame
)
GetStartIndex
()
int64
{
if
m
!=
nil
{
return
m
.
StartIndex
}
return
0
}
func
(
m
*
ReceiptGuessGame
)
GetGameID
()
string
{
if
m
!=
nil
{
return
m
.
GameID
...
...
@@ -1447,6 +1474,114 @@ func (m *ReceiptGuessGame) GetStatusChange() bool {
return
false
}
func
(
m
*
ReceiptGuessGame
)
GetBet
()
bool
{
if
m
!=
nil
{
return
m
.
Bet
}
return
false
}
func
(
m
*
ReceiptGuessGame
)
GetOption
()
string
{
if
m
!=
nil
{
return
m
.
Option
}
return
""
}
func
(
m
*
ReceiptGuessGame
)
GetBetsNumber
()
int64
{
if
m
!=
nil
{
return
m
.
BetsNumber
}
return
0
}
func
(
m
*
ReceiptGuessGame
)
GetGame
()
*
GuessGame
{
if
m
!=
nil
{
return
m
.
Game
}
return
nil
}
//UserBet 用户下注信息
type
UserBet
struct
{
StartIndex
int64
`protobuf:"varint,1,opt,name=startIndex,proto3" json:"startIndex,omitempty"`
Index
int64
`protobuf:"varint,2,opt,name=index,proto3" json:"index,omitempty"`
GameID
string
`protobuf:"bytes,3,opt,name=gameID,proto3" json:"gameID,omitempty"`
Addr
string
`protobuf:"bytes,4,opt,name=addr,proto3" json:"addr,omitempty"`
Option
string
`protobuf:"bytes,5,opt,name=option,proto3" json:"option,omitempty"`
BetsNumber
int64
`protobuf:"varint,6,opt,name=betsNumber,proto3" json:"betsNumber,omitempty"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_sizecache
int32
`json:"-"`
}
func
(
m
*
UserBet
)
Reset
()
{
*
m
=
UserBet
{}
}
func
(
m
*
UserBet
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
UserBet
)
ProtoMessage
()
{}
func
(
*
UserBet
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
17
}
}
func
(
m
*
UserBet
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
return
xxx_messageInfo_UserBet
.
Unmarshal
(
m
,
b
)
}
func
(
m
*
UserBet
)
XXX_Marshal
(
b
[]
byte
,
deterministic
bool
)
([]
byte
,
error
)
{
return
xxx_messageInfo_UserBet
.
Marshal
(
b
,
m
,
deterministic
)
}
func
(
m
*
UserBet
)
XXX_Merge
(
src
proto
.
Message
)
{
xxx_messageInfo_UserBet
.
Merge
(
m
,
src
)
}
func
(
m
*
UserBet
)
XXX_Size
()
int
{
return
xxx_messageInfo_UserBet
.
Size
(
m
)
}
func
(
m
*
UserBet
)
XXX_DiscardUnknown
()
{
xxx_messageInfo_UserBet
.
DiscardUnknown
(
m
)
}
var
xxx_messageInfo_UserBet
proto
.
InternalMessageInfo
func
(
m
*
UserBet
)
GetStartIndex
()
int64
{
if
m
!=
nil
{
return
m
.
StartIndex
}
return
0
}
func
(
m
*
UserBet
)
GetIndex
()
int64
{
if
m
!=
nil
{
return
m
.
Index
}
return
0
}
func
(
m
*
UserBet
)
GetGameID
()
string
{
if
m
!=
nil
{
return
m
.
GameID
}
return
""
}
func
(
m
*
UserBet
)
GetAddr
()
string
{
if
m
!=
nil
{
return
m
.
Addr
}
return
""
}
func
(
m
*
UserBet
)
GetOption
()
string
{
if
m
!=
nil
{
return
m
.
Option
}
return
""
}
func
(
m
*
UserBet
)
GetBetsNumber
()
int64
{
if
m
!=
nil
{
return
m
.
BetsNumber
}
return
0
}
//GuessStartTxReq 构造start交易的请求
type
GuessStartTxReq
struct
{
Topic
string
`protobuf:"bytes,1,opt,name=topic,proto3" json:"topic,omitempty"`
...
...
@@ -1471,7 +1606,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
{
1
7
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
1
8
}
}
func
(
m
*
GuessStartTxReq
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
...
@@ -1598,7 +1733,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
{
1
8
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
1
9
}
}
func
(
m
*
GuessBetTxReq
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
...
@@ -1660,7 +1795,7 @@ func (m *GuessStopBetTxReq) Reset() { *m = GuessStopBetTxReq{} }
func
(
m
*
GuessStopBetTxReq
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
GuessStopBetTxReq
)
ProtoMessage
()
{}
func
(
*
GuessStopBetTxReq
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
19
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
20
}
}
func
(
m
*
GuessStopBetTxReq
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
...
@@ -1708,7 +1843,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
{
2
0
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
2
1
}
}
func
(
m
*
GuessAbortTxReq
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
...
@@ -1757,7 +1892,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
{
2
1
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
2
2
}
}
func
(
m
*
GuessPublishTxReq
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
...
@@ -1802,8 +1937,7 @@ func (m *GuessPublishTxReq) GetFee() int64 {
// GuessGameRecord game信息查询记录
type
GuessGameRecord
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"`
Index
int64
`protobuf:"varint,3,opt,name=index,proto3" json:"index,omitempty"`
StartIndex
int64
`protobuf:"varint,2,opt,name=startIndex,proto3" json:"startIndex,omitempty"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_sizecache
int32
`json:"-"`
...
...
@@ -1813,7 +1947,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
{
2
2
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
2
3
}
}
func
(
m
*
GuessGameRecord
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
...
@@ -1841,16 +1975,9 @@ func (m *GuessGameRecord) GetGameID() string {
return
""
}
func
(
m
*
GuessGameRecord
)
GetSta
tus
()
int32
{
func
(
m
*
GuessGameRecord
)
GetSta
rtIndex
()
int64
{
if
m
!=
nil
{
return
m
.
Status
}
return
0
}
func
(
m
*
GuessGameRecord
)
GetIndex
()
int64
{
if
m
!=
nil
{
return
m
.
Index
return
m
.
StartIndex
}
return
0
}
...
...
@@ -1858,6 +1985,7 @@ func (m *GuessGameRecord) GetIndex() int64 {
// GuessGameRecords game信息查询记录集
type
GuessGameRecords
struct
{
Records
[]
*
GuessGameRecord
`protobuf:"bytes,1,rep,name=records,proto3" json:"records,omitempty"`
PrimaryKey
[]
byte
`protobuf:"bytes,2,opt,name=primaryKey,proto3" json:"primaryKey,omitempty"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_sizecache
int32
`json:"-"`
...
...
@@ -1867,7 +1995,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
{
2
3
}
return
fileDescriptor_7574406c5d3430e8
,
[]
int
{
2
4
}
}
func
(
m
*
GuessGameRecords
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
...
...
@@ -1895,6 +2023,13 @@ func (m *GuessGameRecords) GetRecords() []*GuessGameRecord {
return
nil
}
func
(
m
*
GuessGameRecords
)
GetPrimaryKey
()
[]
byte
{
if
m
!=
nil
{
return
m
.
PrimaryKey
}
return
nil
}
func
init
()
{
proto
.
RegisterType
((
*
GuessGame
)(
nil
),
"types.GuessGame"
)
proto
.
RegisterType
((
*
GuessPlayer
)(
nil
),
"types.GuessPlayer"
)
...
...
@@ -1913,6 +2048,7 @@ func init() {
proto
.
RegisterType
((
*
QueryGuessGameInfos
)(
nil
),
"types.QueryGuessGameInfos"
)
proto
.
RegisterType
((
*
ReplyGuessGameInfos
)(
nil
),
"types.ReplyGuessGameInfos"
)
proto
.
RegisterType
((
*
ReceiptGuessGame
)(
nil
),
"types.ReceiptGuessGame"
)
proto
.
RegisterType
((
*
UserBet
)(
nil
),
"types.UserBet"
)
proto
.
RegisterType
((
*
GuessStartTxReq
)(
nil
),
"types.GuessStartTxReq"
)
proto
.
RegisterType
((
*
GuessBetTxReq
)(
nil
),
"types.GuessBetTxReq"
)
proto
.
RegisterType
((
*
GuessStopBetTxReq
)(
nil
),
"types.GuessStopBetTxReq"
)
...
...
@@ -1925,86 +2061,93 @@ func init() {
func
init
()
{
proto
.
RegisterFile
(
"guess.proto"
,
fileDescriptor_7574406c5d3430e8
)
}
var
fileDescriptor_7574406c5d3430e8
=
[]
byte
{
// 1254 bytes of a gzipped FileDescriptorProto
0x1f
,
0x8b
,
0x08
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x02
,
0xff
,
0xac
,
0x58
,
0xcd
,
0x6e
,
0xdb
,
0x46
,
0x10
,
0xb6
,
0x48
,
0x51
,
0x3f
,
0x23
,
0xf9
,
0x6f
,
0x9d
,
0x38
,
0xac
,
0x61
,
0x14
,
0x2a
,
0x11
,
0xa4
,
0x42
,
0x81
,
0xb8
,
0x85
,
0x02
,
0x14
,
0x45
,
0x8a
,
0x1c
,
0xac
,
0x1a
,
0x89
,
0x7d
,
0x69
,
0x53
,
0xda
,
0x41
,
0x7a
,
0xa5
,
0xa4
,
0xb5
,
0x4c
,
0x40
,
0x22
,
0x19
,
0x72
,
0x65
,
0x48
,
0xf7
,
0x5e
,
0xfb
,
0x14
,
0xed
,
0xa1
,
0xb7
,
0xf6
,
0x39
,
0xfa
,
0x54
,
0xc5
,
0xcc
,
0x2e
,
0xc5
,
0x25
,
0x45
,
0x59
,
0x72
,
0xd1
,
0x1b
,
0xe7
,
0x67
,
0x67
,
0x66
,
0x67
,
0x67
,
0xbe
,
0x19
,
0x09
,
0x5a
,
0xe3
,
0x19
,
0x4f
,
0x92
,
0xb3
,
0x28
,
0x0e
,
0x45
,
0xc8
,
0x2c
,
0xb1
,
0x88
,
0x78
,
0x72
,
0x72
,
0x28
,
0x62
,
0x2f
,
0x48
,
0xbc
,
0xa1
,
0xf0
,
0xc3
,
0x40
,
0x4a
,
0x9c
,
0xbf
,
0x6b
,
0xd0
,
0x7c
,
0x87
,
0x9a
,
0xef
,
0xbc
,
0x29
,
0x67
,
0xc7
,
0x50
,
0x1b
,
0x7b
,
0x53
,
0x7e
,
0x75
,
0x61
,
0x57
,
0x3a
,
0x95
,
0x6e
,
0xd3
,
0x55
,
0x14
,
0xf2
,
0x13
,
0xe1
,
0x89
,
0x59
,
0x62
,
0x1b
,
0x9d
,
0x4a
,
0xd7
,
0x72
,
0x15
,
0xc5
,
0x4e
,
0xa1
,
0x19
,
0xc5
,
0xfc
,
0x5a
,
0x8a
,
0x4c
,
0x12
,
0x65
,
0x0c
,
0x94
,
0x26
,
0xc2
,
0x8b
,
0xc5
,
0x8d
,
0x3f
,
0xe5
,
0x76
,
0xb5
,
0x53
,
0xe9
,
0x9a
,
0x6e
,
0xc6
,
0x60
,
0x1d
,
0x68
,
0x11
,
0x71
,
0xc9
,
0xfd
,
0xf1
,
0x9d
,
0xb0
,
0x2d
,
0x92
,
0xeb
,
0xac
,
0xa5
,
0xc6
,
0xcd
,
0xfc
,
0xd2
,
0x4b
,
0xee
,
0xec
,
0x1a
,
0x85
,
0xa4
,
0xb3
,
0xd8
,
0x13
,
0xb0
,
0x44
,
0x18
,
0xf9
,
0x43
,
0xbb
,
0x4e
,
0x32
,
0x49
,
0xb0
,
0x13
,
0x68
,
0x0c
,
0x3d
,
0xc1
,
0xc7
,
0x61
,
0xbc
,
0xb0
,
0x1b
,
0x24
,
0x58
,
0xd2
,
0xcc
,
0x86
,
0x7a
,
0x18
,
0xe1
,
0xfd
,
0x13
,
0xbb
,
0x49
,
0xa2
,
0x94
,
0x64
,
0x0e
,
0xb4
,
0xa7
,
0xde
,
0xbc
,
0xcf
,
0xd3
,
0x80
,
0x80
,
0x02
,
0xca
,
0xf1
,
0xd8
,
0x0b
,
0xd8
,
0x93
,
0x74
,
0xf2
,
0x53
,
0xc0
,
0xe9
,
0x5a
,
0x2d
,
0xd2
,
0x2a
,
0x70
,
0xd9
,
0x73
,
0xd8
,
0x55
,
0x9c
,
0x1f
,
0x67
,
0xd3
,
0x01
,
0x8f
,
0xed
,
0x36
,
0xa9
,
0xe5
,
0x99
,
0xe8
,
0x71
,
0xc4
,
0xef
,
0xdf
,
0x72
,
0xfe
,
0xd6
,
0x1b
,
0x8a
,
0x30
,
0xb6
,
0x77
,
0xa5
,
0x47
,
0x9d
,
0xc7
,
0x3e
,
0x07
,
0x90
,
0xf4
,
0xf9
,
0x68
,
0x14
,
0xdb
,
0x7b
,
0x14
,
0xb2
,
0xc6
,
0x41
,
0x4f
,
0xd1
,
0xc4
,
0x13
,
0x99
,
0x91
,
0x7d
,
0xe9
,
0x29
,
0xc7
,
0xc4
,
0x4c
,
0x2a
,
0x06
,
0x99
,
0x39
,
0x90
,
0x99
,
0xd4
,
0x58
,
0x18
,
0x0b
,
0x9f
,
0x47
,
0x7e
,
0xcc
,
0xd5
,
0xed
,
0x0f
,
0x65
,
0x2c
,
0x3a
,
0x0f
,
0xdf
,
0xd3
,
0x1b
,
0x4d
,
0xfd
,
0x80
,
0x6c
,
0x30
,
0xb2
,
0x91
,
0x31
,
0x30
,
0xd2
,
0x41
,
0x76
,
0xe1
,
0x23
,
0x3a
,
0xaf
,
0x71
,
0x58
,
0x17
,
0xac
,
0x68
,
0xe2
,
0x2d
,
0x12
,
0xfb
,
0x49
,
0xc7
,
0xec
,
0xb6
,
0x7a
,
0xec
,
0x8c
,
0x6a
,
0xf2
,
0x8c
,
0x8a
,
0xef
,
0xfd
,
0xc4
,
0x5b
,
0xf0
,
0xd8
,
0x95
,
0x0a
,
0x58
,
0x6d
,
0x31
,
0x4f
,
0x66
,
0x13
,
0x61
,
0x3f
,
0x95
,
0x55
,
0x28
,
0x29
,
0xf6
,
0x12
,
0xea
,
0x03
,
0x2e
,
0xb0
,
0xb8
,
0xec
,
0xe3
,
0x4e
,
0xa5
,
0xdb
,
0xea
,
0x1d
,
0xe9
,
0x36
,
0xfa
,
0x52
,
0xe4
,
0xa6
,
0x3a
,
0x58
,
0x1c
,
0x7e
,
0x30
,
0xe2
,
0x73
,
0xfb
,
0x19
,
0xc5
,
0x22
,
0x09
,
0x2c
,
0x8e
,
0x28
,
0xe6
,
0x57
,
0x24
,
0xb0
,
0x49
,
0xb0
,
0xa4
,
0x31
,
0x99
,
0xa3
,
0xd8
,
0xbf
,
0xe7
,
0x41
,
0x7f
,
0x71
,
0x8e
,
0xf7
,
0xb2
,
0x3f
,
0xeb
,
0x54
,
0xba
,
0x0d
,
0x37
,
0xcf
,
0x74
,
0x2e
,
0xa0
,
0xa5
,
0x05
,
0xcd
,
0x18
,
0x54
,
0x3d
,
0x4c
,
0x88
,
0xec
,
0x18
,
0xfa
,
0x66
,
0x5f
,
0x80
,
0x39
,
0xe0
,
0x82
,
0x9a
,
0xa5
,
0xd5
,
0xdb
,
0x2f
,
0x44
,
0xe9
,
0xa2
,
0xcc
,
0xf9
,
0xb3
,
0x02
,
0x8d
,
0x94
,
0x83
,
0x37
,
0x96
,
0x65
,
0x98
,
0xf6
,
0x9d
,
0xa4
,
0x0a
,
0x39
,
0x35
,
0x56
,
0x72
,
0x7a
,
0x02
,
0x0d
,
0x3f
,
0xf9
,
0xe8
,
0x07
,
0x01
,
0x8f
,
0xa9
,
0xfd
,
0x1a
,
0xee
,
0x92
,
0x46
,
0x9b
,
0x51
,
0x1c
,
0xde
,
0xfa
,
0x42
,
0xb5
,
0x9e
,
0xa2
,
0xb2
,
0xb4
,
0x58
,
0xeb
,
0xd2
,
0x52
,
0xcb
,
0xa7
,
0xc5
,
0xf9
,
0xad
,
0x02
,
0x6d
,
0x3d
,
0xc5
,
0x98
,
0x27
,
0x11
,
0x0a
,
0x6f
,
0xd2
,
0xe7
,
0xd4
,
0xca
,
0x09
,
0x45
,
0x6d
,
0xba
,
0x79
,
0x26
,
0xeb
,
0xc2
,
0x7e
,
0xca
,
0xc8
,
0xdf
,
0xa0
,
0xc8
,
0x66
,
0x2f
,
0xc1
,
0xf2
,
0x05
,
0x9f
,
0x22
,
0x84
,
0x60
,
0x69
,
0x3c
,
0x2b
,
0x79
,
0xd6
,
0x2b
,
0xc1
,
0xa7
,
0xae
,
0xd4
,
0x72
,
0xee
,
0xe0
,
0xa0
,
0x28
,
0xfa
,
0xcf
,
0x19
,
0x3c
,
0x85
,
0x26
,
0x52
,
0xf2
,
0x1a
,
0xa6
,
0xc4
,
0xa8
,
0x25
,
0xc3
,
0xf9
,
0xc7
,
0x80
,
0xfd
,
0x25
,
0x3a
,
0x9e
,
0x13
,
0x6e
,
0x62
,
0xb0
,
0x04
,
0x41
,
0xe4
,
0xa8
,
0xd5
,
0x7b
,
0xaa
,
0x07
,
0x8b
,
0x6a
,
0xd7
,
0x84
,
0x60
,
0x3b
,
0xae
,
0xd4
,
0x62
,
0x5f
,
0xea
,
0xa5
,
0x70
,
0x54
,
0x54
,
0x46
,
0x68
,
0xd9
,
0xa1
,
0x82
,
0x60
,
0xaf
,
0xa0
,
0x9e
,
0x88
,
0x30
,
0xea
,
0x73
,
0x41
,
0x71
,
0x14
,
0xd2
,
0x20
,
0x2d
,
0x93
,
0xf8
,
0x72
,
0xc7
,
0x4d
,
0x35
,
0x31
,
0x18
,
0x6f
,
0x10
,
0xc6
,
0xf2
,
0x8d
,
0x4b
,
0x82
,
0x39
,
0x47
,
0x21
,
0x06
,
0x43
,
0x5a
,
0xe8
,
0x23
,
0x9a
,
0x0d
,
0x26
,
0x7e
,
0x72
,
0x47
,
0xaf
,
0x5f
,
0xe2
,
0xe3
,
0xbd
,
0x14
,
0xa3
,
0x0f
,
0xa5
,
0x89
,
0x3e
,
0x3e
,
0xcd
,
0x78
,
0xbc
,
0xa0
,
0xba
,
0x28
,
0xf1
,
0xf1
,
0x33
,
0x0a
,
0xd1
,
0x07
,
0x69
,
0xb1
,
0x3d
,
0x30
,
0xc4
,
0x82
,
0x00
,
0xd9
,
0x72
,
0x0d
,
0xb1
,
0xe8
,
0xd7
,
0xc1
,
0xba
,
0xf7
,
0x26
,
0x33
,
0xee
,
0xfc
,
0x61
,
0xc2
,
0x5e
,
0x3e
,
0x4b
,
0x19
,
0x7e
,
0x57
,
0x74
,
0xfc
,
0xd6
,
0x30
,
0xda
,
0xc8
,
0x63
,
0xb4
,
0x8e
,
0xec
,
0x66
,
0x01
,
0xd9
,
0x8b
,
0xf8
,
0x5d
,
0xdd
,
0x0a
,
0xbf
,
0xad
,
0xed
,
0xf0
,
0xbb
,
0xb6
,
0x0d
,
0x7e
,
0xd7
,
0x37
,
0xe2
,
0x77
,
0x63
,
0x33
,
0x7e
,
0x37
,
0xb7
,
0xc0
,
0x6f
,
0xd8
,
0x8c
,
0xdf
,
0xad
,
0x12
,
0xfc
,
0x5e
,
0x81
,
0xb7
,
0x76
,
0x19
,
0xbc
,
0xfd
,
0xa2
,
0x9a
,
0x5d
,
0x95
,
0xe7
,
0x43
,
0x3b
,
0x81
,
0xea
,
0x38
,
0x23
,
0xd7
,
0x71
,
0x36
,
0xa1
,
0x34
,
0xe6
,
0x48
,
0xf5
,
0x53
,
0x4a
,
0x3a
,
0x5f
,
0xa9
,
0xbe
,
0xd5
,
0x6a
,
0x79
,
0x9d
,
0x75
,
0xa7
,
0xab
,
0xd5
,
0x0a
,
0x15
,
0xf1
,
0x5a
,
0xcd
,
0xbe
,
0x66
,
0x55
,
0x55
,
0xef
,
0x43
,
0x31
,
0xab
,
0xc9
,
0x62
,
0xe8
,
0x93
,
0xc5
,
0xf9
,
0x4e
,
0xf3
,
0x46
,
0xe5
,
0xbc
,
0xd6
,
0x82
,
0xac
,
0x6e
,
0x3c
,
0xbd
,
0x8b
,
0xd5
,
0x8d
,
0x30
,
0xce
,
0xe8
,
0xc4
,
0xf2
,
0xfc
,
0x55
,
0x70
,
0x1b
,
0xae
,
0x3d
,
0x9e
,
0x0e
,
0x0b
,
0x43
,
0x1b
,
0x16
,
0xd9
,
0x72
,
0x65
,
0xe6
,
0x96
,
0xab
,
0x25
,
0x50
,
0x57
,
0x75
,
0xa0
,
0xce
,
0x0d
,
0x61
,
0xab
,
0x38
,
0x84
,
0xf5
,
0x06
,
0xa9
,
0xe5
,
0x1b
,
0xc4
,
0x79
,
0x0d
,
0xcc
,
0xe5
,
0xd1
,
0xa4
,
0x10
,
0xe9
,
0x73
,
0xa8
,
0x62
,
0x6c
,
0x0a
,
0xcd
,
0x0e
,
0x8a
,
0xcd
,
0xed
,
0x92
,
0xd4
,
0xf9
,
0x1a
,
0x8e
,
0x56
,
0x6f
,
0x99
,
0xe0
,
0x5b
,
0xcb
,
0x8b
,
0xe1
,
0x08
,
0x30
,
0xb1
,
0x53
,
0x15
,
0xe9
,
0xbc
,
0x81
,
0xa3
,
0x55
,
0x67
,
0x09
,
0x7b
,
0x01
,
0x16
,
0x6a
,
0x48
,
0xf5
,
0x32
,
0x77
,
0x52
,
0xec
,
0xfc
,
0x6a
,
0xc0
,
0x81
,
0xcb
,
0x87
,
0xdc
,
0x8f
,
0xc4
,
0xe6
,
0xed
,
0x34
,
0xb7
,
0x85
,
0x1a
,
0xc5
,
0x2d
,
0x74
,
0x5d
,
0x7a
,
0xd3
,
0xa7
,
0xa8
,
0x6a
,
0x4f
,
0xb1
,
0x31
,
0xb9
,
0xeb
,
0x66
,
0x64
,
0xf6
,
0x58
,
0xf5
,
0xc2
,
0x54
,
0x5d
,
0xbb
,
0x89
,
0x3a
,
0xd0
,
0x96
,
0x91
,
0xfc
,
0x70
,
0xe7
,
0x05
,
0x63
,
0x4e
,
0x8d
,
0xdf
,
0x70
,
0x73
,
0x3c
,
0xe7
,
0x2f
,
0x53
,
0xcd
,
0x9f
,
0x6b
,
0xb9
,
0xf4
,
0xba
,
0xfc
,
0xd3
,
0xff
,
0x8a
,
0x99
,
0xa7
,
0xd0
,
0x9c
,
0x7a
,
0xf3
,
0x1c
,
0x60
,
0x66
,
0x8c
,
0x15
,
0x44
,
0xb5
,
0xb6
,
0x42
,
0xd4
,
0xda
,
0x76
,
0x88
,
0x5a
,
0xdf
,
0x06
,
0x51
,
0x1b
,
0x1b
,
0x11
,
0xb5
,
0xb9
,
0x19
,
0x51
,
0x61
,
0x0b
,
0x44
,
0x6d
,
0x6d
,
0x46
,
0xd4
,
0x76
,
0x09
,
0xa2
,
0x1e
,
0x80
,
0x79
,
0xcb
,
0xb9
,
0x5a
,
0xdc
,
0xf1
,
0xd3
,
0xe1
,
0xb0
,
0x9b
,
0xee
,
0x26
,
0xf2
,
0xb9
,
0x1e
,
0x0b
,
0x9f
,
0x0c
,
0xaa
,
0x88
,
0x97
,
0x0a
,
0x3b
,
0xe9
,
0x3b
,
0x75
,
0x53
,
0xcd
,
0xdc
,
0xbc
,
0x81
,
0x43
,
0x55
,
0x17
,
0x04
,
0xa3
,
0x0f
,
0xbb
,
0x52
,
0xc7
,
0x8d
,
0xec
,
0xf8
,
0xf7
,
0xaa
,
0xac
,
0x08
,
0x59
,
0x1f
,
0x7b
,
0xf8
,
0x83
,
0xf2
,
0xad
,
0xc0
,
0x76
,
0xe3
,
0x35
,
0xcb
,
0x10
,
0x37
,
0x35
,
0x6b
,
0x66
,
0x66
,
0x3f
,
0x6a
,
0xab
,
0x96
,
0xcb
,
0x87
,
0x61
,
0x3c
,
0x7a
,
0xf4
,
0xcf
,
0xd1
,
0x65
,
0x13
,
0x9a
,
0x5a
,
0x13
,
0x3a
,
0x17
,
0xda
,
0x80
,
0x90
,
0x86
,
0x13
,
0xf6
,
0x0d
,
0xd4
,
0x63
,
0xf9
,
0xa9
,
0x90
,
0xe8
,
0x78
,
0x05
,
0x89
,
0x48
,
0xec
,
0xa6
,
0x6a
,
0xbd
,
0xdf
,
0x0d
,
0xb0
,
0xe8
,
0x27
,
0x35
,
0xfb
,
0x16
,
0x20
,
0xeb
,
0x49
,
0x56
,
0xbe
,
0xff
,
0x9d
,
0xa4
,
0x4b
,
0xff
,
0x87
,
0x20
,
0xf1
,
0xc7
,
0xc1
,
0xcd
,
0xdc
,
0xd9
,
0x61
,
0x3d
,
0x6d
,
0xe1
,
0x2f
,
0x5b
,
0x04
,
0xcb
,
0xce
,
0xbc
,
0x56
,
0xc3
,
0x38
,
0x1d
,
0x97
,
0xeb
,
0x76
,
0xc2
,
0xb2
,
0xb3
,
0x69
,
0x9c
,
0x72
,
0x7c
,
0x96
,
0xaf
,
0x86
,
0x0f
,
0xf9
,
0x4c
,
0x87
,
0xe9
,
0xba
,
0x1d
,
0xb1
,
0xe4
,
0xec
,
0xa0
,
0x46
,
0xff
,
0x2a
,
0xbc
,
0xfa
,
0x37
,
0x00
,
0x00
,
0xff
,
0xff
,
0x98
,
0xe5
,
0x9a
,
0x47
,
0x7e
,
0x10
,
0x00
,
0x00
,
// 1367 bytes of a gzipped FileDescriptorProto
0x1f
,
0x8b
,
0x08
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x02
,
0xff
,
0xac
,
0x58
,
0xc9
,
0x8e
,
0xdb
,
0x46
,
0x13
,
0x1e
,
0x92
,
0xa2
,
0x96
,
0x92
,
0x66
,
0x46
,
0xee
,
0xf1
,
0xc2
,
0x7f
,
0x60
,
0x18
,
0xfa
,
0x09
,
0xc3
,
0x11
,
0x02
,
0xd8
,
0x09
,
0x64
,
0x20
,
0x08
,
0x1c
,
0xf8
,
0x30
,
0x8a
,
0x61
,
0x7b
,
0x10
,
0x20
,
0x71
,
0x68
,
0x1b
,
0xc9
,
0x95
,
0x92
,
0x7a
,
0x34
,
0x04
,
0x24
,
0x92
,
0x26
,
0x5b
,
0x03
,
0xe9
,
0x21
,
0x72
,
0xcb
,
0x1b
,
0x38
,
0x87
,
0xdc
,
0xf2
,
0x1a
,
0x41
,
0x4e
,
0x79
,
0xa4
,
0xa0
,
0xaa
,
0x9b
,
0x62
,
0x93
,
0xa2
,
0x16
,
0x07
,
0xb9
,
0xb1
,
0x96
,
0xee
,
0xaa
,
0xae
,
0xed
,
0x2b
,
0x09
,
0xda
,
0xd3
,
0x05
,
0x4f
,
0xd3
,
0x27
,
0x71
,
0x12
,
0x89
,
0x88
,
0xd9
,
0x62
,
0x15
,
0xf3
,
0xf4
,
0xfc
,
0x96
,
0x48
,
0xfc
,
0x30
,
0xf5
,
0xc7
,
0x22
,
0x88
,
0x42
,
0x29
,
0x71
,
0xff
,
0xae
,
0x43
,
0xeb
,
0x15
,
0x6a
,
0xbe
,
0xf2
,
0xe7
,
0x9c
,
0xdd
,
0x85
,
0xfa
,
0xd4
,
0x9f
,
0xf3
,
0xcb
,
0x17
,
0x8e
,
0xd1
,
0x33
,
0xfa
,
0x2d
,
0x4f
,
0x51
,
0xc8
,
0x4f
,
0x85
,
0x2f
,
0x16
,
0xa9
,
0x63
,
0xf6
,
0x8c
,
0xbe
,
0xed
,
0x29
,
0x8a
,
0xdd
,
0x87
,
0x56
,
0x9c
,
0xf0
,
0xb7
,
0x52
,
0x64
,
0x91
,
0x28
,
0x67
,
0xa0
,
0x34
,
0x15
,
0x7e
,
0x22
,
0xde
,
0x05
,
0x73
,
0xee
,
0xd4
,
0x7a
,
0x46
,
0xdf
,
0xf2
,
0x72
,
0x06
,
0xeb
,
0x41
,
0x9b
,
0x88
,
0xd7
,
0x3c
,
0x98
,
0x5e
,
0x0b
,
0xc7
,
0x26
,
0xb9
,
0xce
,
0x5a
,
0x6b
,
0xbc
,
0x5b
,
0xbe
,
0xf6
,
0xd3
,
0x6b
,
0xa7
,
0x4e
,
0x2e
,
0xe9
,
0x2c
,
0xf6
,
0x00
,
0x80
,
0xc8
,
0xcb
,
0x70
,
0xc2
,
0x97
,
0x4e
,
0x83
,
0xae
,
0xd0
,
0x38
,
0xec
,
0x36
,
0xd8
,
0x22
,
0x8a
,
0x83
,
0xb1
,
0xd3
,
0xa4
,
0xb3
,
0x92
,
0x60
,
0xe7
,
0xd0
,
0x1c
,
0xfb
,
0x82
,
0x4f
,
0xa3
,
0x64
,
0xe5
,
0xb4
,
0x48
,
0xb0
,
0xa6
,
0x99
,
0x03
,
0x8d
,
0x28
,
0xc6
,
0xf8
,
0xa4
,
0x0e
,
0x90
,
0x28
,
0x23
,
0x99
,
0x0b
,
0x9d
,
0xb9
,
0xbf
,
0x1c
,
0xf2
,
0xcc
,
0xe1
,
0x36
,
0x59
,
0x2b
,
0xf0
,
0xd8
,
0x23
,
0x38
,
0x91
,
0x74
,
0xfa
,
0x43
,
0xc8
,
0xe9
,
0xd9
,
0x1d
,
0xd2
,
0x2a
,
0x71
,
0xd9
,
0x43
,
0x38
,
0x56
,
0x9c
,
0xef
,
0x17
,
0xf3
,
0x11
,
0x4f
,
0x9c
,
0x63
,
0x52
,
0x2b
,
0x32
,
0xd1
,
0xe2
,
0x84
,
0xdf
,
0xbc
,
0xe4
,
0xfc
,
0xa5
,
0x3f
,
0x16
,
0x51
,
0xe2
,
0x9c
,
0x48
,
0x8b
,
0x3a
,
0x0f
,
0x23
,
0x20
,
0xe9
,
0x8b
,
0xc9
,
0x24
,
0x71
,
0x4e
,
0xc9
,
0x65
,
0x8d
,
0x83
,
0x96
,
0xe2
,
0x99
,
0x2f
,
0xf2
,
0x4b
,
0xba
,
0xd2
,
0x52
,
0x81
,
0x89
,
0x91
,
0x56
,
0x0c
,
0xba
,
0xe6
,
0x96
,
0x8c
,
0xb4
,
0xc6
,
0x42
,
0x5f
,
0xf8
,
0x32
,
0x0e
,
0x12
,
0xae
,
0x5e
,
0xcf
,
0xa4
,
0x2f
,
0x3a
,
0x0f
,
0xf3
,
0xed
,
0x4f
,
0xe6
,
0x41
,
0x48
,
0x77
,
0x9c
,
0xd1
,
0x1d
,
0x39
,
0x03
,
0x3d
,
0x1d
,
0xe5
,
0x0f
,
0xbe
,
0x2d
,
0x73
,
0x95
,
0x73
,
0x58
,
0x1f
,
0xec
,
0x78
,
0xe6
,
0xaf
,
0x52
,
0xe7
,
0x4e
,
0xcf
,
0xea
,
0xb7
,
0x07
,
0xec
,
0x09
,
0xd5
,
0xec
,
0x13
,
0x2a
,
0xce
,
0x37
,
0x33
,
0x7f
,
0xc5
,
0x13
,
0x4f
,
0x2a
,
0x60
,
0x35
,
0x26
,
0x3c
,
0x5d
,
0xcc
,
0x84
,
0x73
,
0x57
,
0x56
,
0xa9
,
0xa4
,
0xd8
,
0x63
,
0x68
,
0x8c
,
0xb8
,
0xc0
,
0xe2
,
0x73
,
0xee
,
0xf5
,
0x8c
,
0x7e
,
0x7b
,
0x70
,
0xa6
,
0xdf
,
0x31
,
0x94
,
0x22
,
0x2f
,
0xd3
,
0xc1
,
0xe2
,
0x08
,
0xa8
,
0x6e
,
0x1c
,
0xf2
,
0x45
,
0x12
,
0x58
,
0x1c
,
0x71
,
0xc2
,
0x65
,
0x41
,
0xfd
,
0x8f
,
0x04
,
0x6b
,
0x1a
,
0x83
,
0x39
,
0x49
,
0x82
,
0x1b
,
0x1e
,
0x0e
,
0x57
,
0x17
,
0xf8
,
0x2e
,
0xe7
,
0xbc
,
0x67
,
0xf4
,
0x9b
,
0x5e
,
0x91
,
0xe9
,
0xbe
,
0x80
,
0xb6
,
0xe6
,
0x34
,
0x63
,
0x50
,
0xf3
,
0x31
,
0x20
,
0xb2
,
0xa3
,
0xe8
,
0x9b
,
0xfd
,
0x1f
,
0xac
,
0x11
,
0x17
,
0xd4
,
0x4c
,
0xed
,
0xc1
,
0x69
,
0xc9
,
0x4b
,
0x0f
,
0x65
,
0xee
,
0xef
,
0x06
,
0x34
,
0x33
,
0x0e
,
0xbe
,
0x58
,
0x96
,
0x61
,
0xd6
,
0x97
,
0x92
,
0x2a
,
0xc5
,
0xd4
,
0xdc
,
0x88
,
0xe9
,
0x39
,
0x34
,
0x83
,
0xf4
,
0xa7
,
0x20
,
0x0c
,
0x79
,
0x42
,
0xed
,
0xd9
,
0xf4
,
0xd6
,
0x34
,
0xde
,
0x19
,
0x27
,
0xd1
,
0x55
,
0x20
,
0x54
,
0x6b
,
0x2a
,
0x2a
,
0x0f
,
0x8b
,
0xbd
,
0x2d
,
0x2c
,
0xf5
,
0x62
,
0x58
,
0xdc
,
0x5f
,
0x0c
,
0xe8
,
0xe8
,
0x21
,
0xc6
,
0x38
,
0x89
,
0x48
,
0xf8
,
0xb3
,
0x21
,
0xa7
,
0x56
,
0x4f
,
0xc9
,
0x6b
,
0xcb
,
0x2b
,
0x32
,
0x59
,
0x1f
,
0x4e
,
0x33
,
0x46
,
0xf1
,
0x05
,
0x65
,
0x36
,
0x7b
,
0x0c
,
0x76
,
0x20
,
0xf8
,
0x1c
,
0x47
,
0x0c
,
0x96
,
0xc6
,
0xbd
,
0x8a
,
0xb4
,
0x5e
,
0x0a
,
0x3e
,
0xf7
,
0xa4
,
0x96
,
0x7b
,
0x0d
,
0xdd
,
0xb2
,
0xe8
,
0x5f
,
0x47
,
0xf0
,
0x3e
,
0xb4
,
0x90
,
0x92
,
0xcf
,
0xb0
,
0xe4
,
0x0c
,
0x5b
,
0x33
,
0xdc
,
0xbf
,
0x4c
,
0x38
,
0x5d
,
0x4f
,
0xcf
,
0x0b
,
0x9a
,
0xab
,
0xe8
,
0x2c
,
0x4d
,
0x20
,
0x32
,
0xd4
,
0x1e
,
0xdc
,
0xd1
,
0x9d
,
0x45
,
0xb5
,
0xb7
,
0x34
,
0xe1
,
0x8e
,
0x3c
,
0xa9
,
0xc5
,
0x3e
,
0xd3
,
0x4b
,
0xe1
,
0xac
,
0xac
,
0x8c
,
0xa3
,
0xe5
,
0x88
,
0x0a
,
0x82
,
0x3d
,
0x85
,
0x46
,
0x2a
,
0xa2
,
0x78
,
0xc8
,
0x05
,
0xf9
,
0x51
,
0x0a
,
0x83
,
0xbc
,
0x99
,
0xc4
,
0xaf
,
0x8f
,
0xbc
,
0x4c
,
0x13
,
0x9d
,
0xf1
,
0x47
,
0x51
,
0x22
,
0x73
,
0x5c
,
0xe1
,
0xcc
,
0x05
,
0x0a
,
0xd1
,
0x19
,
0xd2
,
0x42
,
0x1b
,
0xf1
,
0x62
,
0x34
,
0x0b
,
0xd2
,
0x6b
,
0xca
,
0x7e
,
0x85
,
0x8d
,
0x37
,
0x52
,
0x8c
,
0x36
,
0x94
,
0x26
,
0xda
,
0xf8
,
0xb0
,
0xe0
,
0xc9
,
0x8a
,
0xea
,
0xa2
,
0xc2
,
0xc6
,
0x8f
,
0x28
,
0x44
,
0x1b
,
0xa4
,
0xc5
,
0x4e
,
0xc0
,
0x14
,
0x2b
,
0x9a
,
0xd5
,
0xb6
,
0x67
,
0x8a
,
0xd5
,
0xb0
,
0x01
,
0xf6
,
0x8d
,
0x3f
,
0x5b
,
0x70
,
0xf7
,
0x37
,
0x0b
,
0x4e
,
0x8a
,
0x51
,
0xca
,
0xe7
,
0xb7
,
0xa1
,
0xcf
,
0x6f
,
0x6d
,
0x46
,
0x9b
,
0xc5
,
0x19
,
0xad
,
0x4f
,
0x76
,
0xab
,
0x34
,
0xd9
,
0xcb
,
0xf3
,
0xbb
,
0x76
,
0xd0
,
0xfc
,
0xb6
,
0x0f
,
0x9b
,
0xdf
,
0xf5
,
0x43
,
0xe6
,
0x77
,
0x63
,
0xef
,
0xfc
,
0x6e
,
0xee
,
0x9f
,
0xdf
,
0xad
,
0x03
,
0xe6
,
0x37
,
0xec
,
0x9f
,
0xdf
,
0xed
,
0x8a
,
0xf9
,
0xbd
,
0x31
,
0xde
,
0x3a
,
0x55
,
0xe3
,
0xed
,
0x67
,
0xd5
,
0xec
,
0xaa
,
0x3c
,
0x77
,
0xed
,
0x0c
,
0xaa
,
0xe3
,
0xcc
,
0x42
,
0xc7
,
0x39
,
0x34
,
0xa5
,
0x31
,
0x46
,
0xaa
,
0x9f
,
0x32
,
0xd2
,
0xfd
,
0x5c
,
0xf5
,
0xad
,
0x56
,
0xcb
,
0xdb
,
0x6e
,
0x77
,
0xfb
,
0x5a
,
0xad
,
0x50
,
0x11
,
0x6f
,
0xd5
,
0x1c
,
0x6a
,
0xb7
,
0xaa
,
0xea
,
0xdd
,
0xe5
,
0xb3
,
0x42
,
0x16
,
0x53
,
0x47
,
0x16
,
0xf7
,
0x6b
,
0xcd
,
0x1a
,
0x95
,
0xf3
,
0xd6
,
0x1b
,
0x64
,
0x75
,
0xe3
,
0xe9
,
0x63
,
0xac
,
0x6e
,
0xf7
,
0x4f
,
0x03
,
0x18
,
0x9d
,
0x58
,
0x9f
,
0xbf
,
0x0c
,
0xaf
,
0xa2
,
0xad
,
0xc7
,
0x33
,
0xb0
,
0x30
,
0x35
,
0xb0
,
0xc8
,
0x97
,
0x2f
,
0xab
,
0xb0
,
0x7c
,
0xad
,
0x07
,
0x75
,
0x4d
,
0x1f
,
0xd4
,
0x05
,
0x10
,
0xb6
,
0xcb
,
0x20
,
0xac
,
0x37
,
0x48
,
0xbd
,
0xd4
,
0x20
,
0x0f
,
0x00
,
0xe2
,
0x24
,
0x98
,
0xfb
,
0xc9
,
0xea
,
0x3b
,
0x2e
,
0x1b
,
0xb4
,
0xe3
,
0x69
,
0x1c
,
0xf7
,
0x19
,
0x30
,
0x8f
,
0xc7
,
0xb3
,
0xd2
,
0x4b
,
0x1e
,
0x42
,
0x0d
,
0x7d
,
0x57
,
0xd3
,
0xae
,
0x5b
,
0x6e
,
0x7e
,
0x8f
,
0xa4
,
0xee
,
0x17
,
0x70
,
0xb6
,
0x19
,
0x85
,
0x14
,
0x6b
,
0x41
,
0x3e
,
0x1c
,
0x21
,
0xc2
,
0xc2
,
0x4e
,
0x56
,
0xa4
,
0xfb
,
0x1c
,
0xce
,
0x36
,
0x8d
,
0xa5
,
0xec
,
0x11
,
0xd8
,
0xa8
,
0x21
,
0xd5
,
0xab
,
0xcc
,
0x49
,
0xb1
,
0xfb
,
0xab
,
0x05
,
0x5d
,
0x8f
,
0x8f
,
0x79
,
0x10
,
0x8b
,
0x7c
,
0xbb
,
0x2d
,
0x6e
,
0x8b
,
0xc6
,
0xc6
,
0xb6
,
0x98
,
0x27
,
0xc5
,
0x2c
,
0x24
,
0x65
,
0xf7
,
0x96
,
0x9b
,
0xa7
,
0xa7
,
0x56
,
0x48
,
0x4f
,
0x96
,
0x4a
,
0x5b
,
0x4b
,
0x65
,
0x21
,
0x39
,
0xf5
,
0x8a
,
0xe4
,
0xac
,
0x31
,
0xb6
,
0x51
,
0x5a
,
0x3d
,
0xd6
,
0xc9
,
0x6e
,
0x96
,
0x50
,
0x79
,
0xeb
,
0x26
,
0xeb
,
0x42
,
0x47
,
0x7a
,
0xf2
,
0xed
,
0xb5
,
0x1f
,
0x4e
,
0x39
,
0x0d
,
0x85
,
0xa6
,
0x57
,
0xe0
,
0xb1
,
0xae
,
0x04
,
0x9f
,
0x36
,
0x89
,
0x08
,
0x65
,
0xf2
,
0xae
,
0xed
,
0xec
,
0xc0
,
0xc9
,
0xe3
,
0x0d
,
0x9c
,
0xcc
,
0xca
,
0xe0
,
0x64
,
0x67
,
0x19
,
0x7c
,
0x34
,
0xa0
,
0xf1
,
0x3e
,
0xe5
,
0x09
,
0x76
,
0xf6
,
0xbe
,
0x6c
,
0xac
,
0x5f
,
0x6c
,
0xea
,
0x2f
,
0xce
,
0x73
,
0x64
,
0x55
,
0x36
,
0x4e
,
0xad
,
0xd8
,
0x38
,
0xea
,
0x2d
,
0xf6
,
0x8e
,
0xb7
,
0xd4
,
0xcb
,
0x6f
,
0x71
,
0xff
,
0xb0
,
0x14
,
0xaa
,
0xbf
,
0x95
,
0x3f
,
0x35
,
0x3c
,
0xfe
,
0xe1
,
0x3f
,
0x45
,
0xa2
,
0xfb
,
0xd0
,
0x9a
,
0xfb
,
0xcb
,
0x02
,
0x0c
,
0xe5
,
0x8c
,
0x0d
,
0x9c
,
0xb2
,
0x0f
,
0xc2
,
0xa9
,
0xfa
,
0x61
,
0x38
,
0xd5
,
0x38
,
0x04
,
0xa7
,
0x9a
,
0x7b
,
0x71
,
0xaa
,
0xb5
,
0x1f
,
0xa7
,
0xe0
,
0x00
,
0x9c
,
0x6a
,
0xef
,
0xc7
,
0xa9
,
0x4e
,
0x05
,
0x4e
,
0x75
,
0xc1
,
0xba
,
0xe2
,
0x5c
,
0x15
,
0x21
,
0x7e
,
0xba
,
0x1c
,
0x8e
,
0xb3
,
0x8d
,
0x4f
,
0xa6
,
0xeb
,
0x53
,
0x41
,
0x89
,
0x41
,
0x0d
,
0x0b
,
0x40
,
0x21
,
0x12
,
0x7d
,
0x67
,
0x66
,
0x6a
,
0xb9
,
0x99
,
0xe7
,
0x70
,
0x4b
,
0xd5
,
0x05
,
0x81
,
0xd3
,
0x6e
,
0x53
,
0xea
,
0xb8
,
0x99
,
0x1f
,
0xff
,
0x46
,
0x95
,
0x15
,
0xe1
,
0xd5
,
0xa7
,
0x1e
,
0x7e
,
0xaf
,
0x6c
,
0x2b
,
0x08
,
0xdb
,
0xfb
,
0xcc
,
0x2a
,
0x1c
,
0xcb
,
0xae
,
0xb5
,
0xf2
,
0x6b
,
0x2f
,
0xb5
,
0x05
,
0xd6
,
0xe3
,
0xe3
,
0x28
,
0x99
,
0x6c
,
0xbd
,
0xb4
,
0xd8
,
0xb0
,
0x66
,
0xb9
,
0x61
,
0xdd
,
0x89
,
0x06
,
0xb4
,
0xf2
,
0xaa
,
0x94
,
0x7d
,
0x09
,
0x8d
,
0x44
,
0x7e
,
0xaa
,
0x89
,
0x7d
,
0x77
,
0x63
,
0x32
,
0x90
,
0xd8
,
0xcb
,
0xd4
,
0x4a
,
0x28
,
0x64
,
0x96
,
0x51
,
0x68
,
0xf0
,
0xd1
,
0x04
,
0x9b
,
0xfe
,
0xda
,
0x60
,
0x5f
,
0x01
,
0xe4
,
0x5d
,
0xca
,
0xaa
,
0xf7
,
0xec
,
0xf3
,
0xec
,
0xc7
,
0xd5
,
0xfb
,
0x30
,
0x0d
,
0xa6
,
0xe1
,
0xbb
,
0xa5
,
0x7b
,
0xc4
,
0x06
,
0xda
,
0x0f
,
0xab
,
0xaa
,
0x85
,
0xbb
,
0xea
,
0xcc
,
0x33
,
0xb5
,
0xf4
,
0x64
,
0x6b
,
0xc9
,
0xb6
,
0xdd
,
0xbb
,
0xea
,
0x6c
,
0xe6
,
0xa7
,
0x5c
,
0x53
,
0xaa
,
0x57
,
0xf0
,
0x5d
,
0x36
,
0xb3
,
0xa5
,
0x65
,
0xdb
,
0x2e
,
0x5e
,
0x71
,
0x76
,
0x54
,
0xa7
,
0x7f
,
0x77
,
0x9e
,
0xfe
,
0x13
,
0x00
,
0x00
,
0xff
,
0xff
,
0xcf
,
0xa9
,
0x8e
,
0x1b
,
0x06
,
0x12
,
0x00
,
0x00
,
}
// Reference imports to suppress errors if they are not otherwise used.
...
...
plugin/dapp/guess/types/table.go
View file @
4da6c484
...
...
@@ -15,17 +15,17 @@ data: guess
index: addr,status,addr_status,admin,admin_status,category_status
*/
var
opt
=
&
table
.
Option
{
Prefix
:
"LODB"
,
Name
:
"
guess
"
,
Primary
:
"
gameid
"
,
Index
:
[]
string
{
"addr"
,
"sta
tus"
,
"addr_status"
,
"admin"
,
"admin_status"
,
"category_status
"
},
var
opt
_guess_user
=
&
table
.
Option
{
Prefix
:
"LODB
_guess
"
,
Name
:
"
user
"
,
Primary
:
"
index
"
,
Index
:
[]
string
{
"addr"
,
"sta
rtindex
"
},
}
//NewTable 新建表
func
NewTable
(
kvdb
db
.
KV
)
*
table
.
Table
{
rowmeta
:=
NewGuessRow
()
table
,
err
:=
table
.
NewTable
(
rowmeta
,
kvdb
,
opt
)
func
New
GuessUser
Table
(
kvdb
db
.
KV
)
*
table
.
Table
{
rowmeta
:=
NewGuess
User
Row
()
table
,
err
:=
table
.
NewTable
(
rowmeta
,
kvdb
,
opt
_guess_user
)
if
err
!=
nil
{
panic
(
err
)
}
...
...
@@ -33,39 +33,91 @@ func NewTable(kvdb db.KV) *table.Table {
}
//OracleRow table meta 结构
type
GuessRow
struct
{
*
ReceiptGuessGame
type
Guess
User
Row
struct
{
*
UserBet
}
//NewOracleRow 新建一个meta 结构
func
NewGuess
Row
()
*
Guess
Row
{
return
&
Guess
Row
{
ReceiptGuessGame
:
&
ReceiptGuessGame
{}}
func
NewGuess
UserRow
()
*
GuessUser
Row
{
return
&
Guess
UserRow
{
UserBet
:
&
UserBet
{}}
}
//CreateRow 新建数据行(注意index 数据一定也要保存到数据中,不能就保存eventid)
func
(
tx
*
GuessRow
)
CreateRow
()
*
table
.
Row
{
func
(
tx
*
Guess
User
Row
)
CreateRow
()
*
table
.
Row
{
return
&
table
.
Row
{
Data
:
&
ReceiptGuessGame
{}}
}
//SetPayload 设置数据
func
(
tx
*
GuessRow
)
SetPayload
(
data
types
.
Message
)
error
{
if
txdata
,
ok
:=
data
.
(
*
ReceiptGuessGame
);
ok
{
tx
.
ReceiptGuessGame
=
txdata
func
(
tx
*
Guess
User
Row
)
SetPayload
(
data
types
.
Message
)
error
{
if
txdata
,
ok
:=
data
.
(
*
UserBet
);
ok
{
tx
.
UserBet
=
txdata
return
nil
}
return
types
.
ErrTypeAsset
}
//Get 按照indexName 查询 indexValue
func
(
tx
*
GuessRow
)
Get
(
key
string
)
([]
byte
,
error
)
{
if
key
==
"gameid"
{
return
[]
byte
(
tx
.
GameID
),
nil
func
(
tx
*
GuessUserRow
)
Get
(
key
string
)
([]
byte
,
error
)
{
if
key
==
"index"
{
return
[]
byte
(
fmt
.
Sprintf
(
"%018d"
,
tx
.
Index
)),
nil
}
else
if
key
==
"addr"
{
return
[]
byte
(
fmt
.
Sprintf
(
"%s"
,
tx
.
Addr
)),
nil
}
else
if
key
==
"startindex"
{
return
[]
byte
(
fmt
.
Sprintf
(
"%018d"
,
tx
.
StartIndex
)),
nil
}
return
nil
,
types
.
ErrNotFound
}
var
opt_guess_game
=
&
table
.
Option
{
Prefix
:
"LODB_guess"
,
Name
:
"game"
,
Primary
:
"startindex"
,
Index
:
[]
string
{
"gameid"
,
"status"
,
"admin"
,
"admin_status"
,
"category_status"
},
}
//NewTable 新建表
func
NewGuessGameTable
(
kvdb
db
.
KV
)
*
table
.
Table
{
rowmeta
:=
NewGuessGameRow
()
table
,
err
:=
table
.
NewTable
(
rowmeta
,
kvdb
,
opt_guess_game
)
if
err
!=
nil
{
panic
(
err
)
}
return
table
}
//OracleRow table meta 结构
type
GuessGameRow
struct
{
*
GuessGame
}
//NewOracleRow 新建一个meta 结构
func
NewGuessGameRow
()
*
GuessGameRow
{
return
&
GuessGameRow
{
GuessGame
:
&
GuessGame
{}}
}
//CreateRow 新建数据行(注意index 数据一定也要保存到数据中,不能就保存eventid)
func
(
tx
*
GuessGameRow
)
CreateRow
()
*
table
.
Row
{
return
&
table
.
Row
{
Data
:
&
GuessGame
{}}
}
//SetPayload 设置数据
func
(
tx
*
GuessGameRow
)
SetPayload
(
data
types
.
Message
)
error
{
if
txdata
,
ok
:=
data
.
(
*
GuessGame
);
ok
{
tx
.
GuessGame
=
txdata
return
nil
}
return
types
.
ErrTypeAsset
}
//Get 按照indexName 查询 indexValue
func
(
tx
*
GuessGameRow
)
Get
(
key
string
)
([]
byte
,
error
)
{
if
key
==
"startindex"
{
return
[]
byte
(
fmt
.
Sprintf
(
"%018d"
,
tx
.
StartIndex
)),
nil
}
else
if
key
==
"gameid"
{
return
[]
byte
(
fmt
.
Sprintf
(
"%s"
,
tx
.
GameID
)),
nil
}
else
if
key
==
"status"
{
return
[]
byte
(
fmt
.
Sprintf
(
"%2d"
,
tx
.
Status
)),
nil
}
else
if
key
==
"addr"
{
return
[]
byte
(
tx
.
Addr
),
nil
}
else
if
key
==
"addr_status"
{
return
[]
byte
(
fmt
.
Sprintf
(
"%s:%2d"
,
tx
.
Addr
,
tx
.
Status
)),
nil
}
else
if
key
==
"admin"
{
return
[]
byte
(
tx
.
AdminAddr
),
nil
}
else
if
key
==
"admin_status"
{
...
...
@@ -73,5 +125,6 @@ func (tx *GuessRow) Get(key string) ([]byte, error) {
}
else
if
key
==
"category_status"
{
return
[]
byte
(
fmt
.
Sprintf
(
"%s:%2d"
,
tx
.
Category
,
tx
.
Status
)),
nil
}
return
nil
,
types
.
ErrNotFound
}
\ No newline at end of file
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