From b0bfea5e16423df45dfaef1a96d0a20584806af1 Mon Sep 17 00:00:00 2001 From: capossele <angelocapossele@gmail.com> Date: Tue, 14 Jan 2020 20:02:58 +0000 Subject: [PATCH] :construction: WIP --- plugins/tangle/misc.go | 11 ++++++ plugins/tangle/tx_per_address.go | 62 ++++++++++++++++++++++++++++++++ 2 files changed, 73 insertions(+) create mode 100644 plugins/tangle/misc.go create mode 100644 plugins/tangle/tx_per_address.go diff --git a/plugins/tangle/misc.go b/plugins/tangle/misc.go new file mode 100644 index 00000000..08fc8de9 --- /dev/null +++ b/plugins/tangle/misc.go @@ -0,0 +1,11 @@ +package tangle + +import "github.com/iotaledger/iota.go/trinary" + +func databaseKeyForHashPrefixedHash(address trinary.Hash, transactionHash trinary.Hash) []byte { + return append(databaseKeyForHashPrefix(address), trinary.MustTrytesToBytes(transactionHash)...) +} + +func databaseKeyForHashPrefix(hash trinary.Hash) []byte { + return trinary.MustTrytesToBytes(hash) +} diff --git a/plugins/tangle/tx_per_address.go b/plugins/tangle/tx_per_address.go new file mode 100644 index 00000000..87a56828 --- /dev/null +++ b/plugins/tangle/tx_per_address.go @@ -0,0 +1,62 @@ +package tangle + +import ( + "github.com/iotaledger/goshimmer/packages/database" + "github.com/iotaledger/iota.go/trinary" +) + +var ( + transactionsHashesForAddressDatabase database.Database +) + +func configureTransactionHashesForAddressDatabase() { + if db, err := database.Get("transactionsHashesForAddress"); err != nil { + panic(err) + } else { + transactionsHashesForAddressDatabase = db + } +} + +type TxHashForAddress struct { + Address trinary.Hash + TxHash trinary.Hash +} + +func StoreTransactionHashForAddressInDatabase(address *TxHashForAddress) error { + if err := transactionsHashesForAddressDatabase.Set( + databaseKeyForHashPrefixedHash(address.Address, address.TxHash), + []byte{}, + ); 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 +} + +func DeleteTransactionHashForAddressInDatabase(address *TxHashForAddress) error { + if err := transactionsHashesForAddressDatabase.Delete( + databaseKeyForHashPrefixedHash(address.Address, address.TxHash), + ); err != nil { + return ErrDatabaseError.Derive(err, "failed to delete tx for address") + } + + return nil +} + +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) + }) + + if err != nil { + return nil, ErrDatabaseError.Derive(err, "failed to read tx per address from database") + } else { + return transactionHashes, nil + } +} -- GitLab