Compare commits

...

3 Commits

3 changed files with 63 additions and 2 deletions

View File

@@ -3,7 +3,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>org.qortal</groupId>
<artifactId>qortal</artifactId>
<version>3.8.8</version>
<version>3.8.9</version>
<packaging>jar</packaging>
<properties>
<skipTests>true</skipTests>

View File

@@ -16,6 +16,8 @@ import org.qortal.repository.Repository;
import org.qortal.transaction.Transaction.TransactionType;
import org.qortal.utils.Unicode;
import java.util.Objects;
public class Name {
// Properties
@@ -116,7 +118,7 @@ public class Name {
this.repository.getNameRepository().save(this.nameData);
if (!updateNameTransactionData.getNewName().isEmpty())
if (!updateNameTransactionData.getNewName().isEmpty() && !Objects.equals(updateNameTransactionData.getName(), updateNameTransactionData.getNewName()))
// Name has changed, delete old entry
this.repository.getNameRepository().delete(updateNameTransactionData.getNewName());

View File

@@ -219,6 +219,65 @@ public class UpdateTests extends Common {
}
}
// Test that multiple UPDATE_NAME transactions work as expected, when using a matching name and newName string
@Test
public void testDoubleUpdateNameWithMatchingNewName() throws DataException {
try (final Repository repository = RepositoryManager.getRepository()) {
// Register-name
PrivateKeyAccount alice = Common.getTestAccount(repository, "alice");
String name = "name";
String reducedName = "name";
String data = "{\"age\":30}";
TransactionData initialTransactionData = new RegisterNameTransactionData(TestTransaction.generateBase(alice), name, data);
initialTransactionData.setFee(new RegisterNameTransaction(null, null).getUnitFee(initialTransactionData.getTimestamp()));
TransactionUtils.signAndMint(repository, initialTransactionData, alice);
// Check name exists
assertTrue(repository.getNameRepository().nameExists(name));
assertNotNull(repository.getNameRepository().fromReducedName(reducedName));
// Update name
TransactionData middleTransactionData = new UpdateNameTransactionData(TestTransaction.generateBase(alice), name, name, data);
TransactionUtils.signAndMint(repository, middleTransactionData, alice);
// Check name still exists
assertTrue(repository.getNameRepository().nameExists(name));
assertNotNull(repository.getNameRepository().fromReducedName(reducedName));
// Update name again
TransactionData newestTransactionData = new UpdateNameTransactionData(TestTransaction.generateBase(alice), name, name, data);
TransactionUtils.signAndMint(repository, newestTransactionData, alice);
// Check name still exists
assertTrue(repository.getNameRepository().nameExists(name));
assertNotNull(repository.getNameRepository().fromReducedName(reducedName));
// Check updated timestamp is correct
assertEquals((Long) newestTransactionData.getTimestamp(), repository.getNameRepository().fromName(name).getUpdated());
// orphan and recheck
BlockUtils.orphanLastBlock(repository);
// Check name still exists
assertTrue(repository.getNameRepository().nameExists(name));
assertNotNull(repository.getNameRepository().fromReducedName(reducedName));
// Check updated timestamp is correct
assertEquals((Long) middleTransactionData.getTimestamp(), repository.getNameRepository().fromName(name).getUpdated());
// orphan and recheck
BlockUtils.orphanLastBlock(repository);
// Check name still exists
assertTrue(repository.getNameRepository().nameExists(name));
assertNotNull(repository.getNameRepository().fromReducedName(reducedName));
// Check updated timestamp is empty
assertNull(repository.getNameRepository().fromName(name).getUpdated());
}
}
// Test that reverting using previous UPDATE_NAME works as expected
@Test
public void testIntermediateUpdateName() throws DataException {