continue prototyping
This commit is contained in:
11
go.mod
11
go.mod
@@ -5,7 +5,7 @@ go 1.22.5
|
||||
require (
|
||||
github.com/hsanjuan/ipfs-lite v1.8.2
|
||||
github.com/ipfs/go-datastore v0.6.0
|
||||
github.com/ipfs/go-ds-badger v0.3.0
|
||||
github.com/ipfs/go-ds-badger2 v0.1.3
|
||||
github.com/ipfs/go-ds-crdt v0.5.2
|
||||
github.com/ipfs/go-log/v2 v2.5.1
|
||||
github.com/libp2p/go-libp2p v0.35.4
|
||||
@@ -15,11 +15,12 @@ require (
|
||||
)
|
||||
|
||||
require (
|
||||
github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96 // indirect
|
||||
github.com/DataDog/zstd v1.4.1 // indirect
|
||||
github.com/Jorropo/jsync v1.0.1 // indirect
|
||||
github.com/alecthomas/units v0.0.0-20240626203959-61d1e3462e30 // indirect
|
||||
github.com/benbjohnson/clock v1.3.5 // indirect
|
||||
github.com/beorn7/perks v1.0.1 // indirect
|
||||
github.com/cespare/xxhash v1.1.0 // indirect
|
||||
github.com/cespare/xxhash/v2 v2.3.0 // indirect
|
||||
github.com/containerd/cgroups v1.1.0 // indirect
|
||||
github.com/coreos/go-systemd/v22 v22.5.0 // indirect
|
||||
@@ -28,8 +29,9 @@ require (
|
||||
github.com/davecgh/go-spew v1.1.1 // indirect
|
||||
github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c // indirect
|
||||
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 // indirect
|
||||
github.com/dgraph-io/badger v1.6.2 // indirect
|
||||
github.com/dgraph-io/badger/v2 v2.2007.3 // indirect
|
||||
github.com/dgraph-io/ristretto v0.1.1 // indirect
|
||||
github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect
|
||||
github.com/docker/go-units v0.5.0 // indirect
|
||||
github.com/dustin/go-humanize v1.0.1 // indirect
|
||||
github.com/elastic/gosigar v0.14.3 // indirect
|
||||
@@ -42,6 +44,7 @@ require (
|
||||
github.com/gogo/protobuf v1.3.2 // indirect
|
||||
github.com/golang/glog v1.2.2 // indirect
|
||||
github.com/golang/protobuf v1.5.4 // indirect
|
||||
github.com/golang/snappy v0.0.1 // indirect
|
||||
github.com/google/gopacket v1.1.19 // indirect
|
||||
github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8 // indirect
|
||||
github.com/google/uuid v1.6.0 // indirect
|
||||
@@ -130,7 +133,7 @@ require (
|
||||
github.com/prometheus/common v0.55.0 // indirect
|
||||
github.com/prometheus/procfs v0.15.1 // indirect
|
||||
github.com/quic-go/qpack v0.4.0 // indirect
|
||||
github.com/quic-go/quic-go v0.45.1 // indirect
|
||||
github.com/quic-go/quic-go v0.45.2 // indirect
|
||||
github.com/quic-go/webtransport-go v0.8.0 // indirect
|
||||
github.com/raulk/go-watchdog v1.3.0 // indirect
|
||||
github.com/spaolacci/murmur3 v1.1.0 // indirect
|
||||
|
||||
25
go.sum
25
go.sum
@@ -10,8 +10,11 @@ git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGy
|
||||
github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96 h1:cTp8I5+VIoKjsnZuH8vjyaysT/ses3EvZeaV/1UkF2M=
|
||||
github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8=
|
||||
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
||||
github.com/DataDog/zstd v1.4.1 h1:3oxKN3wbHibqx897utPC2LTQU4J+IHWWJO+glkAkpFM=
|
||||
github.com/DataDog/zstd v1.4.1/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo=
|
||||
github.com/Jorropo/jsync v1.0.1 h1:6HgRolFZnsdfzRUj+ImB9og1JYOxQoReSywkHOGSaUU=
|
||||
github.com/Jorropo/jsync v1.0.1/go.mod h1:jCOZj3vrBCri3bSU3ErUYvevKlnbssrXeCivybS5ABQ=
|
||||
github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE=
|
||||
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
|
||||
github.com/alecthomas/units v0.0.0-20240626203959-61d1e3462e30 h1:t3eaIm0rUkzbrIewtiFmMK5RXHej2XnoXNhxVsAYUfg=
|
||||
github.com/alecthomas/units v0.0.0-20240626203959-61d1e3462e30/go.mod h1:fvzegU4vN3H1qMT+8wDmzjAcDONcgo2/SZ/TyfdUOFs=
|
||||
@@ -27,6 +30,7 @@ github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6r
|
||||
github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBTaaSFSlLx/70C2HPIMNZpVV8+vt/A+FMnYP11g=
|
||||
github.com/buger/jsonparser v0.0.0-20181115193947-bf1c66bbce23/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s=
|
||||
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
|
||||
github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko=
|
||||
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
|
||||
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
|
||||
@@ -62,11 +66,14 @@ github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 h1:rpfIENRNNilwHwZeG5+P150SMrnN
|
||||
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0=
|
||||
github.com/dgraph-io/badger v1.6.2 h1:mNw0qs90GVgGGWylh0umH5iag1j6n/PeJtNvL6KY/x8=
|
||||
github.com/dgraph-io/badger v1.6.2/go.mod h1:JW2yswe3V058sS0kZ2h/AXeDSqFjxnZcRrVH//y2UQE=
|
||||
github.com/dgraph-io/ristretto v0.0.2/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E=
|
||||
github.com/dgraph-io/badger/v2 v2.2007.3 h1:Sl9tQWz92WCbVSe8pj04Tkqlm2boW+KAxd+XSs58SQI=
|
||||
github.com/dgraph-io/badger/v2 v2.2007.3/go.mod h1:26P/7fbL4kUZVEVKLAKXkBXKOydDmM2p1e+NhhnBCAE=
|
||||
github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E=
|
||||
github.com/dgraph-io/ristretto v0.1.1 h1:6CWw5tJNgpegArSHpNHJKldNeq03FQCwYvfMVWajOK8=
|
||||
github.com/dgraph-io/ristretto v0.1.1/go.mod h1:S1GPSBCYCIhmVNfcth17y2zZtQT6wzkzgwUve0VDWWA=
|
||||
github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2 h1:tdlZCpZ/P9DhczCTSixgIKmwPv6+wP5DGjqLYw5SUiA=
|
||||
github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw=
|
||||
github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y=
|
||||
github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw=
|
||||
github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
|
||||
github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4=
|
||||
github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
|
||||
@@ -128,6 +135,8 @@ github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QD
|
||||
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
|
||||
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
|
||||
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
|
||||
github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4=
|
||||
github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
||||
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
|
||||
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
|
||||
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
||||
@@ -188,13 +197,15 @@ github.com/ipfs/go-cid v0.4.1 h1:A/T3qGvxi4kpKWWcPC/PgbvDA2bjVLO7n4UeVwnbs/s=
|
||||
github.com/ipfs/go-cid v0.4.1/go.mod h1:uQHwDeX4c6CtyrFwdqyhpNcxVewur1M7l7fNU7LKwZk=
|
||||
github.com/ipfs/go-cidutil v0.1.0 h1:RW5hO7Vcf16dplUU60Hs0AKDkQAVPVplr7lk97CFL+Q=
|
||||
github.com/ipfs/go-cidutil v0.1.0/go.mod h1:e7OEVBMIv9JaOxt9zaGEmAoSlXW9jdFZ5lP/0PwcfpA=
|
||||
github.com/ipfs/go-datastore v0.5.0/go.mod h1:9zhEApYMTl17C8YDp7JmU7sQZi2/wqiYh73hakZ90Bk=
|
||||
github.com/ipfs/go-datastore v0.5.1/go.mod h1:9zhEApYMTl17C8YDp7JmU7sQZi2/wqiYh73hakZ90Bk=
|
||||
github.com/ipfs/go-datastore v0.6.0 h1:JKyz+Gvz1QEZw0LsX1IBn+JFCJQH4SJVFtM4uWU0Myk=
|
||||
github.com/ipfs/go-datastore v0.6.0/go.mod h1:rt5M3nNbSO/8q1t4LNkLyUwRs8HupMeN/8O4Vn9YAT8=
|
||||
github.com/ipfs/go-detect-race v0.0.1 h1:qX/xay2W3E4Q1U7d9lNs1sU9nvguX0a7319XbyQ6cOk=
|
||||
github.com/ipfs/go-detect-race v0.0.1/go.mod h1:8BNT7shDZPo99Q74BpGMK+4D8Mn4j46UU0LZ723meps=
|
||||
github.com/ipfs/go-ds-badger v0.3.0 h1:xREL3V0EH9S219kFFueOYJJTcjgNSZ2HY1iSvN7U1Ro=
|
||||
github.com/ipfs/go-ds-badger v0.3.0/go.mod h1:1ke6mXNqeV8K3y5Ak2bAA0osoTfmxUdupVCGm4QUIek=
|
||||
github.com/ipfs/go-ds-badger2 v0.1.3 h1:Zo9JicXJ1DmXTN4KOw7oPXkspZ0AWHcAFCP1tQKnegg=
|
||||
github.com/ipfs/go-ds-badger2 v0.1.3/go.mod h1:TPhhljfrgewjbtuL/tczP8dNrBYwwk+SdPYbms/NO9w=
|
||||
github.com/ipfs/go-ds-crdt v0.5.2 h1:3cTJ79/UocAoukkXr0OvpPHcH7v4YwN8xCb8F9pfngc=
|
||||
github.com/ipfs/go-ds-crdt v0.5.2/go.mod h1:sJdQqdCp2Vwv1azk1sPl+Dxk780CQc11rf7B8aWmomc=
|
||||
github.com/ipfs/go-ipfs-blocksutil v0.0.1 h1:Eh/H4pc1hsvhzsQoMEP3Bke/aW5P5rVM1IWFJMcGIPQ=
|
||||
@@ -214,8 +225,8 @@ github.com/ipfs/go-ipld-legacy v0.2.1 h1:mDFtrBpmU7b//LzLSypVrXsD8QxkEWxu5qVxN99
|
||||
github.com/ipfs/go-ipld-legacy v0.2.1/go.mod h1:782MOUghNzMO2DER0FlBR94mllfdCJCkTtDtPM51otM=
|
||||
github.com/ipfs/go-log v1.0.5 h1:2dOuUCB1Z7uoczMWgAyDck5JLb72zHzrMnGnCNNbvY8=
|
||||
github.com/ipfs/go-log v1.0.5/go.mod h1:j0b8ZoR+7+R99LD9jZ6+AJsrzkPbSXbZfGakb5JPtIo=
|
||||
github.com/ipfs/go-log/v2 v2.0.5/go.mod h1:eZs4Xt4ZUJQFM3DlanGhy7TkwwawCZcSByscwkWG+dw=
|
||||
github.com/ipfs/go-log/v2 v2.1.3/go.mod h1:/8d0SH3Su5Ooc31QlL1WysJhvyOTDCjcCZ9Axpmri6g=
|
||||
github.com/ipfs/go-log/v2 v2.5.0/go.mod h1:prSpmC1Gpllc9UYWxDiZDreBYw7zp4Iqp1kOLU9U5UI=
|
||||
github.com/ipfs/go-log/v2 v2.5.1 h1:1XdUzF7048prq4aBjDQQ4SL5RxftpRGdXhNRwKSAlcY=
|
||||
github.com/ipfs/go-log/v2 v2.5.1/go.mod h1:prSpmC1Gpllc9UYWxDiZDreBYw7zp4Iqp1kOLU9U5UI=
|
||||
github.com/ipfs/go-metrics-interface v0.0.1 h1:j+cpbjYvu4R8zbleSs36gvB7jR+wsL2fGD6n0jO4kdg=
|
||||
@@ -425,8 +436,8 @@ github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0leargg
|
||||
github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk=
|
||||
github.com/quic-go/qpack v0.4.0 h1:Cr9BXA1sQS2SmDUWjSofMPNKmvF6IiIfDRmgU0w1ZCo=
|
||||
github.com/quic-go/qpack v0.4.0/go.mod h1:UZVnYIfi5GRk+zI9UMaCPsmZ2xKJP7XBUvVyT1Knj9A=
|
||||
github.com/quic-go/quic-go v0.45.1 h1:tPfeYCk+uZHjmDRwHHQmvHRYL2t44ROTujLeFVBmjCA=
|
||||
github.com/quic-go/quic-go v0.45.1/go.mod h1:1dLehS7TIR64+vxGR70GDcatWTOtMX2PUtnKsjbTurI=
|
||||
github.com/quic-go/quic-go v0.45.2 h1:DfqBmqjb4ExSdxRIb/+qXhPC+7k6+DUNZha4oeiC9fY=
|
||||
github.com/quic-go/quic-go v0.45.2/go.mod h1:1dLehS7TIR64+vxGR70GDcatWTOtMX2PUtnKsjbTurI=
|
||||
github.com/quic-go/webtransport-go v0.8.0 h1:HxSrwun11U+LlmwpgM1kEqIqH90IT4N8auv/cD7QFJg=
|
||||
github.com/quic-go/webtransport-go v0.8.0/go.mod h1:N99tjprW432Ut5ONql/aUhSLT0YVSlwHohQsuac9WaM=
|
||||
github.com/raulk/go-watchdog v1.3.0 h1:oUmdlHxdkXRJlwfG0O9omj8ukerm8MEQavSiDTEtBsk=
|
||||
@@ -539,7 +550,6 @@ go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9i
|
||||
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
|
||||
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
|
||||
go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA=
|
||||
go.uber.org/zap v1.14.1/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc=
|
||||
go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ=
|
||||
go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI=
|
||||
go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
|
||||
@@ -641,6 +651,7 @@ golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7w
|
||||
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
|
||||
320
main.go
320
main.go
@@ -20,6 +20,7 @@ import (
|
||||
pubsub "github.com/libp2p/go-libp2p-pubsub"
|
||||
"github.com/libp2p/go-libp2p/core/host"
|
||||
"github.com/libp2p/go-libp2p/core/peer"
|
||||
//"github.com/libp2p/go-libp2p/core/peerstore"
|
||||
drouting "github.com/libp2p/go-libp2p/p2p/discovery/routing"
|
||||
dutil "github.com/libp2p/go-libp2p/p2p/discovery/util"
|
||||
ds "github.com/ipfs/go-datastore"
|
||||
@@ -27,15 +28,18 @@ import (
|
||||
|
||||
multiaddr "github.com/multiformats/go-multiaddr"
|
||||
|
||||
badger "github.com/ipfs/go-ds-badger"
|
||||
badger "github.com/ipfs/go-ds-badger2"
|
||||
dsq "github.com/ipfs/go-datastore/query"
|
||||
crdt "github.com/ipfs/go-ds-crdt"
|
||||
logging "github.com/ipfs/go-log/v2"
|
||||
crypto "github.com/libp2p/go-libp2p/core/crypto"
|
||||
routed "github.com/libp2p/go-libp2p/p2p/host/routed"
|
||||
)
|
||||
|
||||
var (
|
||||
topicNameFlag = flag.String("topicName", "applesauce", "name of topic to join")
|
||||
topicNameFlag = flag.String("topicName", "applesauce1234", "name of topic to join")
|
||||
dbPath = flag.String("db", "./db", "db file path")
|
||||
nameSpace = flag.String("namespace", "crdt", "namespace")
|
||||
logger = logging.Logger("globaldb")
|
||||
listen = libp2p.ListenAddrStrings("/ip4/0.0.0.0/tcp/0")
|
||||
// topicName = "globaldb-example"
|
||||
@@ -43,34 +47,8 @@ var (
|
||||
// config = "globaldb-example"
|
||||
)
|
||||
|
||||
func main() {
|
||||
flag.Parse()
|
||||
ctx := context.Background()
|
||||
|
||||
h, err := libp2p.New(listen)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
ps, err := pubsub.NewGossipSub(ctx, h)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
topic, err := ps.Join(*topicNameFlag)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
kademliaDHT := initDHT(ctx, h)
|
||||
go discoverPeers(ctx, h, kademliaDHT)
|
||||
|
||||
func SetupLibp2pHost(ctx context.Context) (host host.Host, dht *dht.IpfsDHT, err error) {
|
||||
data := *dbPath
|
||||
|
||||
store, err := badger.NewDatastore(data, &badger.DefaultOptions)
|
||||
if err != nil {
|
||||
logger.Fatal(err)
|
||||
}
|
||||
defer store.Close()
|
||||
|
||||
keyPath := filepath.Join(data, "key")
|
||||
var priv crypto.PrivKey
|
||||
_, err = os.Stat(keyPath)
|
||||
@@ -100,11 +78,201 @@ func main() {
|
||||
}
|
||||
|
||||
}
|
||||
pid, err := peer.IDFromPublicKey(priv.GetPublic())
|
||||
|
||||
if err != nil {
|
||||
logger.Fatal(err)
|
||||
}
|
||||
|
||||
host, err = libp2p.New(libp2p.Identity(priv), listen)
|
||||
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
|
||||
dht = initDHT(ctx, host)
|
||||
host = routed.Wrap(host, dht)
|
||||
|
||||
|
||||
return host, dht, nil
|
||||
}
|
||||
|
||||
type Peer struct {
|
||||
Id string
|
||||
//Todo: AgeKey Key
|
||||
}
|
||||
|
||||
type NamespaceConfig struct {
|
||||
Name string
|
||||
Id string
|
||||
Peers []Peer
|
||||
}
|
||||
|
||||
type Config []NamespaceConfig
|
||||
|
||||
func NewConfig() []NamespaceConfig {
|
||||
//fmt.Println("NewConfig Path not implemented yet")
|
||||
return []NamespaceConfig{
|
||||
{
|
||||
Name: "root",
|
||||
Id: "akdjlask-23klaj2idalj2-ajl2kjd3i-2ldakjd2",
|
||||
Peers: []Peer{
|
||||
{ Id: "12D3KooWLF7BU5VgpqWdS1XwSTFCLphENozhYQAj6i5LqU8BPZZZ" },
|
||||
{ Id: "12D3KooWBRvtW83QYnPgJCyVyAgMXtg71wjkGefVB2fBnm1A36kS" },
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "TestNamespace",
|
||||
Id: "2-903djl1290djl1-21jdl1kjd2-1d1jdl1k2jd11",
|
||||
Peers: []Peer{
|
||||
{ Id: "12D3KooWLF7BU5VgpqWdS1XwSTFCLphENozhYQAj6i5LqU8BPZZZ" },
|
||||
{ Id: "12D3KooWBRvtW83QYnPgJCyVyAgMXtg71wjkGefVB2fBnm1A36kS" },
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func GetTrustedPeers() map[string][]Peer {
|
||||
cfg := NewConfig()
|
||||
|
||||
result := make(map[string][]Peer)
|
||||
for _, c := range cfg {
|
||||
result[c.Id] = c.Peers
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
func InitRootNs() {
|
||||
//TODO: check if "SharedKeyRegistry" key exists, if not create
|
||||
}
|
||||
|
||||
type Namespace struct {
|
||||
ID string
|
||||
Datastore *crdt.Datastore
|
||||
//Registry *sharedKeyRegistry
|
||||
CancelFunc context.CancelFunc
|
||||
}
|
||||
|
||||
func (n *Namespace) Close() {
|
||||
n.Datastore.Close()
|
||||
n.CancelFunc()
|
||||
}
|
||||
|
||||
type StorageHandler struct {
|
||||
Ctx context.Context
|
||||
Store *badger.Datastore
|
||||
Host host.Host
|
||||
Ipfs *ipfslite.Peer
|
||||
PubSub *pubsub.PubSub
|
||||
}
|
||||
|
||||
func IsTrustedPeer(ctx context.Context, id peer.ID, namespace string) bool {
|
||||
peerMap := GetTrustedPeers()
|
||||
|
||||
val, ok := peerMap[namespace]
|
||||
|
||||
if ok {
|
||||
for _, v := range val {
|
||||
if v.Id == id.String() {
|
||||
fmt.Printf("Trusting %s in Namspace %s\n", id.String(), namespace)
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fmt.Printf("NOT! trusting %s in Namspace %s\n", id.String(), namespace)
|
||||
return false
|
||||
}
|
||||
|
||||
func PrintDBContent(ctx context.Context, store *badger.Datastore) {
|
||||
q := dsq.Query{}
|
||||
result, _ := store.Query(ctx, q)
|
||||
|
||||
entries, _ := result.Rest()
|
||||
for _, entry := range entries {
|
||||
fmt.Printf("Key: %s, Value: %s\n", entry.Key, string(entry.Value))
|
||||
}
|
||||
}
|
||||
|
||||
func CreateNamespace(ID string, storageHandler StorageHandler) (*Namespace, error) {
|
||||
fmt.Printf("Creating Namespace %s\n", ID)
|
||||
err := storageHandler.PubSub.RegisterTopicValidator(
|
||||
ID, //== topicName
|
||||
func(ctx context.Context, _ peer.ID, msg *pubsub.Message) bool {
|
||||
fmt.Println("Running Validator")
|
||||
signer := msg.GetFrom()
|
||||
trusted := IsTrustedPeer(ctx, signer, ID)
|
||||
if !trusted {
|
||||
logger.Debug("discarded pubsub message from non trusted source %s ", signer)
|
||||
}
|
||||
return trusted
|
||||
},
|
||||
)
|
||||
if err != nil {
|
||||
logger.Errorf("error registering topic validator: %s", err)
|
||||
}
|
||||
|
||||
psubCtx, psubCancel := context.WithCancel(storageHandler.Ctx)
|
||||
pubsubBC, err := crdt.NewPubSubBroadcaster(psubCtx, storageHandler.PubSub, ID)
|
||||
if err != nil {
|
||||
logger.Fatal(err)
|
||||
}
|
||||
|
||||
opts := crdt.DefaultOptions()
|
||||
opts.Logger = logger
|
||||
opts.RebroadcastInterval = 5 * time.Second
|
||||
opts.PutHook = func(k ds.Key, v []byte) {
|
||||
fmt.Printf("Added: [%s] -> %s\n", k, string(v))
|
||||
|
||||
}
|
||||
opts.DeleteHook = func(k ds.Key) {
|
||||
fmt.Printf("Removed: [%s]\n", k)
|
||||
}
|
||||
|
||||
crdt, err := crdt.New(storageHandler.Store, ds.NewKey(*nameSpace), storageHandler.Ipfs, pubsubBC, opts)
|
||||
if err != nil {
|
||||
logger.Fatal(err)
|
||||
psubCancel()
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &Namespace{ID: ID, Datastore: crdt, CancelFunc: psubCancel}, nil
|
||||
}
|
||||
|
||||
func main() {
|
||||
flag.Parse()
|
||||
ctx := context.Background()
|
||||
data := *dbPath
|
||||
|
||||
h, dht, err := SetupLibp2pHost(ctx)
|
||||
|
||||
pid := h.ID().String()
|
||||
fmt.Println(h.ID().String())
|
||||
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
ps, err := pubsub.NewGossipSub(ctx, h)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
topic, err := ps.Join(*topicNameFlag)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
go discoverPeers(ctx, h, dht)
|
||||
|
||||
store, err := badger.NewDatastore(data, &badger.DefaultOptions)
|
||||
if err != nil {
|
||||
logger.Fatal(err)
|
||||
}
|
||||
defer store.Close()
|
||||
|
||||
PrintDBContent(ctx, store)
|
||||
|
||||
netSubs, err := topic.Subscribe()
|
||||
if err != nil {
|
||||
logger.Fatal(err)
|
||||
@@ -135,43 +303,40 @@ func main() {
|
||||
}
|
||||
}()
|
||||
|
||||
|
||||
ipfs, err := ipfslite.New(ctx, store, nil, h, kademliaDHT, nil)
|
||||
ipfs, err := ipfslite.New(ctx, store, nil, h, dht, nil)
|
||||
if err != nil {
|
||||
logger.Fatal(err)
|
||||
}
|
||||
|
||||
psubCtx, psubCancel := context.WithCancel(ctx)
|
||||
pubsubBC, err := crdt.NewPubSubBroadcaster(psubCtx, ps, *topicNameFlag + "BC")
|
||||
if err != nil {
|
||||
logger.Fatal(err)
|
||||
storageHandler := StorageHandler{
|
||||
Ctx: ctx ,
|
||||
Store: store,
|
||||
Host: h,
|
||||
Ipfs: ipfs,
|
||||
PubSub: ps,
|
||||
}
|
||||
|
||||
opts := crdt.DefaultOptions()
|
||||
opts.Logger = logger
|
||||
opts.RebroadcastInterval = 5 * time.Second
|
||||
opts.PutHook = func(k ds.Key, v []byte) {
|
||||
fmt.Printf("Added: [%s] -> %s\n", k, string(v))
|
||||
Cfg := NewConfig()
|
||||
|
||||
}
|
||||
opts.DeleteHook = func(k ds.Key) {
|
||||
fmt.Printf("Removed: [%s]\n", k)
|
||||
var Namespaces []*Namespace
|
||||
for _, nsCfg := range Cfg {
|
||||
ns1, err := CreateNamespace(nsCfg.Id, storageHandler)
|
||||
|
||||
if err != nil {
|
||||
logger.Fatal(err)
|
||||
}
|
||||
|
||||
Namespaces = append(Namespaces, ns1)
|
||||
defer ns1.Close()
|
||||
}
|
||||
|
||||
crdt, err := crdt.New(store, ds.NewKey("crdt"), ipfs, pubsubBC, opts)
|
||||
if err != nil {
|
||||
logger.Fatal(err)
|
||||
}
|
||||
defer crdt.Close()
|
||||
defer psubCancel()
|
||||
//fmt.Println("Bootstrapping...")
|
||||
|
||||
fmt.Println("Bootstrapping...")
|
||||
|
||||
bstr, _ := multiaddr.NewMultiaddr("/ip4/94.130.135.167/tcp/33123/ipfs/12D3KooWFta2AE7oiK1ioqjVAKajUJauZWfeM7R413K7ARtHRDAu")
|
||||
inf, _ := peer.AddrInfoFromP2pAddr(bstr)
|
||||
list := append(ipfslite.DefaultBootstrapPeers(), *inf)
|
||||
ipfs.Bootstrap(list)
|
||||
h.ConnManager().TagPeer(inf.ID, "keep", 100)
|
||||
// bstr, _ := multiaddr.NewMultiaddr("/ip4/94.130.135.167/tcp/33123/ipfs/12D3KooWFta2AE7oiK1ioqjVAKajUJauZWfeM7R413K7ARtHRDAu")
|
||||
// inf, _ := peer.AddrInfoFromP2pAddr(bstr)
|
||||
// list := append(ipfslite.DefaultBootstrapPeers(), *inf)
|
||||
// ipfs.Bootstrap(list)
|
||||
// h.ConnManager().TagPeer(inf.ID, "keep", 100)
|
||||
|
||||
fmt.Printf(`
|
||||
Peer ID: %s
|
||||
@@ -212,6 +377,8 @@ Commands:
|
||||
return
|
||||
}
|
||||
|
||||
crdt := Namespaces[0].Datastore
|
||||
fmt.Printf("Setting default namespace %s", Namespaces[0].ID)
|
||||
fmt.Printf("> ")
|
||||
scanner := bufio.NewScanner(os.Stdin)
|
||||
for scanner.Scan() {
|
||||
@@ -257,14 +424,14 @@ Commands:
|
||||
printErr(err)
|
||||
}
|
||||
|
||||
testKey := "0123912-09adskldj123-adlskj192-ajdl2k1"
|
||||
testValue := "{ \"hello\": \"world\" }"
|
||||
//testKey := "0123912-09adskldj123-adlskj192-ajdl2k1"
|
||||
//testValue := "{ \"hello\": \"world\" }"
|
||||
|
||||
err = crdt.Put(ctx, ds.NewKey(testKey), []byte(testValue))
|
||||
//err = crdt.Put(ctx, ds.NewKey(testKey), []byte(testValue))
|
||||
|
||||
if err != nil {
|
||||
printErr(err)
|
||||
}
|
||||
// if err != nil {
|
||||
// printErr(err)
|
||||
// }
|
||||
|
||||
for r := range results.Next() {
|
||||
if r.Error != nil {
|
||||
@@ -340,6 +507,33 @@ func initDHT(ctx context.Context, h host.Host) *dht.IpfsDHT {
|
||||
}
|
||||
|
||||
func discoverPeers(ctx context.Context, h host.Host, dht *dht.IpfsDHT) {
|
||||
//cfg := NewConfig()
|
||||
|
||||
//for _, v := range cfg {
|
||||
// for _, p := range v.Peers {
|
||||
// peerID, err := peer.Decode(p.Id)
|
||||
|
||||
// if err != nil {
|
||||
// logger.Fatal(err)
|
||||
// }
|
||||
|
||||
// peerInfo, err := dht.FindPeer(ctx, peerID)
|
||||
|
||||
// if err != nil {
|
||||
// fmt.Println(err)
|
||||
// }
|
||||
|
||||
// h.Peerstore().AddAddrs(peerInfo.ID, peerInfo.Addrs, peerstore.PermanentAddrTTL)
|
||||
|
||||
// err = h.Connect(ctx, peerInfo)
|
||||
|
||||
// if err != nil {
|
||||
// fmt.Printf("Failed connecting to %s, error: %s\n", peerInfo.ID, err)
|
||||
// } else {
|
||||
// fmt.Println("Connected to:", peerInfo.ID)
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
routingDiscovery := drouting.NewRoutingDiscovery(dht)
|
||||
dutil.Advertise(ctx, routingDiscovery, *topicNameFlag)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user