2019-04-16 05:50:30 +00:00
|
|
|
package main
|
|
|
|
|
|
|
|
import "fmt"
|
2019-04-16 06:03:37 +00:00
|
|
|
import "log"
|
2019-04-16 06:07:17 +00:00
|
|
|
import "encoding/hex"
|
2019-04-16 06:03:37 +00:00
|
|
|
import "crypto/sha256"
|
|
|
|
import "github.com/cbergoon/merkletree"
|
2019-04-16 05:50:30 +00:00
|
|
|
|
|
|
|
// Rough API
|
|
|
|
|
|
|
|
// eg swarm feeds, etc - any trusted point
|
|
|
|
// getRoot(method, groupID)
|
|
|
|
|
|
|
|
// list or merkle root and payment
|
|
|
|
// to untrusted node
|
|
|
|
// sync(root, [have], node) payment?
|
|
|
|
|
|
|
|
//verify
|
|
|
|
//slash
|
|
|
|
//court
|
|
|
|
|
|
|
|
// define how untrusted nodes get in first place
|
|
|
|
|
2019-04-16 06:03:37 +00:00
|
|
|
// TestContent implements the Content interface provided by merkletree,
|
|
|
|
// it represents the content stored in the tree.
|
|
|
|
type TestContent struct {
|
|
|
|
x string
|
|
|
|
}
|
|
|
|
|
|
|
|
// CalculateHash hashes the value of a TestContent
|
|
|
|
func (t TestContent) CalculateHash() ([]byte, error) {
|
|
|
|
h := sha256.New()
|
|
|
|
if _, err := h.Write([]byte(t.x)); err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
return h.Sum(nil), nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// Equals tests for equality of two Contents
|
|
|
|
func (t TestContent) Equals(other merkletree.Content) (bool, error) {
|
|
|
|
return t.x == other.(TestContent).x, nil
|
|
|
|
}
|
|
|
|
|
2019-04-16 05:50:30 +00:00
|
|
|
func main() {
|
|
|
|
fmt.Printf("Hello Merkleslash\n")
|
2019-04-16 06:03:37 +00:00
|
|
|
|
|
|
|
var list []merkletree.Content
|
|
|
|
list = append(list, TestContent{x: "Hello"})
|
|
|
|
list = append(list, TestContent{x: "Hi"})
|
|
|
|
list = append(list, TestContent{x: "Hey"})
|
|
|
|
list = append(list, TestContent{x: "Hola"})
|
|
|
|
|
|
|
|
t, err := merkletree.NewTree(list)
|
|
|
|
if err != nil {
|
|
|
|
log.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
mr := t.MerkleRoot()
|
2019-04-16 06:07:17 +00:00
|
|
|
log.Println("Merkle Root:" , hex.EncodeToString(mr))
|
2019-04-16 06:03:37 +00:00
|
|
|
|
|
|
|
vt, err := t.VerifyTree()
|
|
|
|
if err != nil {
|
|
|
|
log.Fatal(err)
|
|
|
|
}
|
2019-04-16 06:07:17 +00:00
|
|
|
log.Println("Verify Tree:", vt)
|
2019-04-16 06:03:37 +00:00
|
|
|
|
|
|
|
vc, err := t.VerifyContent(list[0])
|
|
|
|
if err != nil {
|
|
|
|
log.Fatal(err)
|
|
|
|
}
|
2019-04-16 06:07:17 +00:00
|
|
|
log.Println("Verify Content:", vc)
|
2019-04-16 06:03:37 +00:00
|
|
|
|
2019-04-16 06:07:17 +00:00
|
|
|
//log.Println(t)
|
2019-04-16 06:03:37 +00:00
|
|
|
|
2019-04-16 05:50:30 +00:00
|
|
|
}
|