From 55e8fd455403d7a6afa30eab1c205c01e8029a6e Mon Sep 17 00:00:00 2001 From: Dario Gabriel Lipicar Date: Wed, 6 Mar 2024 12:55:03 -0300 Subject: [PATCH] fix: ensure atomic collectibles ownership updates --- services/wallet/collectibles/ownership_db.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/services/wallet/collectibles/ownership_db.go b/services/wallet/collectibles/ownership_db.go index 49a316b36..a531ada4c 100644 --- a/services/wallet/collectibles/ownership_db.go +++ b/services/wallet/collectibles/ownership_db.go @@ -5,6 +5,7 @@ import ( "fmt" "math" "math/big" + "sync" "github.com/ethereum/go-ethereum/common" @@ -20,6 +21,7 @@ const InvalidTimestamp = int64(-1) type OwnershipDB struct { db *sql.DB + mu sync.Mutex } func NewOwnershipDB(sqlDb *sql.DB) *OwnershipDB { @@ -358,6 +360,10 @@ func (o *OwnershipDB) GetIsFirstOfCollection(onwerAddress common.Address, newIDs } func (o *OwnershipDB) Update(chainID w_common.ChainID, ownerAddress common.Address, balances thirdparty.TokenBalancesPerContractAddress, timestamp int64) (removedIDs, updatedIDs, insertedIDs []thirdparty.CollectibleUniqueID, err error) { + // Ensure all steps are done atomically + o.mu.Lock() + defer o.mu.Unlock() + err = insertTmpOwnership(o.db, chainID, ownerAddress, balances) if err != nil { return