Skip to content
Snippets Groups Projects
tx_per_address.go 1.87 KiB
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
	}
}