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 {
// 新增
_, err = l.svcCtx.NftHolderModel.Insert(l.ctx, nft)
value = balance
addAddress = nft.Address
} else {
// 持有数量变化
value = balance - nft.Balance
// 地址变化
if nft.Address != o.OwnerAddress {
delAddress = nft.Address
addAddress = o.OwnerAddress
}
nft.Balance = balance
nft.UpdateSeq = updateSeq
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))
}
// 余额有变化,记录变化日志
if value != 0 {
// 新的持有地址(新增)
if addAddress != "" {
_, err = l.svcCtx.NftHolderChangeLogModel.Insert(l.ctx, &model.NhNftHolderChangeLog{
Address: o.OwnerAddress,
Address: addAddress,
TokenId: tk.TokenID,
Value: 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))
}
}
// 原地址(删除)
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)
if err != nil {
logx.Errorw("find other update seq error", logx.Field("error", err))
return
}
for _, nft := range nfts {
_, err = l.svcCtx.NftHolderChangeLogModel.Insert(l.ctx, &model.NhNftHolderChangeLog{
Address: nft.Address,
TokenId: nft.TokenId,
Value: -nft.Balance,
Balance: 0,
})
if err != nil {
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)
if err != nil {
logx.Errorw("find uid by address error", logx.Field("error", err), logx.Field("address", nft.Address))
continue
}
err = l.svcCtx.StakeNftModel.UnStakeNft(l.ctx, uid, nft.TokenId, true)
if err != nil {
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)
if err != nil {
logx.Errorw("delete other update seq error", logx.Field("error", err), logx.Field("update_seq", updateSeq))
}
//nfts, err := l.svcCtx.NftHolderModel.FindOtherUpdateSeq(l.ctx, updateSeq)
//if err != nil {
// logx.Errorw("find other update seq error", logx.Field("error", err))
// return
//}
//for _, nft := range nfts {
// _, err = l.svcCtx.NftHolderChangeLogModel.Insert(l.ctx, &model.NhNftHolderChangeLog{
// Address: nft.Address,
// TokenId: nft.TokenId,
// Value: -nft.Balance,
// Balance: 0,
// })
// if err != nil {
// 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)
// if err != nil {
// logx.Errorw("find uid by address error", logx.Field("error", err), logx.Field("address", nft.Address))
// continue
// }
// err = l.svcCtx.StakeNftModel.UnStakeNft(l.ctx, uid, nft.TokenId, true)
// if err != nil {
// 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)
//if err != nil {
// logx.Errorw("delete other update seq error", logx.Field("error", err), logx.Field("update_seq", updateSeq))
//}
}
type OwnerList struct {