package main
|
|
|
|
import (
|
|
"os"
|
|
"strconv"
|
|
"time"
|
|
"fmt"
|
|
"math/rand"
|
|
"encoding/json"
|
|
"encoding/base64"
|
|
// "net/http"
|
|
// "bytes"
|
|
// "io/ioutil"
|
|
"github.com/vocdoni/go-dvote/types"
|
|
"github.com/vocdoni/go-dvote/net"
|
|
)
|
|
|
|
func makeBallot() string {
|
|
var bal types.Ballot
|
|
|
|
bal.Type = "ballot0"
|
|
|
|
pidBytes := make([]byte, 32)
|
|
rand.Read(pidBytes)
|
|
bal.PID = base64.StdEncoding.EncodeToString(pidBytes)
|
|
|
|
nullifier := make([]byte, 32)
|
|
rand.Read(nullifier)
|
|
bal.Nullifier = nullifier
|
|
|
|
vote := make([]byte, 32)
|
|
rand.Read(vote)
|
|
bal.Vote = vote
|
|
|
|
franchise := make([]byte, 32)
|
|
rand.Read(franchise)
|
|
bal.Franchise = franchise
|
|
|
|
|
|
b, err := json.Marshal(bal)
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
return "error"
|
|
}
|
|
//todo: add encryption, pow
|
|
return string(b)
|
|
}
|
|
|
|
func makeEnvelope(ballot string) string {
|
|
var env types.Envelope
|
|
|
|
env.Type = "envelope0"
|
|
|
|
env.Nonce = rand.Uint64()
|
|
|
|
kp := make([]byte, 4)
|
|
rand.Read(kp)
|
|
env.KeyProof = kp
|
|
|
|
env.Ballot = []byte(ballot)
|
|
|
|
env.Timestamp = time.Now()
|
|
|
|
e, err := json.Marshal(env)
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
return "error"
|
|
}
|
|
//todo: add encryption, pow
|
|
return string(e)
|
|
|
|
}
|
|
|
|
func main() {
|
|
interval := os.Args[1]
|
|
i, _ := strconv.Atoi(interval)
|
|
timer := time.NewTicker(time.Millisecond * time.Duration(i))
|
|
rand.Seed(time.Now().UnixNano())
|
|
topic := "vocdoni_pubsub_testing"
|
|
fmt.Println("PubSub Topic:>", topic)
|
|
|
|
|
|
for {
|
|
select {
|
|
case <- timer.C:
|
|
var jsonStr = makeEnvelope(makeBallot())
|
|
fmt.Println(jsonStr)
|
|
net.PsPublish(topic, jsonStr)
|
|
default:
|
|
continue
|
|
}
|
|
}
|
|
}
|