diff --git a/config/config.go b/config/config.go index 8f60872..15e5384 100644 --- a/config/config.go +++ b/config/config.go @@ -7,15 +7,15 @@ import ( ) type Config struct { - ListenPort string `mapstructure:"listen_port"` - ListenAddr string `mapstructure:"listen_addr"` - Bootstrap bool `mapstructure:"is_bootstrap"` - BootstrapNodeMultiaddr string `mapstructure:"bootstrap_node_multiaddr"` - Rendezvous string `mapstructure:"rendezvous"` - Ethereum EthereumConfig `mapstructure:"ethereum"` - Filecoin FilecoinConfig `mapstructure:"filecoin"` - PubSub PubSubConfig `mapstructure:"pubSub"` - Store StoreConfig `mapstructure:"store"` + ListenPort string `mapstructure:"listen_port"` + ListenAddr string `mapstructure:"listen_addr"` + BootstrapNodes []string `mapstructure:"bootstrap_node_multiaddr"` + Rendezvous string `mapstructure:"rendezvous"` + Ethereum EthereumConfig `mapstructure:"ethereum"` + Filecoin FilecoinConfig `mapstructure:"filecoin"` + PubSub PubSubConfig `mapstructure:"pubSub"` + Store StoreConfig `mapstructure:"store"` + ConsensusMaxFaultNodes int `mapstructure:"consensus_max_fault_nodes"` } type EthereumConfig struct { @@ -46,11 +46,10 @@ func NewConfig(configPath string) (*Config, error) { dbURL := fmt.Sprintf("host=localhost user=%s password=%s dbname=%s sslmode=disable", username, password, dbName) cfg := &Config{ - ListenAddr: "localhost", - ListenPort: ":8000", - Bootstrap: false, - BootstrapNodeMultiaddr: "/ip4/127.0.0.1/tcp/0", - Rendezvous: "filecoin-p2p-oracle", + ListenAddr: "localhost", + ListenPort: ":8000", + BootstrapNodes: []string{"/ip4/127.0.0.1/tcp/0"}, + Rendezvous: "filecoin-p2p-oracle", Ethereum: EthereumConfig{ PrivateKey: "", }, diff --git a/go.mod b/go.mod index 68a4075..7e1fa6d 100644 --- a/go.mod +++ b/go.mod @@ -3,6 +3,7 @@ module github.com/Secured-Finance/dione go 1.14 require ( + github.com/Secured-Finance/go-libp2p-pex v1.0.1 github.com/allegro/bigcache v1.2.1 // indirect github.com/aristanetworks/goarista v0.0.0-20200224203130-895b4c57c44d // indirect github.com/asaskevich/govalidator v0.0.0-20200907205600-7a23bdc65eef // indirect @@ -27,9 +28,9 @@ require ( github.com/karalabe/usb v0.0.0-20191104083709-911d15fe12a9 // indirect github.com/libp2p/go-libp2p v0.11.0 github.com/libp2p/go-libp2p-core v0.6.1 - github.com/libp2p/go-libp2p-discovery v0.5.0 - github.com/libp2p/go-libp2p-kad-dht v0.8.3 - github.com/libp2p/go-libp2p-peerstore v0.2.6 + github.com/libp2p/go-libp2p-discovery v0.5.0 // indirect + github.com/libp2p/go-libp2p-kad-dht v0.8.3 // indirect + github.com/libp2p/go-libp2p-peerstore v0.2.6 // indirect github.com/libp2p/go-libp2p-pubsub v0.3.6 github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 github.com/multiformats/go-multiaddr v0.3.1 @@ -39,7 +40,7 @@ require ( github.com/rjeczalik/notify v0.9.2 // indirect github.com/rs/cors v1.7.0 // indirect github.com/rs/zerolog v1.20.0 // indirect - github.com/sirupsen/logrus v1.6.0 + github.com/sirupsen/logrus v1.7.0 github.com/smartystreets/assertions v1.0.1 // indirect github.com/spf13/viper v1.7.1 github.com/status-im/keycard-go v0.0.0-20200402102358-957c09536969 // indirect diff --git a/go.sum b/go.sum index 6771416..c6351bb 100644 --- a/go.sum +++ b/go.sum @@ -42,6 +42,10 @@ github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go github.com/Kubuxu/go-os-helper v0.0.1/go.mod h1:N8B+I7vPCT80IcP58r50u4+gEEcsZETFUpAzWW2ep1Y= github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/Secured-Finance/go-libp2p-pex v1.0.0 h1:5i7dhQAgwdcLg11VW9TdmIsMlr6f5To2lobf5Q1VLGI= +github.com/Secured-Finance/go-libp2p-pex v1.0.0/go.mod h1:Q4llSmPACDBpWvqHT/nU95t8BbR96aE4dZb7eO3xqqE= +github.com/Secured-Finance/go-libp2p-pex v1.0.1 h1:JpQ+TP37QaAtTG2g57WmmkXZ+62IYC+aTMcDvwG3Vlc= +github.com/Secured-Finance/go-libp2p-pex v1.0.1/go.mod h1:Q4llSmPACDBpWvqHT/nU95t8BbR96aE4dZb7eO3xqqE= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/sarama v1.23.1/go.mod h1:XLH1GYJnLVE0XCr6KdJGVJRTwY30moWNJ4sERjXX6fs= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= @@ -104,12 +108,17 @@ github.com/btcsuite/btcd v0.0.0-20190605094302-a0d1e3e36d50/go.mod h1:3J08xEfcug github.com/btcsuite/btcd v0.0.0-20190824003749-130ea5bddde3/go.mod h1:3J08xEfcugPacsc34/LKRU2yO7YmuT8yt28J8k2+rrI= github.com/btcsuite/btcd v0.20.1-beta h1:Ik4hyJqN8Jfyv3S4AGBOmyouMsYE3EdYODkMbQjwPGw= github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= +github.com/btcsuite/btcd v0.21.0-beta h1:At9hIZdJW0s9E/fAz28nrz6AmcNlSVucCH796ZteX1M= +github.com/btcsuite/btcd v0.21.0-beta/go.mod h1:ZSWyehm27aAuS9bvkATT+Xte3hjHZ+MRgMY/8NJ7K94= github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= github.com/btcsuite/btcutil v0.0.0-20190207003914-4c204d697803/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= +github.com/btcsuite/btcutil v1.0.2/go.mod h1:j9HUFwoQRsZL3V4n+qG+CUnEGHOarIxfC3Le2Yhbcts= github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= +github.com/btcsuite/goleveldb v1.0.0/go.mod h1:QiK9vBlgftBg6rWQIj6wFzbPfRjiykIEhBH4obrXJ/I= github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= +github.com/btcsuite/snappy-go v1.0.0/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= github.com/buger/goterm v0.0.0-20200322175922-2f3e71b85129/go.mod h1:u9UyCz2eTrSGy6fbupqJ54eY5c4IC8gREQ1053dK12U= @@ -176,6 +185,7 @@ github.com/davidlazar/go-crypto v0.0.0-20190912175916-7055855a373f h1:BOaYiTvg8p github.com/davidlazar/go-crypto v0.0.0-20190912175916-7055855a373f/go.mod h1:rQYf4tfk5sSwFsnDg3qYaBxSjsD9S8+59vW0dKUgme4= github.com/deckarep/golang-set v1.7.1 h1:SCQV0S6gTtp6itiFrTqI+pfmJ4LN85S1YzhDf9rTHJQ= github.com/deckarep/golang-set v1.7.1/go.mod h1:93vsz/8Wt4joVM7c2AVqh+YRMiUSc14yDtF28KmMOgQ= +github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218= github.com/detailyang/go-fallocate v0.0.0-20180908115635-432fa640bd2e h1:lj77EKYUpYXTd8CD/+QMIf8b6OIOTsfEBSXiAzuEHTU= github.com/detailyang/go-fallocate v0.0.0-20180908115635-432fa640bd2e/go.mod h1:3ZQK6DMPSz/QZ73jlWxBtUhNA8xZx7LzUFSq/OfP8vk= github.com/dgraph-io/badger v1.5.5-0.20190226225317-8115aed38f8f/go.mod h1:VZxzAIRPHRVNRKRo6AXrX9BJegn6il06VMTZVJYCIjQ= @@ -697,6 +707,8 @@ github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+ github.com/jbenet/go-cienv v0.0.0-20150120210510-1bb1476777ec/go.mod h1:rGaEvXB4uRSZMmzKNLoXvTu1sfx+1kv/DojUlPrSZGs= github.com/jbenet/go-cienv v0.1.0 h1:Vc/s0QbQtoxX8MwwSLWWh+xNNZvM3Lw7NsTcHrvvhMc= github.com/jbenet/go-cienv v0.1.0/go.mod h1:TqNnHUmJgXau0nCzC7kXWeotg3J9W34CUv5Djy1+FlA= +github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= +github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= github.com/jbenet/go-random v0.0.0-20190219211222-123a90aedc0c h1:uUx61FiAa1GI6ZmVd2wf2vULeQZIKG66eybjNXKYCz4= github.com/jbenet/go-random v0.0.0-20190219211222-123a90aedc0c/go.mod h1:sdx1xVM9UuLw1tXnhJWN3piypTUO3vCIHYmG15KE/dU= github.com/jbenet/go-temp-err-catcher v0.0.0-20150120210811-aac704a3f4f2/go.mod h1:8GXXJV31xl8whumTzdZsTt3RnUIiPqzkyf7mxToRCMs= @@ -1252,6 +1264,7 @@ github.com/onsi/ginkgo v1.12.1 h1:mFwc4LvZ0xpSvDZ3E+k8Yte0hLOMxXUlP+yXtJqkYfQ= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.14.0 h1:2mOpI4JVVPBN+WQRa0WKH2eXR+Ey+uK4n7Zj0aYpIQA= github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= +github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= @@ -1410,6 +1423,8 @@ github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4 github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0 h1:UBcNElsrwanuuMsnGSlYmtmgbb23qDR5dG+6X6Oo89I= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= +github.com/sirupsen/logrus v1.7.0 h1:ShrD1U9pZB12TX0cVy0DtePoCH97K8EtX+mg7ZARUtM= +github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/assertions v1.0.0/go.mod h1:kHHU4qYBaI3q23Pp3VPrmWhuIUrLW/7eUrw0BU5VaoM= github.com/smartystreets/assertions v1.0.1 h1:voD4ITNjPL5jjBfgR/r8fPIIBrliWrWHeiJApdr3r4w= @@ -1645,6 +1660,7 @@ golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3 golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550 h1:ObdrDkeb4kJdCP557AjRjq69pTHfNouLtWZG7j9rPN8= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200117160349-530e935923ad/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200128174031-69ecbb4d6d5d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200221231518-2aa609cf4a9d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= @@ -1657,6 +1673,8 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a h1:vclmkQCjlDX5OydZ9wv8rBCcS0QyQY66Mpf/7BZbInM= golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897 h1:pLI5jrR7OSLijeIDcmRxNmw2api+jEfxLoykJVice/E= +golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -1692,6 +1710,7 @@ golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20180524181706-dfa909b99c79/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1826,6 +1845,8 @@ golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200812155832-6a926be9bd1d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200926100807-9d91bd62050c h1:38q6VNPWR010vN82/SB121GujZNIfAUb4YttE2rhGuc= golang.org/x/sys v0.0.0-20200926100807-9d91bd62050c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201027140754-0fcbb8f4928c h1:2+jF2APAgFgXJnYOQGDGGiRvvEo6OhqZGQf46n9xgEw= +golang.org/x/sys v0.0.0-20201027140754-0fcbb8f4928c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= diff --git a/node/node.go b/node/node.go index 5d166c5..0fbeea8 100644 --- a/node/node.go +++ b/node/node.go @@ -5,11 +5,9 @@ import ( "crypto/rand" "flag" "fmt" - "sync" + pex "github.com/Secured-Finance/go-libp2p-pex" "time" - "github.com/libp2p/go-libp2p-kad-dht/dual" - "github.com/Secured-Finance/dione/config" "github.com/Secured-Finance/dione/consensus" "github.com/Secured-Finance/dione/pb" @@ -18,13 +16,14 @@ import ( "github.com/libp2p/go-libp2p" crypto "github.com/libp2p/go-libp2p-core/crypto" "github.com/libp2p/go-libp2p-core/host" - peer "github.com/libp2p/go-libp2p-core/peer" - discovery "github.com/libp2p/go-libp2p-discovery" - peerstore "github.com/libp2p/go-libp2p-peerstore" "github.com/multiformats/go-multiaddr" "github.com/sirupsen/logrus" ) +const ( + DefaultPEXUpdateTime = 1*time.Minute +) + type Node struct { Host host.Host PubSubRouter *pb.PubSubRouter @@ -50,12 +49,12 @@ func NewNode(configPath string) (*Node, error) { return node, nil } -func (n *Node) setupNode(ctx context.Context, prvKey crypto.PrivKey) { - n.setupLibp2pHost(context.TODO(), prvKey) +func (n *Node) setupNode(ctx context.Context, prvKey crypto.PrivKey, pexDiscoveryUpdateTime time.Duration, maxFaultNodes int) { + n.setupLibp2pHost(context.TODO(), prvKey, pexDiscoveryUpdateTime) //n.setupEthereumClient() //n.setupFilecoinClient() n.setupPubsub() - n.setupConsensusManager() + n.setupConsensusManager(maxFaultNodes) } func (n *Node) setupEthereumClient() error { @@ -77,14 +76,14 @@ func (n *Node) setupFilecoinClient() { func (n *Node) setupPubsub() { n.PubSubRouter = pb.NewPubSubRouter(n.Host, n.OracleTopic) // wait for setting up pubsub - time.Sleep(3 * time.Second) + //time.Sleep(3 * time.Second) } -func (n *Node) setupConsensusManager() { - n.ConsensusManager = consensus.NewPBFTConsensusManager(n.PubSubRouter, 2) +func (n *Node) setupConsensusManager(maxFaultNodes int) { + n.ConsensusManager = consensus.NewPBFTConsensusManager(n.PubSubRouter, maxFaultNodes) } -func (n *Node) setupLibp2pHost(ctx context.Context, privateKey crypto.PrivKey) { +func (n *Node) setupLibp2pHost(ctx context.Context, privateKey crypto.PrivKey, pexDiscoveryUpdateTime time.Duration) { listenMultiAddr, err := multiaddr.NewMultiaddr(fmt.Sprintf("/ip4/%s/tcp/%s", n.Config.ListenAddr, n.Config.ListenPort)) if err != nil { logrus.Fatal("Failed to generate new node multiaddress:", err) @@ -101,42 +100,27 @@ func (n *Node) setupLibp2pHost(ctx context.Context, privateKey crypto.PrivKey) { logrus.Info(fmt.Sprintf("[*] Your Multiaddress Is: /ip4/%s/tcp/%v/p2p/%s", n.Config.ListenAddr, n.Config.ListenPort, host.ID().Pretty())) - kademliaDHT, err := dual.New(context.Background(), n.Host) - if err != nil { - logrus.Fatal("Failed to create new DHT instance: ", err) - } - - if err = kademliaDHT.Bootstrap(context.Background()); err != nil { - logrus.Fatal(err) - } - - if !n.Config.Bootstrap { - var wg sync.WaitGroup - bootstrapMultiaddr, err := multiaddr.NewMultiaddr(n.Config.BootstrapNodeMultiaddr) + var bootstrapMaddrs []multiaddr.Multiaddr + for _, a := range n.Config.BootstrapNodes { + maddr, err := multiaddr.NewMultiaddr(a) if err != nil { - logrus.Fatal(err) + logrus.Fatalf("Invalid multiaddress of bootstrap node: %s", err.Error()) } - peerinfo, _ := peer.AddrInfoFromP2pAddr(bootstrapMultiaddr) - wg.Add(1) - go func() { - defer wg.Done() - if err := n.Host.Connect(context.Background(), *peerinfo); err != nil { - logrus.Fatal(err) - } - logrus.Info("Connection established with bootstrap node:", *peerinfo) - }() - wg.Wait() + bootstrapMaddrs = append(bootstrapMaddrs, maddr) } + discovery, err := pex.NewPEXDiscovery(host, bootstrapMaddrs, pexDiscoveryUpdateTime) + logrus.Info("Announcing ourselves...") - routingDiscovery := discovery.NewRoutingDiscovery(kademliaDHT) - discovery.Advertise(context.Background(), routingDiscovery, n.Config.Rendezvous) + _, err = discovery.Advertise(context.TODO(), n.Config.Rendezvous) + if err != nil { + logrus.Fatalf("Failed to announce this node to the network: %s", err.Error()) + } logrus.Info("Successfully announced!") - // Randezvous string = service tag - // Discover all peers with our service + // Discover unbounded count of peers logrus.Info("Searching for other peers...") - peerChan, err := routingDiscovery.FindPeers(context.Background(), n.Config.Rendezvous) + peerChan, err := discovery.FindPeers(context.TODO(), n.Config.Rendezvous) if err != nil { logrus.Fatal("Failed to find new peers, exiting...", err) } @@ -154,13 +138,12 @@ func (n *Node) setupLibp2pHost(ctx context.Context, privateKey crypto.PrivKey) { if newPeer.ID.String() == n.Host.ID().String() { continue } - logrus.Info("Found peer:", newPeer, ", put it to the peerstore") - n.Host.Peerstore().AddAddr(newPeer.ID, newPeer.Addrs[0], peerstore.PermanentAddrTTL) + logrus.Infof("Found peer: %s", newPeer) // Connect to the peer if err := n.Host.Connect(ctx, newPeer); err != nil { logrus.Warn("Connection failed: ", err) } - logrus.Info("Connected to: ", newPeer) + logrus.Info("Connected to newly discovered peer: ", newPeer) } } } @@ -195,7 +178,7 @@ func Start() error { node.GlobalCtx = ctx node.GlobalCtxCancel = ctxCancel - node.setupNode(ctx, privKey) + node.setupNode(ctx, privKey, DefaultPEXUpdateTime, node.Config.ConsensusMaxFaultNodes) for { select { case <-ctx.Done(): diff --git a/node/node_test.go b/node/node_test.go index 3c08af9..8060d0d 100644 --- a/node/node_test.go +++ b/node/node_test.go @@ -17,22 +17,20 @@ func TestConsensus(t *testing.T) { cfg := &config.Config{ ListenPort: "1234", ListenAddr: "0.0.0.0", - Bootstrap: true, Rendezvous: "dione", PubSub: config.PubSubConfig{ ProtocolID: "/test/1.0", }, } - //cfg.BootstrapNodeMultiaddr = "/dnsaddr/bootstrap.libp2p.io/p2p/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN" + //cfg.BootstrapNodes = "/dnsaddr/bootstrap.libp2p.io/p2p/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN" // setup first node node1 := newNode(cfg) // setup second node cfg.ListenPort = "1235" - cfg.Bootstrap = false - cfg.BootstrapNodeMultiaddr = node1.Host.Addrs()[0].String() + fmt.Sprintf("/p2p/%s", node1.Host.ID().String()) + cfg.BootstrapNodes = []string{node1.Host.Addrs()[0].String() + fmt.Sprintf("/p2p/%s", node1.Host.ID().String())} node2 := newNode(cfg) // setup third node @@ -69,6 +67,6 @@ func newNode(cfg *config.Config) *Node { GlobalCtx: ctx, GlobalCtxCancel: ctxCancel, } - node.setupNode(ctx, privKey) + node.setupNode(ctx, privKey, 1*time.Second, 3) return node } diff --git a/rpcclient/ethereum.go b/rpcclient/ethereum.go index ca2ff5e..ce6aa33 100644 --- a/rpcclient/ethereum.go +++ b/rpcclient/ethereum.go @@ -4,8 +4,8 @@ import ( "context" "math/big" - stakingContract "github.com/Secured-Finance/dione/contracts/DioneStaking" "github.com/Secured-Finance/dione/contracts/aggregator" + stakingContract "github.com/Secured-Finance/dione/contracts/dioneStaking" "github.com/Secured-Finance/dione/contracts/oracleemitter" "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common"