Skip to content
Snippets Groups Projects
Commit 1bfec132 authored by Hans Moog's avatar Hans Moog
Browse files

Feat: added Events for solidification

parent 270aeb11
No related branches found
No related tags found
No related merge requests found
package tangle
import (
"github.com/iotaledger/hive.go/events"
)
type tangleEvents struct {
TransactionSolid *events.Event
}
...@@ -71,7 +71,7 @@ func (solidifier *solidifier) solidify(cachedTransaction *objectstorage.CachedOb ...@@ -71,7 +71,7 @@ func (solidifier *solidifier) solidify(cachedTransaction *objectstorage.CachedOb
// if current transaction is solid and was not marked as solid before: mark as solid and propagate // if current transaction is solid and was not marked as solid before: mark as solid and propagate
if solidifier.isTransactionSolid(currentTransaction, currentTransactionMetadata) && currentTransactionMetadata.SetSolid(true) { if solidifier.isTransactionSolid(currentTransaction, currentTransactionMetadata) && currentTransactionMetadata.SetSolid(true) {
// fmt.Println("SOLID", currentTransaction.GetId()) solidifier.tangle.Events.TransactionSolid.Trigger(currentCachedTransaction, currentCachedTransactionMetadata)
solidifier.tangle.GetApprovers(currentTransaction.GetId()).Consume(func(object objectstorage.StorableObject) { solidifier.tangle.GetApprovers(currentTransaction.GetId()).Consume(func(object objectstorage.StorableObject) {
for approverTransactionId := range object.(*approvers.Approvers).Get() { for approverTransactionId := range object.(*approvers.Approvers).Get() {
......
...@@ -6,6 +6,7 @@ import ( ...@@ -6,6 +6,7 @@ import (
"github.com/iotaledger/goshimmer/packages/binary/transactionmetadata" "github.com/iotaledger/goshimmer/packages/binary/transactionmetadata"
"github.com/iotaledger/goshimmer/packages/storageprefix" "github.com/iotaledger/goshimmer/packages/storageprefix"
"github.com/iotaledger/hive.go/async" "github.com/iotaledger/hive.go/async"
"github.com/iotaledger/hive.go/events"
"github.com/iotaledger/hive.go/objectstorage" "github.com/iotaledger/hive.go/objectstorage"
) )
...@@ -15,6 +16,8 @@ type Tangle struct { ...@@ -15,6 +16,8 @@ type Tangle struct {
transactionMetadataStorage *objectstorage.ObjectStorage transactionMetadataStorage *objectstorage.ObjectStorage
approversStorage *objectstorage.ObjectStorage approversStorage *objectstorage.ObjectStorage
Events tangleEvents
verifyTransactionsWorkerPool async.WorkerPool verifyTransactionsWorkerPool async.WorkerPool
storeTransactionsWorkerPool async.WorkerPool storeTransactionsWorkerPool async.WorkerPool
} }
...@@ -24,6 +27,18 @@ func New(storageId []byte) (result *Tangle) { ...@@ -24,6 +27,18 @@ func New(storageId []byte) (result *Tangle) {
transactionStorage: objectstorage.New(append(storageId, storageprefix.TangleTransaction...), transactionFactory), transactionStorage: objectstorage.New(append(storageId, storageprefix.TangleTransaction...), transactionFactory),
transactionMetadataStorage: objectstorage.New(append(storageId, storageprefix.TangleTransactionMetadata...), transactionFactory), transactionMetadataStorage: objectstorage.New(append(storageId, storageprefix.TangleTransactionMetadata...), transactionFactory),
approversStorage: objectstorage.New(append(storageId, storageprefix.TangleApprovers...), approversFactory), approversStorage: objectstorage.New(append(storageId, storageprefix.TangleApprovers...), approversFactory),
Events: tangleEvents{
TransactionSolid: events.NewEvent(func(handler interface{}, params ...interface{}) {
cachedTransaction := params[0].(*objectstorage.CachedObject)
cachedTransactionMetadata := params[1].(*objectstorage.CachedObject)
cachedTransaction.RegisterConsumer()
cachedTransactionMetadata.RegisterConsumer()
handler.(func(*objectstorage.CachedObject, *objectstorage.CachedObject))(cachedTransaction, cachedTransactionMetadata)
}),
},
} }
result.solidifier = newSolidifier(result) result.solidifier = newSolidifier(result)
......
...@@ -17,9 +17,11 @@ func BenchmarkTangle_AttachTransaction(b *testing.B) { ...@@ -17,9 +17,11 @@ func BenchmarkTangle_AttachTransaction(b *testing.B) {
return return
} }
testIdentity := identity.Generate()
transactionBytes := make([][]byte, b.N) transactionBytes := make([][]byte, b.N)
for i := 0; i < b.N; i++ { for i := 0; i < b.N; i++ {
transactionBytes[i] = transaction.New(transaction.EmptyId, transaction.EmptyId, identity.Generate(), data.New([]byte("some data"))).GetBytes() transactionBytes[i] = transaction.New(transaction.EmptyId, transaction.EmptyId, testIdentity, data.New([]byte("some data"))).GetBytes()
} }
b.ResetTimer() b.ResetTimer()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment