Skip to content

Commit

Permalink
Fix write the same value - avoid write on add balance 0 (#1833)
Browse files Browse the repository at this point in the history
* Remove same written value check

Ignored repository tracking tests

* Add tests for addBalance

* Avoid writing on addBalance(0)
  • Loading branch information
ilanolkies authored and julianlen committed Nov 16, 2022
1 parent fba1e7a commit 29b92e2
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 17 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -296,6 +296,10 @@ public synchronized Coin getBalance(RskAddress addr) {
public synchronized Coin addBalance(RskAddress addr, Coin value) {
AccountState account = getAccountStateOrCreateNew(addr);

if (value == Coin.ZERO) {
return account.getBalance();
}

Coin result = account.addToBalance(value);
updateAccountState(addr, account);

Expand Down Expand Up @@ -384,11 +388,6 @@ private byte[] getAccountData(RskAddress addr) {
}

private void internalPut(byte[] key, byte[] value) {
// writes the same value
if (Arrays.equals(value, mutableTrie.get(key))) {
return;
}

tracker.addNewWrittenKey(new ByteArrayWrapper(key));
mutableTrie.put(key, value);
}
Expand Down
46 changes: 34 additions & 12 deletions rskj-core/src/test/java/co/rsk/db/RepositoryTrackingTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -91,17 +91,7 @@ void tracksWriteInAddBalance() {
}

@Test
void doesntTrackWriteInAddBalanceZero() {
repository.createAccount(COW);
tracker.clear();

repository.addBalance(COW, Coin.ZERO);

assertRepositoryHasSize(1, 0);
}

@Test
void tracksReadOnGetStorageBytes() {
void tracksReadOnGetStorageBytes () {
repository.createAccount(COW);
tracker.clear();

Expand Down Expand Up @@ -142,7 +132,7 @@ void tracksWriteOnAddStorageDifferentBytes() {
}

@Test
void doesntTrackWriteOnAddStorageSameBytes() {
void tracksWriteOnAddStorageSameBytes() {
repository.createAccount(COW);

byte[] cowValue = Hex.decode("A4A5A6");
Expand All @@ -154,6 +144,38 @@ void doesntTrackWriteOnAddStorageSameBytes() {

repository.addStorageBytes(COW, DataWord.valueOf(cowKey), cowValue);

assertRepositoryHasSize(1, 1);
}

public void tracksReadAndWriteOnAddBalanceOfNonExistent () {
repository.addBalance(COW, Coin.valueOf(1));

assertRepositoryHasSize(1, 1);
}

public void tracksReadAndWriteOnAddBalanceZeroOfNonExistent () {
repository.addBalance(COW, Coin.valueOf(0));

assertRepositoryHasSize(1, 1);
}

public void tracksReadAndWriteOnAddBalanceOfExistent () {
repository.addBalance(COW, Coin.valueOf(1));

tracker.clear();

repository.addBalance(COW, Coin.valueOf(1));

assertRepositoryHasSize(1, 1);
}

public void doesntTrackWriteOnAddBalanceZeroOfExistent () {
repository.addBalance(COW, Coin.valueOf(1));

tracker.clear();

repository.addBalance(COW, Coin.valueOf(0));

assertRepositoryHasSize(1, 0);
}
}

0 comments on commit 29b92e2

Please sign in to comment.