fixed bug on getting Vin array inside a tx
@@ -31,9 +31,6 @@ other
|
|||||||
|
|
||||||
- num address evolution throught time
|
- num address evolution throught time
|
||||||
|
|
||||||
- fix error in exploreBlockchain.go, when getting the tx.Vin
|
|
||||||
tx 8f04960da36beaa928b9693f7dca4afae5a6122bb6874d409a1156e4c6c55024 has 4 vin, but exploreBlockchain is only getting the first
|
|
||||||
|
|
||||||
- pagination in address network generation
|
- pagination in address network generation
|
||||||
|
|
||||||
- stop rendering dots of sankey, when view change
|
- stop rendering dots of sankey, when view change
|
||||||
|
|||||||
11
README.md
@@ -102,19 +102,10 @@ Webapp will run on 127.0.0.1:8080
|
|||||||
### Some screenshots
|
### Some screenshots
|
||||||
Some screenshots can be old, and can contain errors.
|
Some screenshots can be old, and can contain errors.
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||

|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|

|
||||||

|
|
||||||
|
|||||||
@@ -125,70 +125,70 @@ func explore(client *rpcclient.Client, blockHash string) {
|
|||||||
txVi, err := client.GetRawTransactionVerbose(th)
|
txVi, err := client.GetRawTransactionVerbose(th)
|
||||||
check(err)
|
check(err)
|
||||||
|
|
||||||
if len(txVi.Vout[Vi.Vout].ScriptPubKey.Addresses) > 0 {
|
//if len(txVi.Vout[Vi.Vout].ScriptPubKey.Addresses) > 0 {
|
||||||
//add tx to newBlock
|
//add tx to newBlock
|
||||||
newBlock.Tx = append(newBlock.Tx, blockTx.Txid)
|
newBlock.Tx = append(newBlock.Tx, blockTx.Txid)
|
||||||
|
|
||||||
//Tx save
|
//Tx save
|
||||||
for _, originAddr := range txVi.Vout[Vi.Vout].ScriptPubKey.Addresses {
|
for _, originAddr := range txVi.Vout[Vi.Vout].ScriptPubKey.Addresses {
|
||||||
originAddresses = append(originAddresses, originAddr)
|
originAddresses = append(originAddresses, originAddr)
|
||||||
|
|
||||||
var newVin Vin
|
var newVin Vin
|
||||||
newVin.Txid = blockTx.Txid
|
newVin.Txid = blockTx.Txid
|
||||||
newVin.Amount = txVi.Vout[Vi.Vout].Value
|
newVin.Amount = txVi.Vout[Vi.Vout].Value
|
||||||
newVin.Address = originAddr
|
newVin.Address = originAddr
|
||||||
newTx.Vin = append(newTx.Vin, newVin)
|
newTx.Vin = append(newTx.Vin, newVin)
|
||||||
|
|
||||||
var n1 NodeModel
|
var n1 NodeModel
|
||||||
n1.Id = originAddr
|
n1.Id = originAddr
|
||||||
n1.Label = originAddr
|
n1.Label = originAddr
|
||||||
n1.Title = originAddr
|
n1.Title = originAddr
|
||||||
n1.Group = strconv.FormatInt(block.Height, 10)
|
n1.Group = strconv.FormatInt(block.Height, 10)
|
||||||
n1.Value = 1
|
n1.Value = 1
|
||||||
n1.Shape = "dot"
|
n1.Shape = "dot"
|
||||||
n1.Type = "address"
|
n1.Type = "address"
|
||||||
saveNode(nodeCollection, n1)
|
saveNode(nodeCollection, n1)
|
||||||
|
|
||||||
//Address
|
//Address
|
||||||
var addr AddressModel
|
var addr AddressModel
|
||||||
addr.Hash = originAddr
|
addr.Hash = originAddr
|
||||||
addr.InBittrex = false
|
addr.InBittrex = false
|
||||||
saveAddress(addr)
|
saveAddress(addr)
|
||||||
|
|
||||||
for k, outputAddr := range outputAddresses {
|
for k, outputAddr := range outputAddresses {
|
||||||
var eIn EdgeModel
|
var eIn EdgeModel
|
||||||
eIn.From = originAddr
|
eIn.From = originAddr
|
||||||
eIn.To = txHash
|
eIn.To = txHash
|
||||||
eIn.Label = txVi.Vout[Vi.Vout].Value
|
eIn.Label = txVi.Vout[Vi.Vout].Value
|
||||||
eIn.Txid = blockTx.Txid
|
eIn.Txid = blockTx.Txid
|
||||||
eIn.Arrows = "to"
|
eIn.Arrows = "to"
|
||||||
eIn.BlockHeight = block.Height
|
eIn.BlockHeight = block.Height
|
||||||
saveEdge(edgeCollection, eIn)
|
saveEdge(edgeCollection, eIn)
|
||||||
|
|
||||||
var eOut EdgeModel
|
var eOut EdgeModel
|
||||||
eOut.From = txHash
|
eOut.From = txHash
|
||||||
eOut.To = outputAddr
|
eOut.To = outputAddr
|
||||||
eOut.Label = outputAmount[k]
|
eOut.Label = outputAmount[k]
|
||||||
eOut.Txid = blockTx.Txid
|
eOut.Txid = blockTx.Txid
|
||||||
eOut.Arrows = "to"
|
eOut.Arrows = "to"
|
||||||
eOut.BlockHeight = block.Height
|
eOut.BlockHeight = block.Height
|
||||||
saveEdge(edgeCollection, eOut)
|
saveEdge(edgeCollection, eOut)
|
||||||
|
|
||||||
//date analysis
|
//date analysis
|
||||||
//dateAnalysis(e, tx.Time)
|
//dateAnalysis(e, tx.Time)
|
||||||
//hour analysis
|
//hour analysis
|
||||||
hourAnalysis(eIn, blockTx.Time)
|
hourAnalysis(eIn, blockTx.Time)
|
||||||
|
|
||||||
//newTx.To = outputAddr
|
//newTx.To = outputAddr
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
saveTx(newTx)
|
|
||||||
} else {
|
|
||||||
originAddresses = append(originAddresses, "origin")
|
|
||||||
}
|
}
|
||||||
|
/*} else {
|
||||||
|
originAddresses = append(originAddresses, "origin")
|
||||||
|
}*/
|
||||||
|
|
||||||
}
|
}
|
||||||
|
saveTx(newTx)
|
||||||
fmt.Print("originAddresses: ")
|
fmt.Print("originAddresses: ")
|
||||||
fmt.Println(len(originAddresses))
|
fmt.Println(len(originAddresses))
|
||||||
fmt.Print("outputAddresses: ")
|
fmt.Print("outputAddresses: ")
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 186 KiB After Width: | Height: | Size: 166 KiB |
|
Before Width: | Height: | Size: 180 KiB |
|
Before Width: | Height: | Size: 298 KiB After Width: | Height: | Size: 262 KiB |
|
Before Width: | Height: | Size: 298 KiB After Width: | Height: | Size: 192 KiB |
BIN
screenshots/goBlockchainDataAnalysis03.gif
Normal file
|
After Width: | Height: | Size: 3.2 MiB |
|
Before Width: | Height: | Size: 146 KiB |
|
Before Width: | Height: | Size: 127 KiB |
|
Before Width: | Height: | Size: 2.5 MiB |
|
Before Width: | Height: | Size: 166 KiB |
|
Before Width: | Height: | Size: 192 KiB |
|
Before Width: | Height: | Size: 262 KiB |
@@ -1,6 +1,6 @@
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-3">
|
<div class="col-sm-3">
|
||||||
<div class="panel-heading c_blueGrey300">
|
<div class="panel-heading c_deepPurpleG300to500">
|
||||||
<h3 class="panel-title">All addresses ({{addresses.length}})</h3>
|
<h3 class="panel-title">All addresses ({{addresses.length}})</h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="panel-body" style="max-height: 500px;overflow-y: scroll;">
|
<div class="panel-body" style="max-height: 500px;overflow-y: scroll;">
|
||||||
@@ -17,7 +17,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-9">
|
<div class="col-sm-9">
|
||||||
<div class="panel-heading c_blueGrey300">
|
<div class="panel-heading c_deepPurpleG300to500">
|
||||||
<h3 class="panel-title">Address history Network Map {{selectedAddress.id}}, BlockHeight: {{selectedAddress.group}}</h3>
|
<h3 class="panel-title">Address history Network Map {{selectedAddress.id}}, BlockHeight: {{selectedAddress.group}}</h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="panel-body">
|
<div class="panel-body">
|
||||||
|
|||||||