goBlockchainDataAnalysis/addressTree.go
addressTree.goRaw
1package main
2
3import (
4 "fmt"
5
6 "gopkg.in/mgo.v2/bson"
7)
8
9func upTree(address string, network NetworkModel) NetworkModel {
10 var upNetwork NetworkModel
11
12 //add address node to network
13 node := NodeModel{}
14 err := nodeCollection.Find(bson.M{"id": address}).One(&node)
15 check(err)
16 if nodeInNodes(network.Nodes, node) == false {
17 network.Nodes = append(network.Nodes, node)
18 }
19
20 //get edges before the address
21 edges := []EdgeModel{}
22 err = edgeCollection.Find(bson.M{"to": address}).All(&edges)
23 check(err)
24 for _, e := range edges {
25 if edgeInEdges(network.Edges, e) == false {
26 network.Edges = append(network.Edges, e)
27 }
28 //get the nodes involved in edges
29 /*
30 nodes := []NodeModel{}
31 err := nodeCollection.Find(bson.M{"id": }).All(&edges)
32 check(err)
33 */
34
35 fmt.Println(e.From + " - " + e.To)
36 if e.From != e.To {
37 upNetwork = upTree(e.From, network)
38 for _, upN := range upNetwork.Nodes {
39 if nodeInNodes(network.Nodes, upN) == false {
40 network.Nodes = append(network.Nodes, upN)
41 }
42 }
43 for _, upE := range upNetwork.Edges {
44 if edgeInEdges(network.Edges, upE) == false {
45 network.Edges = append(network.Edges, upE)
46 }
47 }
48 }
49 }
50
51 return network
52}
53func addressTree(address string) NetworkModel {
54 var network NetworkModel
55
56 network = upTree(address, network)
57 return network
58
59}