Skip to content
Snippets Groups Projects
Commit fd142dcf authored by Hans Moog's avatar Hans Moog
Browse files

Fix: fixed bug in tangle plugin when persisting approvers

parent 56d2760d
Branches
Tags
No related merge requests found
......@@ -117,5 +117,5 @@ func (this *BatchHasher) Hash(trits ternary.Trits) chan ternary.Trits {
}
const (
NUMBER_OF_WORKERS = 100
NUMBER_OF_WORKERS = 1000
)
......@@ -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())
......
......@@ -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")
)
......@@ -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
......
......@@ -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()
......
......@@ -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")
}
......@@ -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)
......
......@@ -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()
......
......@@ -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)
......
......@@ -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)
......
......@@ -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")
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment