GTokenTool全网最好的代币发行工具平台
当前位置:首页 >> 加密百科 >> 如何通过一次 RPC 调用获取 NFT 余额

如何通过一次 RPC 调用获取 NFT 余额

admin 加密百科 55

概述

使用 RPC 请求获取钱包的 NFT 余额可能是一项麻烦且耗时的任务。使用传统方法(例如eth_call),需要发出许多请求、进行大量手动数据聚合以及付出大量努力才能获取所需数据。幸运的是,现在有了更好的替代方案:Moralis 的扩展 RPC 方法。 

但是我们的扩展 RPC 方法到底是什么?它们如何帮助您仅通过一个 RPC 请求获取 NFT 余额?要找到这些问题的答案,请阅读本文,我们将为您一一解答。让我们直接开始吧! 

Moralis 的下一代 RPC 节点 – 获取 NFT 余额的最佳方式

Moralis 是顶级下一代 RPC 节点的知名提供商。借助我们直观的用户界面,您只需单击几个按钮即可为所有主要链设置节点。一些受支持的链包括以太坊、Polygon、BNB 智能链 (BSC)、Optimism 和 Base。 

Moralis RPC 节点。

但是为什么您应该选择 Moralis 作为您的节点提供商?

  • 速度:响应时间仅为 70 毫秒,我们为速度设定了行业基准。 

  • 可靠性:我们的节点拥有令人印象深刻的 99.9% 的正常运行时间,为您提供顶级的可靠性。 

  • 安全:选择 Moralis 作为您值得信赖的 SOC 2 Type 2 合作伙伴来保护您公司的数据。 

除了高速、出色的可靠性和企业级安全性之外,Moralis 还提供扩展 RPC 方法。

但它们是什么?它们又是如何工作的? 

加入我们的下一部分来找出答案!

扩展的 RPC 方法

我们的扩展 RPC 方法让您能够轻松地通过 RPC 节点获取已解码的、人性化的数据。只需一次调用即可获得 NFT 余额、已解码的交易、代币价格、元数据等。因此,当利用我们的下一代节点时,您可以简化开发人员体验并通过 RPC 样式的请求轻松获取链上数据。 

Moralis 扩展 RPC 方法。

有哪些方法可用? 

  • eth_getNFTBalances获取钱包的 NFT 余额。 

  • eth_getNFTCollections获取钱包里的收藏品。

  • eth_getTransactions查询钱包原生交易历史记录。 

  • eth_getDecodedTransactions获取钱包的完整交易历史记录。 

  • eth_getTokenBalances获取钱包的 ERC-20 余额。

  • eth_getTokenMetadata获取ERC-20代币元数据。 

  • eth_getTokenPrice了解任何 ERC-20 代币的价格。 

总而言之,通过上述方法,您可以毫不费力地使用 RPC 样式的请求获取解码的、人类可读的数据。

eth_getNFTBalances– 通过一次 RPC 调用获取 NFT 余额的最简单方法

如果您正在寻找一种只需一次 RPC 调用即可轻松获取 NFT 余额的方法,该eth_getNFTBalances方法是您的首选。此方法提供了指定钱包的 NFT 的完整列表,其中包含元数据、地址、符号、集合数据等。因此,使用 RPC 节点获取钱包的 NFT 余额从未如此简单。 

被 NFT 和代币包围的钱包。

但这究竟是如何工作的?实际的响应是什么样的?要回答这些问题,请继续关注下一节,我们将带您完成一个完整的教程,教您如何仅通过一个 RPC 请求获取钱包的 NFT 余额! 

完整教程:通过一次 RPC 调用获取钱包的 NFT 余额

通过我们的扩展 RPC 方法和eth_getNFTBalances端点,您可以通过三个简单的步骤无缝获取 NFT 余额: 

  1. 注册 Moralis 并设置一个节点。

  2. 编写一个调用的脚本eth_getNFTBalances

  3. 运行代码。

然而,在我们开始之前,您需要处理一些先决条件。

先决条件

在开始本教程之前,请确保您已准备好以下内容: 

  • Node.js v14+

  • npm/yarn

步骤 1:注册 Moralis 并设置节点

点击右上角的“免费开始”按钮并注册一个 Moralis 免费帐户: 

红色箭头指向“免费开始”按钮。

登录后,进入”节点”选项卡,点击”+ 创建节点”来设置节点: 

红色箭头指向“节点”选项卡和“+ 创建节点”按钮。

选择“以太坊”,然后选择“主网”,然后单击“创建节点”: 

以太坊节点配置。

复制并保留其中一个节点 URL,因为下一步您将需要它: 

红色箭头指向 RPC 节点 URL 的复制按钮。

第 2 步:编写脚本调用eth_getNFTBalances

在集成开发环境 (IDE) 中创建一个文件夹,打开一个新终端,然后运行此命令来初始化新项目:

npm init

使用这些终端命令安装所需的依赖项:

npm 安装 node-fetch--save
npm 安装 moralis@moralisweb3/common-evm-utils

打开您的“package.json”文件并添加"type": "module"到列表中:

“type”:“module”在代码编辑器中突出显示。

新建“index.js”文件,添加以下代码:

从‘node-fetch’导入fetch
const选项 = {
方法:'POST'
标题:{
  接受:'application/json'
  ‘内容类型’ ‘应用程序/json’
}
主体:JSON.stringify {
  “jsonrpc” “2.0”
  “ID” 1
  “方法” “eth_getNFTBalances”
  “参数” [
    {
      “地址” “0xDc597929101c2DE50c97D43C8EA3A372Bf55fdc0”
      “限制” 10
    }
  ]
}
}
获取'YOUR_NODE_URL' ,选项
.then 响应= >响应.json
.then 响应= >控制台.log 响应
.catch ( err = > console . error ( err ) ) ;

替换YOUR_NODE_URL为您在第一步中复制的 URL,并配置address参数以适合您的要求:

红色箭头指向代码编辑器中的地址和YOUR_NODE_URL参数。

步骤 3:运行代码

在项目的根文件夹中运行此终端命令来执行脚本:

节点索引.js

通过运行脚本,您将收到指定地址拥有的所有代币的数组。响应包含每个元素的元数据、地址、符号、集合数据等。以下是示例响应:

{
 jsonrpc ' 2.0 '
 ID 1
 结果{
   //...
   结果[
         {
     数量' 1 '
     token_id ' 1919 '
     令牌地址'0xbd3531da5cf5857e7cfaa92426877b022e612cf8'
     合约类型'ERC721'
     所有者'0xdc597929101c2de50c97d43c8ea3a372bf55fdc0'
     last_metadata_sync ' 2024-08-25T23 35 51.384 Z '
     last_token_uri_sync ' 2024-08-25T23 35 50.893 Z '
     元数据' { “属性”:[ { “trait_type”:“背景” “value”:“薄荷” } { “trait_type”:“皮肤” “value”:“橄榄绿” } { “trait_type”:“身体” “value”:“高领粉色” } { “trait_type”:“脸” “value”:“眼罩” } { “trait_type”:“头部” “value”:“巫师帽” } ] “description”:“8888 只可爱的胖乎乎的企鹅在冰冻的 ETH 区块链上滑动。” , "image": "ipfs://QmNf1UsmdGaMbpatQ6toXSkzDpizaGmC9zfunCyoz1enD5/penguin/1919.png" , "name": "Pudgy Penguin #1919" } ' ,
     区块编号' 19754671 '
     区块数量null
     名称'PudgyPenguins'
     符号'PPG'
     token_hash : 'cbd8bd0901f422afb88e76615e3d2a1a'
     token_uri 'https : //ipfs.moralis.io : 2053 /ipfs/bafybeibc5sgo2plmjkq2tzmhrn54bk3crhnc23zd2msg4ea7a4pxrkgfna/ 1919 '
     minter_address :
     已验证的集合true
     可能的垃圾邮件false
     collection_logo 'https //i.seadn.io/gae/yNi-XdGxsgQCPpqSio4o31ygAV6wURdIdInWRcFIl46UjUQ1eV7BEndGe8L661OoG-clRi7EgInLX4LPu9Jfw4fq0bnVYHqg7RFi ?w = 500 &auto = format'
     collection_banner_image 'https //i.seadn.io/gcs/files/8a26e3de0f309089cbb1e5ab969fc0bc.png ?w= 500 &auto=format'
     }
     //...
   ]
 }
}

除了如何使用一次 RPC 调用获取 NFT 余额之外,还可以探索其他扩展的 RPC 方法

获取钱包的 NFT 余额只是使用我们的扩展 RPC 方法可以执行的众多操作之一。因此,让我们深入了解其他三种方法: 

  1. eth_getTransactions

  2. eth_getDecodedTransactions

  3. eth_getTokenBalances

eth_getTransactions

使用该eth_getTransactions方法,您现在只需一次调用即可轻松使用 RPC 节点获取钱包交易。这意味着您不再需要处理无休止的请求,从而为您提供更加简化的开发人员体验。以下是显示该方法实际运行的示例: 

从‘node-fetch’导入fetch
const选项 = {
方法:'POST'
标题:{
  接受:'application/json'
  ‘内容类型’ ‘应用程序/json’
}
主体:JSON.stringify {
  “jsonrpc” “2.0”
  “ID” 1
  “方法” “eth_getTransactions”
  “参数” [
    {
      “地址” “0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045”
      “限制” 100
    }
  ]
}
}
获取'YOUR_NODE_URL' ,选项
.then 响应= >响应.json
.then 响应= >控制台.log 响应
.catch ( err = > console . error ( err ) ) ;

运行上述脚本后,您将获得钱包过去原生交易的列表。此外,每笔交易都包含时间戳、地址标签、gas 价格等信息。它可能如下所示: 

{
 //...
   结果[
     {
       哈希'0xd89b02f289a08ae7b2feead06031fec20777bad8b73fc8d853f9040bc423a6c7'
       随机数' 0 '
       交易索引' 142 '
       发件人地址'0xda74ac6b69ff4f1b6796cddf61fbdd4a5f68525f'
       发件人地址标签''
       收件人地址'0xdac17f958d2ee523a2206206994597c13d831ec7'
       to_address_label : 'Tether USD USDT '
       值' 0 '
       气体' 207128 '
       汽油价格' 17020913648 '
       输入'0xa9059cbb000000000000000000000000028c6c06298d514db089934071355e5743bf21d600000000000000000000000000000000000000000000000000000000017a1df1700'
       收据累计使用气体量' 8270587 '
       收据气体使用量' 41309 '
       收据合同地址: null ,
       收据根: null
       收据状态' 1 '
       block_timestamp ' 2023-01-22T15 00 11.000 Z '
       区块编号' 16463098 '
       块哈希'0x2439330d0a282f9a6464b0aceb9f766ac4d7b050c048b4a1322b48544c61e01d'
       交易费用' 0.000703116921885232 '
     }
     //...
   ]
 }
}

eth_getDecodedTransactions

该方法允许你使用 RPC 节点eth_getDecodedTransactions轻松获取解码的钱包历史记录。只需一个请求,你就可以无缝获取任何钱包的完整历史记录,包括原生交易、ERC-20 转账、NFT 转账等。以下是展示实际工作原理的 脚本:eth_getDecodedTransactions

从‘node-fetch’导入fetch
const选项 = {
方法:'POST'
标题:{
  接受:'application/json'
  ‘内容类型’ ‘应用程序/json’
}
主体:JSON.stringify {
  “jsonrpc” “2.0”
  “ID” 1
  “方法” “eth_getDecodedTransactions”
  “参数” [
    {
      “地址” “0xda74Ac6b69Ff4f1B6796cdDf61fBDd4A5f68525f”
    }
  ]
}
}
获取'YOUR_NODE_URL' ,选项
.then 响应= >响应.json
.then 响应= >控制台.log 响应
.catch ( err = > console . error ( err ) ) ;

执行上述脚本后,您将获得钱包的完整历史记录。此外,每笔交易都包含类别标签、事件摘要、地址标签和其他有用信息。以下是示例响应: 

{
 //...
   “结果”:[
     {
       “区块哈希”:“0x660274d577cd20b0b82c1bff5f3c5641ba6027544e005f9256d5add9c7447920”
       “区块编号”:“19868695”
       “block_timestamp”:“2024-05-14T14:00:23.000Z”
       “来自地址”:“0xda74ac6b69ff4f1b6796cddf61fbdd4a5f68525f”
       “from_address_label”:null
       “from_address_entity”:null
       “from_address_entity_logo”:null
       “to_address”:“0xdac17f958d2ee523a2206206994597c13d831ec7”
       "to_address_label": "泰达币 (USDT)" ,
       “to_address_entity”:null
       "to_address_entity_logo": null
       “气体”:“55331”
       “gas_price”:“13623172301”
       “哈希”:“0xc565260238f59fc3f35b74f3011375c7d637db9b075f77d342c30d19f946272e”
       “随机数”:“14”
       “receipt_cumulative_gas_used”:“13917979”
       “receipt_gas_used”:“41309”
       "receipt_status": "1" ,
       “交易费用”:“0.000562759624582009”
       “交易索引”:“75”
       “值”:“0”
       “receipt_contract_address”:
       "nft_transfers": [ ]复制代码
       “erc20_transfers”:[
         {
           “token_name”:“Tether USD”
           “token_symbol”:“USDT”
           “token_logo”:“https://logo.moralis.io/0x1_0xdac17f958d2ee523a2206206994597c13d831ec7_3282f332c2ac2948929f01fe7d921c51”
           “token_decimals”:“6”
           “来自地址”:“0xda74ac6b69ff4f1b6796cddf61fbdd4a5f68525f”
           “from_address_entity”:null
           “from_address_entity_logo”:null
           “from_address_label”:null
           “to_address”:“0x28c6c06298d514db089934071355e5743bf21d60”
           "to_address_label": "币安14" ,
           "to_address_entity": "币安" ,
           “to_address_entity_logo”:“https://entities-logos.s3.us-east-1.amazonaws.com/binance.png”
           “地址”:“0xdac17f958d2ee523a2206206994597c13d831ec7”
           “日志索引”:338
           “值”:“50000000000”
           “possible_spam”:false
           “verified_contract”:true
           “方向”:“发送”
           “值格式”:“50000”
         }
       ]
       "method_label": "转移" ,
       "native_transfers": [ ]
       “summary”:“已向币安14发送50,000 USDT”
       “possible_spam”:false
       “类别”:“令牌发送”
     }
     //...
   }
 ]
}

eth_getTokenBalances

使用 Moralis 的eth_getTokenBalances方法,您可以轻松使用 RPC 节点获取 ERC-20 代币余额。这意味着您不再需要发出多个请求并自行拼凑数据。只需一个请求,您就可以获得所需的所有信息。以下是展示该方法的示例:

从‘node-fetch’导入fetch
const选项 = {
方法:'POST'
标题:{
  接受:'application/json'
  ‘内容类型’ ‘应用程序/json’
}
主体:JSON.stringify {
  “jsonrpc” “2.0”
  “ID” 1
  “方法” “eth_getTokenBalances”
  “参数” [
    {
      “地址” “0xcB1C1FdE09f811B294172696404e88E658659905”
    }
  ]
}
}
获取'YOUR_NODE_URL' ,选项
.then 响应= >响应.json
.then 响应= >控制台.log 响应
.catch ( err = > console . error ( err ) ) ;

调用上述脚本可为您提供指定地址的 ERC-20 代币余额。此外,列表中的所有代币都将添加徽标、小数、垃圾邮件指示器、缩略图等。以下是示例响应: 

{
 //...
 结果[
   {
     令牌地址'0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2'
     名称'包裹以太'
     符号'WETH'
     小数18
     徽标'https //logo.moralis.io/0x1_0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2_a578c5277503e547a072ae32517254ca'
     缩略图'https //logo.moralis.io/0x1_0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2_a578c5277503e547a072ae32517254ca'
     余额' 10000000000000000 '
     可能的垃圾邮件false
     已验证合同true
     总供应量' 2746607222348759943423350 '
     总供应量格式' 2746607.22234875994342335 '
     占总供应量的百分比3.64085549569e-7
   }
   //...
 ]
}

 深入了解 Moralis 的 Web3 API

Moralis 是业界领先的 Web3 数据提供商,除了我们的扩展 RPC 方法外,我们还提供一套全面的 Web3 API,例如 Wallet API、Token API、Streams API 等。借助 Moralis,您可以在一个地方获得所有加密数据。

但是什么使得我们的 Web3 API 如此独特?

  • 一次调用 – 所有数据:我们的 API 以结果为导向,用更少的请求提供更多数据。只需一次调用即可获取代币余额、钱包的完整历史记录、NFT 元数据等。

  • 跨链: Moralis 提供跨主要链的全部功能,包括以太坊、Polygon、Optimism、BSC、Base 等。

  • 安全性和可靠性: Moralis 已通过 SOC 2 Type 2 认证,彰显了我们致力于提供企业级安全性和可靠性的承诺。

要了解有关我们领先的开发工具套件的更多信息,让我们深入了解我们的三个突出的 API!

钱包 API

如果您想要构建钱包或将钱包功能集成到您的 dapp 中,Moralis 的 Wallet API 是终极工具。借助此一流界面,您可以轻松获得钱包的完整历史记录、代币余额、NFT 余额、净值、盈利能力等。 

钱包 API。

为了突出此工具的强大功能,让我们来看看我们的一个端点的实际运行情况。例如,获取钱包净值是多么容易: 

从‘node-fetch’导入fetch
const选项 = {
方法:'GET'
标题:{
  接受:'application/json'
  'X-API 密钥' 'YOUR_API_KEY'
}
}
获取'https://deep-index.moralis.io/api/v2.2/wallets/0x1f9090aaE28b8a3dCeaDf281B0F12828e676c326/net-worth' ,选项
.then 响应= >响应.json
.then 响应= >控制台.log 响应
.catch ( err = > console . error ( err ) ) ;

作为调用上述脚本的回报,您将获得指定钱包的总净值以及各个链的明细。以下是示例响应: 

{
 总净资产' 9906.41 '
 鏈接: [
   {
     链'eth'
     本机余额' 3138317588449827590 '
     本机平衡格式' 3.13831758844982759 '
     native_balance_usd ' 8069.70 '
     token_balance_usd : ' 1836.70 ' ,
     净值美元' 9906.41 '
   }
 ]
}

因此,如果您正在寻找令人印象深刻的功能、顶级灵活性和无与伦比的可扩展性,请务必查看 Wallet API! 

代币 API

Token API 是您获取 ERC-20 数据的首选工具。这个一流的界面涵盖了所有最大链上的所有代币,包括稳定币(如 USDC)、表情包币(如 Shiba Inu)以及介于两者之间的所有代币。 

令牌 API。

使用 Token API,您可以无缝获取代币余额、价格、转账、元数据等。为了展示此工具的可访问性,这里有一个示例脚本,向您展示获取代币价格是多么容易: 

从‘node-fetch’导入fetch
const选项 = {
方法:'GET'
标题:{
  接受:'application/json'
  'X-API 密钥' 'YOUR_API_KEY'
}
}
获取'https://deep-index.moralis.io/api/v2.2/erc20/0x7d1afa7b718fb893db30a3abc0cfc608aacfebb0/price?chain=eth&include=percent_change' ,选项
.then 响应= >响应.json
.then 响应= >控制台.log 响应
.catch ( err = > console . error ( err ) ) ;

作为调用上述脚本的回报,您将获得以本国货币和美元计价的代币价格。它可能如下所示: 

{
 tokenName 'Matic Token'
 代币符号: 'MATIC' ,
 tokenLogo 'https : //logo.moralis.io/0x1_0x7d1afa7b718fb893db30a3abc0cfc608aacfebb0_89c931b3fcf74fe39db7a195bf8a3aa5'
 tokenDecimals : ' 18 ' ,
 本地价格{
   值' 172371569340575 '
   小数18
   名称'Ether'
   符号'ETH'
   地址'0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2'
 }
 美元价格0.44344021067602557
 美元价格格式' 0.443440210676025551 ' ,
 交易所名称: 'Uniswap v3' ,
 交易所地址'0x1F98431c8aD98523631AE4a59f267346ea31F984'
 令牌地址'0x7d1afa7b718fb893db30a3abc0cfc608aacfebb0'
 价格最后更改时间' 20634460 '
 区块时间戳' 1724937179000 '
 可能的垃圾邮件false
 已验证合同true
 对地址'0x290a6a7460b308ee3f19023d2d00de604bcf5b42'
 对总流动性美元' 1592811.47 '
 ‘24 小时百分比变化’ -1.1406370639269006
 安全评分55
}

如果您希望构建 DEX、代币浏览器或其他类似项目的平台,请务必开始使用代币 API! 

NFT API

Moralis 的 NFT API 是 NFT 数据的终极接口,涵盖超过 300 万个 NFT 集合,并涵盖所有主要链,包括以太坊、Polygon、BSC、Base 等。有了这个一流的界面,你只需要几行代码就可以获得 NFT 余额、元数据、价格等。 

NFT API。

为了凸显此工具的强大功能,请查看下面的示例脚本,向您展示获取 NFT 元数据是多么容易: 

从‘node-fetch’导入fetch
const选项 = {
方法:'GET'
标题:{
  接受:'application/json'
  'X-API 密钥' 'YOUR_API_KEY'
},
};
获取(' https://deep-index.moralis.io/api/v2.2/nft/0xb47e3cd837dDF8e4c57F05d70Ab865de6e193BBB/200?chain=eth ',选项)
.then 响应= >响应.json
.then 响应= >控制台.log 响应
.catch ( err = > console . error ( err ) ) ;

作为执行上述代码的回报,您将获得指定 NFT 的元数据,其中包含地址、收藏数据、稀有性指标等。它可能看起来像这样: 

{
 数量' 1 '
 token_id : ' 200 ' ,
 令牌地址'0xb47e3cd837ddf8e4c57f05d70ab865de6e193bbb'
 contract_type 'CRYPTOPUNKS'
 所有者'0xa858ddc0445d8131dac4d1de01f834ffcba52ef1'
 last_metadata_sync ' 2024-08-29T17 03 32.616 Z '
 last_token_uri_sync ' 2024-08-29T17 03 32.302 Z '
 元数据' { “ image”:“ https://www.larvalabs.com/cryptopunks/cryptopunk200.png” “ name”:“ CryptoPunk 200” “ attribute”:[ “ Wild Hair” ] “ description”:“ Female” } '
 区块编号' 14401717 '
 区块数量null
 名称'CRYPTOPUNKS'
 符号'Ͼ'
 token_hash : 'dec72aa6108829bae90dc826a9204c24'
 token_uri : ‘无效的 uri’
 minter_address :
 稀有度等级469
 稀有度百分比4.69
 rarity_label '前5 %'
 已验证的集合true
 可能的垃圾邮件false
 collection_logo 'https //i.seadn.io/gae/BdxvLseXcfl57BiuQcQYdJ64v-aI8din7WPk0Pgo3qQFhAUH-B6i-dCqqc_mCkRIzULmwzwecnohLhrcH8A9mpWIZqA7ygc52Sr81hE ?w = 500 &auto = format'
 collection_banner_image : ' https://i.seadn.io/gae/48oVuDyfe_xhs24BC2TTVcaYCX7rrU5mpuQLyTgRDbKHj2PtzKZsQ5qC3xTH4ar34wwAXxEKH8uUDPAGffbg7boeGYqX6op5vBDcbA?w=500&auto=format '
}

使用 NFT API,您可以将 NFT 数据无缝集成到您的 NFT 市场、Web3 游戏或其他需要此信息的平台! 

作者:GTokenTool一键发币平台

交流群:https://t.me/+Kz4u3xoDpFo3ZWY1

同类推荐