给定一个代币铸造地址,我正在寻找一种方法来访问 ERC721 代币的元数据。 @solana/web3.js 中有 API 吗?
Solana 将代币元数据存储在从原始代币地址派生的地址中https://docs.solana.com/developing/programming-model/calling- Between-programs#hash-based- generated-program-addresses
参考代码是 Rust 的,这里是来自的实现@solana/web3.js
.
(source)
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`);
}
请注意,元数据使用 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)