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