transactionspammer.go 1.50 KiB
package transactionspammer
import (
"sync"
"time"
"github.com/iotaledger/goshimmer/packages/daemon"
"github.com/iotaledger/goshimmer/packages/model/value_transaction"
"github.com/iotaledger/goshimmer/plugins/gossip"
"github.com/iotaledger/goshimmer/plugins/tipselection"
)
var spamming = false
var startMutex sync.Mutex
var shutdownSignal chan int
func Start(tps int64) {
startMutex.Lock()
if !spamming {
shutdownSignal = make(chan int, 1)
func(shutdownSignal chan int) {
daemon.BackgroundWorker("Transaction Spammer", func() {
for {
start := time.Now()
sentCounter := int64(0)
totalSentCounter := int64(0)
for {
select {
case <-daemon.ShutdownSignal:
return
case <-shutdownSignal:
return
default:
sentCounter++
totalSentCounter++
tx := value_transaction.New()
tx.SetValue(totalSentCounter)
tx.SetBranchTransactionHash(tipselection.GetRandomTip())
tx.SetTrunkTransactionHash(tipselection.GetRandomTip())
gossip.Events.ReceiveTransaction.Trigger(tx.MetaTransaction)
if sentCounter >= tps {
duration := time.Since(start)
if duration < time.Second {
time.Sleep(time.Second - duration)
start = time.Now()
}
sentCounter = 0
}
}
}
}
})
}(shutdownSignal)
spamming = true
}
startMutex.Unlock()
}
func Stop() {
startMutex.Lock()
if spamming {
close(shutdownSignal)
spamming = false
}
startMutex.Unlock()
}