steem-block-db/main.go

91 lines
1.6 KiB
Go
Raw Normal View History

2018-10-04 18:41:39 +00:00
package main
import (
2018-10-28 16:31:26 +00:00
"encoding/json"
"fmt"
2018-10-18 08:39:41 +00:00
log "github.com/sirupsen/logrus"
2018-10-28 16:31:26 +00:00
"github.com/spf13/afero"
2018-10-04 18:41:39 +00:00
)
2018-10-18 08:39:41 +00:00
const steemAPIURL = "https://api.steemit.com"
2018-10-18 07:09:30 +00:00
2018-10-04 18:41:39 +00:00
func main() {
2018-10-28 16:31:26 +00:00
log.SetLevel(log.DebugLevel)
2018-10-25 13:12:43 +00:00
2018-10-28 16:31:26 +00:00
var fs = afero.NewBasePathFs(afero.NewOsFs(), "./d")
var s = NewSteemAPI(steemAPIURL)
var state = NewSteemDataStore("./d")
2018-10-04 18:41:39 +00:00
2018-10-28 16:31:26 +00:00
var endBlock = *currentBlockHeight(s)
2018-10-04 18:41:39 +00:00
2018-10-28 16:31:26 +00:00
var startBlock = 1
fetchBlockRange(s, state, startBlock, endBlock)
}
func fetchBlockRange(s *SteemAPI, fs afero.Fs, startBlock int, endBlock int) *error {
log.Debugf("fetching block range %d to %d inclusive", startBlock, endBlock)
for i := startBlock; i <= endBlock; i++ {
fetchSingleBlock(s, fs, i)
}
return nil
}
func fetchSingleBlock(s *SteemAPI, fs afero.Fs, blockNum int) {
tmpName := fmt.Sprintf("/blockOps/%d.json.tmp", blockNum)
realName := fmt.Sprintf("/blockOps/%d.json", blockNum)
done, err := afero.Exists(fs, realName)
if err != nil {
panic(err)
}
if done {
return
}
r, err := s.GetOpsInBlock(blockNum)
if err != nil {
panic(err)
}
bytes, err := json.Marshal(r)
if err != nil {
panic(err)
}
err = afero.WriteFile(fs, tmpName, bytes, 0)
2018-10-04 18:41:39 +00:00
if err != nil {
2018-10-28 16:31:26 +00:00
panic(err)
2018-10-04 18:41:39 +00:00
}
2018-10-28 16:31:26 +00:00
fs.Rename(tmpName, realName)
}
func nope() {
//r2, err := s.GetOpsInBlock(20000000)
//if err != nil {
// log.Fatal(err)
//}
2018-10-04 18:41:39 +00:00
2018-10-28 16:31:26 +00:00
//spew.Dump(r)
//bytes, err := json.Marshal(r2)
//if err != nil {
// fmt.Println(err)
// }
// fmt.Println(string(bytes))
}
func currentBlockHeight(s *SteemAPI) *int {
r, err := s.GetDynamicGlobalProperties()
if err != nil {
return nil
}
if r.LastIrreversibleBlockNum > 0 {
return &r.LastIrreversibleBlockNum
}
return nil
2018-10-04 18:41:39 +00:00
}