mirror of
https://github.com/arnaucube/goBlockchainDataAnalysis.git
synced 2026-02-07 03:36:44 +01:00
gets blocks and tx values
This commit is contained in:
18
.gitignore
vendored
Normal file
18
.gitignore
vendored
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# Binaries for programs and plugins
|
||||||
|
*.exe
|
||||||
|
*.dll
|
||||||
|
*.so
|
||||||
|
*.dylib
|
||||||
|
|
||||||
|
# Test binary, build with `go test -c`
|
||||||
|
*.test
|
||||||
|
|
||||||
|
# Output of the go coverage tool, specifically when used with LiteIDE
|
||||||
|
*.out
|
||||||
|
|
||||||
|
# Project-local glide cache, RE: https://github.com/Masterminds/glide/issues/736
|
||||||
|
.glide/
|
||||||
|
|
||||||
|
|
||||||
|
*.conf
|
||||||
|
*.json
|
||||||
9
errors.go
Normal file
9
errors.go
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import "fmt"
|
||||||
|
|
||||||
|
func check(err error) {
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
70
exploreBlocks.go
Normal file
70
exploreBlocks.go
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/btcsuite/btcd/chaincfg/chainhash"
|
||||||
|
"github.com/btcsuite/btcrpcclient"
|
||||||
|
)
|
||||||
|
|
||||||
|
func explore(client *btcrpcclient.Client, blockHash string) {
|
||||||
|
for blockHash != "" {
|
||||||
|
//generate hash from string
|
||||||
|
bh, err := chainhash.NewHashFromStr(blockHash)
|
||||||
|
check(err)
|
||||||
|
fmt.Print("blockHash: ")
|
||||||
|
fmt.Println(bh)
|
||||||
|
block, err := client.GetBlockVerbose(bh)
|
||||||
|
check(err)
|
||||||
|
fmt.Print("height: ")
|
||||||
|
fmt.Println(block.Height)
|
||||||
|
fmt.Print("rawTx: ")
|
||||||
|
fmt.Println(block.RawTx)
|
||||||
|
fmt.Print("Tx: ")
|
||||||
|
fmt.Println(block.Tx)
|
||||||
|
fmt.Print("Time: ")
|
||||||
|
fmt.Println(block.Time)
|
||||||
|
fmt.Print("Confirmations: ")
|
||||||
|
fmt.Println(block.Confirmations)
|
||||||
|
|
||||||
|
fmt.Print("Fee: ")
|
||||||
|
th, err := chainhash.NewHashFromStr(block.Tx[0])
|
||||||
|
check(err)
|
||||||
|
tx, err := client.GetRawTransactionVerbose(th)
|
||||||
|
check(err)
|
||||||
|
|
||||||
|
var totalFee float64
|
||||||
|
for _, Vo := range tx.Vout {
|
||||||
|
totalFee = totalFee + Vo.Value
|
||||||
|
}
|
||||||
|
fmt.Print("totalFee: ")
|
||||||
|
fmt.Print(totalFee)
|
||||||
|
fmt.Println(" FAIR")
|
||||||
|
|
||||||
|
//for each Tx, get the Tx value
|
||||||
|
var totalAmount float64
|
||||||
|
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)
|
||||||
|
fmt.Print("tx hash: ")
|
||||||
|
fmt.Println(th)
|
||||||
|
tx, err := client.GetRawTransactionVerbose(th)
|
||||||
|
check(err)
|
||||||
|
for _, Vo := range tx.Vout {
|
||||||
|
totalAmount = totalAmount + Vo.Value
|
||||||
|
}
|
||||||
|
fmt.Print("totalAmount: ")
|
||||||
|
fmt.Print(totalAmount)
|
||||||
|
fmt.Println(" FAIR")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fmt.Println("-----")
|
||||||
|
|
||||||
|
//set the next block
|
||||||
|
blockHash = block.NextHash
|
||||||
|
}
|
||||||
|
fmt.Println("reached the end of blockchain")
|
||||||
|
}
|
||||||
32
instructions.md
Normal file
32
instructions.md
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
# Instructions
|
||||||
|
|
||||||
|
#### Install FairCoin Wallet and configure
|
||||||
|
now, need to configure wallet:
|
||||||
|
.FairCoin/
|
||||||
|
FairCoin.conf
|
||||||
|
|
||||||
|
```
|
||||||
|
rpcuser=usernamerpc
|
||||||
|
rpcpassword=password
|
||||||
|
rpcport=3021
|
||||||
|
rpcworkqueue=2000
|
||||||
|
server=1
|
||||||
|
rpcbind=127.0.0.1
|
||||||
|
rpcallowip=127.0.0.1
|
||||||
|
```
|
||||||
|
|
||||||
|
execute wallet:
|
||||||
|
./FairCoind -txindex -reindex-chainstate
|
||||||
|
|
||||||
|
### Configure
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"user": "faircoinrpc",
|
||||||
|
"pass": "password",
|
||||||
|
"host": "127.0.0.1",
|
||||||
|
"port": "3021",
|
||||||
|
"genesisTx": "7c27ade2c28e67ed3077f8f77b8ea6d36d4f5eba04c099be3c9faa9a4a04c046",
|
||||||
|
"genesisBlock": "beed44fa5e96150d95d56ebd5d2625781825a9407a5215dd7eda723373a0a1d7"
|
||||||
|
}
|
||||||
|
```
|
||||||
43
main.go
Normal file
43
main.go
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"log"
|
||||||
|
|
||||||
|
"github.com/btcsuite/btcrpcclient"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
|
||||||
|
readConfig("config.json")
|
||||||
|
|
||||||
|
// create new client instance
|
||||||
|
client, err := btcrpcclient.New(&btcrpcclient.ConnConfig{
|
||||||
|
HTTPPostMode: true,
|
||||||
|
DisableTLS: true,
|
||||||
|
Host: config.Host + ":" + config.Port,
|
||||||
|
User: config.User,
|
||||||
|
Pass: config.Pass,
|
||||||
|
}, nil)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("error creating new btc client: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// list accounts
|
||||||
|
accounts, err := client.ListAccounts()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("error listing accounts: %v", err)
|
||||||
|
}
|
||||||
|
// iterate over accounts (map[string]btcutil.Amount) and write to stdout
|
||||||
|
for label, amount := range accounts {
|
||||||
|
log.Printf("%s: %s", label, amount)
|
||||||
|
}
|
||||||
|
|
||||||
|
explore(client, config.GenesisBlock)
|
||||||
|
|
||||||
|
// Get the current block count.
|
||||||
|
blockCount, err := client.GetBlockCount()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
log.Printf("Block count: %d", blockCount)
|
||||||
|
}
|
||||||
24
readConfig.go
Normal file
24
readConfig.go
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"io/ioutil"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Config struct {
|
||||||
|
User string `json:"user"`
|
||||||
|
Pass string `json:"pass"`
|
||||||
|
Host string `json:"host"`
|
||||||
|
Port string `json:"port"`
|
||||||
|
GenesisTx string `json:"genesisTx"`
|
||||||
|
GenesisBlock string `json:"genesisBlock"`
|
||||||
|
}
|
||||||
|
|
||||||
|
var config Config
|
||||||
|
|
||||||
|
func readConfig(path string) {
|
||||||
|
file, err := ioutil.ReadFile(path)
|
||||||
|
check(err)
|
||||||
|
content := string(file)
|
||||||
|
json.Unmarshal([]byte(content), &config)
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user