diff --git a/packages/binary/tangle/events.go b/packages/binary/tangle/events.go new file mode 100644 index 0000000000000000000000000000000000000000..0f4a24ebdd80ef8680dafb25f78cbb690837d8a1 --- /dev/null +++ b/packages/binary/tangle/events.go @@ -0,0 +1,9 @@ +package tangle + +import ( + "github.com/iotaledger/hive.go/events" +) + +type tangleEvents struct { + TransactionSolid *events.Event +} diff --git a/packages/binary/tangle/solidifier.go b/packages/binary/tangle/solidifier.go index 417b6033fff4b4ce617b21a62c300f7986df7e2c..14e0f0bc3f610df0e0ecdcfa9151c720bab3a925 100644 --- a/packages/binary/tangle/solidifier.go +++ b/packages/binary/tangle/solidifier.go @@ -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 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) { for approverTransactionId := range object.(*approvers.Approvers).Get() { diff --git a/packages/binary/tangle/tangle.go b/packages/binary/tangle/tangle.go index ee1e9cee68f7f389026bc12a3fd022c0274f1990..edaf55e104902a4057d588851d0f9b31aaeccad0 100644 --- a/packages/binary/tangle/tangle.go +++ b/packages/binary/tangle/tangle.go @@ -6,6 +6,7 @@ import ( "github.com/iotaledger/goshimmer/packages/binary/transactionmetadata" "github.com/iotaledger/goshimmer/packages/storageprefix" "github.com/iotaledger/hive.go/async" + "github.com/iotaledger/hive.go/events" "github.com/iotaledger/hive.go/objectstorage" ) @@ -15,6 +16,8 @@ type Tangle struct { transactionMetadataStorage *objectstorage.ObjectStorage approversStorage *objectstorage.ObjectStorage + Events tangleEvents + verifyTransactionsWorkerPool async.WorkerPool storeTransactionsWorkerPool async.WorkerPool } @@ -24,6 +27,18 @@ func New(storageId []byte) (result *Tangle) { transactionStorage: objectstorage.New(append(storageId, storageprefix.TangleTransaction...), transactionFactory), transactionMetadataStorage: objectstorage.New(append(storageId, storageprefix.TangleTransactionMetadata...), transactionFactory), 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) diff --git a/packages/binary/tangle/tangle_test.go b/packages/binary/tangle/tangle_test.go index 94e19ba97788e7f87bbfd7a25b0a7fd0727db456..a0b7d51c62e363d5860924cc2eec293eb3a70276 100644 --- a/packages/binary/tangle/tangle_test.go +++ b/packages/binary/tangle/tangle_test.go @@ -17,9 +17,11 @@ func BenchmarkTangle_AttachTransaction(b *testing.B) { return } + testIdentity := identity.Generate() + transactionBytes := make([][]byte, b.N) 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()