From 05733160270e2cf9684781e3e9a521f035527d8b Mon Sep 17 00:00:00 2001
From: capossele <angelocapossele@gmail.com>
Date: Tue, 14 Jan 2020 21:58:09 +0000
Subject: [PATCH] :sparkles: adds txs per address

---
 plugins/tangle/misc.go            | 11 ++++++++---
 plugins/tangle/plugin.go          |  1 +
 plugins/tangle/solidifier.go      | 15 +++++++++++++--
 plugins/tangle/solidifier_test.go |  5 +++++
 plugins/tangle/tx_per_address.go  | 13 ++++++-------
 5 files changed, 33 insertions(+), 12 deletions(-)

diff --git a/plugins/tangle/misc.go b/plugins/tangle/misc.go
index 08fc8de9..490f52d7 100644
--- a/plugins/tangle/misc.go
+++ b/plugins/tangle/misc.go
@@ -1,11 +1,16 @@
 package tangle
 
-import "github.com/iotaledger/iota.go/trinary"
+import (
+	"github.com/iotaledger/hive.go/typeutils"
+	"github.com/iotaledger/iota.go/trinary"
+)
 
 func databaseKeyForHashPrefixedHash(address trinary.Hash, transactionHash trinary.Hash) []byte {
-	return append(databaseKeyForHashPrefix(address), trinary.MustTrytesToBytes(transactionHash)...)
+	//return append(databaseKeyForHashPrefix(address), trinary.MustTrytesToBytes(transactionHash)...)
+	return append(databaseKeyForHashPrefix(address), typeutils.StringToBytes(transactionHash)...)
 }
 
 func databaseKeyForHashPrefix(hash trinary.Hash) []byte {
-	return trinary.MustTrytesToBytes(hash)
+	//return trinary.MustTrytesToBytes(hash)
+	return typeutils.StringToBytes(hash)
 }
diff --git a/plugins/tangle/plugin.go b/plugins/tangle/plugin.go
index 50cbafaa..483d57b7 100644
--- a/plugins/tangle/plugin.go
+++ b/plugins/tangle/plugin.go
@@ -18,6 +18,7 @@ func configure(*node.Plugin) {
 	configureTransactionMetaDataDatabase()
 	configureApproversDatabase()
 	configureBundleDatabase()
+	configureTransactionHashesForAddressDatabase()
 	configureSolidifier()
 }
 
diff --git a/plugins/tangle/solidifier.go b/plugins/tangle/solidifier.go
index 4b3dd663..7e6e8c4f 100644
--- a/plugins/tangle/solidifier.go
+++ b/plugins/tangle/solidifier.go
@@ -192,6 +192,17 @@ func processMetaTransaction(metaTransaction *meta_transaction.MetaTransaction) {
 func processTransaction(transaction *value_transaction.ValueTransaction) {
 	Events.TransactionStored.Trigger(transaction)
 
+	// store transaction hash for address in DB
+	err := StoreTransactionHashForAddressInDatabase(
+		&TxHashForAddress{
+			Address: transaction.GetAddress(),
+			TxHash:  transaction.GetHash(),
+		},
+	)
+	if err != nil {
+		log.Errorw(err.Error())
+	}
+
 	transactionHash := transaction.GetHash()
 
 	// register tx as approver for trunk
@@ -211,7 +222,7 @@ func processTransaction(transaction *value_transaction.ValueTransaction) {
 	}
 
 	// update the solidity flags of this transaction and its approvers
-	_, err := IsSolid(transaction)
+	_, err = IsSolid(transaction)
 	if err != nil {
 		log.Errorf("Unable to check solidity: %s", err.Error())
 		return
@@ -232,6 +243,6 @@ func requestTransaction(hash trinary.Trytes) {
 		return
 	}
 
-	log.Infow("Requesting tx", "hash", hash)
+	log.Debugw("Requesting tx", "hash", hash)
 	requester.RequestTransaction(hash)
 }
diff --git a/plugins/tangle/solidifier_test.go b/plugins/tangle/solidifier_test.go
index 14573d43..bb677a5c 100644
--- a/plugins/tangle/solidifier_test.go
+++ b/plugins/tangle/solidifier_test.go
@@ -46,6 +46,7 @@ func TestSolidifier(t *testing.T) {
 	transaction4 := value_transaction.New()
 	transaction4.SetValue(4)
 	transaction4.SetBranchTransactionHash(transaction3.GetHash())
+	transaction4.SetAddress("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA")
 	require.NoError(t, transaction4.DoProofOfWork(meta_transaction.MIN_WEIGHT_MAGNITUDE))
 
 	// setup event handlers
@@ -72,6 +73,10 @@ func TestSolidifier(t *testing.T) {
 	// wait until all are solid
 	wg.Wait()
 
+	txAddr, err := ReadTransactionHashesForAddressFromDatabase(transaction4.GetAddress())
+	require.NoError(t, err)
+	require.Equal(t, transaction4.GetHash(), txAddr[0])
+
 	// shutdown test node
 	node.Shutdown()
 }
diff --git a/plugins/tangle/tx_per_address.go b/plugins/tangle/tx_per_address.go
index 87a56828..c344aeda 100644
--- a/plugins/tangle/tx_per_address.go
+++ b/plugins/tangle/tx_per_address.go
@@ -2,6 +2,7 @@ package tangle
 
 import (
 	"github.com/iotaledger/goshimmer/packages/database"
+	"github.com/iotaledger/hive.go/typeutils"
 	"github.com/iotaledger/iota.go/trinary"
 )
 
@@ -29,9 +30,7 @@ func StoreTransactionHashForAddressInDatabase(address *TxHashForAddress) error {
 	); err != nil {
 		return ErrDatabaseError.Derive(err, "failed to store tx for address in database")
 	}
-	log.Info("Stored Address:", address.Address)
-	log.Info("TxHash:", address.TxHash)
-	log.Info("txForAddr: ", trinary.MustBytesToTrytes(databaseKeyForHashPrefixedHash(address.Address, address.TxHash), 81))
+
 	return nil
 }
 
@@ -48,10 +47,10 @@ func DeleteTransactionHashForAddressInDatabase(address *TxHashForAddress) error
 func ReadTransactionHashesForAddressFromDatabase(address trinary.Hash) ([]trinary.Hash, error) {
 	var transactionHashes []trinary.Hash
 	err := transactionsHashesForAddressDatabase.ForEachWithPrefix(databaseKeyForHashPrefix(address), func(key []byte, value []byte) {
-		log.Info("Len key:", len(key))
-		txHash := trinary.MustBytesToTrytes(key)[81:]
-		log.Info("Len ALL:", len(txHash))
-		transactionHashes = append(transactionHashes, txHash)
+		k := typeutils.BytesToString(key)
+		if len(k) > 81 {
+			transactionHashes = append(transactionHashes, k[81:])
+		}
 	})
 
 	if err != nil {
-- 
GitLab