6
"gitverse.ru/IvanTimofeev/cranberry/internal/db"
7
memorypool "gitverse.ru/IvanTimofeev/cranberry/internal/pool"
8
pbapi "gitverse.ru/IvanTimofeev/cranberry/pkg/grpc"
9
"gitverse.ru/IvanTimofeev/cranberry/pkg/utility"
12
type TxService struct {
13
memorypool *memorypool.MemoryPool
17
func (s *TxService) ExecuteTx(txc *pbapi.TxContainer, bc *pbapi.BlockContainer, dbtx *sql.Tx) error {
18
// сохраняем транзакцию в БД
19
err := s.db.SaveTx(txc, bc, dbtx)
23
// создаем или обновляем аккаунты и балансы в БД
24
toAcc, ok, err := s.db.GetAccountByTx(txc.Tx.To, dbtx)
29
err = s.db.SaveAccount(&pbapi.Account{
31
Balance: txc.Tx.Amount,
37
toAcc.Balance += txc.Tx.Amount
38
err = s.db.SaveAccount(toAcc, dbtx)
43
from := utility.GetAddrFromPubKey(txc.PubKey)
44
fromAcc, ok, err := s.db.GetAccountByTx(from, dbtx)
49
//это невозможно, поскольку такой аккаунт и баланс не существует
54
fromAcc.Balance -= txc.Tx.Amount
55
fromAcc.PubKey = txc.PubKey
56
err = s.db.SaveAccount(fromAcc, dbtx)
63
func NewTxService(memorypool *memorypool.MemoryPool, db *db.Db) *TxService {
65
memorypool: memorypool,