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
|
|
|
}
|