openethereum-node-status/internal/server/handlers.go

55 lines
1.3 KiB
Go

package server
import (
"git.grassecon.org/grassrootseconomics/openethereum-node-status/pkg/rpc"
"github.com/rs/zerolog/log"
"github.com/ybbus/jsonrpc/v2"
)
var (
RpcClient rpc.RpcClient
)
type BatchResponse struct {
SyncComplete bool
ChainName string
}
func batchCall() (bool, BatchResponse) {
var batchResponse BatchResponse
rpcResponses, err := RpcClient.EthBatchRpcCall(jsonrpc.RPCRequests{
// The rpc call id here is guranteed to be in order of appearance starting from index 0
jsonrpc.NewRequest("eth_syncing"),
jsonrpc.NewRequest("parity_chain"),
})
if err != nil {
log.Error().
Err(err).
Str("module", "server").
Msg("error in batch responses")
return false, batchResponse
}
// Order and format isn't guranteed with batch calls therefore we individually process/transform each result in the map
if syncStatus, ok := rpcResponses[0]; ok {
val, err := syncStatus.GetBool()
if err != nil {
return false, batchResponse
}
// If sync is complete the rpc result is false, however this call dones't gurantee all blocks have been imported
batchResponse.SyncComplete = !val
}
if chainName, ok := rpcResponses[1]; ok {
val, err := chainName.GetString()
if err != nil {
return false, batchResponse
}
batchResponse.ChainName = val
}
return true, batchResponse
}