97 lines
2.3 KiB
Go
97 lines
2.3 KiB
Go
package main
|
|
|
|
import (
|
|
"encoding/csv"
|
|
"flag"
|
|
"log"
|
|
"monero-blocks/pool"
|
|
c3pool_org "monero-blocks/pool/c3pool.org"
|
|
monero_hashvault_pro "monero-blocks/pool/monero.hashvault.pro"
|
|
moneroocean_stream "monero-blocks/pool/moneroocean.stream"
|
|
supportxmr_com "monero-blocks/pool/supportxmr.com"
|
|
xmr_2miners_com "monero-blocks/pool/xmr.2miners.com"
|
|
xmr_nanopool_org "monero-blocks/pool/xmr.nanopool.org"
|
|
xmrpool_eu "monero-blocks/pool/xmrpool.eu"
|
|
"os"
|
|
"strconv"
|
|
"sync"
|
|
)
|
|
|
|
func main() {
|
|
scanDownToHeight := flag.Uint64("height", 2688888, "Height at which scans will stop from the tip. Defaults to v15 upgrade.")
|
|
|
|
flag.Parse()
|
|
|
|
pools := []pool.Pool{
|
|
supportxmr_com.New(),
|
|
monero_hashvault_pro.New(),
|
|
xmr_nanopool_org.New(),
|
|
xmr_2miners_com.New(),
|
|
xmrpool_eu.New(),
|
|
c3pool_org.New(),
|
|
moneroocean_stream.New(),
|
|
}
|
|
|
|
var wg sync.WaitGroup
|
|
|
|
allBlocks := make([][]pool.Block, len(pools))
|
|
|
|
lowerHeight := *scanDownToHeight
|
|
|
|
for i, p := range pools {
|
|
wg.Add(1)
|
|
go func(pIndex int, p pool.Pool) {
|
|
defer wg.Done()
|
|
var token pool.Token
|
|
var tempBlocks []pool.Block
|
|
var lastBlock uint64
|
|
for {
|
|
tempBlocks, token = p.GetBlocks(token)
|
|
for _, b := range tempBlocks {
|
|
if b.Height < lowerHeight {
|
|
log.Printf("[%s] Finished: reached height\n", p.Name())
|
|
return
|
|
}
|
|
allBlocks[pIndex] = append(allBlocks[pIndex], b)
|
|
lastBlock = b.Height
|
|
}
|
|
log.Printf("[%s] at %d/%d\n", p.Name(), lastBlock, lowerHeight)
|
|
if token == nil {
|
|
log.Printf("[%s] Finished: no more blocks\n", p.Name())
|
|
return
|
|
}
|
|
}
|
|
}(i, p)
|
|
}
|
|
|
|
wg.Wait()
|
|
|
|
f, err := os.Create("blocks.csv")
|
|
if err != nil {
|
|
log.Panic(err)
|
|
}
|
|
defer f.Close()
|
|
csvFile := csv.NewWriter(f)
|
|
defer csvFile.Flush()
|
|
|
|
csvFile.Write([]string{"Height", "Id", "Timestamp", "Reward", "Pool"})
|
|
for {
|
|
smallIndex := -1
|
|
smallValue := uint64(0)
|
|
for i, s := range allBlocks {
|
|
if len(s) > 0 {
|
|
if s[0].Height >= smallValue {
|
|
smallValue = s[0].Height
|
|
smallIndex = i
|
|
}
|
|
}
|
|
}
|
|
if smallIndex == -1 {
|
|
break
|
|
}
|
|
csvFile.Write([]string{strconv.FormatUint(allBlocks[smallIndex][0].Height, 10), allBlocks[smallIndex][0].Id.String(), strconv.FormatUint(allBlocks[smallIndex][0].Timestamp, 10), strconv.FormatUint(allBlocks[smallIndex][0].Reward, 10), pools[smallIndex].Name()})
|
|
allBlocks[smallIndex] = allBlocks[smallIndex][1:]
|
|
}
|
|
|
|
}
|