goBlockchainDataAnalysis/main.go
main.goRaw
1package main
2
3import (
4 "fmt"
5 "log"
6 "net/http"
7 "os"
8
9 mgo "gopkg.in/mgo.v2"
10
11 "github.com/btcsuite/btcrpcclient"
12 "github.com/fatih/color"
13 "github.com/gorilla/handlers"
14)
15
16var blockCollection *mgo.Collection
17var nodeCollection *mgo.Collection
18var edgeCollection *mgo.Collection
19
20func main() {
21 //read goBlockchainDataAbalysis config
22 readConfig("config.json")
23
24 //connect with mongodb
25 readMongodbConfig("./mongodbConfig.json")
26 session, err := getSession()
27 check(err)
28 blockCollection = getCollection(session, "blocks")
29 nodeCollection = getCollection(session, "nodes")
30 edgeCollection = getCollection(session, "edges")
31
32 // create new client instance
33 client, err := btcrpcclient.New(&btcrpcclient.ConnConfig{
34 HTTPPostMode: true,
35 DisableTLS: true,
36 Host: config.Host + ":" + config.Port,
37 User: config.User,
38 Pass: config.Pass,
39 }, nil)
40 if err != nil {
41 log.Fatalf("error creating new btc client: %v", err)
42 }
43
44 // list accounts
45 accounts, err := client.ListAccounts()
46 if err != nil {
47 log.Fatalf("error listing accounts: %v", err)
48 }
49 // iterate over accounts (map[string]btcutil.Amount) and write to stdout
50 for label, amount := range accounts {
51 log.Printf("%s: %s", label, amount)
52 }
53 if len(os.Args) > 1 {
54 if os.Args[1] == "-explore" {
55 color.Blue("starting to explore blockchain")
56 explore(client, config.GenesisBlock)
57 }
58 }
59
60 // Get the current block count.
61 blockCount, err := client.GetBlockCount()
62 if err != nil {
63 log.Fatal(err)
64 }
65 log.Printf("Block count: %d", blockCount)
66
67 //http server start
68 readServerConfig("./serverConfig.json")
69 color.Green("server running")
70 fmt.Print("port: ")
71 color.Green(serverConfig.ServerPort)
72 router := NewRouter()
73
74 headersOk := handlers.AllowedHeaders([]string{"X-Requested-With", "Access-Control-Allow-Origin"})
75 originsOk := handlers.AllowedOrigins([]string{"*"})
76 methodsOk := handlers.AllowedMethods([]string{"GET", "HEAD", "POST", "PUT", "OPTIONS"})
77 log.Fatal(http.ListenAndServe(":"+serverConfig.ServerPort, handlers.CORS(originsOk, headersOk, methodsOk)(router)))
78 //log.Fatal(http.ListenAndServe(":"+serverConfig.ServerPort, router))
79
80}