Skip to content
Snippets Groups Projects
  • Hans Moog's avatar
    490f10e3
    Feat: Refactor and cleanup some code (#301) · 490f10e3
    Hans Moog authored
    * Feat: refactored the address
    
    * Feat: started adding solidification of transferOutputs
    
    * Feat: cleaned up checker code
    
    * Feat: going to bed - good night world
    
    * Feat: refactored transferoutput package
    
    * Fix: fixed a bug from refactoring
    
    * Refactor: removed old transferoutputmetadata package
    
    * Refactor: started refactoring transfer package
    
    * Refactor: refactored transfer/id package
    
    * Refactor: moved transfer struct to new package
    
    * Refactor: fixed issues after refactor
    
    * Refactor: fixed sth
    
    * Refactor: continued to move files
    
    * Refactor: commit before migration of last refactored files
    
    * Refactor: another refactor before move
    
    * Refactor: refactor test
    
    * Fix: fixed some bugs connected to refactor
    
    * Refactor: continued refactor
    
    * Refactor: fixed some bugs
    
    * Refactor: does it work now?
    
    * Feat: added a method to generate a random transferid
    
    * Feat: rename transfer to transaction
    
    * Refactor: refactor according to new names
    
    * Refactor: continued to refactor transaction package
    
    * Refactor: moved payload id to payload package
    
    * Refactor: moved signatures to transaction package
    
    * Refactor: moved signature to transaction
    
    * Fix: fixed bug due to refactor
    
    * Fix: fixed bugs due to refactor
    
    * Refactor: fixed some bugs after refactor
    
    * Fix: fixed additional bugs
    
    * Fix: bug fix
    
    * Refactor: moved signature to signaturescheme package
    
    * Fix: fixed signatures test
    
    * Fix: fixed bug in tangle
    
    * Fix: fixed payloadmetadata test
    
    * Fix: fixed payload test
    
    * Refactor: moved payloadmetadata to payload package
    
    * Fix: fixed some refactor bugs
    
    * Fix: fixed a bug due to refactor
    
    * Fix: fixed broken test
    
    * Refactor: moved approver to payload package
    
    * Refactor: moved missingpayload to payload package
    
    * Refactor: refactored coloredbalance package
    
    * Fix: fixed bug due to refactor
    
    * Refactor: moved address signaturescheme to address package
    
    * Fix: fixed refactor bug
    
    * Feat: added missing outputs to tangle
    
    * Fix: fixed issues due to refactor
    
    * Refactor: started moving tangle classes to tangle package
    
    * Refactor: moved payloadmetadata to tangle
    
    * Fix: fixed bugs due to refactor
    
    * Refactor: moved TransactionMetadata to tangle package
    
    * Refactor: moved some files to tangle
    
    * Fix: fixed bug due to refactor
    
    * Feat: added TransactionMetadata storage
    
    * Fix: fixed some issues
    
    * Fix: fixed some issues
    
    * Fix: fixed missing release
    Feat: Refactor and cleanup some code (#301)
    Hans Moog authored
    * Feat: refactored the address
    
    * Feat: started adding solidification of transferOutputs
    
    * Feat: cleaned up checker code
    
    * Feat: going to bed - good night world
    
    * Feat: refactored transferoutput package
    
    * Fix: fixed a bug from refactoring
    
    * Refactor: removed old transferoutputmetadata package
    
    * Refactor: started refactoring transfer package
    
    * Refactor: refactored transfer/id package
    
    * Refactor: moved transfer struct to new package
    
    * Refactor: fixed issues after refactor
    
    * Refactor: fixed sth
    
    * Refactor: continued to move files
    
    * Refactor: commit before migration of last refactored files
    
    * Refactor: another refactor before move
    
    * Refactor: refactor test
    
    * Fix: fixed some bugs connected to refactor
    
    * Refactor: continued refactor
    
    * Refactor: fixed some bugs
    
    * Refactor: does it work now?
    
    * Feat: added a method to generate a random transferid
    
    * Feat: rename transfer to transaction
    
    * Refactor: refactor according to new names
    
    * Refactor: continued to refactor transaction package
    
    * Refactor: moved payload id to payload package
    
    * Refactor: moved signatures to transaction package
    
    * Refactor: moved signature to transaction
    
    * Fix: fixed bug due to refactor
    
    * Fix: fixed bugs due to refactor
    
    * Refactor: fixed some bugs after refactor
    
    * Fix: fixed additional bugs
    
    * Fix: bug fix
    
    * Refactor: moved signature to signaturescheme package
    
    * Fix: fixed signatures test
    
    * Fix: fixed bug in tangle
    
    * Fix: fixed payloadmetadata test
    
    * Fix: fixed payload test
    
    * Refactor: moved payloadmetadata to payload package
    
    * Fix: fixed some refactor bugs
    
    * Fix: fixed a bug due to refactor
    
    * Fix: fixed broken test
    
    * Refactor: moved approver to payload package
    
    * Refactor: moved missingpayload to payload package
    
    * Refactor: refactored coloredbalance package
    
    * Fix: fixed bug due to refactor
    
    * Refactor: moved address signaturescheme to address package
    
    * Fix: fixed refactor bug
    
    * Feat: added missing outputs to tangle
    
    * Fix: fixed issues due to refactor
    
    * Refactor: started moving tangle classes to tangle package
    
    * Refactor: moved payloadmetadata to tangle
    
    * Fix: fixed bugs due to refactor
    
    * Refactor: moved TransactionMetadata to tangle package
    
    * Refactor: moved some files to tangle
    
    * Fix: fixed bug due to refactor
    
    * Feat: added TransactionMetadata storage
    
    * Fix: fixed some issues
    
    * Fix: fixed some issues
    
    * Fix: fixed missing release
gossip.go 2.46 KiB
package gossip

import (
	"fmt"
	"net"
	"strconv"

	"github.com/iotaledger/hive.go/autopeering/peer/service"
	"github.com/iotaledger/hive.go/logger"

	"github.com/iotaledger/goshimmer/packages/binary/tangle/model/message"
	gp "github.com/iotaledger/goshimmer/packages/gossip"
	"github.com/iotaledger/goshimmer/packages/gossip/server"
	"github.com/iotaledger/goshimmer/plugins/autopeering/local"
	"github.com/iotaledger/goshimmer/plugins/config"
	"github.com/iotaledger/goshimmer/plugins/tangle"
)

var (
	log *logger.Logger
	mgr *gp.Manager
	srv *server.TCP
)

func configureGossip() {
	lPeer := local.GetInstance()

	peeringAddr := lPeer.Services().Get(service.PeeringKey)
	external, _, err := net.SplitHostPort(peeringAddr.String())
	if err != nil {
		panic(err)
	}

	// announce the gossip service
	gossipPort := strconv.Itoa(config.Node.GetInt(GOSSIP_PORT))
	err = lPeer.UpdateService(service.GossipKey, "tcp", net.JoinHostPort(external, gossipPort))
	if err != nil {
		log.Fatalf("could not update services: %s", err)
	}

	mgr = gp.NewManager(lPeer, getTransaction, log)
}

func start(shutdownSignal <-chan struct{}) {
	defer log.Info("Stopping " + name + " ... done")

	lPeer := local.GetInstance()
	// use the port of the gossip service
	gossipAddr := lPeer.Services().Get(service.GossipKey)
	_, gossipPort, err := net.SplitHostPort(gossipAddr.String())
	if err != nil {
		panic(err)
	}
	// resolve the bind address
	address := net.JoinHostPort(config.Node.GetString(local.CFG_BIND), gossipPort)
	localAddr, err := net.ResolveTCPAddr(gossipAddr.Network(), address)
	if err != nil {
		log.Fatalf("Error resolving %s: %v", local.CFG_BIND, err)
	}

	listener, err := net.ListenTCP(gossipAddr.Network(), localAddr)
	if err != nil {
		log.Fatalf("Error listening: %v", err)
	}
	defer listener.Close()

	srv = server.ServeTCP(lPeer, listener, log)
	defer srv.Close()

	mgr.Start(srv)
	defer mgr.Close()

	log.Infof("%s started: Address=%s/%s", name, gossipAddr.String(), gossipAddr.Network())

	<-shutdownSignal
	log.Info("Stopping " + name + " ...")
}

func getTransaction(transactionId message.Id) (bytes []byte, err error) {
	log.Debugw("get tx from db", "id", transactionId.String())

	if !tangle.Instance.GetTransaction(transactionId).Consume(func(transaction *message.Transaction) {
		bytes = transaction.Bytes()
	}) {
		err = fmt.Errorf("transaction not found: hash=%s", transactionId)
	}

	return
}

func GetAllNeighbors() []*gp.Neighbor {
	if mgr == nil {
		return nil
	}
	return mgr.GetAllNeighbors()
}