From fd142dcf0efd95445aa5a8f65c47c16e686d7846 Mon Sep 17 00:00:00 2001 From: Hans Moog <hm@mkjc.net> Date: Mon, 1 Jul 2019 01:12:24 +0200 Subject: [PATCH] Fix: fixed bug in tangle plugin when persisting approvers --- packages/curl/batch_hasher.go | 2 +- packages/model/approvers/approvers.go | 4 ++-- packages/model/meta_transaction/constants.go | 2 +- .../meta_transaction/meta_transaction.go | 4 ++-- .../value_transaction/value_transaction.go | 20 ++++++++++++++++++- packages/model/valuebundle/metabundle.go | 4 ++++ plugins/gossip/protocol_v1.go | 6 +++--- plugins/gossip/transaction_processor_test.go | 4 ++-- plugins/tangle/approvers.go | 4 ++-- plugins/tangle/solidifier.go | 2 +- plugins/tangle/transaction_metadata.go | 3 +++ 11 files changed, 40 insertions(+), 15 deletions(-) diff --git a/packages/curl/batch_hasher.go b/packages/curl/batch_hasher.go index af38a90b..367ff8e0 100644 --- a/packages/curl/batch_hasher.go +++ b/packages/curl/batch_hasher.go @@ -117,5 +117,5 @@ func (this *BatchHasher) Hash(trits ternary.Trits) chan ternary.Trits { } const ( - NUMBER_OF_WORKERS = 100 + NUMBER_OF_WORKERS = 1000 ) diff --git a/packages/model/approvers/approvers.go b/packages/model/approvers/approvers.go index cd7e66c4..a733922a 100644 --- a/packages/model/approvers/approvers.go +++ b/packages/model/approvers/approvers.go @@ -63,10 +63,10 @@ func (approvers *Approvers) SetModified(modified bool) { } func (approvers *Approvers) Marshal() (result []byte) { - result = make([]byte, MARSHALED_APPROVERS_MIN_SIZE+len(approvers.hashes)*MARSHALED_APPROVERS_HASH_SIZE) - approvers.hashesMutex.RLock() + result = make([]byte, MARSHALED_APPROVERS_MIN_SIZE+len(approvers.hashes)*MARSHALED_APPROVERS_HASH_SIZE) + binary.BigEndian.PutUint64(result[MARSHALED_APPROVERS_HASHES_COUNT_START:MARSHALED_APPROVERS_HASHES_COUNT_END], uint64(len(approvers.hashes))) copy(result[MARSHALED_APPROVERS_HASH_START:MARSHALED_APPROVERS_HASH_END], approvers.hash.CastToBytes()) diff --git a/packages/model/meta_transaction/constants.go b/packages/model/meta_transaction/constants.go index 48fe6869..8676b4c9 100644 --- a/packages/model/meta_transaction/constants.go +++ b/packages/model/meta_transaction/constants.go @@ -29,7 +29,7 @@ const ( TRANSACTION_TYPE_END = TRANSACTION_TYPE_OFFSET + TRANSACTION_TYPE_SIZE DATA_END = DATA_OFFSET + DATA_SIZE - MARSHALLED_TOTAL_SIZE = DATA_END + MARSHALED_TOTAL_SIZE = DATA_END BRANCH_NULL_HASH = ternary.Trytes("999999999999999999999999999999999999999999999999999999999999999999999999999999999") ) diff --git a/packages/model/meta_transaction/meta_transaction.go b/packages/model/meta_transaction/meta_transaction.go index 82bb790c..f949915e 100644 --- a/packages/model/meta_transaction/meta_transaction.go +++ b/packages/model/meta_transaction/meta_transaction.go @@ -37,7 +37,7 @@ type MetaTransaction struct { } func New() *MetaTransaction { - return FromTrits(make(ternary.Trits, MARSHALLED_TOTAL_SIZE)) + return FromTrits(make(ternary.Trits, MARSHALED_TOTAL_SIZE)) } func FromTrits(trits ternary.Trits) *MetaTransaction { @@ -47,7 +47,7 @@ func FromTrits(trits ternary.Trits) *MetaTransaction { } func FromBytes(bytes []byte) (result *MetaTransaction) { - result = FromTrits(ternary.BytesToTrits(bytes)[:MARSHALLED_TOTAL_SIZE]) + result = FromTrits(ternary.BytesToTrits(bytes)[:MARSHALED_TOTAL_SIZE]) result.bytes = bytes return diff --git a/packages/model/value_transaction/value_transaction.go b/packages/model/value_transaction/value_transaction.go index 2d9b0cd8..b014d3ce 100644 --- a/packages/model/value_transaction/value_transaction.go +++ b/packages/model/value_transaction/value_transaction.go @@ -43,7 +43,7 @@ func FromMetaTransaction(metaTransaction *meta_transaction.MetaTransaction) *Val func FromBytes(bytes []byte) (result *ValueTransaction) { result = &ValueTransaction{ - MetaTransaction: meta_transaction.FromTrits(ternary.BytesToTrits(bytes)[:meta_transaction.MARSHALLED_TOTAL_SIZE]), + MetaTransaction: meta_transaction.FromTrits(ternary.BytesToTrits(bytes)[:meta_transaction.MARSHALED_TOTAL_SIZE]), } result.trits = result.MetaTransaction.GetData() @@ -192,6 +192,24 @@ func (this *ValueTransaction) SetTimestamp(timestamp uint) bool { return false } +func (this *ValueTransaction) GetBundleEssence() (result ternary.Trytes) { + this.addressMutex.RLock() + this.valueMutex.RLock() + this.signatureMessageFragmentMutex.RLock() + + if this.GetValue() < 0 { + result = this.trits[ADDRESS_OFFSET:VALUE_END].ToTrytes() + this.trits[SIGNATURE_MESSAGE_FRAGMENT_OFFSET:SIGNATURE_MESSAGE_FRAGMENT_END].ToTrytes() + } else { + result = this.trits[ADDRESS_OFFSET:VALUE_END].ToTrytes() + } + + this.signatureMessageFragmentMutex.RUnlock() + this.valueMutex.RUnlock() + this.addressMutex.RUnlock() + + return +} + // getter for the nonce (supports concurrency) func (this *ValueTransaction) GetNonce() (result ternary.Trytes) { this.nonceMutex.RLock() diff --git a/packages/model/valuebundle/metabundle.go b/packages/model/valuebundle/metabundle.go index 18d78f6a..a5714d89 100644 --- a/packages/model/valuebundle/metabundle.go +++ b/packages/model/valuebundle/metabundle.go @@ -27,6 +27,10 @@ func (bundle *MetaBundle) GetHash() ternary.Trytes { } func CalculateBundleHash(transactions []*value_transaction.ValueTransaction) ternary.Trytes { + transactions[0].GetAddress() + transactions[0].GetSignatureMessageFragment() + transactions[0].GetTimestamp() + transactions[0].GetValue() //transactions[0].GetData()[value_transaction.SIGNATURE_MESSAGE_FRAGMENT_OFFSET] return ternary.Trytes("A") } diff --git a/plugins/gossip/protocol_v1.go b/plugins/gossip/protocol_v1.go index b0adc6ad..ac5939a6 100644 --- a/plugins/gossip/protocol_v1.go +++ b/plugins/gossip/protocol_v1.go @@ -303,7 +303,7 @@ type transactionStateV1 struct { func newTransactionStateV1(protocol *protocol) *transactionStateV1 { return &transactionStateV1{ protocol: protocol, - buffer: make([]byte, meta_transaction.MARSHALLED_TOTAL_SIZE/ternary.NUMBER_OF_TRITS_IN_A_BYTE), + buffer: make([]byte, meta_transaction.MARSHALED_TOTAL_SIZE/ternary.NUMBER_OF_TRITS_IN_A_BYTE), offset: 0, } } @@ -312,10 +312,10 @@ func (state *transactionStateV1) Receive(data []byte, offset int, length int) (i bytesRead := byteutils.ReadAvailableBytesToBuffer(state.buffer, state.offset, data, offset, length) state.offset += bytesRead - if state.offset == meta_transaction.MARSHALLED_TOTAL_SIZE/ternary.NUMBER_OF_TRITS_IN_A_BYTE { + if state.offset == meta_transaction.MARSHALED_TOTAL_SIZE/ternary.NUMBER_OF_TRITS_IN_A_BYTE { protocol := state.protocol - transactionData := make([]byte, meta_transaction.MARSHALLED_TOTAL_SIZE/ternary.NUMBER_OF_TRITS_IN_A_BYTE) + transactionData := make([]byte, meta_transaction.MARSHALED_TOTAL_SIZE/ternary.NUMBER_OF_TRITS_IN_A_BYTE) copy(transactionData, state.buffer) protocol.Events.ReceiveTransactionData.Trigger(transactionData) diff --git a/plugins/gossip/transaction_processor_test.go b/plugins/gossip/transaction_processor_test.go index c07602df..9c7e8bdf 100644 --- a/plugins/gossip/transaction_processor_test.go +++ b/plugins/gossip/transaction_processor_test.go @@ -9,7 +9,7 @@ import ( ) func BenchmarkProcessSimilarTransactionsFiltered(b *testing.B) { - byteArray := setupTransaction(meta_transaction.MARSHALLED_TOTAL_SIZE / ternary.NUMBER_OF_TRITS_IN_A_BYTE) + byteArray := setupTransaction(meta_transaction.MARSHALED_TOTAL_SIZE / ternary.NUMBER_OF_TRITS_IN_A_BYTE) b.ResetTimer() @@ -19,7 +19,7 @@ func BenchmarkProcessSimilarTransactionsFiltered(b *testing.B) { } func BenchmarkProcessSimilarTransactionsUnfiltered(b *testing.B) { - byteArray := setupTransaction(meta_transaction.MARSHALLED_TOTAL_SIZE / ternary.NUMBER_OF_TRITS_IN_A_BYTE) + byteArray := setupTransaction(meta_transaction.MARSHALED_TOTAL_SIZE / ternary.NUMBER_OF_TRITS_IN_A_BYTE) b.ResetTimer() diff --git a/plugins/tangle/approvers.go b/plugins/tangle/approvers.go index 2e54e11d..a5648c8f 100644 --- a/plugins/tangle/approvers.go +++ b/plugins/tangle/approvers.go @@ -85,8 +85,8 @@ func configureApproversDatabase(plugin *node.Plugin) { func storeApproversInDatabase(approvers *approvers.Approvers) errors.IdentifiableError { if approvers.GetModified() { - if err := transactionMetadataDatabase.Set(approvers.GetHash().CastToBytes(), approvers.Marshal()); err != nil { - return ErrDatabaseError.Derive(err, "failed to store transaction metadata") + if err := approversDatabase.Set(approvers.GetHash().CastToBytes(), approvers.Marshal()); err != nil { + return ErrDatabaseError.Derive(err, "failed to store approvers") } approvers.SetModified(false) diff --git a/plugins/tangle/solidifier.go b/plugins/tangle/solidifier.go index edf28844..ce66662a 100644 --- a/plugins/tangle/solidifier.go +++ b/plugins/tangle/solidifier.go @@ -17,7 +17,7 @@ import ( //var solidifierChan = make(chan *value_transaction.ValueTransaction, 1000) -const NUMBER_OF_WORKERS = 300 +const NUMBER_OF_WORKERS = 3000 var tasksChan = make(chan *meta_transaction.MetaTransaction, NUMBER_OF_WORKERS) diff --git a/plugins/tangle/transaction_metadata.go b/plugins/tangle/transaction_metadata.go index 82a3b8fd..6548346b 100644 --- a/plugins/tangle/transaction_metadata.go +++ b/plugins/tangle/transaction_metadata.go @@ -90,6 +90,9 @@ func storeTransactionMetadataInDatabase(metadata *transactionmetadata.Transactio if marshaledMetadata, err := metadata.Marshal(); err != nil { return err } else { + if len(marshaledMetadata) != 97 { + panic("WATT") + } if err := transactionMetadataDatabase.Set(metadata.GetHash().CastToBytes(), marshaledMetadata); err != nil { return ErrDatabaseError.Derive(err, "failed to store transaction metadata") } -- GitLab