diff --git a/plugins/tangle/misc.go b/plugins/tangle/misc.go index 08fc8de9334f214beebda36ba810fdd7a6961027..490f52d74aa145b2498f2afa7b65da5ba2fc6f03 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 50cbafaa0c5d00038900900855ec73675f0c277d..483d57b7b084e6c5fe8b75ee0589f00776f05d71 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 4b3dd663e564e257060d2a06dce1e67f1045757f..7e6e8c4f84e269fc0ae8eb2bd770e781fb3b9805 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 14573d43de02ed6c4c967f0f63cdfbe021c7e9b5..bb677a5c620fc6b489501cb9056760df18b5dc43 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 87a568284b8f6bd770392dcf509cd40b3e69688f..c344aeda6028d238a1705f2adcfc169c324f2f09 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 {