@solana/web3.js 有 ERC721 元数据的 API 吗?

chr*_*ris 4 metadata token web3js solana

给定一个代币铸造地址,我正在寻找一种方法来访问 ERC721 代币的元数据。@solana/web3.js 中有 API 吗?

Kar*_*eji 7

Solana 将代币元数据存储在从原始代币地址派生的地址(根据 https://docs.solana.com/developing/programming-model/calling- Between-programs#hash-based- generated-program-addresses)

参考代码是 Rust 的,这里是来自 的实现@solana/web3.js
来源

  static async findProgramAddress(
    seeds: Array<Buffer | Uint8Array>,
    programId: PublicKey,
  ): Promise<[PublicKey, number]> {
    let nonce = 255;
    let address;
    while (nonce != 0) {
      try {
        const seedsWithNonce = seeds.concat(Buffer.from([nonce]));
        address = await this.createProgramAddress(seedsWithNonce, programId);
      } catch (err) {
        if (err instanceof TypeError) {
          throw err;
        }
        nonce--;
        continue;
      }
      return [address, nonce];
    }
    throw new Error(`Unable to find a viable program address nonce`);
  }
Run Code Online (Sandbox Code Playgroud)

请注意,元数据使用borsh 库以 base64 进行编码,按照https://docs.metaplex.com/nft-standard#token-metadata-program

这是仅使用 borsh 和 @solana/web3.js 检索和解析元数据的简洁实现 https://gist.github.com/dvcrn/c099c9b5a095ffe4ddb6481c22cde5f4

最后,MagicDen 有一个返回元数据的端点: https://api-mainnet.magiceden.io/rpc/getNFTByMintAddress/DugthRKbQZRMcDQQfjnj2HeSjz2VARPC8H9abxdNK2SS

  • 或者使用metaplex js库 - https://docs.metaplex.com/development/clients/js-sdk/getting-started (2认同)