From 1bfec1325f90c778f0f419a4b4791a7a0063750e Mon Sep 17 00:00:00 2001 From: Hans Moog <hm@mkjc.net> Date: Thu, 2 Jan 2020 19:08:08 +0100 Subject: [PATCH] Feat: added Events for solidification --- packages/binary/tangle/events.go | 9 +++++++++ packages/binary/tangle/solidifier.go | 2 +- packages/binary/tangle/tangle.go | 15 +++++++++++++++ packages/binary/tangle/tangle_test.go | 4 +++- 4 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 packages/binary/tangle/events.go diff --git a/packages/binary/tangle/events.go b/packages/binary/tangle/events.go new file mode 100644 index 00000000..0f4a24eb --- /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 417b6033..14e0f0bc 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 ee1e9cee..edaf55e1 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 94e19ba9..a0b7d51c 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() -- GitLab