added primitive ballot/envelope generator, changed type naming

This commit is contained in:
imw
2018-12-19 13:36:51 +01:00
parent ddfc8e1187
commit 6cce8cb242
5 changed files with 148 additions and 30 deletions

View File

@@ -14,22 +14,21 @@ var currentBatchSize int
var err error var err error
func Setup(l *db.LevelDbStorage) { func Setup(l *db.LevelDbStorage) {
rdb = l.WithPrefix([]byte("relay")) rdb = l.WithPrefix([]byte("relay_"))
bdb = l.WithPrefix([]byte("batch")) bdb = l.WithPrefix([]byte("batch_"))
fmt.Println("Batch storage:")
fmt.Println(bdb)
} }
//add (queue for counting) //add (queue for counting)
func Add(p types.Packet) error { func Add(p types.Ballot) error {
fmt.Println(bdb)
err := bdb.Put([]byte(fmt.Sprintf("%v", p.Nullifier)),[]byte(fmt.Sprintf("%v", p))) err := bdb.Put([]byte(fmt.Sprintf("%v", p.Nullifier)),[]byte(fmt.Sprintf("%v", p)))
if err != nil { if err != nil {
return err return err
} }
//this actually needs to see if it was added
currentBatchSize++ currentBatchSize++
fmt.Println(bdb.Info())
if currentBatchSize >= BatchSize { if currentBatchSize >= BatchSize {
BatchSignal <- true BatchSignal <- true
} }
@@ -37,17 +36,23 @@ func Add(p types.Packet) error {
} }
//create (return batch) //create (return batch)
//k is []byte nullifier
//v is []byte package
func Create() []byte { func Create() []byte {
var b []byte var b []byte
var i int
iter := bdb.Iter() iter := bdb.Iter()
for iter.Next() { for iter.Next() {
//k := iter.Key() k := iter.Key()
//v := iter.Value() v := iter.Value()
err := iter.Error() err := iter.Error()
if err != nil { if err != nil {
panic(err) panic(err)
} }
fmt.Println(i)
fmt.Println(string(k))
fmt.Println(string(v))
i++
//put p in batch //put p in batch
//rdb.Put(iter.Key(), iter.Val(), nil) //rdb.Put(iter.Key(), iter.Val(), nil)
//bdb.Delete(iter.Key(), nil) //bdb.Delete(iter.Key(), nil)

104
generator/generator.go Normal file
View File

@@ -0,0 +1,104 @@
package main
import (
"os"
"strconv"
"time"
"fmt"
"math/rand"
"encoding/json"
"encoding/base64"
"net/http"
"bytes"
"io/ioutil"
"github.com/vocdoni/dvote-relay/types"
)
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())
url := "http://localhost:8080/submit"
fmt.Println("URL:>", url)
for {
select {
case <- timer.C:
fmt.Println(makeEnvelope(makeBallot()))
var jsonStr = []byte(makeEnvelope(makeBallot()))
req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonStr))
req.Header.Set("X-Custom-Header", "myvalue")
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
fmt.Println("response Status:", resp.Status)
fmt.Println("response Headers:", resp.Header)
body, _ := ioutil.ReadAll(resp.Body)
fmt.Println("response Body:", string(body))
default:
continue
}
}
}

View File

@@ -40,12 +40,12 @@ func main() {
select { select {
case <- batchTimer.C: case <- batchTimer.C:
fmt.Println("Timer triggered") fmt.Println("Timer triggered")
fmt.Println(batch.Create()) // fmt.Println(batch.Create())
//replace with chain link //replace with chain link
case signal := <-batchSignal: case signal := <-batchSignal:
if signal == true { if signal == true {
fmt.Println("Signal triggered") fmt.Println("Signal triggered")
fmt.Println(batch.Create()) batch.Create()
} }
default: default:
continue continue

View File

@@ -13,30 +13,38 @@ import (
func parse(rw http.ResponseWriter, request *http.Request) { func parse(rw http.ResponseWriter, request *http.Request) {
decoder := json.NewDecoder(request.Body) decoder := json.NewDecoder(request.Body)
var s types.Submission var e types.Envelope
var p types.Packet var b types.Ballot
err := decoder.Decode(&s)
err := decoder.Decode(&e)
if err != nil { if err != nil {
panic(err) panic(err)
} }
err = json.Unmarshal(e.Ballot, &b)
if err != nil {
panic(err)
}
//check PoW //check PoW
//check key //check key
//decrypt //decrypt
//check franchise //check franchise
//construct packet //construct packet
p.PID = "1" //this should should be randomized, or actually taken from input
p.Nullifier = []byte{1,2,3} //b.PID = "1"
p.Vote = []byte{4,5,6} //b.Nullifier = []byte{1,2,3}
p.Franchise = []byte{7,8,9} //b.Vote = []byte{4,5,6}
err = batch.Add(p) //b.Franchise = []byte{7,8,9}
err = batch.Add(b)
if err != nil { if err != nil {
panic(err) panic(err)
} }
j, err := json.Marshal(s) j, err := json.Marshal(e)
io.WriteString(rw, string(j)) io.WriteString(rw, string(j))
} }

View File

@@ -4,11 +4,19 @@ import (
"time" "time"
) )
type Submission struct { type Ballot struct {
Type string Type string
Nonce []byte PID string
Nullifier []byte
Vote []byte
Franchise []byte
}
type Envelope struct {
Type string
Nonce uint64
KeyProof []byte KeyProof []byte
Package []byte Ballot []byte
Timestamp time.Time Timestamp time.Time
} }
@@ -21,10 +29,3 @@ type Batch struct {
Signature string Signature string
} }
type Packet struct {
PID string
Nullifier []byte
Vote []byte
Franchise []byte
}