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 }