diff --git a/packages/model/transactionmetadata/transactionmetadata.go b/packages/model/transactionmetadata/transactionmetadata.go index 39874a5addf16bd54ed3b9588b98b41d93df3c9f..8ba50c3c26626f204224c9907bcc167ad515235d 100644 --- a/packages/model/transactionmetadata/transactionmetadata.go +++ b/packages/model/transactionmetadata/transactionmetadata.go @@ -13,18 +13,20 @@ import ( // region type definition and constructor ////////////////////////////////////////////////////////////////////////////// type TransactionMetadata struct { - hash ternary.Trytes - hashMutex sync.RWMutex - receivedTime time.Time - receivedTimeMutex sync.RWMutex - solid bool - solidMutex sync.RWMutex - liked bool - likedMutex sync.RWMutex - finalized bool - finalizedMutex sync.RWMutex - modified bool - modifiedMutex sync.RWMutex + hash ternary.Trytes + hashMutex sync.RWMutex + bundleTailHash ternary.Trytes + bundleTailHashMutex sync.RWMutex + receivedTime time.Time + receivedTimeMutex sync.RWMutex + solid bool + solidMutex sync.RWMutex + liked bool + likedMutex sync.RWMutex + finalized bool + finalizedMutex sync.RWMutex + modified bool + modifiedMutex sync.RWMutex } func New(hash ternary.Trytes) *TransactionMetadata { @@ -65,6 +67,29 @@ func (metadata *TransactionMetadata) SetHash(hash ternary.Trytes) { } } +func (metadata *TransactionMetadata) GetBundleTailHash() ternary.Trytes { + metadata.bundleTailHashMutex.RLock() + defer metadata.bundleTailHashMutex.RUnlock() + + return metadata.bundleTailHash +} + +func (metadata *TransactionMetadata) SetBundleTailHash(bundleTailHash ternary.Trytes) { + metadata.bundleTailHashMutex.RLock() + if metadata.bundleTailHash != bundleTailHash { + metadata.bundleTailHashMutex.RUnlock() + metadata.bundleTailHashMutex.Lock() + defer metadata.bundleTailHashMutex.Unlock() + if metadata.bundleTailHash != bundleTailHash { + metadata.bundleTailHash = bundleTailHash + + metadata.SetModified(true) + } + } else { + metadata.bundleTailHashMutex.RUnlock() + } +} + func (metadata *TransactionMetadata) GetReceivedTime() time.Time { metadata.receivedTimeMutex.RLock() defer metadata.receivedTimeMutex.RUnlock()