diff --git a/.gitignore b/.gitignore index a908ee5..57f3879 100644 --- a/.gitignore +++ b/.gitignore @@ -16,4 +16,3 @@ /*.conf /*.json -web diff --git a/exploreBlockchain.go b/exploreBlockchain.go index 0a7b241..bb75cf6 100644 --- a/exploreBlockchain.go +++ b/exploreBlockchain.go @@ -43,48 +43,50 @@ func explore(client *btcrpcclient.Client, blockHash string) { Each Tx moves all the wallet amount, and the realTx amount is sent to the destination and the rest of the wallet amount, is send to another owned wallet */ - for k, txHash := range block.Tx { - //first Tx is the Fee - //after first Tx is the Sent Amount - if k > 0 { - th, err := chainhash.NewHashFromStr(txHash) - check(err) - tx, err := client.GetRawTransactionVerbose(th) - check(err) - var originAddress string - for _, Vi := range tx.Vin { - th, err := chainhash.NewHashFromStr(Vi.Txid) + if len(block.Tx) < 10 { + for k, txHash := range block.Tx { + //first Tx is the Fee + //after first Tx is the Sent Amount + if k > 0 { + th, err := chainhash.NewHashFromStr(txHash) check(err) - txVi, err := client.GetRawTransactionVerbose(th) + tx, err := client.GetRawTransactionVerbose(th) check(err) - if len(txVi.Vout[0].ScriptPubKey.Addresses) > 0 { - originAddress = txVi.Vout[0].ScriptPubKey.Addresses[0] + var originAddress string + for _, Vi := range tx.Vin { + th, err := chainhash.NewHashFromStr(Vi.Txid) + check(err) + txVi, err := client.GetRawTransactionVerbose(th) + check(err) + if len(txVi.Vout[0].ScriptPubKey.Addresses) > 0 { + originAddress = txVi.Vout[0].ScriptPubKey.Addresses[0] + } } - } - for _, Vo := range tx.Vout { - totalAmount = totalAmount + Vo.Value + for _, Vo := range tx.Vout { + totalAmount = totalAmount + Vo.Value - var blockTx TxModel - blockTx.Txid = tx.Txid - blockTx.Amount = Vo.Value - blockTx.From = originAddress - blockTx.To = Vo.ScriptPubKey.Addresses[0] - newBlock.Tx = append(newBlock.Tx, blockTx) + var blockTx TxModel + blockTx.Txid = tx.Txid + blockTx.Amount = Vo.Value + blockTx.From = originAddress + blockTx.To = Vo.ScriptPubKey.Addresses[0] + newBlock.Tx = append(newBlock.Tx, blockTx) + } } } - } - if totalAmount > 0 { - newBlock.Amount = totalAmount - saveBlock(blockCollection, newBlock) - fmt.Print("Height: ") - fmt.Println(newBlock.Height) - fmt.Print("Amount: ") - fmt.Println(newBlock.Amount) - fmt.Print("Fee: ") - fmt.Println(newBlock.Fee) - fmt.Println("-----") - realBlocks++ + if totalAmount > 0 { + newBlock.Amount = totalAmount + saveBlock(blockCollection, newBlock) + fmt.Print("Height: ") + fmt.Println(newBlock.Height) + fmt.Print("Amount: ") + fmt.Println(newBlock.Amount) + fmt.Print("Fee: ") + fmt.Println(newBlock.Fee) + fmt.Println("-----") + realBlocks++ + } } //set the next block @@ -96,10 +98,12 @@ func explore(client *btcrpcclient.Client, blockHash string) { var n2 NodeModel n1.Id = t.From n1.Label = t.From + n1.Title = t.From n1.Value = 1 n1.Shape = "dot" n2.Id = t.To n2.Label = t.To + n2.Title = t.To n2.Value = 1 n2.Shape = "dot" diff --git a/main.go b/main.go index e0d3e76..4383571 100644 --- a/main.go +++ b/main.go @@ -10,6 +10,7 @@ import ( "github.com/btcsuite/btcrpcclient" "github.com/fatih/color" + "github.com/gorilla/handlers" ) var blockCollection *mgo.Collection @@ -51,7 +52,7 @@ func main() { } if len(os.Args) > 1 { if os.Args[1] == "-explore" { - fmt.Println("starting to explore blockchain") + color.Blue("starting to explore blockchain") explore(client, config.GenesisBlock) } } @@ -66,7 +67,14 @@ func main() { //http server start readServerConfig("./serverConfig.json") color.Green("server running") + fmt.Print("port: ") + color.Green(serverConfig.ServerPort) router := NewRouter() - log.Fatal(http.ListenAndServe(":"+serverConfig.ServerPort, router)) + + headersOk := handlers.AllowedHeaders([]string{"X-Requested-With", "Access-Control-Allow-Origin"}) + originsOk := handlers.AllowedOrigins([]string{"*"}) + methodsOk := handlers.AllowedMethods([]string{"GET", "HEAD", "POST", "PUT", "OPTIONS"}) + log.Fatal(http.ListenAndServe(":"+serverConfig.ServerPort, handlers.CORS(originsOk, headersOk, methodsOk)(router))) + //log.Fatal(http.ListenAndServe(":"+serverConfig.ServerPort, router)) } diff --git a/mongoModels.go b/mongoModels.go index 6d3a557..3a8574d 100644 --- a/mongoModels.go +++ b/mongoModels.go @@ -16,19 +16,19 @@ type BlockModel struct { } type NodeModel struct { - Id string - Label string - Title string - Group string - Value int - Shape string + Id string `json:"id"` + Label string `json:"label"` + Title string `json:"title"` + Group string `json:"group"` + Value int `json:"value"` + Shape string `json:"shape"` } type EdgeModel struct { Txid string - From string - To string - Label float64 + From string `json:"from"` + To string `json:"to"` + Label float64 `json:"label"` Arrows string } type NetworkModel struct { diff --git a/serverRoutes.go b/serverRoutes.go index b564fea..13ee30e 100644 --- a/serverRoutes.go +++ b/serverRoutes.go @@ -42,6 +42,7 @@ var routes = Routes{ func Index(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "ask for recommendations in /r") + //http.FileServer(http.Dir("./web")) } /* diff --git a/web/.gitignore b/web/.gitignore new file mode 100644 index 0000000..b636566 --- /dev/null +++ b/web/.gitignore @@ -0,0 +1,4 @@ +logs/* +!.gitkeep +node_modules +bower_components diff --git a/web/bower.json b/web/bower.json new file mode 100644 index 0000000..8898ef9 --- /dev/null +++ b/web/bower.json @@ -0,0 +1,16 @@ +{ + "name": "goBlockchainDataAnalysis", + "description": "goBlockchainDataAnalysis", + "version": "0.0.0", + "homepage": "https://github.com/arnaucode/goBlockchainDataAnalysis", + "license": "MIT", + "private": true, + "dependencies": { + "angular": "^1.6.2", + "angular-route": "^1.6.1", + "angular-chart.js": "^1.1.1", + "vis": "^4.18.1", + "materialize": "^0.100.1", + "toastr": "^2.1.3" + } +} diff --git a/web/controllers.js b/web/controllers.js new file mode 100644 index 0000000..b28fbda --- /dev/null +++ b/web/controllers.js @@ -0,0 +1,53 @@ +var urlapi = "http://127.0.0.1:3014/"; + +//var urlapi = document.location.href + "api/"; +console.log(urlapi); + +var app = angular.module("webApp", ['chart.js']); +var nodes, edges, container; +var options = { + layout:{ + improvedLayout: false + }/*, + physics:{ + //stabilization: false, + // enabled: false + }*/ +}; +app.controller("webCtrl", function($scope, $http) { + //chart + $scope.labels=[]; + $scope.data=[]; + $scope.nodes=[]; + $scope.edges=[]; + + $http.get(urlapi + 'map') + .then(function (data) { + console.log('data success'); + console.log(data); // for browser console + $scope.nodes=data.data.Nodes; + $scope.edges=data.data.Edges; + console.log($scope.nodes); + console.log($scope.edges); + $scope.showMap(); + //alert("Ara mateix es mostren (entre persones i tweets): " + nodes.length + " nodes."); + //$scope.refreshChart(); + }, function(data){ + console.log('data error'); + console.log(status); + console.log(data); + }); + + $scope.showMap=function(){ + var nodes = $scope.nodes; + var edges = $scope.edges; + + container = document.getElementById('mynetwork'); + var data = { + nodes: nodes, + edges: edges + }; + var network = new vis.Network(container, data, options); + toastr.info("map completed"); + }; +}); diff --git a/web/index.html b/web/index.html new file mode 100644 index 0000000..ea3cc66 --- /dev/null +++ b/web/index.html @@ -0,0 +1,116 @@ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + +