diff --git a/example/README.md b/example/README.md index 25602f5..cbe12ac 100644 --- a/example/README.md +++ b/example/README.md @@ -1,7 +1,9 @@ # Trade Example - export a key `export KEY_PASSWD="blarg test"` -- spawn two servers: `./example 8080 &` `./example 8081` +- spawn two servers: + - `./example 8080 ./1.key &` + - `./example 8081 ./2.key &` - register the servers: - `./trade servers add localhost:8080` - `./trade servers add localhost:8081` diff --git a/example/server.go b/example/server.go index a6928c4..c9b4b47 100644 --- a/example/server.go +++ b/example/server.go @@ -15,11 +15,13 @@ func main() { fmt.Println("no KEY_PASSWD environment variable") os.Exit(1) } - if len(os.Args) != 1 { - fmt.Println("no key path specified") + if len(os.Args) != 4 { + fmt.Println("usage: ./example port keypath storepath") os.Exit(1) } - keypath := os.Args[1] + port := os.Args[2] + keypath := os.Args[3] + storepath := os.Args[4] // spawn trade KV trade.Load(passwd, keypath, GLOBAL_KV) // load self key or generate one diff --git a/example/store.go b/example/store.go index 12239ac..dfbf436 100644 --- a/example/store.go +++ b/example/store.go @@ -1,6 +1,6 @@ package example -import "git.bivouac.wiki/go/gobstore" +import "git.bivouac.wiki/use/gobstore" var GLOBAL_KV gobstore.GobStore[string] diff --git a/get.go b/get.go index 1dcb1be..1f3b80e 100644 --- a/get.go +++ b/get.go @@ -1,11 +1,11 @@ package trade // Get retrieves and stores a value from peers -func (t *KV) Get(k string) (any, error) { +func (kv *KV[t]) Get(k string) (t, error) { // debate over expiry of values or using a common KV interface... // like using kvcache... // try getting locally: - res, ok := t.local[k] + res, ok := kv.local[k] if !ok { // for peer in peers, grab value: } diff --git a/go.mod b/go.mod index 34fb44f..2439fdf 100644 --- a/go.mod +++ b/go.mod @@ -5,6 +5,7 @@ go 1.22.5 require ( aead.dev/minisign v0.3.0 filippo.io/age v1.2.1 + git.bivouac.wiki/use/gobstore v0.0.0-20250112095151-9564d5656a22 ) require ( diff --git a/go.sum b/go.sum index ca971b7..f66afca 100644 --- a/go.sum +++ b/go.sum @@ -2,6 +2,8 @@ aead.dev/minisign v0.3.0 h1:8Xafzy5PEVZqYDNP60yJHARlW1eOQtsKNp/Ph2c0vRA= aead.dev/minisign v0.3.0/go.mod h1:NLvG3Uoq3skkRMDuc3YHpWUTMTrSExqm+Ij73W13F6Y= filippo.io/age v1.2.1 h1:X0TZjehAZylOIj4DubWYU1vWQxv9bJpo+Uu2/LGhi1o= filippo.io/age v1.2.1/go.mod h1:JL9ew2lTN+Pyft4RiNGguFfOpewKwSHm5ayKD/A4004= +git.bivouac.wiki/use/gobstore v0.0.0-20250112095151-9564d5656a22 h1:97PasJ12dLCrveYbH9HioN3KedBrC8KTVopDuiU07BI= +git.bivouac.wiki/use/gobstore v0.0.0-20250112095151-9564d5656a22/go.mod h1:cfFzcWO3zypVYiJrgQLSLil5HPWFXaB/JP7rUJQRCZU= golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI= golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM= golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= diff --git a/kv.go b/kv.go index 8caf809..dddaa37 100644 --- a/kv.go +++ b/kv.go @@ -1,5 +1,21 @@ package trade -type KV struct { - local map[string]any +type Store interface { + Get(string) any + Set(string, any) + Del(string) +} + +type KV[t any] struct { + local map[string]t + store Store + peers []Server +} + +func NewKV[t any](s Store) KV[t] { + res := KV[t]{ + local: make(map[string]t), + store: s, + } + return res } diff --git a/regaddserver.go b/regaddserver.go index 248dca5..e61a9cf 100644 --- a/regaddserver.go +++ b/regaddserver.go @@ -1,7 +1,7 @@ package trade // add a server at an address -func RegAddServer(a Addr) error { +func RegAddServer(addr string) error { // read the server's key // check signature // sign servers key diff --git a/regdelserver.go b/regdelserver.go index 8860d56..40b20ef 100644 --- a/regdelserver.go +++ b/regdelserver.go @@ -1,6 +1,6 @@ package trade // RegDelServer revokes a server's trade access -func RegDelServer() { +func RegDelServer(addr string) { } diff --git a/set.go b/set.go index d49b0f9..904fa5c 100644 --- a/set.go +++ b/set.go @@ -1,9 +1,9 @@ package trade // Set stores & sends a value to all verified peers -func (t *KV) Set(k string, v any) error { +func (kv *KV[t]) Set(k string, v t) error { // store in local cache - t.local[k] = v + kv.local[k] = v // for server in servers return err