From b72204bfd1d6373e94e0c8ef51ee26276567b4e3 Mon Sep 17 00:00:00 2001 From: Jonas Theis Date: Mon, 29 Mar 2021 15:50:10 +0100 Subject: [PATCH] Optimize transaction past cone check (#1153) * WIP debugging of markers and heavy Tangle walking issue * Clean up debug prints --- packages/tangle/utils.go | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/packages/tangle/utils.go b/packages/tangle/utils.go index 5fdd7cf698..e6f23a4a08 100644 --- a/packages/tangle/utils.go +++ b/packages/tangle/utils.go @@ -122,6 +122,7 @@ func (u *Utils) TransactionApprovedByMessage(transactionID ledgerstate.Transacti continue } + bookedParents := make(MessageIDs, 0) u.tangle.Storage.Message(messageID).Consume(func(message *Message) { for _, parentID := range message.StrongParents() { var parentBooked bool @@ -132,13 +133,26 @@ func (u *Utils) TransactionApprovedByMessage(transactionID ledgerstate.Transacti continue } - if u.MessageApprovedBy(attachmentMessageID, parentID) { + // First check all of the parents to avoid unnecessary checks and possible walking. + if attachmentMessageID == parentID { approved = true return } + + bookedParents = append(bookedParents, parentID) } }) + if approved { + return + } + // Only now check all parents. + for _, bookedParent := range bookedParents { + if u.MessageApprovedBy(attachmentMessageID, bookedParent) { + approved = true + return + } + } if approved { return }