如何构建 Solana 代币仪表板

  • 想样
  • 发布于 5天前
  • 阅读 56

什么是RPC方法?RPC是“远程过程调用”的缩写,是指允许一个软件系统调用和请求其他设备上的软件服务的通信协议。在区块链领域,RPC协议使dapp能够与以太坊、Optimism和Base等区块链网络进行交互。有多种标准化的RPC协议,其中JSON-RPC就是一个突出

<!--StartFragment-->

什么是 RPC 方法?

RPC 是“远程过程调用”的缩写,是指允许一个软件系统调用和请求其他设备上的软件服务的通信协议。在区块链领域,RPC 协议使 dapp 能够与以太坊、Optimism 和 Base 等区块链网络进行交互。

文本:“什么是 RPC 方法?”

有多种标准化的 RPC 协议,其中 JSON-RPC 就是一个突出的例子。它具有许多预定义的 RPC 方法,例如[eth_getProof],可简化区块链交互。这些 RPC 方法使无缝读取和写入链上数据成为可能。

以下是一些突出的方法:

  • eth_getTransactionByHash通过哈希返回有关交易的数据。
  • eth_getChainId返回当前链ID。
  • eth_gasPrice返回当前的 gas 价格。
  • eth_getBalance返回地址的余额。
  • eth_getBlockNumber返回最近的区块编号。

然而,虽然标准 RPC 方法简化了区块链交互,但它们也有一些你应该考虑的重大限制。例如,它们不能直接提供代币价格。要获取这些数据,你需要发出多个请求,甚至需要第三方提供商的参与。

为了解决这个问题并提供更加无缝的开发人员体验,我们推出了下一代 RPC 节点!

介绍 Moralis 的下一代 RPC 节点 – 获取代币价格的最简单方法

Moralis 是一家知名的 RPC 节点提供商,为您提供下一代节点,以简化您的开发人员体验。借助我们直观的点击界面,您可以轻松地为所有主要链设置 RPC 节点,包括以太坊、Optimism、Base、Polygon、BNB 智能链 (BSC) 等。 

Moralis 的 RPC 节点。

但是什么使得我们的 RPC 节点如此特别呢? 

  • 速度:我们设定了行业速度基准,响应时间为 70 毫秒。 
  • 可靠性: Moralis 的节点拥有令人印象深刻的 99.9% 的正常运行时间,确保您毫无困难地获得所需的所有数据。 
  • 扩展的 RPC 方法:使用我们的扩展 RPC 方法,您可以通过 RPC 样式的请求轻松查询解码的、人类可读的数据。 

体验具有闪电般快速的响应时间、无与伦比的可靠性和强大的扩展 RPC 方法的下一代 RPC 节点! 

扩展的 RPC 方法

借助 Moralis 的扩展 RPC 方法,您现在可以通过 RPC 样式的请求无缝获取已解码的、人类可读的数据。只需一次调用,您就可以获取 NFT 余额、ERC-20 余额、已解码的钱包历史记录、元数据、代币价格等等。因此,使用 Moralis 时,您可以简化开发人员体验并更快、更高效地构建 dapp。 

Moralis 的扩展 RPC 方法。

以下是所有可用的方法: 

  • eth_getTokenPrice获取任何 ERC-20 代币的价格。
  • eth_getNFTBalances获取钱包的 NFT 余额。
  • eth_getNFTCollections获取钱包持有的所有收藏品。
  • eth_getTransactions查询钱包的原生交易。 
  • eth_getDecodedTransactions获取钱包的完整交易历史记录。
  • eth_getTokenBalances查询钱包的ERC-20余额。
  • eth_getTokenMetadata获取 ERC-20 代币的元数据。

总之,上述方法让您可以通过 RPC 风格的请求无缝访问已解码的、人类可读的数据。 

eth_getTokenPrice– 通过一次 RPC 调用获取代币价格

使用我们的eth_getTokenPrice方法,您现在可以轻松无缝地获取代币价格。您只需一个 RPC 请求,即可收到以链的原生加密货币和美元计价的任何代币的价格。因此,使用 RPC 节点获取代币价格从未像与 Moralis 合作时那样容易。 

带有代币价格图表的以太坊徽标。

但是该方法如何eth_getTokenPrice工作?响应究竟是什么样的?如果您正在寻找这些问题的答案,请继续阅读,我们将指导您完成一个全面的教程,了解如何通过三个简单的步骤使用 RPC 节点获取代币价格! 

三步教程:如何使用 RPC 节点获取代币价格

现在我们将向您展示如何使用 RPC 节点获取代币价格。得益于我们的扩展 RPC 方法的可访问性,您可以通过三个简单的步骤获取这些数据:

  1. 注册 Moralis 并设置节点
  2. 编写脚本调用eth_getTokenPrice
  3. 运行代码

然而,在继续之前,您需要满足一些先决条件! 

先决条件

如果尚未准备好,请确保在继续之前已准备好以下内容: 

  • Node.js v14+
  • npm/yarn

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

点击右上角的“免费开始”按钮注册 Moralis 账户: 

指向右上角“免费开始”的箭头。

登录,导航到“节点”选项卡,然后点击“+ 创建节点”: 

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

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

节点配置。

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

红色箭头指向以太坊节点 URL 的复制按钮。

第 2 步:编写脚本调用eth_getTokenPrice

在您喜欢的 IDE 中设置一个新文件夹,并使用以下终端命令初始化一个项目: 

npm init

通过在终端中运行以下命令来安装所需的依赖项: 

npm 安装 node-fetch--save

npm 安装 moralis\@moralisweb3/common-evm-utils

添加”type”: ”module”到您的”package.json”文件: 

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

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

从‘node-fetch’导入fetch ;

const选项 = {

方法:'POST' ,

标题:{

接受:'application/json' ,

‘内容类型’ :‘应用程序/json’

} ,

主体:JSON.stringify ({

“jsonrpc” :“2.0” ,

“ID” :1 ,

“方法” :“eth_getTokenPrice” ,

“参数” :[

{

“地址” :“0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48” ,

“包括” :“百分比变化”

}

]

} )

} ;

获取('YOUR_NODE_URL' ,选项)

.then (响应= >响应.json ())

.then (响应= >控制台.log (响应))​

.catch ( err = > console . error ( err ) ) ;

替换YOUR_NODE_URL为初始步骤中复制的 URL,并调整address参数以适合您的查询: 

代码配置。

步骤 3:运行代码

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

节点索引.js

作为回报,您将获得以链的本币和美元计价的指定代币的价格。此外,响应还包含代币徽标、符号、价格随时间的变化等内容。以下是它可能的样子: 

{

jsonrpc :' 2.0 ' ,

ID :1 ,

结果:{

tokenName : 'USD Coin' ,

代币符号: 'USDC' ,

令牌标志:'https : //logo.moralis.io/0x1_0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48_032b6f94fd2bd5af6c065def140109e9' ,

标记小数点后的数字:' 6 ' ,

本地价格:{

值:' 399015837290761 ' ,

小数:18 ,

名称:'Ether' ,

符号:'ETH' ,

地址:'0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2'

} ,

美元价格:0.9998033934658264 ,

美元价格格式:' 0.999803393465826414 ' ,

‘24 小时百分比变化’ :‘ -0.023636130935194257 ’ ,

交易所名称: 'Uniswap v3' ,

交易所地址:'0x1F98431c8aD98523631AE4a59f267346ea31F984' ,

令牌地址:'0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48' ,

价格最后更改时间:' 20669844 ' ,

可能的垃圾邮件:false ,

已验证合同:true ,

对地址:'0x88e6a0c2ddd26feeb64f039a2c41296fcb3f5640' ,

对总流动性美元:' 165658281.27 '

}

}

就是这样;您现在知道如何使用 RPC 节点获取代币价格! 

代币价格的使用案例

代币价格在各种 dapp 中都有使用。以下是三个突出的例子:

  • Web3 钱包:Web3 钱包通常允许用户买卖加密货币。因此,为了提供无缝体验,这些平台需要访问并显示准确的代币价格。
  • 投资组合追踪器:投资组合追踪器为用户提供其数字资产的概览。为了准确呈现业绩,他们需要了解当前的加密货币价格。
  • 税务平台:税务平台需要了解历史和当前的代币价格才能生成准确的税务报告。

代币价格用例。

这些只是几个例子。代币价格数据对于构建去中心化交易所 (DEX)、代币分析平台等也至关重要。

除了如何使用 RPC 节点获取代币价格之外,还深入研究其他扩展的 RPC 方法

现在您已经知道如何使用节点获取代币价格,让我们来探索其他一些扩展 RPC 方法。更具体地说,我们将仔细研究以下三个方法: 

  1. eth_getTransactions
  2. eth_getTokenBalances
  3. eth_getNFTBalances

eth_getTransactions

借助,您现在可以[使用 RPC 节点]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_getTokenBalances

使用我们的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

} ,

//...

]

}

eth_getNFTBalances

使用该方法,您[只需一次 RPC 调用eth_getNFTBalances即可轻松获取 NFT 余额。轻松获取并将 NFT 余额集成到您的 dapp 中。以下是展示其工作原理的示例脚本:

从‘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 ) ) ;

作为调用端点的回报eth_getNFTBalances,您将获得指定钱包的 NFT 余额。此外,响应还包含地址、收集数据、元数据等: 

{

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'

} ,

//...

]

}

}

<!--EndFragment-->

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

0 条评论

请先 登录 后评论
想样
想样
江湖只有他的大名,没有他的介绍。