batch method
Implementation
Future<List<dynamic>> batch(List<(String method, List<dynamic>? params)> requests) async {
final payloads = <Map<String, dynamic>>[];
final ids = <int>[];
for (final (method, params) in requests) {
final id = nextId;
ids.add(id);
payloads.add({
'jsonrpc': '2.0',
'id': id,
'method': method,
'params': params ?? [],
});
}
final body = jsonEncode(payloads);
final responseBody = await _postJson(body);
final responses = (jsonDecode(responseBody) as List).cast<Map<String, dynamic>>();
final byId = <int, Map<String, dynamic>>{};
for (final r in responses) {
byId[r['id'] as int] = r;
}
final results = <dynamic>[];
for (final id in ids) {
final r = byId[id]!;
if (r.containsKey('error') && r['error'] != null) {
final err = r['error'] as Map<String, dynamic>;
throw JsonRpcError(
code: err['code'] as int,
message: err['message'] as String,
data: err['data'],
);
}
results.add(r['result']);
}
return results;
}