用公共 RPC 调用 ownerOf / balanceOf。这是技术核验,不是官方认证;持有 DualPool NFT 不代表预热授权或平台背书。
// Minimal ethers v6 + public BSC JSON-RPC
import { Contract, JsonRpcProvider } from "ethers";
const RPC = "https://bsc-dataseed.bnbchain.org";
const ABI = [
"function ownerOf(uint256 tokenId) view returns (address)",
"function balanceOf(address owner) view returns (uint256)",
"function totalSupply() view returns (uint256)",
];
const provider = new JsonRpcProvider(RPC, 56);
const nft = new Contract("0x3511530ef37d7eb9884026840e76f411c26f8403", ABI, provider);
export async function ownsToken(wallet, tokenId) {
const owner = await nft.ownerOf(tokenId);
return owner.toLowerCase() === wallet.toLowerCase();
}
export async function balanceOf(wallet) {
return await nft.balanceOf(wallet); // bigint
}
// Example:
// await ownsToken("0xYourWallet", 1n);
// await balanceOf("0xYourWallet");
纯 JSON-RPC(无库)示例 — ownerOf(1):
curl -s https://bsc-dataseed.bnbchain.org -H 'content-type: application/json' -d '{
"jsonrpc":"2.0","id":1,"method":"eth_call",
"params":[{
"to":"0x3511530ef37d7eb9884026840e76f411c26f8403",
"data":"0x6352211e0000000000000000000000000000000000000000000000000000000000000001"
},"latest"]
}'
# result 末 40 hex = owner address
ContAnchor · 实时供给请用合约只读方法 totalSupply / *Remaining(BscScan 或公共 RPC)