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
plugin.go 2.62 KiB
package tangle

import (
	"github.com/iotaledger/hive.go/autopeering/peer"

	"github.com/iotaledger/goshimmer/packages/binary/storageprefix"
	"github.com/iotaledger/goshimmer/packages/binary/tangle"
	"github.com/iotaledger/goshimmer/packages/binary/tangle/model/message"
	"github.com/iotaledger/goshimmer/packages/binary/tangle/model/transactionmetadata"
	"github.com/iotaledger/goshimmer/packages/binary/tangle/tipselector"
	"github.com/iotaledger/goshimmer/packages/binary/tangle/transactionparser"
	"github.com/iotaledger/goshimmer/packages/binary/tangle/transactionrequester"
	"github.com/iotaledger/goshimmer/packages/database"
	"github.com/iotaledger/goshimmer/packages/shutdown"

	"github.com/iotaledger/hive.go/daemon"
	"github.com/iotaledger/hive.go/events"
	"github.com/iotaledger/hive.go/logger"
	"github.com/iotaledger/hive.go/node"
)

var PLUGIN = node.NewPlugin("Tangle", node.Enabled, configure, run)

var TransactionParser *transactionparser.TransactionParser

var TransactionRequester *transactionrequester.TransactionRequester

var TipSelector *tipselector.TipSelector

var Instance *tangle.Tangle

var log *logger.Logger

func configure(*node.Plugin) {
	log = logger.NewLogger("Tangle")

	// create instances
	TransactionParser = transactionparser.New()
	TransactionRequester = transactionrequester.New()
	TipSelector = tipselector.New()
	Instance = tangle.New(database.GetBadgerInstance(), storageprefix.MainNet)

	// setup TransactionParser
	TransactionParser.Events.TransactionParsed.Attach(events.NewClosure(func(transaction *message.Transaction, peer *peer.Peer) {
		// TODO: ADD PEER

		Instance.AttachTransaction(transaction)
	}))

	// setup TransactionRequester
	Instance.Events.TransactionMissing.Attach(events.NewClosure(TransactionRequester.ScheduleRequest))
	Instance.Events.MissingTransactionReceived.Attach(events.NewClosure(func(cachedTransaction *message.CachedTransaction, cachedTransactionMetadata *transactionmetadata.CachedTransactionMetadata) {
		cachedTransactionMetadata.Release()

		cachedTransaction.Consume(func(transaction *message.Transaction) {
			TransactionRequester.StopRequest(transaction.GetId())
		})
	}))

	// setup TipSelector
	Instance.Events.TransactionSolid.Attach(events.NewClosure(func(cachedTransaction *message.CachedTransaction, cachedTransactionMetadata *transactionmetadata.CachedTransactionMetadata) {
		cachedTransactionMetadata.Release()

		cachedTransaction.Consume(TipSelector.AddTip)
	}))
}

func run(*node.Plugin) {
	_ = daemon.BackgroundWorker("Tangle", func(shutdownSignal <-chan struct{}) {
		<-shutdownSignal

		TransactionParser.Shutdown()
		Instance.Shutdown()
	}, shutdown.ShutdownPriorityTangle)
}