async function* minerInfoStream() {
const concurrency = 15
const callMinerInfoStream = transform(concurrency, async miner => {
try {
const minerInfo = (await client.stateMinerInfo(miner, tipSetKey))
let controlAddresses = minerInfo.ControlAddresses
let multiaddrs = minerInfo.Multiaddrs
let multiaddrsDecoded
if (multiaddrs) {
let decodedAddrs = []
for (const maddrBin of multiaddrs) {
try {
decodedAddrs.push(new Multiaddr(
Buffer.from(maddrBin, 'base64')
).toString())
} catch (e) {
console.error('Error decoding maddr', maddrBin, e)
}
}
if (decodedAddrs.length > 0) {
multiaddrsDecoded = decodedAddrs.sort()
}
multiaddrs.sort()
}
return {
miner,
owner: minerInfo.Owner,
worker: minerInfo.Worker,
newWorker: minerInfo.NewWorker,
controlAddresses,
workerChangeEpoch: minerInfo.workerChangeEpoch,
peerId: minerInfo.PeerId,
multiaddrs,
multiaddrsDecoded,
windowPoStProofType: minerInfo.WindowPoStProofType,
sectorSize: minerInfo.SectorSize,
windowPoStPartitionSectors: minerInfo.WindowPoStPartitionSectors,
consensusFaultElapsed: minerInfo.ConsensusFaultElapsed
}
} catch (e) {
console.error('Fetch error', e)
return {}
}
})
let counter = 0
let errors = 0
for await (const minerInfo of callMinerInfoStream(recentMiners)) {
if (minerInfo.miner) {
yield {
counter,
errors,
epoch: selectedEpoch,
...minerInfo
}
} else {
errors++
}
counter++
}
}