Advertisement
ynifor

Untitled

Nov 15th, 2024
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 1.73 KB | None | 0 0
  1. func mint(
  2.     ctx context.Context,
  3.     wallet *tonWallet.Wallet,
  4.     api ton.APIClientWrapped,
  5.     collectionAddr *address.Address,
  6.     owner *address.Address,
  7. ) (*address.Address, int64, error) {
  8.     collectionClient := nft.NewCollectionClient(api, collectionAddr)
  9.     collectionData, err := collectionClient.GetCollectionData(ctx)
  10.     if err != nil {
  11.         return nil, 0, fmt.Errorf("GetCollectionData: %w", err)
  12.     }
  13.  
  14.     if collectionData.NextItemIndex.Int64() > max {
  15.         return nil, collectionData.NextItemIndex.Int64(), nil
  16.     }
  17.  
  18.     nftAddr, err := collectionClient.GetNFTAddressByIndex(ctx, collectionData.NextItemIndex)
  19.     if err != nil {
  20.         return nil, 0, fmt.Errorf("GetNFTAddressByIndex: %w", err)
  21.     }
  22.  
  23.     mintData, err := collectionClient.BuildMintPayload(
  24.         collectionData.NextItemIndex,
  25.         owner,
  26.         tlb.MustFromTON("0.01"),
  27.         &nft.ContentOffchain{
  28.             URI: fmt.Sprint(collectionData.NextItemIndex) + ".json",
  29.         },
  30.     )
  31.     if err != nil {
  32.         return nil, 0, fmt.Errorf("BuildMintPayload: %w", err)
  33.     }
  34.  
  35.     mintMsg := tonWallet.SimpleMessage(collectionAddr, tlb.MustFromTON("0.025"), mintData)
  36.     if err := wallet.Send(ctx, mintMsg, true); err != nil {
  37.         return nil, 0, fmt.Errorf("Send: %w", err)
  38.     }
  39.  
  40.     // Additional check
  41.     // itemClient := nft.NewItemClient(api, nftAddr)
  42.     // newData, err := retry.WithValueTon(ctx, func() (*nft.ItemData, error) {
  43.     //  d, err := itemClient.GetNFTData(ctx)
  44.     //  if err != nil {
  45.     //      return nil, err
  46.     //  }
  47.     //  if d == nil {
  48.     //      return nil, fmt.Errorf("nil")
  49.     //  }
  50.     //  return d, nil
  51.     // })
  52.     // if err != nil {
  53.     //  return nil, fmt.Errorf("GetNFTData: %w", err)
  54.     // }
  55.     // if newData.Index != collectionData.NextItemIndex {
  56.     //  panic("not minted")
  57.     // }
  58.  
  59.     return nftAddr, collectionData.NextItemIndex.Int64(), nil
  60. }
  61.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement