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