@@ -21,7 +21,6 @@ import (
21
21
22
22
"github.com/defipod/mochi/pkg/config"
23
23
"github.com/defipod/mochi/pkg/consts"
24
- "github.com/defipod/mochi/pkg/contract/neko"
25
24
"github.com/defipod/mochi/pkg/contract/nekostaking"
26
25
"github.com/defipod/mochi/pkg/contracts/erc721"
27
26
"github.com/defipod/mochi/pkg/logger"
@@ -1349,13 +1348,12 @@ func (e *Entity) GetProfileNftBalance(req request.GetProfileNFTsRequest) (*respo
1349
1348
1350
1349
}
1351
1350
1352
- go e .fetchNftBalance (req .ProfileID , collection )
1351
+ // go e.fetchNftBalance(req.ProfileID, collection)
1353
1352
1354
1353
return & data , nil
1355
1354
}
1356
1355
1357
1356
func (e * Entity ) fetchNftBalance (profileID string , collection * model.NFTCollection ) {
1358
- fmt .Println (profileID == "" , ! strings .EqualFold (collection .ERCFormat , model .ErcFormat721 ) || ! collection .IsVerified )
1359
1357
if profileID == "" {
1360
1358
return
1361
1359
}
@@ -1497,97 +1495,105 @@ func (e *Entity) GetNekoBalanceFunc(config model.NFTCollectionConfig) (func(addr
1497
1495
}
1498
1496
1499
1497
// TODO: remove after airdrop
1500
- func (e * Entity ) GetNekoHolders (col model.NFTCollection ) ([]model.UserNFTBalance , error ) {
1498
+ func (e * Entity ) FetchHolders (col model.NFTCollection ) ([]model.UserNFTBalance , error ) {
1501
1499
chainID , err := strconv .Atoi (col .ChainID )
1502
1500
if err != nil {
1503
- e .log .Errorf (err , "[GetNekoHolders ] strconv.Atoi() failed" )
1501
+ e .log .Errorf (err , "[FetchHolders ] strconv.Atoi() failed" )
1504
1502
return nil , err
1505
1503
}
1506
1504
1507
1505
chain , err := e .repo .Chain .GetByID (chainID )
1508
1506
if err != nil {
1509
- e .log .Errorf (err , "[GetNekoHolders ] repo.Chain.GetByID() failed" )
1507
+ e .log .Errorf (err , "[FetchHolders ] repo.Chain.GetByID() failed" )
1510
1508
return nil , err
1511
1509
}
1512
1510
1513
1511
client , err := ethclient .Dial (chain .RPC )
1514
1512
if err != nil {
1515
- e .log .Errorf (err , "[GetNekoHolders ] ethclient.Dial() failed" )
1513
+ e .log .Errorf (err , "[FetchHolders ] ethclient.Dial() failed" )
1516
1514
return nil , err
1517
1515
}
1518
1516
1519
- nekoInstance , err := neko . NewNeko (common .HexToAddress (col .Address ), client )
1517
+ tokenTracker , err := erc721 . NewErc721 (common .HexToAddress (col .Address ), client )
1520
1518
if err != nil {
1521
- e .log .Errorf (err , "[GetNekoHolders] neko.NewNeko () failed" )
1519
+ e .log .Errorf (err , "[FetchHolders] erc721.NewErc721 () failed" )
1522
1520
return nil , err
1523
1521
}
1524
1522
1525
- stakingAddr := consts .NekoStakingContractAddress
1526
- stakingInstance , err := nekostaking .NewNekostaking (common .HexToAddress (stakingAddr ), client )
1527
- if err != nil {
1528
- e .log .Errorf (err , "[GetNekoHolders] nekostaking.NewNekoStaking() failed" )
1529
- return nil , err
1530
- }
1531
-
1532
- stakings , err := nekoInstance .TokensOfOwner (nil , common .HexToAddress (stakingAddr ))
1533
- if err != nil {
1534
- e .log .Errorf (err , "[GetNekoHolders] nekoInstance.TokensOfOwner() failed" )
1535
- return nil , err
1536
- }
1537
- stakingIds := sliceutils .Map (stakings , func (t * big.Int ) int64 {
1538
- return t .Int64 ()
1539
- })
1523
+ // tokenTracker, err := neko.NewNeko(common.HexToAddress(col.Address), client)
1524
+ // if err != nil {
1525
+ // e.log.Errorf(err, "[FetchHolders] neko.NewNeko() failed")
1526
+ // return nil, err
1527
+ // }
1528
+
1529
+ // stakingAddr := consts.NekoStakingContractAddress
1530
+ // stakingInstance, err := nekostaking.NewNekostaking(common.HexToAddress(stakingAddr), client)
1531
+ // if err != nil {
1532
+ // e.log.Errorf(err, "[FetchHolders] nekostaking.NewNekoStaking() failed")
1533
+ // return nil, err
1534
+ // }
1535
+
1536
+ // stakings, err := nekoInstance.TokensOfOwner(nil, common.HexToAddress(stakingAddr))
1537
+ // if err != nil {
1538
+ // e.log.Errorf(err, "[FetchHolders] nekoInstance.TokensOfOwner() failed")
1539
+ // return nil, err
1540
+ // }
1541
+ // stakingIds := sliceutils.Map(stakings, func(t *big.Int) int64 {
1542
+ // return t.Int64()
1543
+ // })
1540
1544
1541
1545
var unstakings []* big.Int
1542
1546
for tokenId := 0 ; tokenId < col .TotalSupply ; tokenId ++ {
1543
- if sliceutils .Contains (stakingIds , int64 (tokenId )) {
1544
- continue
1545
- }
1547
+ // if sliceutils.Contains(stakingIds, int64(tokenId)) {
1548
+ // continue
1549
+ // }
1546
1550
unstakings = append (unstakings , big .NewInt (int64 (tokenId )))
1547
1551
}
1548
1552
1549
- var wg sync.WaitGroup
1550
- wg .Add (2 )
1553
+ // var wg sync.WaitGroup
1554
+ // wg.Add(2)
1551
1555
1552
1556
holders := make (map [string ]int )
1553
1557
tokensByHolder := make (map [string ][]int64 )
1554
- go func (tokenIds []* big.Int ) {
1555
- for _ , tokenId := range tokenIds {
1556
- owner , err := nekoInstance .OwnerOf (& bind.CallOpts {}, tokenId )
1557
- if err != nil {
1558
- e .log .Errorf (err , "[GetNekoHolders] failed to get balance of %d in chain %s" , tokenId .Int64 (), col .ChainID )
1559
- continue
1560
- }
1561
-
1562
- k := strings .ToLower (owner .Hex ())
1563
- holders [k ]++
1564
- tokensByHolder [k ] = append (tokensByHolder [k ], tokenId .Int64 ())
1558
+ // go func(tokenIds []*big.Int) {
1559
+ tokenIds := unstakings
1560
+ for _ , tokenId := range tokenIds {
1561
+ owner , err := tokenTracker .OwnerOf (& bind.CallOpts {}, tokenId )
1562
+ if err != nil {
1563
+ e .log .Errorf (err , "[FetchHolders] failed to get balance of %d in chain %s" , tokenId .Int64 (), col .ChainID )
1564
+ continue
1565
1565
}
1566
- wg .Done ()
1567
- }(unstakings )
1566
+ e .log .Infof ("Token %d owner: %s" , tokenId .Int64 (), owner .Hex ())
1567
+
1568
+ k := strings .ToLower (owner .Hex ())
1569
+ holders [k ]++
1570
+ tokensByHolder [k ] = append (tokensByHolder [k ], tokenId .Int64 ())
1571
+ }
1572
+ // wg.Done()
1573
+ // }(unstakings)
1568
1574
1569
1575
stakers := make (map [string ]int )
1570
1576
tokensByStaker := make (map [string ][]int64 )
1571
- go func (tokenIds []* big.Int ) {
1572
- for _ , tokenId := range tokenIds {
1573
- staker , err := stakingInstance .Owners (& bind.CallOpts {}, tokenId )
1574
- if err != nil {
1575
- e .log .Errorf (err , "[GetNekoHolders ] stakingInstance.Owners() failed" )
1576
- continue
1577
- }
1578
-
1579
- k := strings .ToLower (staker .Hex ())
1580
- stakers [k ]++
1581
- tokensByStaker [k ] = append (tokensByStaker [k ], tokenId .Int64 ())
1582
- }
1583
- wg .Done ()
1584
- }(stakings )
1585
-
1586
- wg .Wait ()
1577
+ // go func(tokenIds []*big.Int) {
1578
+ // for _, tokenId := range tokenIds {
1579
+ // staker, err := stakingInstance.Owners(&bind.CallOpts{}, tokenId)
1580
+ // if err != nil {
1581
+ // e.log.Errorf(err, "[FetchHolders ] stakingInstance.Owners() failed")
1582
+ // continue
1583
+ // }
1584
+
1585
+ // k := strings.ToLower(staker.Hex())
1586
+ // stakers[k]++
1587
+ // tokensByStaker[k] = append(tokensByStaker[k], tokenId.Int64())
1588
+ // }
1589
+ // wg.Done()
1590
+ // }(stakings)
1591
+
1592
+ // wg.Wait()
1587
1593
1588
1594
evmAccs , err := e .ListAllWalletAddresses ()
1589
1595
if err != nil {
1590
- e .log .Error (err , "[GetNekoHolders ] ListAllWalletAddresses() failed" )
1596
+ e .log .Error (err , "[FetchHolders ] ListAllWalletAddresses() failed" )
1591
1597
return nil , err
1592
1598
}
1593
1599
@@ -1617,3 +1623,7 @@ func (e *Entity) ExistedNekoHolder(colId, addr string) bool {
1617
1623
existed , _ := e .repo .UserNFTBalance .IsExists (colId , addr )
1618
1624
return existed
1619
1625
}
1626
+
1627
+ func (e * Entity ) GetPodTownNFTBalances (collectionAddresses []string ) ([]model.PodTownUserNFTBalance , error ) {
1628
+ return e .repo .UserNFTBalance .GetPodTownUserNFTBalances (collectionAddresses )
1629
+ }
0 commit comments