arnaucube
arnaucube/goBlockchainDataAnalysisPublic Self-hosted repository
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}