Untitled

 avatar
unknown
plain_text
a year ago
1.7 kB
7
Indexable
  static async handleTBACreated({ event }) {
    const token_address = event.data[0];
    const token_id = Utils.feltToInt({
      low: event.data[1],
      high: event.data[2],
    });

    const provider = new RpcProvider({
      nodeUrl: CRAWLER.URL,
    });

    const { abi: nft_contract_abi } = await provider.getClassAt(token_address);
    if (!nft_contract_abi) return null;

    const nft_contract_view = new Contract(nft_contract_abi, token_address, provider);
    const token_owner = await nft_contract_view.owner_of({
      // token id
      low: event.data[1],
      high: event.data[2],
    });
    const token_uri_array = await nft_contract_view.token_uri({
      low: event.data[1],
      high: event.data[2],
    });
    const token_uri = token_uri_array.map(Utils.feltToStr).join('');
    const { data: nft_metadata } = await axios.get(token_uri);

    const { abi: registry_contract_abi } = await provider.getClassAt(process.env.REGISTRY_CONTRACT);
    if (!registry_contract_abi) return null;
    const registry_contract_view = new Contract(registry_contract_abi, process.env.REGISTRY_CONTRACT, provider);
    const tba_address = await registry_contract_view.get_account(
      process.env.TBA_CLASSHASH,
      token_address,
      // token id
      {
        low: event.data[1],
        high: event.data[2],
      }
    )

    await Databases.saveTBA({
      tba_address: '0x' + tba_address.toString(16),
      contract_address: token_address,
      token_id: token_id,
      owner_address: '0x' + token_owner.toString(16),
      tba_name: nft_metadata.name,
      tba_image: nft_metadata.image
    })
  }
Editor is loading...
Leave a Comment