引言
在区块链应用的开发过程中,如何高效地测试和展示链上的数据是每个开发者必须面临的挑战。无论是查询账户余额,还是展示区块信息,我们都需要一个可操作的开发环境。今天,我们将通过搭建本地以太坊链环境、使用 GraphQL 和 JSON-RPC 接口获取数据,并将这些数据实时展示在 RadSystems 中,帮助大家更好地理解如何从链上获取数据并进行展示。
1. 本地以太坊链的搭建与启动
1.1 启动本地链
首先,我们需要准备本地的以太坊节点,并开启 GraphQL 服务。我们使用 Geth(Go Ethereum)来启动本地链并启用 GraphQL 接口。
这里我们需要调用外部Geth Graphql,具体可见官网:
https://geth.ethereum.org/docs/interacting-with-geth/rpc/graphql
在命令行中,使用以下命令启动 Geth 服务:
geth --datadir "." --dev --dev.period 2 --http --http.api eth,web3,net --http.corsdomain "http://remix.ethereum.org" --password password.txt --http.port 8888 --graphql
此命令会启动一个开发模式的以太坊节点并启用 GraphQL 和 JSON-RPC 服务,端口设置为 8888
。开发模式允许快速实验,但注意它会将数据存储在内存中,重启后会丢失数据。
为了方便启动,我们可以在本地链的文件位置中,新建一个start.bat文件,将启动命令写入即可双击启动。
注意:在启动 Geth 节点时,不同版本的 Geth 可能会有不同的启动命令和配置。对于大多数 Geth 版本,你只需要在原先的启动命令中加上
--graphql
即可启用 GraphQL 接口。这样,你的节点就会同时提供 JSON-RPC 和 GraphQL 两种接口供外部调用。并且每个人指定的 HTTP 服务的端口号也可能是不一致的。
1.2 本地链调试
一旦启动节点,我们可以通过命令行与节点交互:
geth attach \\.\pipe\geth.ipc
此命令连接到 Geth 节点的 IPC 接口,我们可以使用以下命令查询账户信息和余额:
eth.accounts
eth.getBalance(eth.accounts[0])
这样,你就可以确认节点已成功启动,并能够查询账户信息和账户余额。
如果本地链无效,可选择下载已经配置好的本地链
百度网盘链接: https://pan.baidu.com/s/1zhuzHt38Ev-UPAado9zJcQ,具体步骤如下:
- 解压文件,双击start-graphql.bat启动geth节点;
- 使用命令geth attach \\.\pipe\geth.ipc进入控制台;
- 测试获取账户信息:eth.accounts;测试获取余额:eth.getBalance(eth.accounts[0])。
2.如何查询区块交易信息
在本地链中查询区块交易信息前,首先需要确保已进行交易,因为只有在发生交易后,区块链上才会生成相关交易记录。以下是使用 Remix IDE 连接本地链并进行交易的步骤:
2.1 使用 Remix 连接本地链并部署合约
首先,您需要打开 Remix IDE,并使用 Custom - External Http Provider
连接到您本地链的端口(例如:端口 8888)。这将允许您与本地链进行交互,并部署您的智能合约。
-
打开 Remix 网站:https://remix.ethereum.org
-
在 Remix IDE 的左侧面板中,选择 Deploy & run transactions 插件。
-
在 Environment 环境下拉菜单中选择 Custom - External Http Provider。
-
在 URL 输入框中,输入您的本地链 RPC 地址,例如:
http://localhost:8888
。 -
配置完成后,您可以通过 Remix 部署合约,并进行相应的交易。
2.2 完成交易后开始查询区块信息
当您完成交易并希望查询区块中的交易记录时,可以使用 GraphQL 或 JSON-RPC 接口查询区块信息。
使用上述步骤进行交易后,区块链中的交易数据将成为查询的有效内容。可以使用 GraphQL 查询区块范围,获取交易记录(包括交易哈希、发送者、接收者以及转账金额等)。
2. 2.1配置 GraphQL 接口,启动 GraphQL 服务
本地链启动后,我们可以通过 http://localhost:8888/graphql访问 GraphQL 查询界面。
首先我们需要检查界面是否正常显示 GraphQL 查询工具。
正常显示即可根据:https://github.com/ConsenSys/ethql/wiki/Log-Query-Fields网址查询日志信息
通过 GraphQL,我们可以方便地查询指定区块的交易记录。
示例:
例如,查询用于获取指定区块范围内的交易信息。
查询区块号在 256260 和 256261 之间的交易记录:
query blockInfo {
blocks(from:256260,to:256261) {
number
transactions {
hash
from {
address
}
to {
address
}
value
}
}
}
查询结果将包含交易哈希、发送方和接收方地址以及交易金额。
2.3 在 Postman 中测试 GraphQL
你还可以使用 Postman 来测试 GraphQL 查询。在 Postman 中配置如下请求:
- 设置 HTTP 方法为
POST
- URL 设置为
http://localhost:8888/graphql
- 在 Body 中选择
raw
格式,数据类型为JSON
,并输入以下查询内容:
{ "query": "query { blocks(from: 256260, to: 256261) { number transactions { hash from { address } to { address } value } } }" }
点击 Send,检查返回的结果,确保包含区块号、交易信息和转账金额等数据。
2.4 使用 JSON-RPC 接口测试账户余额
设置 Postman 查询账户余额
通过 JSON-RPC 接口,我们也可以查询账户的余额。在 Postman 中设置以下请求:
- 方法:
POST
- URL:
http://localhost:8888
- Body(请求体):
{ "jsonrpc": "2.0", "method": "eth_getBalance", "params": [ "0xYourEthereumAddress", "latest" ], "id": 1 }
将 "0xYourEthereumAddress"
替换为你的目标账户地址,"id": 1:用于标识请求的 ID通常可以是任意数字。点击 Send 后,你将获得该账户的余额,返回结果为十六进制表示的余额。
3. 在 RadSystems 中展示链上数据
3.1 页面布局与数据绑定
在 RadSystems 中创建一个新的页面布局,选择合适的模板(如 Blank Page
或 Dashboard
),然后通过 DataComponent 组件展示从 GraphQL 查询到的数据。
- 新建一个自定义页面布局。
- 配置数据源为 GraphQL 接口,通过设置
DataComponent
组件展示查询的数据,如账户余额和交易记录。
3.2 配置数据源
确保页面的数据源设置正确,数据字段映射正确。例如,将从 GraphQL 查询中获取的余额、交易信息等字段绑定到组件中。
3.3 实时展示
一旦配置完成,RadSystems 页面就会实时展示链上的数据。你可以在页面中看到目标账户的余额、交易记录等信息。