fix: nft holder update logic

This commit is contained in:
2025-01-11 12:25:09 +08:00
parent 526770c285
commit 63925584d7

View File

@@ -68,14 +68,17 @@ func (l *HolderUpdateLogic) HolderUpdate() {
} }
} }
var value int var delAddress, addAddress string
if nft.Id == 0 { if nft.Id == 0 {
// 新增 // 新增
_, err = l.svcCtx.NftHolderModel.Insert(l.ctx, nft) _, err = l.svcCtx.NftHolderModel.Insert(l.ctx, nft)
value = balance addAddress = nft.Address
} else { } else {
// 持有数量变化 // 地址变化
value = balance - nft.Balance if nft.Address != o.OwnerAddress {
delAddress = nft.Address
addAddress = o.OwnerAddress
}
nft.Balance = balance nft.Balance = balance
nft.UpdateSeq = updateSeq nft.UpdateSeq = updateSeq
nft.Address = o.OwnerAddress nft.Address = o.OwnerAddress
@@ -86,10 +89,10 @@ func (l *HolderUpdateLogic) HolderUpdate() {
logx.Errorw("insert or update nft holder error", logx.Field("error", err), logx.Field("address", o.OwnerAddress), logx.Field("token", tk.TokenID), logx.Field("balance", balance)) logx.Errorw("insert or update nft holder error", logx.Field("error", err), logx.Field("address", o.OwnerAddress), logx.Field("token", tk.TokenID), logx.Field("balance", balance))
} }
// 余额有变化,记录变化日志 // 新的持有地址(新增)
if value != 0 { if addAddress != "" {
_, err = l.svcCtx.NftHolderChangeLogModel.Insert(l.ctx, &model.NhNftHolderChangeLog{ _, err = l.svcCtx.NftHolderChangeLogModel.Insert(l.ctx, &model.NhNftHolderChangeLog{
Address: o.OwnerAddress, Address: addAddress,
TokenId: tk.TokenID, TokenId: tk.TokenID,
Value: balance, Value: balance,
Balance: balance, Balance: balance,
@@ -98,39 +101,52 @@ func (l *HolderUpdateLogic) HolderUpdate() {
logx.Errorw("insert nft holder change log error", logx.Field("error", err), logx.Field("address", o.OwnerAddress), logx.Field("token", tk.TokenID)) logx.Errorw("insert nft holder change log error", logx.Field("error", err), logx.Field("address", o.OwnerAddress), logx.Field("token", tk.TokenID))
} }
} }
// 原地址(删除)
if delAddress != "" {
_, err = l.svcCtx.NftHolderChangeLogModel.Insert(l.ctx, &model.NhNftHolderChangeLog{
Address: delAddress,
TokenId: tk.TokenID,
Value: -balance,
Balance: 0,
})
if err != nil {
logx.Errorw("insert nft holder change log error", logx.Field("error", err), logx.Field("address", o.OwnerAddress), logx.Field("token", tk.TokenID))
}
}
} }
} }
// 删除已经不持有的地址,且添加变化日志 // 删除已经不持有的地址,且添加变化日志
nfts, err := l.svcCtx.NftHolderModel.FindOtherUpdateSeq(l.ctx, updateSeq) //nfts, err := l.svcCtx.NftHolderModel.FindOtherUpdateSeq(l.ctx, updateSeq)
if err != nil { //if err != nil {
logx.Errorw("find other update seq error", logx.Field("error", err)) // logx.Errorw("find other update seq error", logx.Field("error", err))
return // return
} //}
for _, nft := range nfts { //for _, nft := range nfts {
_, err = l.svcCtx.NftHolderChangeLogModel.Insert(l.ctx, &model.NhNftHolderChangeLog{ // _, err = l.svcCtx.NftHolderChangeLogModel.Insert(l.ctx, &model.NhNftHolderChangeLog{
Address: nft.Address, // Address: nft.Address,
TokenId: nft.TokenId, // TokenId: nft.TokenId,
Value: -nft.Balance, // Value: -nft.Balance,
Balance: 0, // Balance: 0,
}) // })
if err != nil { // if err != nil {
logx.Errorw("delete nft holder error", logx.Field("error", err), logx.Field("address", nft.Address), logx.Field("token", nft.TokenId)) // logx.Errorw("delete nft holder error", logx.Field("error", err), logx.Field("address", nft.Address), logx.Field("token", nft.TokenId))
} // }
uid, err := l.svcCtx.WalletModel.FindUidByAddress(l.ctx, nft.Address) // uid, err := l.svcCtx.WalletModel.FindUidByAddress(l.ctx, nft.Address)
if err != nil { // if err != nil {
logx.Errorw("find uid by address error", logx.Field("error", err), logx.Field("address", nft.Address)) // logx.Errorw("find uid by address error", logx.Field("error", err), logx.Field("address", nft.Address))
continue // continue
} // }
err = l.svcCtx.StakeNftModel.UnStakeNft(l.ctx, uid, nft.TokenId, true) // err = l.svcCtx.StakeNftModel.UnStakeNft(l.ctx, uid, nft.TokenId, true)
if err != nil { // if err != nil {
logx.Errorw("un stake nft error", logx.Field("error", err), logx.Field("address", nft.Address), logx.Field("token", nft.TokenId)) // logx.Errorw("un stake nft error", logx.Field("error", err), logx.Field("address", nft.Address), logx.Field("token", nft.TokenId))
} // }
} //}
err = l.svcCtx.NftHolderModel.DeleteOtherUpdateSeq(l.ctx, updateSeq) //err = l.svcCtx.NftHolderModel.DeleteOtherUpdateSeq(l.ctx, updateSeq)
if err != nil { //if err != nil {
logx.Errorw("delete other update seq error", logx.Field("error", err), logx.Field("update_seq", updateSeq)) // logx.Errorw("delete other update seq error", logx.Field("error", err), logx.Field("update_seq", updateSeq))
} //}
} }
type OwnerList struct { type OwnerList struct {