diff --git a/batch/batch.go b/batch/batch.go index fdb793c..a483792 100644 --- a/batch/batch.go +++ b/batch/batch.go @@ -14,22 +14,21 @@ var currentBatchSize int var err error func Setup(l *db.LevelDbStorage) { - rdb = l.WithPrefix([]byte("relay")) - bdb = l.WithPrefix([]byte("batch")) - fmt.Println("Batch storage:") - fmt.Println(bdb) + rdb = l.WithPrefix([]byte("relay_")) + bdb = l.WithPrefix([]byte("batch_")) } //add (queue for counting) -func Add(p types.Packet) error { - fmt.Println(bdb) +func Add(p types.Ballot) error { err := bdb.Put([]byte(fmt.Sprintf("%v", p.Nullifier)),[]byte(fmt.Sprintf("%v", p))) if err != nil { return err } + //this actually needs to see if it was added currentBatchSize++ + fmt.Println(bdb.Info()) if currentBatchSize >= BatchSize { BatchSignal <- true } @@ -37,17 +36,23 @@ func Add(p types.Packet) error { } //create (return batch) +//k is []byte nullifier +//v is []byte package func Create() []byte { var b []byte - + var i int iter := bdb.Iter() for iter.Next() { - //k := iter.Key() - //v := iter.Value() + k := iter.Key() + v := iter.Value() err := iter.Error() if err != nil { panic(err) } + fmt.Println(i) + fmt.Println(string(k)) + fmt.Println(string(v)) + i++ //put p in batch //rdb.Put(iter.Key(), iter.Val(), nil) //bdb.Delete(iter.Key(), nil) diff --git a/generator/generator.go b/generator/generator.go new file mode 100644 index 0000000..5e0bd40 --- /dev/null +++ b/generator/generator.go @@ -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 + } + } +} diff --git a/main.go b/main.go index 82c7608..a8c44ea 100644 --- a/main.go +++ b/main.go @@ -40,12 +40,12 @@ func main() { select { case <- batchTimer.C: fmt.Println("Timer triggered") - fmt.Println(batch.Create()) +// fmt.Println(batch.Create()) //replace with chain link case signal := <-batchSignal: if signal == true { fmt.Println("Signal triggered") - fmt.Println(batch.Create()) + batch.Create() } default: continue diff --git a/net/net.go b/net/net.go index 6ac6bb9..c2679ce 100644 --- a/net/net.go +++ b/net/net.go @@ -13,30 +13,38 @@ import ( func parse(rw http.ResponseWriter, request *http.Request) { decoder := json.NewDecoder(request.Body) - var s types.Submission - var p types.Packet - err := decoder.Decode(&s) + var e types.Envelope + var b types.Ballot + err := decoder.Decode(&e) if err != nil { panic(err) } + err = json.Unmarshal(e.Ballot, &b) + if err != nil { + panic(err) + } + + //check PoW //check key //decrypt //check franchise //construct packet - p.PID = "1" - p.Nullifier = []byte{1,2,3} - p.Vote = []byte{4,5,6} - p.Franchise = []byte{7,8,9} - err = batch.Add(p) + //this should should be randomized, or actually taken from input + //b.PID = "1" + //b.Nullifier = []byte{1,2,3} + //b.Vote = []byte{4,5,6} + //b.Franchise = []byte{7,8,9} + + err = batch.Add(b) if err != nil { panic(err) } - j, err := json.Marshal(s) + j, err := json.Marshal(e) io.WriteString(rw, string(j)) } diff --git a/types/types.go b/types/types.go index 3c1a604..87ad322 100644 --- a/types/types.go +++ b/types/types.go @@ -4,11 +4,19 @@ import ( "time" ) -type Submission struct { +type Ballot struct { Type string - Nonce []byte + PID string + Nullifier []byte + Vote []byte + Franchise []byte +} + +type Envelope struct { + Type string + Nonce uint64 KeyProof []byte - Package []byte + Ballot []byte Timestamp time.Time } @@ -21,10 +29,3 @@ type Batch struct { Signature string } -type Packet struct { - PID string - Nullifier []byte - Vote []byte - Franchise []byte -} -