Commit 15a2b46b authored by duanjinfei's avatar duanjinfei

change event log

parent b74c2db5
......@@ -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 = 17347500
deployedBlock = 17367500
isSyncLog = true
beforeEndReqUrl = https://meta.hapeprime.com/
httpUrlRegex = ^(http|https):\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,}(\/\S*)?$
lotteryContract = 0xc36c32E0CB9A47420c95Eb13F2113f8e70Efe72C
lotteryContract = 0x38BbA41d42D6ED244302a0D7561E98DA806a86DE
secret = 0x2Fc9Ba75f1c78ECc77D1a8fD3BDd6bA83eA68b7e
# redis config
[cache]
......
......@@ -15,25 +15,27 @@ type LotteryController struct {
BaseController
}
func (c *LotteryController) GetPeriodList() {
func (c *LotteryController) GetTokenIdList() {
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].Period)
tokenIdList = append(tokenIdList, lotteries[i].TokenId)
}
res.PeriodList = periodList
res.TokenIdList = tokenIdList
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()
lottery := &models.Lottery{}
err = o.QueryTable("lottery").Filter("pool_addr", poolAddr).Filter("period", period).One(lottery)
lotteries := 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 lottery == nil {
if len(lotteries) == 0 {
c.ResponseInfo(200, models.DATA_NIL, nil)
}
lotteryHashLastSix := &models.LotteryHashLastSix{
Hash: lottery.Hash,
SortBy: lottery.SortBy,
Hash: lotteries[0].Hash,
SortBy: lotteries[0].SortBy,
}
c.ResponseInfo(200, models.SUCCESS, lotteryHashLastSix)
}
......
......@@ -2,10 +2,12 @@ package models
type Lottery struct {
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)"`
}
......@@ -2,7 +2,7 @@ package models
type LotteryPeriodListRes struct {
PoolAddr string `json:"poolAddr"`
PeriodList []int64 `json:"periodList"`
TokenIdList []string `json:"tokenIdList"`
}
type LotteryUserList struct {
......
......@@ -6,7 +6,7 @@ import (
)
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/sortCondition", &controllers.LotteryController{}, "get:GetHashSortByCondition")
beego.Router("/api/v1/event/get/param", &controllers.LotteryController{}, "get:ForwardReq")
......
......@@ -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{
ContractAddr: contractAddr,
PoolAddr: utils.HexToAddr(vLog.Topics[1].Hex()).String(),
Period: period,
User: utils.HexToAddr(vLog.Topics[3].Hex()).String(),
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())
......
......@@ -16,6 +16,12 @@
},
{
"indexed": true,
"internalType": "uint256",
"name": "token_id",
"type": "uint256"
},
{
"indexed": false,
"internalType": "address",
"name": "user",
"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