blarg
This commit is contained in:
parent
c70dd77203
commit
cbc276acf0
10 changed files with 36 additions and 13 deletions
|
@ -1,7 +1,9 @@
|
||||||
# Trade Example
|
# Trade Example
|
||||||
|
|
||||||
- export a key `export KEY_PASSWD="blarg test"`
|
- 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:
|
- register the servers:
|
||||||
- `./trade servers add localhost:8080`
|
- `./trade servers add localhost:8080`
|
||||||
- `./trade servers add localhost:8081`
|
- `./trade servers add localhost:8081`
|
||||||
|
|
|
@ -15,11 +15,13 @@ func main() {
|
||||||
fmt.Println("no KEY_PASSWD environment variable")
|
fmt.Println("no KEY_PASSWD environment variable")
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
if len(os.Args) != 1 {
|
if len(os.Args) != 4 {
|
||||||
fmt.Println("no key path specified")
|
fmt.Println("usage: ./example port keypath storepath")
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
keypath := os.Args[1]
|
port := os.Args[2]
|
||||||
|
keypath := os.Args[3]
|
||||||
|
storepath := os.Args[4]
|
||||||
// spawn trade KV
|
// spawn trade KV
|
||||||
trade.Load(passwd, keypath, GLOBAL_KV)
|
trade.Load(passwd, keypath, GLOBAL_KV)
|
||||||
// load self key or generate one
|
// load self key or generate one
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package example
|
package example
|
||||||
|
|
||||||
import "git.bivouac.wiki/go/gobstore"
|
import "git.bivouac.wiki/use/gobstore"
|
||||||
|
|
||||||
var GLOBAL_KV gobstore.GobStore[string]
|
var GLOBAL_KV gobstore.GobStore[string]
|
||||||
|
|
||||||
|
|
4
get.go
4
get.go
|
@ -1,11 +1,11 @@
|
||||||
package trade
|
package trade
|
||||||
|
|
||||||
// Get retrieves and stores a value from peers
|
// 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...
|
// debate over expiry of values or using a common KV interface...
|
||||||
// like using kvcache...
|
// like using kvcache...
|
||||||
// try getting locally:
|
// try getting locally:
|
||||||
res, ok := t.local[k]
|
res, ok := kv.local[k]
|
||||||
if !ok {
|
if !ok {
|
||||||
// for peer in peers, grab value:
|
// for peer in peers, grab value:
|
||||||
}
|
}
|
||||||
|
|
1
go.mod
1
go.mod
|
@ -5,6 +5,7 @@ go 1.22.5
|
||||||
require (
|
require (
|
||||||
aead.dev/minisign v0.3.0
|
aead.dev/minisign v0.3.0
|
||||||
filippo.io/age v1.2.1
|
filippo.io/age v1.2.1
|
||||||
|
git.bivouac.wiki/use/gobstore v0.0.0-20250112095151-9564d5656a22
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
|
|
2
go.sum
2
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=
|
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 h1:X0TZjehAZylOIj4DubWYU1vWQxv9bJpo+Uu2/LGhi1o=
|
||||||
filippo.io/age v1.2.1/go.mod h1:JL9ew2lTN+Pyft4RiNGguFfOpewKwSHm5ayKD/A4004=
|
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 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI=
|
||||||
golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM=
|
golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM=
|
||||||
golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws=
|
golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws=
|
||||||
|
|
20
kv.go
20
kv.go
|
@ -1,5 +1,21 @@
|
||||||
package trade
|
package trade
|
||||||
|
|
||||||
type KV struct {
|
type Store interface {
|
||||||
local map[string]any
|
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
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package trade
|
package trade
|
||||||
|
|
||||||
// add a server at an address
|
// add a server at an address
|
||||||
func RegAddServer(a Addr) error {
|
func RegAddServer(addr string) error {
|
||||||
// read the server's key
|
// read the server's key
|
||||||
// check signature
|
// check signature
|
||||||
// sign servers key
|
// sign servers key
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package trade
|
package trade
|
||||||
|
|
||||||
// RegDelServer revokes a server's trade access
|
// RegDelServer revokes a server's trade access
|
||||||
func RegDelServer() {
|
func RegDelServer(addr string) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
4
set.go
4
set.go
|
@ -1,9 +1,9 @@
|
||||||
package trade
|
package trade
|
||||||
|
|
||||||
// Set stores & sends a value to all verified peers
|
// 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
|
// store in local cache
|
||||||
t.local[k] = v
|
kv.local[k] = v
|
||||||
// for server in servers
|
// for server in servers
|
||||||
|
|
||||||
return err
|
return err
|
||||||
|
|
Loading…
Add table
Reference in a new issue