diff --git a/cmd/ledger-demo/main.go b/cmd/ledger-demo/main.go new file mode 100644 index 0000000..8c03075 --- /dev/null +++ b/cmd/ledger-demo/main.go @@ -0,0 +1,56 @@ +package main + +import ( + "encoding/json" + "flag" + "fmt" + "os" + "time" + + "shadowmo/Cognition-OS/runtime/ledger" +) + +func main() { + path := flag.String("file", "ledger-demo.jsonl", "path to ledger file") + op := flag.String("op", "append", "operation: append|verify|show") + flag.Parse() + + l, err := ledger.Open(*path) + if err != nil { + fmt.Fprintln(os.Stderr, "open error:", err) + os.Exit(1) + } + defer l.Close() + + switch *op { + case "append": + payload := map[string]interface{}{ + "msg": fmt.Sprintf("demo event at %s", time.Now().Format(time.RFC3339)), + } + h, err := l.Append("demo_event", payload) + if err != nil { + fmt.Fprintln(os.Stderr, "append error:", err) + os.Exit(1) + } + fmt.Println("appended hash:", h) + case "verify": + if err := l.Verify(); err != nil { + fmt.Fprintln(os.Stderr, "verify failed:", err) + os.Exit(2) + } + fmt.Println("ledger verified ok") + case "show": + f, err := os.Open(*path) + if err != nil { fmt.Fprintln(os.Stderr, "open:", err); os.Exit(1) } + defer f.Close() + dec := json.NewDecoder(f) + for { + var e map[string]interface{} + if err := dec.Decode(&e); err != nil { break } + b, _ := json.MarshalIndent(e, "", " ") + fmt.Println(string(b)) + } + default: + fmt.Fprintln(os.Stderr, "unknown op") + } +}