Commit 15a2b46b authored by duanjinfei's avatar duanjinfei

change event log

parent b74c2db5
...@@ -3,12 +3,12 @@ httpport = 9000 ...@@ -3,12 +3,12 @@ httpport = 9000
runmode = dev runmode = dev
mysql = debian-sys-maint:H4khSGKhjhMJogpE@tcp(127.0.0.1:3306)/nftEvent?charset=utf8 mysql = debian-sys-maint:H4khSGKhjhMJogpE@tcp(127.0.0.1:3306)/nftEvent?charset=utf8
rpcUrl = https://cloudflare-eth.com rpcUrl = https://cloudflare-eth.com
deployedBlock = 17347500 deployedBlock = 17367500
isSyncLog = true isSyncLog = true
beforeEndReqUrl = https://meta.hapeprime.com/ beforeEndReqUrl = https://meta.hapeprime.com/
httpUrlRegex = ^(http|https):\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,}(\/\S*)?$ httpUrlRegex = ^(http|https):\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,}(\/\S*)?$
lotteryContract = 0xc36c32E0CB9A47420c95Eb13F2113f8e70Efe72C lotteryContract = 0x38BbA41d42D6ED244302a0D7561E98DA806a86DE
secret = 0x2Fc9Ba75f1c78ECc77D1a8fD3BDd6bA83eA68b7e secret = 0x2Fc9Ba75f1c78ECc77D1a8fD3BDd6bA83eA68b7e
# redis config # redis config
[cache] [cache]
......
...@@ -15,25 +15,27 @@ type LotteryController struct { ...@@ -15,25 +15,27 @@ type LotteryController struct {
BaseController BaseController
} }
func (c *LotteryController) GetPeriodList() { func (c *LotteryController) GetTokenIdList() {
poolAddr := c.GetString("poolAddr") poolAddr := c.GetString("poolAddr")
if poolAddr == "" || !utils.IsAddress(poolAddr) { if poolAddr == "" || !utils.IsAddress(poolAddr) {
c.ResponseInfo(500, models.PARAM_ERR, "") c.ResponseInfo(500, models.PARAM_ERR, "")
} }
contractAddr := beego.AppConfig.String("lotteryContract")
o := orm.NewOrm() o := orm.NewOrm()
var lotteries []*models.Lottery 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 { if err != nil {
c.ResponseInfo(500, models.PERIOD_ERR, err.Error()) c.ResponseInfo(500, models.PERIOD_ERR, err.Error())
} }
res := &models.LotteryPeriodListRes{ res := &models.LotteryPeriodListRes{
PoolAddr: poolAddr, PoolAddr: poolAddr,
} }
periodList := make([]int64, 0) tokenIdList := make([]string, 0)
for i := 0; i < len(lotteries); i++ { for i := 0; i < len(lotteries); i++ {
periodList = append(periodList, lotteries[i].Period) tokenIdList = append(tokenIdList, lotteries[i].TokenId)
} }
res.PeriodList = periodList res.TokenIdList = tokenIdList
c.ResponseInfo(200, models.SUCCESS, res) c.ResponseInfo(200, models.SUCCESS, res)
} }
...@@ -46,9 +48,10 @@ func (c *LotteryController) GetUserList() { ...@@ -46,9 +48,10 @@ func (c *LotteryController) GetUserList() {
if err != nil { if err != nil {
c.ResponseInfo(500, models.PARAM_ERR, err.Error()) c.ResponseInfo(500, models.PARAM_ERR, err.Error())
} }
contractAddr := beego.AppConfig.String("lotteryContract")
o := orm.NewOrm() o := orm.NewOrm()
var lotteries []*models.Lottery 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 { if err != nil {
c.ResponseInfo(500, models.USER_ERR, err.Error()) c.ResponseInfo(500, models.USER_ERR, err.Error())
} }
...@@ -66,30 +69,23 @@ func (c *LotteryController) GetUserList() { ...@@ -66,30 +69,23 @@ func (c *LotteryController) GetUserList() {
} }
func (c *LotteryController) GetHashSortByCondition() { func (c *LotteryController) GetHashSortByCondition() {
poolAddr := c.GetString("poolAddr") period := c.GetString("period")
if poolAddr == "" || !utils.IsAddress(poolAddr) { if period == "" {
c.ResponseInfo(500, models.PARAM_ERR, "") c.ResponseInfo(500, models.PARAM_ERR, nil)
}
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())
} }
contractAddr := beego.AppConfig.String("lotteryContract")
o := orm.NewOrm() o := orm.NewOrm()
lottery := &models.Lottery{} lotteries := make([]models.Lottery, 0)
err = o.QueryTable("lottery").Filter("pool_addr", poolAddr).Filter("period", period).One(lottery) _, err := o.QueryTable("lottery").Filter("contract_addr", contractAddr).Filter("period", period).OrderBy("-sort_by").All(&lotteries)
if err != nil { if err != nil {
c.ResponseInfo(500, models.SORTBY_ERR, err.Error()) c.ResponseInfo(500, models.SORTBY_ERR, err.Error())
} }
if lottery == nil { if len(lotteries) == 0 {
c.ResponseInfo(200, models.DATA_NIL, nil) c.ResponseInfo(200, models.DATA_NIL, nil)
} }
lotteryHashLastSix := &models.LotteryHashLastSix{ lotteryHashLastSix := &models.LotteryHashLastSix{
Hash: lottery.Hash, Hash: lotteries[0].Hash,
SortBy: lottery.SortBy, SortBy: lotteries[0].SortBy,
} }
c.ResponseInfo(200, models.SUCCESS, lotteryHashLastSix) c.ResponseInfo(200, models.SUCCESS, lotteryHashLastSix)
} }
......
...@@ -2,10 +2,12 @@ package models ...@@ -2,10 +2,12 @@ package models
type Lottery struct { type Lottery struct {
Id int64 `orm:"pk;auto"` Id int64 `orm:"pk;auto"`
ContractAddr string `orm:"size(255)"`
PoolAddr string `orm:"size(255)"` PoolAddr string `orm:"size(255)"`
Period int64 Period int64
User string `orm:"size(255)"` User string `orm:"size(255)"`
Value string `orm:"size(255)"` Value string `orm:"size(255)"`
TokenId string `orm:"size(255)"`
Hash string `orm:"size(255)"` Hash string `orm:"size(255)"`
SortBy string `orm:"size(255)"` SortBy string `orm:"size(255)"`
} }
...@@ -2,7 +2,7 @@ package models ...@@ -2,7 +2,7 @@ package models
type LotteryPeriodListRes struct { type LotteryPeriodListRes struct {
PoolAddr string `json:"poolAddr"` PoolAddr string `json:"poolAddr"`
PeriodList []int64 `json:"periodList"` TokenIdList []string `json:"tokenIdList"`
} }
type LotteryUserList struct { type LotteryUserList struct {
......
...@@ -6,7 +6,7 @@ import ( ...@@ -6,7 +6,7 @@ import (
) )
func init() { func init() {
beego.Router("/api/v1/event/get/periodList", &controllers.LotteryController{}, "get:GetPeriodList") beego.Router("/api/v1/event/get/tokenIdList", &controllers.LotteryController{}, "get:GetTokenIdList")
beego.Router("/api/v1/event/get/joinUserList", &controllers.LotteryController{}, "get:GetUserList") 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/sortCondition", &controllers.LotteryController{}, "get:GetHashSortByCondition")
beego.Router("/api/v1/event/get/param", &controllers.LotteryController{}, "get:ForwardReq") beego.Router("/api/v1/event/get/param", &controllers.LotteryController{}, "get:ForwardReq")
......
...@@ -2,9 +2,11 @@ package sync ...@@ -2,9 +2,11 @@ package sync
import ( import (
"bufio" "bufio"
"github.com/astaxie/beego"
"github.com/astaxie/beego/logs" "github.com/astaxie/beego/logs"
"github.com/astaxie/beego/orm" "github.com/astaxie/beego/orm"
"github.com/ethereum/go-ethereum/accounts/abi" "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/core/types"
"github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/crypto"
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
...@@ -12,12 +14,14 @@ import ( ...@@ -12,12 +14,14 @@ import (
"github.com/wuban/nft-event/utils" "github.com/wuban/nft-event/utils"
"math/big" "math/big"
"os" "os"
"strconv"
) )
// LotteryTopic ERC721 transfer event topic // 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 { func LotteryContractHandler(vLog types.Log) error {
contractAddr := beego.AppConfig.String("lotteryContract")
logs.Info("handler lottery contract logs") logs.Info("handler lottery contract logs")
file, err := os.Open("./sync/Lottery_Event.json") file, err := os.Open("./sync/Lottery_Event.json")
if err != nil { if err != nil {
...@@ -42,25 +46,22 @@ func LotteryContractHandler(vLog types.Log) error { ...@@ -42,25 +46,22 @@ func LotteryContractHandler(vLog types.Log) error {
log.Error("HexToInt64 error:", err.Error()) log.Error("HexToInt64 error:", err.Error())
return err return err
} }
value := rp[0].(*big.Int) userAddr := rp[0].(common.Address).Hex()
value := rp[1].(*big.Int)
log.Info("value:", value.String()) log.Info("value:", value.String())
tokenId, _ := utils.HexToInt64(vLog.Topics[3].Hex())
lottery := &models.Lottery{ lottery := &models.Lottery{
ContractAddr: contractAddr,
PoolAddr: utils.HexToAddr(vLog.Topics[1].Hex()).String(), PoolAddr: utils.HexToAddr(vLog.Topics[1].Hex()).String(),
Period: period, Period: period,
User: utils.HexToAddr(vLog.Topics[3].Hex()).String(), User: userAddr,
Value: value.String(), Value: value.String(),
TokenId: strconv.FormatInt(tokenId, 10),
Hash: txHash, Hash: txHash,
SortBy: txHash[len(txHash)-6:], SortBy: txHash[len(txHash)-6:],
} }
log.Info("Insert data lottery:", lottery) log.Info("Insert data lottery:", lottery)
o := orm.NewOrm() 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) _, err = o.Insert(lottery)
if err != nil { if err != nil {
logs.Error("Insert lottery error:", err.Error()) logs.Error("Insert lottery error:", err.Error())
......
...@@ -16,6 +16,12 @@ ...@@ -16,6 +16,12 @@
}, },
{ {
"indexed": true, "indexed": true,
"internalType": "uint256",
"name": "token_id",
"type": "uint256"
},
{
"indexed": false,
"internalType": "address", "internalType": "address",
"name": "user", "name": "user",
"type": "address" "type": "address"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment