在之前的文章中,我们学会了如何通过命令行操作钱包,包括新建账户,查询余额,转账等核心操作。在这篇文章中,我们将讨论如何通过RPC远程调用获取Solana公链信息

1.节点相关接口

获取集群节点信息

curl https://api.testnet.solana.com -X POST -H "Content-Type: application/json" -d '
    {
        "jsonrpc": "2.0", "id": 1,
        "method": "getClusterNodes"
    }
    '

返回结果:

{
  "jsonrpc": "2.0",
  "result": [
    {
      "featureSet": 743568211, // 节点支持的特性集合,用于标识节点支持的特性和功能
      "gossip": "35.90.185.39:8000", // 节点的 Gossip 服务地址,用于传播消息和状态更新
      "pubkey": "Gp9R3ts3j9Akhmvyky8WCrUYRVdUhzTyct4M4WXz937d", // 节点的公钥,用于标识和验证节点身份
      "pubsub": "35.90.185.39:8900", // 节点的 PubSub 服务地址,用于发布和订阅消息
      "rpc": "35.90.185.39:8899", // 节点的 RPC 服务地址,用于与节点进行交互和查询
      "shredVersion": 503, // 节点的 Shred 版本,用于分片和传播区块的数据结构
      "tpu": "35.90.185.39:8003", // 节点的 TPU 服务地址,用于执行事务处理
      "tpuQuic": "35.90.185.39:8009", // 节点的 TPU Quic 服务地址,用于通过 QUIC 协议执行事务处理
      "version": "1.18.7" // 节点的 Solana 软件版本号,用于标识节点所运行的 Solana 软件的版本
    }
  ]
}

2. 区块相关接口

获取当前区块高度

curl https://api.testnet.solana.com -X POST -H "Content-Type: application/json" -d '
    {
        "jsonrpc":"2.0","id":1,
        "method":"getBlockHeight"
    }
    '

返回结果:

{
  "jsonrpc": "2.0",
  "result": 278287924, // 区块高度
  "id": 1
}

获取最近的Block Hash

curl https://api.testnet.solana.com -X POST -H "Content-Type: application/json" -d '
    {
        "id":1,
        "jsonrpc":"2.0",
        "method":"getLatestBlockhash",
        "params":[
        {
            "commitment":"processed"
        }
        ]
    }
    '

返回结果

{
  "jsonrpc": "2.0",
  "result": {
    "context": {
      "apiVersion": "1.18.4",
      "slot": 289997028
    },
    "value": {
      "blockhash": "6AN3deqvbfzwYot8W8iMETR7Ek11e29jPoibz8Gw1MKL",
      "lastValidBlockHeight": 278289671
    }
  },
  "id": 1
}

获取指定高度block的信息

curl https://api.testnet.solana.com -X POST -H "Content-Type: application/json" -d '
    {
        "jsonrpc": "2.0","id":1,
        "method":"getBlock",
        "params": [
            278289671,
            {
                "encoding": "jsonParsed",
                "maxSupportedTransactionVersion":0,
                "transactionDetails":"full",
                "rewards":false
            }
        ]
    }

返回结果

{
  "jsonrpc": "2.0",
  "result": {
    "blockHeight": 266588679,
    "blockTime": 1707482369,
    "blockhash": "W6x1uEJcEiJdnAeLZfujpWVMYTfTJjtjngyeU7Dai6Z",
    "parentSlot": 278289670,
    "previousBlockhash": "8bwQ1N5wcJrqxFZRL8n5drdUYQpHYbHwpNf1rSHs4daZ",
    "transactions": [
      {
        "meta": {
          "computeUnitsConsumed": 64956,
          "err": null,
          "fee": 5000,
          "innerInstructions": [
            {
              "index": 1,
              "instructions": [
                {
                  "accounts": [
                    "HXoZZBWv25N4fm2vfSKnHXTeDJ31qaAcWZe3ZKeM6dQv",
                    "3u6T92C2x18s39a7WNM8NGaQK1YEtstTtqamZGsLvNZN"
                  ],
                  "data": "6y43XFem5gjyytzPY3JPiGE3jsNhobnCxQTVsR3bTDuR",
                  "programId": "HEvSKofvBgfaexv23kMabbYqxasxU3mQ4ibBMEmJWHny",
                  "stackHeight": 2
                }
              ]
            }
          ],
          "logMessages": [
            "Program ComputeBudget111111111111111111111111111111 invoke [1]",
            "Program ComputeBudget111111111111111111111111111111 success",
            "Program cjg3oHmg9uuPsP8D6g29NWvhySJkdYdAo9D25PRbKXJ invoke [1]",
            "Program data: gjbLTR5rT6gV1swAAAN30/iLBm0GRKxe6y9hGtvvKCPLmscA16aVgw6AKe3At4NtAAAAAAAAAAAAAAAAAwAdxmUEAwECAAAAAAAAAAAAAAAAAAAAADL7EVgBAAAAvnAAAAAAAAA=",
            "Program HEvSKofvBgfaexv23kMabbYqxasxU3mQ4ibBMEmJWHny invoke [2]",
            "Program log: Instruction: Submit",
            "Program HEvSKofvBgfaexv23kMabbYqxasxU3mQ4ibBMEmJWHny consumed 4430 of 140117 compute units",
            "Program HEvSKofvBgfaexv23kMabbYqxasxU3mQ4ibBMEmJWHny success",
            "Program cjg3oHmg9uuPsP8D6g29NWvhySJkdYdAo9D25PRbKXJ consumed 64806 of 199850 compute units",
            "Program cjg3oHmg9uuPsP8D6g29NWvhySJkdYdAo9D25PRbKXJ success"
          ],
          "postBalances": [
            1032209313370,
            49054080,
            2616960,
            1141440,
            0,
            0,
            1141440,
            1
          ],
          "postTokenBalances": [],
          "preBalances": [
            1032209318370,
            49054080,
            2616960,
            1141440,
            0,
            0,
            1141440,
            1
          ],
          "preTokenBalances": [],
          "rewards": null,
          "status": {
            "Ok": null
          }
        },
        "transaction": {
          "message": {
            "accountKeys": [
              {
                "pubkey": "9YR7YttJFfptQJSo5xrnYoAw1fJyVonC1vxUSqzAgyjY",
                "signer": true,
                "source": "transaction",
                "writable": true
              },
              {
                "pubkey": "Ghm1a2c2NGPg6pKGG3PP1GLAuJkHm1RKMPqqJwPM7JpJ",
                "signer": false,
                "source": "transaction",
                "writable": true
              },
              {
                "pubkey": "HXoZZBWv25N4fm2vfSKnHXTeDJ31qaAcWZe3ZKeM6dQv",
                "signer": false,
                "source": "transaction",
                "writable": true
              },
              {
                "pubkey": "HEvSKofvBgfaexv23kMabbYqxasxU3mQ4ibBMEmJWHny",
                "signer": false,
                "source": "transaction",
                "writable": false
              },
              {
                "pubkey": "3u6T92C2x18s39a7WNM8NGaQK1YEtstTtqamZGsLvNZN",
                "signer": false,
                "source": "transaction",
                "writable": false
              },
              {
                "pubkey": "Sysvar1nstructions1111111111111111111111111",
                "signer": false,
                "source": "transaction",
                "writable": false
              },
              {
                "pubkey": "cjg3oHmg9uuPsP8D6g29NWvhySJkdYdAo9D25PRbKXJ",
                "signer": false,
                "source": "transaction",
                "writable": false
              },
              {
                "pubkey": "ComputeBudget111111111111111111111111111111",
                "signer": false,
                "source": "transaction",
                "writable": false
              }
            ],
            "instructions": [
              {
                "accounts": [],
                "data": "3DTZbgwsozUF",
                "programId": "ComputeBudget111111111111111111111111111111",
                "stackHeight": null
              },
              {
                "accounts": [
                  "Ghm1a2c2NGPg6pKGG3PP1GLAuJkHm1RKMPqqJwPM7JpJ",
                  "9YR7YttJFfptQJSo5xrnYoAw1fJyVonC1vxUSqzAgyjY",
                  "HXoZZBWv25N4fm2vfSKnHXTeDJ31qaAcWZe3ZKeM6dQv",
                  "HEvSKofvBgfaexv23kMabbYqxasxU3mQ4ibBMEmJWHny",
                  "3u6T92C2x18s39a7WNM8NGaQK1YEtstTtqamZGsLvNZN",
                  "Sysvar1nstructions1111111111111111111111111"
                ],
                "data": "4W4pS7SH6dugDLwXWijhmW3dGTP7WENQa9vbUjvati1j95ghou2jUJHxvPUoowhZk2bHk21uKk4uFRQrpVF5d1jaBLTbXsFyocFyh8Wc4iMfeDcfGXThHPE9zv6jmM8LAPfcc3AGPo1C9tLorhXLQMXvkvUegHLVSfqn7zfHfenLC3XHnjT7jExJMhymz16cDGzr8X1jV6V9KkdtbTrh6M6p2zeyjbVuCFcqpGd6VVrXRqgjhhnd7FNMjPGAFN9Bj4ejsXaQkoeQpZ8deQRSM2w6tDox3N3B6fmiFhPa9AaDvVZQpZBjypriUinduwksz8tFhGc9P2yaNiiDrCT68kGUpMkkFENGz2aWy22Tj7AcWBJ2yQLrgsj5ePDkS3SEx6kVbs8Rjd",
                "programId": "cjg3oHmg9uuPsP8D6g29NWvhySJkdYdAo9D25PRbKXJ",
                "stackHeight": null
              }
            ],
            "recentBlockhash": "4bn9cKAw28iFD5xpDoKwrVfnTfzVVNzA2uFXwhGZsyA4"
          },
          "signatures": [
            "BfoyR5cqfWbK3urEgV1kudW55n8K3CSmCMFyvC3KdvuD5mujZLj3vPiQULMtYGRL7Dd8fdVTRe73L9aojfvM6oz"
          ]
        },
        "version": "legacy"
      },

获取指定block的确认状态

curl https://api.testnet.solana.com -X POST -H "Content-Type: application/json" -d '
    {
        "jsonrpc": "2.0", "id": 1,
        "method": "getBlockCommitment",
        "params":[278287910]
    }
    '

返回结果

{
  "jsonrpc": "2.0",
  "result": {
    "commitment": null,
    "totalStake": 158624660219335800
  },
  "id": 1
}

3. Slot和Epoch相关接口

在 Solana 区块链中,Slot 和 Epoch 是两个重要的概念,用于帮助理解和管理区块链的时间和进度。

Slot:

  1. Slot 是 Solana 区块链的基本时间单位。每个 Slot 大约是 400 毫秒。在 Solana 中,时间是分成小的时间段(Slot)来管理的,而不是使用传统的区块间隔。
  2. 每个 Slot 都包含了一个区块,用于记录交易和状态更新。Solana 区块链是一个连续的时间流,不同于传统区块链系统中固定大小的区块间隔。
  3. Solana 的高吞吐量和低延迟设计使得每个 Slot 都可以容纳大量的交易和状态更新,从而实现了高效的区块链运行。

Epoch:

  1. Epoch 是 Solana 区块链中更高级别的时间单位。它是由多个 Slot 组成的时间周期。
  2. 在 Solana 中,Epoch 的长度由时间而不是固定的 Slot 数量来确定。一个 Epoch 的长度通常是几个小时,由网络的活动水平和时间流逝而变化。
  3. 每个 Epoch 结束时,会对网络进行验证和确认,然后开始新的 Epoch。Epoch 的变化通常会触发一些网络参数的更新和调整,如质押奖励、验证器轮换等。

总的来说,Slot 是 Solana 区块链的基本时间单位,每个 Slot 包含一个区块;而 Epoch 则是更高级别的时间单位,由多个 Slot 组成,用于实现网络参数的更新和调整。理解 Slot 和 Epoch 的概念有助于更好地了解 Solana 区块链的运行方式和时间流逝。

获取当前Epoch信息

curl https://api.testnet.solana.com -X POST -H "Content-Type: application/json" -d '
    {"jsonrpc":"2.0","id":1, "method":"getEpochInfo"}
    '

返回结果

{
  "jsonrpc": "2.0",
  "result": [
    {
      "featureSet": 743568211, // 节点支持的特性集合,用于标识节点支持的特性和功能
      "gossip": "35.90.185.39:8000", // 节点的 Gossip 服务地址,用于传播消息和状态更新
      "pubkey": "Gp9R3ts3j9Akhmvyky8WCrUYRVdUhzTyct4M4WXz937d", // 节点的公钥,用于标识和验证节点身份
      "pubsub": "35.90.185.39:8900", // 节点的 PubSub 服务地址,用于发布和订阅消息
      "rpc": "35.90.185.39:8899", // 节点的 RPC 服务地址,用于与节点进行交互和查询
      "shredVersion": 503, // 节点的 Shred 版本,用于分片和传播区块的数据结构
      "tpu": "35.90.185.39:8003", // 节点的 TPU 服务地址,用于执行事务处理
      "tpuQuic": "35.90.185.39:8009", // 节点的 TPU Quic 服务地址,用于通过 QUIC 协议执行事务处理
      "version": "1.18.7" // 节点的 Solana 软件版本号,用于标识节点所运行的 Solana 软件的版本
    }
  ]
}

获取Epoch的调度信息

curl https://api.testnet.solana.com -X POST -H "Content-Type: application/json" -d '
    {
        "jsonrpc":"2.0","id":1,
        "method":"getEpochSchedule"
    }
    '

返回结果

{
  "jsonrpc": "2.0", // 表示 JSON-RPC 协议版本号,这里是 2.0 版本。
  "result": { // 包含了有关 Epoch 的具体信息。
    "firstNormalEpoch": 0, // 第一个正常 Epoch 的索引。在 Solana 中,有一些特殊的 Epoch 可能会存在,例如创世 Epoch,而 firstNormalEpoch 表示从第一个正常的 Epoch 开始的索引。
    "firstNormalSlot": 0, // 第一个正常 Epoch 的第一个 Slot 的索引。在 Solana 中,Slot 是 Epoch 的基本时间单位,而 firstNormalSlot 表示从第一个正常的 Epoch 开始的第一个 Slot 的索引。
    "leaderScheduleSlotOffset": 432000, // leader 调度 Slot 偏移量。这个值表示 leader 调度开始的 Slot 相对于当前 Epoch 的第一个 Slot 的偏移量。
    "slotsPerEpoch": 432000, // 每个 Epoch 包含的 Slot 数量。在 Solana 中,每个 Epoch 的长度由 slotsPerEpoch 参数定义。
    "warmup": false // 表示当前网络是否处于热身阶段。如果 warmup 为 true,则表示网络处于热身阶段,即还没有正式启动;如果 warmup 为 false,则表示网络已经正式启动。
  },
  "id": 1 // 请求的唯一标识符,用于与响应进行匹配。
}

获取最新Slot

curl https://api.testnet.solana.com -X POST -H "Content-Type: application/json" -d '
        {"jsonrpc":"2.0","id":1, "method":"getSlot"}
    '

返回结果

{
  "jsonrpc": "2.0",
  "result": 289999956,
  "id": 1
}

4. 账号相关接口

获取Account信息

curl https://api.testnet.solana.com -X POST -H "Content-Type: application/json" -d '
    {
        "jsonrpc": "2.0",
        "id": 1,
        "method": "getAccountInfo",
        "params": [
            "E3NAyseUZrgwSbYe2g47TuFJr5CxAeneK63mR4Ufbqhh",
            {
                "encoding": "base58",
                "commitment": "finalized"
            }
        ]
    }
    '

返回结果

{
  "jsonrpc": "2.0", // 表示 JSON-RPC 协议版本号,这里是 2.0 版本。
  "result": { // 包含了有关账户的具体信息。
    "context": { // 包含了与账户相关的上下文信息。
      "apiVersion": "1.18.7", // Solana 节点的 API 版本号。
      "slot": 262450222 // 当前账户状态的槽号。在 Solana 中,槽号表示时间的单位,每个槽包含一个区块。
    },
    "value": { // 包含了账户的值信息。
      "data": [ // 账户的数据字段。在这个示例中为空。
        "",
        "base58"
      ],
      "executable": false, // 表示账户是否可执行。在这个示例中,账户不可执行。
      "lamports": 894429840, // 账户的 Lamports 余额。Lamports 是 Solana 中的最小单位,用于衡量账户的余额。 1 Sol = 10^9 lamports
      "owner": "11111111111111111111111111111111", // 账户的所有者公钥。在这个示例中,所有者是系统默认的空地址。
      "rentEpoch": 18446744073709552000, // 账户的租金周期。在这个示例中,租金周期为一个非常大的值,表示账户已经完全偿还租金。
      "space": 0 // 账户的存储空间。在这个示例中,账户的存储空间为0,表示未使用任何存储空间。
    }
  },
  "id": 1
}

获取账号余额

curl https://api.testnet.solana.com -X POST -H "Content-Type: application/json" -d '
    {
        "jsonrpc": "2.0", "id": 1,
        "method": "getBalance",
        "params": [
            "E3NAyseUZrgwSbYe2g47TuFJr5CxAeneK63mR4Ufbqhh"
        ]
    }
    '

返回结果

{
  "jsonrpc": "2.0",
  "result": {
    "context": {
      "apiVersion": "1.18.7",
      "slot": 262451228
    },
    "value": 894429840
  },
  "id": 1
}

5. SPL-Token相关接口

按照需求查询账号

curl  https://api.testnet.solana.com -X POST -H "Content-Type: application/json" -d '
        {
            "jsonrpc": "2.0",
            "id": 1,
            "method": "getTokenAccountsByOwner",
            "params": [
            "E3NAyseUZrgwSbYe2g47TuFJr5CxAeneK63mR4Ufbqhh",
            {
                "mint": "E69iMAYn5k9HcWiPRZtthMDmyv1owgiWSbZCtTn9VMzy"
            },
            {
                "encoding": "jsonParsed"
            }
            ]
        }
    '

返回结果

{
  "jsonrpc": "2.0", // 使用 JSON-RPC 2.0 版本协议
  "result": { // RPC 请求的结果
    "context": { // 结果中的上下文信息
      "apiVersion": "1.18.7", // Solana 节点的 API 版本号
      "slot": 262453839 // 当前账户状态的槽号
    },
    "value": [ // 结果中的值,这是一个数组
      {
        "account": { // 账户对象
          "data": { // 账户数据
            "parsed": { // 解析后的数据
              "info": { // 账户信息
                "isNative": false, // 账户是否为本地账户
                "mint": "E69iMAYn5k9HcWiPRZtthMDmyv1owgiWSbZCtTn9VMzy", // 账户所属的 Token 的地址
                "owner": "E3NAyseUZrgwSbYe2g47TuFJr5CxAeneK63mR4Ufbqhh", // 账户的所有者地址
                "state": "initialized", // 账户的状态,这里是已初始化状态
                "tokenAmount": { // Token 金额信息
                  "amount": "9900000000000", // Token 金额(单位:最小单位)
                  "decimals": 9, // Token 的小数位数
                  "uiAmount": 9900, // Token 金额的用户友好格式
                  "uiAmountString": "9900" // Token 金额的字符串表示
                }
              },
              "type": "account" // 数据类型为账户类型
            },
            "program": "spl-token", // 程序名称
            "space": 165 // 账户的存储空间大小
          },
          "executable": false, // 账户是否可执行
          "lamports": 2039280, // 账户的 Lamports 余额
          "owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA", // 账户的所有者地址
          "rentEpoch": 18446744073709552000, // 账户的租金周期
          "space": 165 // 账户的存储空间大小
        },
        "pubkey": "Cemt9DSnRUZCJo7HtYeS75GrnfM6fne1HinqnUkiFdVz" // 账户的公钥地址
      }
    ]
  },
  "id": 1
}

获取某个Token Account账号的余额

curl  https://api.testnet.solana.com  -X POST -H "Content-Type: application/json" -d '
        {
            "jsonrpc": "2.0", "id": 1,
            "method": "getTokenAccountBalance",
            "params": [
                "Cemt9DSnRUZCJo7HtYeS75GrnfM6fne1HinqnUkiFdVz" // ATA账户
            ]
        }
    '

返回结果

{
  "jsonrpc": "2.0",
  "result": {
    "context": {
      "apiVersion": "1.18.7",
      "slot": 262454844
    },
    "value": {
      "amount": "9900000000000",
      "decimals": 9,
      "uiAmount": 9900,
      "uiAmountString": "9900"
    }
  },
  "id": 1
}

6. 交易相关接口

获取交易详情

curl  https://api.testnet.solana.com  -X POST -H "Content-Type: application/json" -d '
        {
            "jsonrpc": "2.0",
            "id": 1,
            "method": "getTransaction",
            "params": [
                "49woXcXq7vT2ivvJVmBpanNyauGc7yzxVMaUM3skYCQKfaHF1greiphyZuBn9LaBBBNpJtemnairHPak38pxoWUT",
                "jsonParsed"
            ]
        }
    '

返回结果

{
  "jsonrpc": "2.0",
  "result": {
    "blockTime": 1712128483,
    "meta": {
      "computeUnitsConsumed": 150,
      "err": null,
      "fee": 5000,
      "innerInstructions": [],
      "logMessages": [
        "Program 11111111111111111111111111111111 invoke [1]",
        "Program 11111111111111111111111111111111 success"
      ],
      "postBalances": [
        190195326052848,
        1000000000,
        1
      ],
      "postTokenBalances": [],
      "preBalances": [
        190196326057848,
        0,
        1
      ],
      "preTokenBalances": [],
      "rewards": [],
      "status": {
        "Ok": null
      }
    },
    "slot": 262227104,
    "transaction": {
      "message": {
        "accountKeys": [
          {
            "pubkey": "5K4KLyoqBwS58sWjuJvhnuu794us4XGjTcXSTDUjwmJ2",
            "signer": true,
            "source": "transaction",
            "writable": true
          },
          {
            "pubkey": "E3NAyseUZrgwSbYe2g47TuFJr5CxAeneK63mR4Ufbqhh",
            "signer": false,
            "source": "transaction",
            "writable": true
          },
          {
            "pubkey": "11111111111111111111111111111111",
            "signer": false,
            "source": "transaction",
            "writable": false
          }
        ],
        "instructions": [
          {
            "parsed": {
              "info": {
                "destination": "E3NAyseUZrgwSbYe2g47TuFJr5CxAeneK63mR4Ufbqhh",
                "lamports": 1000000000,
                "source": "5K4KLyoqBwS58sWjuJvhnuu794us4XGjTcXSTDUjwmJ2"
              },
              "type": "transfer"
            },
            "program": "system",
            "programId": "11111111111111111111111111111111",
            "stackHeight": null
          }
        ],
        "recentBlockhash": "FN6GnuxET75qmgoxW9d4XpTfVVWh7KY2wup3TxL7NR4c"
      },
      "signatures": [
        "49woXcXq7vT2ivvJVmBpanNyauGc7yzxVMaUM3skYCQKfaHF1greiphyZuBn9LaBBBNpJtemnairHPak38pxoWUT"
      ]
    }
  },
  "id": 1
}

对应区块链交易信息
https://solscan.io/tx/49woXcXq7vT2ivvJVmBpanNyauGc7yzxVMaUM3skYCQKfaHF1greiphyZuBn9LaBBBNpJtemnairHPak38pxoWUT?cluster=testnet
在这里插入图片描述

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐