Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
N
nft-event
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
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
duanjinfei
nft-event
Commits
15a2b46b
Commit
15a2b46b
authored
May 30, 2023
by
duanjinfei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
change event log
parent
b74c2db5
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
54 additions
and
49 deletions
+54
-49
app.conf
conf/app.conf
+2
-2
LotteryController.go
controllers/LotteryController.go
+18
-22
mouels.go
models/mouels.go
+9
-7
response.go
models/response.go
+2
-2
router.go
routers/router.go
+1
-1
Handler.go
sync/Handler.go
+16
-15
Lottery_Event.json
sync/Lottery_Event.json
+6
-0
No files found.
conf/app.conf
View file @
15a2b46b
...
...
@@ -3,12 +3,12 @@ httpport = 9000
runmode
=
dev
mysql
=
debian
-
sys
-
maint
:
H4khSGKhjhMJogpE
@
tcp
(
127
.
0
.
0
.
1
:
3306
)/
nftEvent
?
charset
=
utf8
rpcUrl
=
https
://
cloudflare
-
eth
.
com
deployedBlock
=
173
4
7500
deployedBlock
=
173
6
7500
isSyncLog
=
true
beforeEndReqUrl
=
https
://
meta
.
hapeprime
.
com
/
httpUrlRegex
= ^(
http
|
https
):\/\/[
a
-
zA
-
Z0
-
9
\-\.]+\.[
a
-
zA
-
Z
]{
2
,}(\/\
S
*)?$
lotteryContract
=
0
x
c36c32E0CB9A47420c95Eb13F2113f8e70Efe72C
lotteryContract
=
0
x
38BbA41d42D6ED244302a0D7561E98DA806a86DE
secret
=
0
x2Fc9Ba75f1c78ECc77D1a8fD3BDd6bA83eA68b7e
# redis config
[
cache
]
...
...
controllers/LotteryController.go
View file @
15a2b46b
...
...
@@ -15,25 +15,27 @@ type LotteryController struct {
BaseController
}
func
(
c
*
LotteryController
)
Get
Perio
dList
()
{
func
(
c
*
LotteryController
)
Get
TokenI
dList
()
{
poolAddr
:=
c
.
GetString
(
"poolAddr"
)
if
poolAddr
==
""
||
!
utils
.
IsAddress
(
poolAddr
)
{
c
.
ResponseInfo
(
500
,
models
.
PARAM_ERR
,
""
)
}
contractAddr
:=
beego
.
AppConfig
.
String
(
"lotteryContract"
)
o
:=
orm
.
NewOrm
()
var
lotteries
[]
*
models
.
Lottery
_
,
err
:=
o
.
QueryTable
(
"lottery"
)
.
Filter
(
"pool_addr"
,
poolAddr
)
.
All
(
&
lotteries
,
"period"
)
_
,
err
:=
o
.
QueryTable
(
"lottery"
)
.
Filter
(
"contract_addr"
,
contractAddr
)
.
Filter
(
"pool_addr"
,
poolAddr
)
.
Distinct
()
.
OrderBy
(
"period"
)
.
All
(
&
lotteries
,
"token_id"
,
"period"
)
if
err
!=
nil
{
c
.
ResponseInfo
(
500
,
models
.
PERIOD_ERR
,
err
.
Error
())
}
res
:=
&
models
.
LotteryPeriodListRes
{
PoolAddr
:
poolAddr
,
}
periodList
:=
make
([]
int64
,
0
)
tokenIdList
:=
make
([]
string
,
0
)
for
i
:=
0
;
i
<
len
(
lotteries
);
i
++
{
periodList
=
append
(
periodList
,
lotteries
[
i
]
.
Perio
d
)
tokenIdList
=
append
(
tokenIdList
,
lotteries
[
i
]
.
TokenI
d
)
}
res
.
PeriodList
=
perio
dList
res
.
TokenIdList
=
tokenI
dList
c
.
ResponseInfo
(
200
,
models
.
SUCCESS
,
res
)
}
...
...
@@ -46,9 +48,10 @@ func (c *LotteryController) GetUserList() {
if
err
!=
nil
{
c
.
ResponseInfo
(
500
,
models
.
PARAM_ERR
,
err
.
Error
())
}
contractAddr
:=
beego
.
AppConfig
.
String
(
"lotteryContract"
)
o
:=
orm
.
NewOrm
()
var
lotteries
[]
*
models
.
Lottery
_
,
err
=
o
.
QueryTable
(
"lottery"
)
.
Filter
(
"pool_addr"
,
poolAddr
)
.
Filter
(
"period"
,
period
)
.
OrderBy
(
"-sort_by"
)
.
All
(
&
lotteries
,
"user"
,
"value"
,
"hash"
)
_
,
err
=
o
.
QueryTable
(
"lottery"
)
.
Filter
(
"
contract_addr"
,
contractAddr
)
.
Filter
(
"
pool_addr"
,
poolAddr
)
.
Filter
(
"period"
,
period
)
.
OrderBy
(
"-sort_by"
)
.
All
(
&
lotteries
,
"user"
,
"value"
,
"hash"
)
if
err
!=
nil
{
c
.
ResponseInfo
(
500
,
models
.
USER_ERR
,
err
.
Error
())
}
...
...
@@ -66,30 +69,23 @@ func (c *LotteryController) GetUserList() {
}
func
(
c
*
LotteryController
)
GetHashSortByCondition
()
{
poolAddr
:=
c
.
GetString
(
"poolAddr"
)
if
poolAddr
==
""
||
!
utils
.
IsAddress
(
poolAddr
)
{
c
.
ResponseInfo
(
500
,
models
.
PARAM_ERR
,
""
)
}
userAddr
:=
c
.
GetString
(
"user"
)
if
userAddr
==
""
||
!
utils
.
IsAddress
(
poolAddr
)
{
c
.
ResponseInfo
(
500
,
models
.
PARAM_ERR
,
""
)
}
period
,
err
:=
c
.
GetInt64
(
"period"
)
if
err
!=
nil
{
c
.
ResponseInfo
(
500
,
models
.
PARAM_ERR
,
err
.
Error
())
period
:=
c
.
GetString
(
"period"
)
if
period
==
""
{
c
.
ResponseInfo
(
500
,
models
.
PARAM_ERR
,
nil
)
}
contractAddr
:=
beego
.
AppConfig
.
String
(
"lotteryContract"
)
o
:=
orm
.
NewOrm
()
lotter
y
:=
&
models
.
Lottery
{}
err
=
o
.
QueryTable
(
"lottery"
)
.
Filter
(
"pool_addr"
,
poolAddr
)
.
Filter
(
"period"
,
period
)
.
One
(
lottery
)
lotter
ies
:=
make
([]
models
.
Lottery
,
0
)
_
,
err
:=
o
.
QueryTable
(
"lottery"
)
.
Filter
(
"contract_addr"
,
contractAddr
)
.
Filter
(
"period"
,
period
)
.
OrderBy
(
"-sort_by"
)
.
All
(
&
lotteries
)
if
err
!=
nil
{
c
.
ResponseInfo
(
500
,
models
.
SORTBY_ERR
,
err
.
Error
())
}
if
l
ottery
==
nil
{
if
l
en
(
lotteries
)
==
0
{
c
.
ResponseInfo
(
200
,
models
.
DATA_NIL
,
nil
)
}
lotteryHashLastSix
:=
&
models
.
LotteryHashLastSix
{
Hash
:
lotter
y
.
Hash
,
SortBy
:
lotter
y
.
SortBy
,
Hash
:
lotter
ies
[
0
]
.
Hash
,
SortBy
:
lotter
ies
[
0
]
.
SortBy
,
}
c
.
ResponseInfo
(
200
,
models
.
SUCCESS
,
lotteryHashLastSix
)
}
...
...
models/mouels.go
View file @
15a2b46b
package
models
type
Lottery
struct
{
Id
int64
`orm:"pk;auto"`
PoolAddr
string
`orm:"size(255)"`
Period
int64
User
string
`orm:"size(255)"`
Value
string
`orm:"size(255)"`
Hash
string
`orm:"size(255)"`
SortBy
string
`orm:"size(255)"`
Id
int64
`orm:"pk;auto"`
ContractAddr
string
`orm:"size(255)"`
PoolAddr
string
`orm:"size(255)"`
Period
int64
User
string
`orm:"size(255)"`
Value
string
`orm:"size(255)"`
TokenId
string
`orm:"size(255)"`
Hash
string
`orm:"size(255)"`
SortBy
string
`orm:"size(255)"`
}
models/response.go
View file @
15a2b46b
package
models
type
LotteryPeriodListRes
struct
{
PoolAddr
string
`json:"poolAddr"`
PeriodList
[]
int64
`json:"perio
dList"`
PoolAddr
string
`json:"poolAddr"`
TokenIdList
[]
string
`json:"tokenI
dList"`
}
type
LotteryUserList
struct
{
...
...
routers/router.go
View file @
15a2b46b
...
...
@@ -6,7 +6,7 @@ import (
)
func
init
()
{
beego
.
Router
(
"/api/v1/event/get/
periodList"
,
&
controllers
.
LotteryController
{},
"get:GetPerio
dList"
)
beego
.
Router
(
"/api/v1/event/get/
tokenIdList"
,
&
controllers
.
LotteryController
{},
"get:GetTokenI
dList"
)
beego
.
Router
(
"/api/v1/event/get/joinUserList"
,
&
controllers
.
LotteryController
{},
"get:GetUserList"
)
beego
.
Router
(
"/api/v1/event/get/sortCondition"
,
&
controllers
.
LotteryController
{},
"get:GetHashSortByCondition"
)
beego
.
Router
(
"/api/v1/event/get/param"
,
&
controllers
.
LotteryController
{},
"get:ForwardReq"
)
...
...
sync/Handler.go
View file @
15a2b46b
...
...
@@ -2,9 +2,11 @@ package sync
import
(
"bufio"
"github.com/astaxie/beego"
"github.com/astaxie/beego/logs"
"github.com/astaxie/beego/orm"
"github.com/ethereum/go-ethereum/accounts/abi"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/crypto"
log
"github.com/sirupsen/logrus"
...
...
@@ -12,12 +14,14 @@ import (
"github.com/wuban/nft-event/utils"
"math/big"
"os"
"strconv"
)
// LotteryTopic ERC721 transfer event topic
var
LotteryTopic
=
crypto
.
Keccak256Hash
([]
byte
(
"Lottery(address,uint256,address,uint256)"
))
.
Hex
()
var
LotteryTopic
=
crypto
.
Keccak256Hash
([]
byte
(
"Lottery(address,uint256,
uint256,
address,uint256)"
))
.
Hex
()
func
LotteryContractHandler
(
vLog
types
.
Log
)
error
{
contractAddr
:=
beego
.
AppConfig
.
String
(
"lotteryContract"
)
logs
.
Info
(
"handler lottery contract logs"
)
file
,
err
:=
os
.
Open
(
"./sync/Lottery_Event.json"
)
if
err
!=
nil
{
...
...
@@ -42,25 +46,22 @@ func LotteryContractHandler(vLog types.Log) error {
log
.
Error
(
"HexToInt64 error:"
,
err
.
Error
())
return
err
}
value
:=
rp
[
0
]
.
(
*
big
.
Int
)
userAddr
:=
rp
[
0
]
.
(
common
.
Address
)
.
Hex
()
value
:=
rp
[
1
]
.
(
*
big
.
Int
)
log
.
Info
(
"value:"
,
value
.
String
())
tokenId
,
_
:=
utils
.
HexToInt64
(
vLog
.
Topics
[
3
]
.
Hex
())
lottery
:=
&
models
.
Lottery
{
PoolAddr
:
utils
.
HexToAddr
(
vLog
.
Topics
[
1
]
.
Hex
())
.
String
(),
Period
:
period
,
User
:
utils
.
HexToAddr
(
vLog
.
Topics
[
3
]
.
Hex
())
.
String
(),
Value
:
value
.
String
(),
Hash
:
txHash
,
SortBy
:
txHash
[
len
(
txHash
)
-
6
:
],
ContractAddr
:
contractAddr
,
PoolAddr
:
utils
.
HexToAddr
(
vLog
.
Topics
[
1
]
.
Hex
())
.
String
(),
Period
:
period
,
User
:
userAddr
,
Value
:
value
.
String
(),
TokenId
:
strconv
.
FormatInt
(
tokenId
,
10
),
Hash
:
txHash
,
SortBy
:
txHash
[
len
(
txHash
)
-
6
:
],
}
log
.
Info
(
"Insert data lottery:"
,
lottery
)
o
:=
orm
.
NewOrm
()
//lotteryVar := &models.Lottery{}
// todo 是否需要过滤每个用户只能参加一次抽奖的日志
//o.QueryTable("lottery").Filter("pool_addr", lottery.PoolAddr).Filter("period", lottery.Period).Filter("User", lottery.User).All(lotteryVar)
//if lotteryVar.PoolAddr != "" {
// log.Warning("The lottery is exist", lotteryVar)
// return nil
//}
_
,
err
=
o
.
Insert
(
lottery
)
if
err
!=
nil
{
logs
.
Error
(
"Insert lottery error:"
,
err
.
Error
())
...
...
sync/Lottery_Event.json
View file @
15a2b46b
...
...
@@ -16,6 +16,12 @@
},
{
"indexed"
:
true
,
"internalType"
:
"uint256"
,
"name"
:
"token_id"
,
"type"
:
"uint256"
},
{
"indexed"
:
false
,
"internalType"
:
"address"
,
"name"
:
"user"
,
"type"
:
"address"
...
...
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