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

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

<!--StartFragment-->

扩展的 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

} ,

//...

]

}

<!--EndFragment-->

  • 原创
  • 学分: 0
  • 分类: Solana
  • 标签:
点赞 0
收藏 0
分享

0 条评论

请先 登录 后评论
加密女士
加密女士
无代码发币平台