mirror of
https://github.com/status-im/status-go.git
synced 2025-02-16 08:50:09 +00:00
fix: dup tx
Remove duplicate gas only TX Remove Send and Receive from self, only the send row is kept
This commit is contained in:
parent
390d706b3f
commit
011a170a03
@ -492,7 +492,9 @@ func updateOrInsertTransfersDBFields(creator statementCreator, transfers []trans
|
|||||||
log.Error("can't save transfer", "b-hash", t.blockHash, "b-n", t.blockNumber, "a", t.address, "h", t.id)
|
log.Error("can't save transfer", "b-hash", t.blockHash, "b-n", t.blockNumber, "a", t.address, "h", t.id)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, t := range transfers {
|
||||||
err = removeGasOnlyEthTransfer(creator, t)
|
err = removeGasOnlyEthTransfer(creator, t)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error("can't remove gas only eth transfer", "b-hash", t.blockHash, "b-n", t.blockNumber, "a", t.address, "h", t.id, "err", err)
|
log.Error("can't remove gas only eth transfer", "b-hash", t.blockHash, "b-n", t.blockNumber, "a", t.address, "h", t.id, "err", err)
|
||||||
@ -503,18 +505,40 @@ func updateOrInsertTransfersDBFields(creator statementCreator, transfers []trans
|
|||||||
}
|
}
|
||||||
|
|
||||||
func removeGasOnlyEthTransfer(creator statementCreator, t transferDBFields) error {
|
func removeGasOnlyEthTransfer(creator statementCreator, t transferDBFields) error {
|
||||||
if t.transferType != w_common.EthTransfer {
|
if t.transferType == w_common.EthTransfer {
|
||||||
query, err := creator.Prepare(`DELETE FROM transfers WHERE tx_hash = ? AND address = ? AND network_id = ?
|
countQuery, err := creator.Prepare(`SELECT COUNT(*) FROM transfers WHERE tx_hash = ?`)
|
||||||
AND account_nonce = ? AND type = 'eth' AND amount_padded128hex = '00000000000000000000000000000000'`)
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer countQuery.Close()
|
||||||
|
|
||||||
|
var count int
|
||||||
|
err = countQuery.QueryRow(t.txHash).Scan(&count)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = query.Exec(t.txHash, t.address, t.chainID, t.txNonce)
|
// If there's only one (or none), return without deleting
|
||||||
if err != nil {
|
if count <= 1 {
|
||||||
return err
|
log.Debug("Only one or no transfer found with the same tx_hash, skipping deletion.")
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
query, err := creator.Prepare(`DELETE FROM transfers WHERE tx_hash = ? AND address = ? AND network_id = ? AND account_nonce = ? AND type = 'eth' AND amount_padded128hex = '00000000000000000000000000000000'`)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer query.Close()
|
||||||
|
|
||||||
|
res, err := query.Exec(t.txHash, t.address, t.chainID, t.txNonce)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
count, err := res.RowsAffected()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
log.Debug("removeGasOnlyEthTransfer row deleted ", count)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -118,11 +118,7 @@ func TestDBGetTransfersFromBlock(t *testing.T) {
|
|||||||
require.NoError(t, saveTransfersMarkBlocksLoaded(db.client, 777, address, transfers, blockNumbers))
|
require.NoError(t, saveTransfersMarkBlocksLoaded(db.client, 777, address, transfers, blockNumbers))
|
||||||
rst, err := db.GetTransfers(777, big.NewInt(7), nil)
|
rst, err := db.GetTransfers(777, big.NewInt(7), nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Len(t, rst, 3)
|
require.Len(t, rst, 1)
|
||||||
|
|
||||||
rst, err = db.GetTransfers(777, big.NewInt(2), big.NewInt(5))
|
|
||||||
require.NoError(t, err)
|
|
||||||
require.Len(t, rst, 4)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGetTransfersForIdentities(t *testing.T) {
|
func TestGetTransfersForIdentities(t *testing.T) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user