diff --git a/core/shyft_database_util.go b/core/shyft_database_util.go index 8ba92e7d05..1448b7cc35 100644 --- a/core/shyft_database_util.go +++ b/core/shyft_database_util.go @@ -260,7 +260,7 @@ func swriteFromBalance(sqldb *sql.DB, tx *types.Transaction) error { case err == sql.ErrNoRows: accountNonce := strconv.FormatUint(tx.Nonce(), 10) CreateAccount(sqldb, sendAndReceiveData.To, sendAndReceiveData.Amount, accountNonce) - balanceHelper(sqldb, sendAndReceiveData, value) + adjustBalanceFromAddr(sqldb, sendAndReceiveData, value) case err != nil: log.Fatal(err) default: @@ -269,6 +269,32 @@ func swriteFromBalance(sqldb *sql.DB, tx *types.Transaction) error { return nil } +func adjustBalanceFromAddr(sqldb *sql.DB, s SendAndReceive, value *big.Int) { + fromAddressBalance, fromAccountNonce, err := AccountExists(sqldb, s.From) + switch { + case err == sql.ErrNoRows: + accountNonce := "1" + //s.Amount should be 0? + CreateAccount(sqldb, s.From, s.Amount, accountNonce) + case err != nil: + log.Fatal(err) + default: + var newBalanceSender, newAccountNonceSender big.Int + var nonceIncrement = big.NewInt(1) + + fromBalance := new(big.Int) + fromBalance, _ = fromBalance.SetString(fromAddressBalance, 10) + + fromNonce := new(big.Int) + fromNonce, _ = fromNonce.SetString(fromAccountNonce, 10) + + newBalanceSender.Sub(fromBalance, value) + newAccountNonceSender.Add(fromNonce, nonceIncrement) + + UpdateAccount(sqldb, s.From, newBalanceSender.String(), newAccountNonceSender.String()) + } +} + func balanceHelper(sqldb *sql.DB, s SendAndReceive, value *big.Int) { fromAddressBalance, fromAccountNonce, err := AccountExists(sqldb, s.From) toAddressBalance, toAccountNonce, err := AccountExists(sqldb, s.To) @@ -277,12 +303,12 @@ func balanceHelper(sqldb *sql.DB, s SendAndReceive, value *big.Int) { } var newBalanceReceiver, newBalanceSender, newAccountNonceReceiver, newAccountNonceSender big.Int var nonceIncrement = big.NewInt(1) - fmt.Println(toAddressBalance) + //STRING TO BIG INT //BALANCES TO AND FROM ADDR toBalance := new(big.Int) toBalance, _ = toBalance.SetString(toAddressBalance, 10) - fmt.Println(toBalance) + fromBalance := new(big.Int) fromBalance, _ = fromBalance.SetString(fromAddressBalance, 10) diff --git a/shyftDb/shyft_database_util_test.go b/shyftDb/shyft_database_util_test.go index eda8b56d54..c94e10130f 100644 --- a/shyftDb/shyft_database_util_test.go +++ b/shyftDb/shyft_database_util_test.go @@ -2,7 +2,6 @@ package shyftdb import ( "encoding/json" - "fmt" "math/big" "strconv" "strings" @@ -68,7 +67,6 @@ func TestBlock(t *testing.T) { receipts := []*types.Receipt{receipt} block := types.NewBlock(&types.Header{Number: big.NewInt(315)}, txs, nil, receipts) - // Write and verify the block in the database if err := core.SWriteBlock(block, receipts); err != nil { t.Fatalf("Failed to write block into database: %v", err) @@ -126,7 +124,6 @@ func TestBlock(t *testing.T) { if getAllBlocksMinedByAddress := core.SGetAllBlocksMinedByAddress(sqldb, block.Coinbase().String()); len(getAllBlocksMinedByAddress) == 0 { t.Fatalf("GetAllBlocksMinedByAddress [%v]: GetAllBlocksMinedByAddress did not return correctly", getAllBlocksMinedByAddress) } - fmt.Println("passed") core.ClearTables() }) @@ -215,7 +212,6 @@ func TestBlock(t *testing.T) { if allTxsFromBlock := core.SGetAllTransactionsFromBlock(sqldb, block2.Number().String()); len(allTxsFromBlock) == 0 { t.Fatalf("GetAllTransactionsFromBlock [%v]: GetAllTransactionsFromBlock did not return correctly", allTxsFromBlock) } - fmt.Println("Passed 2") core.ClearTables() }) @@ -316,7 +312,6 @@ func TestBlock(t *testing.T) { t.Fatalf("isContract [%v]: isContract bool is incorrect", isContract) } } - fmt.Println("Passed 3") core.ClearTables() }) // @@ -420,7 +415,6 @@ func TestBlock(t *testing.T) { if getAllTx := core.SGetAllTransactions(sqldb); len(getAllTx) == 0 { t.Fatalf("GetAllTransactions [%v]: GetAllTransactions did not return correctly", getAllTx) } - fmt.Println("Passed 4") core.ClearTables() }) // @@ -434,6 +428,9 @@ func TestBlock(t *testing.T) { } fromAddr := "0x71562b71999873db5b286df957af199ec94617f7" + fromAddrEndBalance := "35" + fromAddrEndNonce := "4" + core.CreateAccount(sqldb, fromAddr, "50", "1") toAddr := common.BytesToAddress([]byte{0x11}) @@ -486,19 +483,23 @@ func TestBlock(t *testing.T) { var accountDataFrom core.SAccounts json.Unmarshal(byts, &accountDataFrom) - fmt.Println("FROM", accountDataFrom) + if fromAddr != accountDataFrom.Addr { + t.Fatalf("To address [%v]: To address not found", accountDataFrom.Addr) + } + if fromAddrEndBalance != accountDataFrom.Balance { + t.Fatalf("To address balance [%v]: To address balance not found", accountDataFrom.Balance) + } + if fromAddrEndNonce != accountDataFrom.AccountNonce { + t.Fatalf("To account nonce [%v]: To account nonce not found", accountDataFrom.AccountNonce) + } if getAllAccountTxs := core.SGetAccountTxs(sqldb, toAddr.String()); len(getAllAccountTxs) == 0 { t.Fatalf("GetAccountTxs [%v]: GetAccountTxs did not return correctly", getAllAccountTxs) } - if getAllAccounts := core.SGetAllAccounts(sqldb); len(getAllAccounts) == 0 { t.Fatalf("GetAllAccounts [%v]: GetAllAccounts did not return correctly", getAllAccounts) } - - fmt.Println("Passed 5") core.ClearTables() }) - core.ClearTables() }