arnaucube
arnaucube/go-dvotePublic Self-hosted repository
go-dvote/cmd/relay/relay.go
cmd/relay/relay.goRaw
 1package main
 2
 3import (
 4	"fmt"
 5	"time"
 6	"encoding/gob"
 7	"bytes"
 8	"os"
 9	"flag"
10	"github.com/vocdoni/go-dvote/batch"
11	"github.com/vocdoni/go-dvote/net"
12	"github.com/vocdoni/go-dvote/db"
13	"github.com/vocdoni/go-dvote/data"
14	"github.com/vocdoni/go-dvote/chain"
15)
16
17var dbPath = "~/.dvote/relay.db"
18var batchSeconds = 10 //seconds
19var batchSize = 3 //packets
20
21var err error
22var batchTimer *time.Ticker
23var batchSignal chan bool
24var signal bool
25var transportType net.TransportID
26
27
28func main() {
29
30	db, err := db.NewLevelDbStorage(dbPath, false)
31	if err != nil {
32		panic(err)
33	}
34	defer db.Close()
35
36	batch.Setup(db)
37
38	//gather transport type flag
39	var transportIDString string
40	flag.StringVar(&transportIDString, "transport", "PubSub", "Transport must be one of: PubSub, HTTP")
41	flag.Parse()
42	transportType = net.TransportIDFromString(transportIDString)
43
44
45	batchTimer = time.NewTicker(time.Second * time.Duration(batchSeconds))
46	batchSignal = make(chan bool)
47
48	batch.BatchSignal = batchSignal
49	batch.BatchSize = batchSize
50
51	node, err := chain.Init()
52	node.Start()
53
54	transport, err := net.Init(transportType)
55	if err != nil {
56		os.Exit(1)
57	}
58	fmt.Println("Entering main loop")
59	go transport.Listen()
60	for {
61		select {
62		case <- batchTimer.C:
63			//fmt.Println("Timer triggered")
64//			//fmt.Println(batch.Create())
65			//replace with chain link
66		case signal := <-batchSignal:
67			if signal == true {
68				fmt.Println("Signal triggered")
69				ns, bs := batch.Fetch()
70				buf := &bytes.Buffer{}
71				gob.NewEncoder(buf).Encode(bs)
72				bb := buf.Bytes()
73				cid := data.Publish(bb)
74				data.Pin(cid)
75				fmt.Printf("Batch published at: %s \n", cid)
76				node.LinkBatch([]byte(cid))
77				// add to chain
78				// announce to pubsub
79				//fmt.Println("Nullifiers:")
80				//fmt.Println(n)
81				//fmt.Println("Batch:")
82				//fmt.Println(b)
83				batch.Compact(ns)
84			}
85		default:
86			continue
87		}
88	}
89}