arnaucube
arnaucube/goBlockchainDataAnalysisPublic Self-hosted repository
goBlockchainDataAnalysis/addressTree.go
addressTree.goRaw
 1package main
 2
 3import (
 4	"fmt"
 5	"log"
 6
 7	"github.com/fatih/color"
 8
 9	"gopkg.in/mgo.v2/bson"
10)
11
12func upTree(address string, network NetworkModel) NetworkModel {
13	var upNetwork NetworkModel
14
15	//add address node to network
16	node := NodeModel{}
17	err := nodeCollection.Find(bson.M{"id": address}).One(&node)
18	check(err)
19	if nodeInNodes(network.Nodes, node) == false {
20		network.Nodes = append(network.Nodes, node)
21	}
22
23	//get edges before the address
24	edges := []EdgeModel{}
25	err = edgeCollection.Find(bson.M{"to": address}).All(&edges)
26	check(err)
27	for _, e := range edges {
28		if edgeInEdges(network.Edges, e) == false {
29			network.Edges = append(network.Edges, e)
30		}
31		//get the nodes involved in edges
32		/*
33			nodes := []NodeModel{}
34			err := nodeCollection.Find(bson.M{"id": }).All(&edges)
35			check(err)
36		*/
37		endBranch := false
38		edgeUpCheck := EdgeModel{}
39		err := edgeCollection.Find(bson.M{"to": e.From}).One(&edgeUpCheck)
40		if err != nil {
41			log.Println(err)
42			color.Blue("not found")
43			endBranch = true
44		}
45
46		//need to be fixed when there is a bucle between the addresses (A-->B, B-->C, C-->A)
47		fmt.Println(e.From + " - " + e.To)
48		//if e.From != e.To && e.From != upLevelEdge.To && e.To != upLevelEdge.From {
49		//if e.From != e.To {
50		fmt.Println(endBranch)
51		fmt.Println(edgeInEdges(network.Edges, edgeUpCheck))
52		if edgeInEdges(network.Edges, edgeUpCheck) == false && endBranch == false {
53			upNetwork = upTree(e.From, network)
54			for _, upN := range upNetwork.Nodes {
55				if nodeInNodes(network.Nodes, upN) == false {
56					network.Nodes = append(network.Nodes, upN)
57				}
58			}
59			for _, upE := range upNetwork.Edges {
60				if edgeInEdges(network.Edges, upE) == false {
61					network.Edges = append(network.Edges, upE)
62				}
63			}
64		}
65	}
66
67	return network
68}
69func addressTree(address string) NetworkModel {
70	var network NetworkModel
71
72	network = upTree(address, network)
73	return network
74
75}