获取给定 NFT 合约的当前代币所有者

Get Current Token Owner for a given NFT Contract

我正在尝试交叉引用我的本地数据库并确认 NFT 令牌的所有权。我有合约地址和用户钱包地址,我正在尝试获取该用户为该给定合约拥有的所有当前代币的 returned 数组。如果我访问 etherscan 合约页面,我可以手动输入给定钱包的地址并获得我需要的地址:

是否有一个简单的 API 可以用来获取合同下所有代币的当前所有者?我在下面尝试了来自 Etherscan 的 api,但这不是 return 当前所有权,而是交易列表。

https://api-rinkeby.etherscan.io/api?module=account&action=tokennfttx&contractaddress=0x1481e948f2cc7886D454532714D011A7D8e9ec2e&address=0xe93FBC84f5743Ec68a03260f4A9A23c708593d02&page=1&offset=10000&startblock=0&endblock=27025780&sort=asc&apikey=$myapikey

尝试使用 OpenSea 的 Retrieving assets 端点。

const { data } = await axios.get(
    `https://api.opensea.io/api/v1/collections?asset_owner=${userAddress}`,
    {
        headers: {
            Accept: "application/json",
            "X-API-KEY": process.env.OPENSEA_API,
        },
    }
);

此 returns 给定用户资产的数组。

另一种选择是 Get a list of 'ERC721 - Token Transfer Events' by Address 使用 Etherscan API

const tokenTransfersByAddress = async (contractaddress, address) => {
        try {
            const options = {
                method: "GET",
                url: "https://api.etherscan.io/api",
                params: {
                    module: "account",
                    action: "tokennfttx",
                    contractaddress,
                    address,
                    page: "1",
                    offset: "10",
                    sort: "asc",
                    apikey: process.env.ETHERSCAN,
                },
            };

            const { data } = await axios.request(options);
            return data.result;
        } catch (error) {
            console.log(error);
            return [];
        }
    };

这是给定用户进行的 returns 一组交易。

希望对您有所帮助!