diff options
author | Wei-Ning Huang <w@dexon.org> | 2018-08-25 16:42:18 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-08-25 16:42:18 +0800 |
commit | e122cb236312e0ca3ef6e0207a20890ec1e7bfaf (patch) | |
tree | 36cfe4cfe59e01082aaf377ed6292fc2aa7fc911 /simulation | |
parent | 2f7bb14d1d4b1e11129109d3ec2386d004ffb8af (diff) | |
download | tangerine-consensus-e122cb236312e0ca3ef6e0207a20890ec1e7bfaf.tar.gz tangerine-consensus-e122cb236312e0ca3ef6e0207a20890ec1e7bfaf.tar.zst tangerine-consensus-e122cb236312e0ca3ef6e0207a20890ec1e7bfaf.zip |
simulation: remove fake network (#74)
Diffstat (limited to 'simulation')
-rw-r--r-- | simulation/config/config.go | 3 | ||||
-rw-r--r-- | simulation/fake-network.go | 131 | ||||
-rw-r--r-- | simulation/simulation.go | 50 |
3 files changed, 18 insertions, 166 deletions
diff --git a/simulation/config/config.go b/simulation/config/config.go index fe91881..0c6b5d3 100644 --- a/simulation/config/config.go +++ b/simulation/config/config.go @@ -29,7 +29,6 @@ type NetworkType string // NetworkType enums. const ( - NetworkTypeFake NetworkType = "fake" NetworkTypeTCP NetworkType = "tcp" NetworkTypeTCPLocal NetworkType = "tcp-local" ) @@ -93,7 +92,7 @@ func GenerateDefault(path string) error { MaxBlock: math.MaxUint64, }, Networking: Networking{ - Type: NetworkTypeFake, + Type: NetworkTypeTCPLocal, PeerServer: "peer.server", Mean: 100, Sigma: 10, diff --git a/simulation/fake-network.go b/simulation/fake-network.go deleted file mode 100644 index fc8764a..0000000 --- a/simulation/fake-network.go +++ /dev/null @@ -1,131 +0,0 @@ -// Copyright 2018 The dexon-consensus-core Authors -// This file is part of the dexon-consensus-core library. -// -// The dexon-consensus-core library is free software: you can redistribute it -// and/or modify it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation, either version 3 of the License, -// or (at your option) any later version. -// -// The dexon-consensus-core library is distributed in the hope that it will be -// useful, but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser -// General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the dexon-consensus-core library. If not, see -// <http://www.gnu.org/licenses/>. - -package simulation - -import ( - "math/rand" - "sync" - "time" - - "github.com/dexon-foundation/dexon-consensus-core/core/types" -) - -// FakeNetwork implements the Network interface. -type FakeNetwork struct { - model Model - - endpointMutex sync.RWMutex - endpoints map[types.ValidatorID]chan interface{} -} - -// NewFakeNetwork returns pointer to a new Network instance. -func NewFakeNetwork(model Model) *FakeNetwork { - return &FakeNetwork{ - model: model, - endpoints: make(map[types.ValidatorID]chan interface{}), - } -} - -// Start starts the network. -func (n *FakeNetwork) Start() { -} - -// NumPeers returns the number of peers in the network. -func (n *FakeNetwork) NumPeers() int { - n.endpointMutex.Lock() - defer n.endpointMutex.Unlock() - return len(n.endpoints) -} - -// Join allow a client to join the network. It reutnrs a interface{} channel for -// the client to recieve information. -func (n *FakeNetwork) Join(endpoint Endpoint) chan interface{} { - n.endpointMutex.Lock() - defer n.endpointMutex.Unlock() - - if x, exists := n.endpoints[endpoint.GetID()]; exists { - return x - } - recivingChannel := make(chan interface{}, msgBufferSize) - - n.endpoints[endpoint.GetID()] = recivingChannel - return recivingChannel -} - -// Send sends a msg to another client. -func (n *FakeNetwork) Send(destID types.ValidatorID, msg interface{}) { - clientChannel, exists := n.endpoints[destID] - if !exists { - return - } - - go func() { - if rand.Float64() > n.model.LossRate() { - time.Sleep(n.model.Delay()) - - clientChannel <- msg - } - }() -} - -// BroadcastBlock broadcast blocks into the network. -func (n *FakeNetwork) BroadcastBlock(block *types.Block) { - n.endpointMutex.Lock() - defer n.endpointMutex.Unlock() - - for endpoint := range n.endpoints { - n.Send(endpoint, block.Clone()) - } -} - -// BroadcastNotaryAck broadcast notaryAck into the network. -func (n *FakeNetwork) BroadcastNotaryAck(notaryAck *types.NotaryAck) { - n.endpointMutex.Lock() - defer n.endpointMutex.Unlock() - - for endpoint := range n.endpoints { - n.Send(endpoint, notaryAck) - } -} - -// DeliverBlocks sends blocks to peerServer. -func (n *FakeNetwork) DeliverBlocks(blocks BlockList) { - // TODO(jimmy-dexon): Implement this method. - return -} - -// NotifyServer sends message to peerServer -func (n *FakeNetwork) NotifyServer(msg Message) { - // TODO(jimmy-dexon): Implement this method. - return -} - -// GetServerInfo retrieve the info message from peerServer. -func (n *FakeNetwork) GetServerInfo() InfoMessage { - // TODO(jimmy-dexon): Implement this method. - return InfoMessage{} -} - -// Endpoints returns all validatorIDs. -func (n *FakeNetwork) Endpoints() types.ValidatorIDs { - vIDs := make(types.ValidatorIDs, len(n.endpoints)) - for vID := range n.endpoints { - vIDs = append(vIDs, vID) - } - return vIDs -} diff --git a/simulation/simulation.go b/simulation/simulation.go index bd69fb5..4cfc79c 100644 --- a/simulation/simulation.go +++ b/simulation/simulation.go @@ -43,41 +43,25 @@ func Run(configPath string) { } ) - if networkType == config.NetworkTypeFake || - networkType == config.NetworkTypeTCPLocal { - - var network Network - - if networkType == config.NetworkTypeFake { - network = NewFakeNetwork(networkModel) - - for i := 0; i < cfg.Validator.Num; i++ { - prv, err := eth.NewPrivateKey() - if err != nil { - panic(err) - } - vs = append(vs, NewValidator(prv, eth.SigToPub, cfg.Validator, network)) - } - } else if networkType == config.NetworkTypeTCPLocal { - lock := sync.Mutex{} - wg := sync.WaitGroup{} - for i := 0; i < cfg.Validator.Num; i++ { - prv, err := eth.NewPrivateKey() - if err != nil { - panic(err) - } - wg.Add(1) - go func() { - network := NewTCPNetwork(true, cfg.Networking.PeerServer, networkModel) - network.Start() - lock.Lock() - defer lock.Unlock() - vs = append(vs, NewValidator(prv, eth.SigToPub, cfg.Validator, network)) - wg.Done() - }() + if networkType == config.NetworkTypeTCPLocal { + lock := sync.Mutex{} + wg := sync.WaitGroup{} + for i := 0; i < cfg.Validator.Num; i++ { + prv, err := eth.NewPrivateKey() + if err != nil { + panic(err) } - wg.Wait() + wg.Add(1) + go func() { + network := NewTCPNetwork(true, cfg.Networking.PeerServer, networkModel) + network.Start() + lock.Lock() + defer lock.Unlock() + vs = append(vs, NewValidator(prv, eth.SigToPub, cfg.Validator, network)) + wg.Done() + }() } + wg.Wait() for i := 0; i < cfg.Validator.Num; i++ { fmt.Printf("Validator %d: %s\n", i, vs[i].ID) |