proof of concept connection to ZeroMQ
parent
8676db1e14
commit
bc5b99003e
|
@ -26,6 +26,13 @@ CGO_LDFLAGS="-L/path/to/rocksdb -lrocksdb -lstdc++ -lm -lz -lbz2 -lsnappy -llz4
|
|||
go get github.com/tecbot/gorocksdb
|
||||
```
|
||||
|
||||
Install ZeroMQ: https://github.com/zeromq/libzmq
|
||||
|
||||
Install Go interface to ZeroMQ:
|
||||
```
|
||||
go get github.com/pebbe/zmq4
|
||||
```
|
||||
|
||||
Install blockbook:
|
||||
|
||||
```
|
||||
|
|
|
@ -0,0 +1,39 @@
|
|||
package bitcoin
|
||||
|
||||
import (
|
||||
"encoding/binary"
|
||||
"encoding/hex"
|
||||
"log"
|
||||
|
||||
zmq "github.com/pebbe/zmq4"
|
||||
)
|
||||
|
||||
func ZeroMQ(binding string) {
|
||||
context, err := zmq.NewContext()
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
socket, err := context.NewSocket(zmq.SUB)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
socket.SetSubscribe("hashblock")
|
||||
socket.SetSubscribe("hashtx")
|
||||
socket.SetSubscribe("rawblock")
|
||||
socket.SetSubscribe("rawtx")
|
||||
socket.Connect(binding)
|
||||
defer socket.Close()
|
||||
for i := 0; i < 101; i++ {
|
||||
msg, err := socket.RecvMessageBytes(0)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
topic := string(msg[0])
|
||||
body := hex.EncodeToString(msg[1])
|
||||
sequence := uint32(0)
|
||||
if len(msg[len(msg)-1]) == 4 {
|
||||
sequence = binary.LittleEndian.Uint32(msg[len(msg)-1])
|
||||
}
|
||||
log.Printf("%s-%d (%v) %s", topic, sequence, msg[len(msg)-1], body)
|
||||
}
|
||||
}
|
|
@ -54,12 +54,19 @@ var (
|
|||
dryRun = flag.Bool("dryrun", false, "do not index blocks, only download")
|
||||
parse = flag.Bool("parse", false, "use in-process block parsing")
|
||||
|
||||
httpServerBinding = flag.String("httpserver", "nil", "http server binding [address]:port, by default no http server")
|
||||
httpServerBinding = flag.String("httpserver", "nil", "http server binding [address]:port, if missing no http server")
|
||||
|
||||
zeroMQBinding = flag.String("zeromq", "nil", "binding to zeromq, if missing no zeromq connection")
|
||||
)
|
||||
|
||||
func main() {
|
||||
flag.Parse()
|
||||
|
||||
if *zeroMQBinding != "nil" {
|
||||
bitcoin.ZeroMQ(*zeroMQBinding)
|
||||
return
|
||||
}
|
||||
|
||||
if *repair {
|
||||
if err := db.RepairRocksDB(*dbPath); err != nil {
|
||||
log.Fatal(err)
|
||||
|
|
Loading…
Reference in New Issue