mirror of
https://github.com/Qortal/qortal.git
synced 2025-03-26 23:44:34 +00:00
Disallow registering/updating to a name that looks like an address
This commit is contained in:
parent
9aabf93523
commit
6eea7c2aa1
@ -6,6 +6,7 @@ import java.util.List;
|
|||||||
import org.qortal.account.Account;
|
import org.qortal.account.Account;
|
||||||
import org.qortal.asset.Asset;
|
import org.qortal.asset.Asset;
|
||||||
import org.qortal.block.BlockChain;
|
import org.qortal.block.BlockChain;
|
||||||
|
import org.qortal.crypto.Crypto;
|
||||||
import org.qortal.data.transaction.RegisterNameTransactionData;
|
import org.qortal.data.transaction.RegisterNameTransactionData;
|
||||||
import org.qortal.data.transaction.TransactionData;
|
import org.qortal.data.transaction.TransactionData;
|
||||||
import org.qortal.naming.Name;
|
import org.qortal.naming.Name;
|
||||||
@ -62,6 +63,10 @@ public class RegisterNameTransaction extends Transaction {
|
|||||||
if (!name.equals(Unicode.normalize(name)))
|
if (!name.equals(Unicode.normalize(name)))
|
||||||
return ValidationResult.NAME_NOT_NORMALIZED;
|
return ValidationResult.NAME_NOT_NORMALIZED;
|
||||||
|
|
||||||
|
// Check name doesn't look like an address
|
||||||
|
if (Crypto.isValidAddress(name))
|
||||||
|
return ValidationResult.INVALID_ADDRESS;
|
||||||
|
|
||||||
// Check registrant has enough funds
|
// Check registrant has enough funds
|
||||||
if (registrant.getConfirmedBalance(Asset.QORT) < this.registerNameTransactionData.getFee())
|
if (registrant.getConfirmedBalance(Asset.QORT) < this.registerNameTransactionData.getFee())
|
||||||
return ValidationResult.NO_BALANCE;
|
return ValidationResult.NO_BALANCE;
|
||||||
|
@ -5,6 +5,7 @@ import java.util.List;
|
|||||||
|
|
||||||
import org.qortal.account.Account;
|
import org.qortal.account.Account;
|
||||||
import org.qortal.asset.Asset;
|
import org.qortal.asset.Asset;
|
||||||
|
import org.qortal.crypto.Crypto;
|
||||||
import org.qortal.data.naming.NameData;
|
import org.qortal.data.naming.NameData;
|
||||||
import org.qortal.data.transaction.TransactionData;
|
import org.qortal.data.transaction.TransactionData;
|
||||||
import org.qortal.data.transaction.UpdateNameTransactionData;
|
import org.qortal.data.transaction.UpdateNameTransactionData;
|
||||||
@ -77,6 +78,10 @@ public class UpdateNameTransaction extends Transaction {
|
|||||||
// Check new name is in normalized form (no leading/trailing whitespace, etc.)
|
// Check new name is in normalized form (no leading/trailing whitespace, etc.)
|
||||||
if (!newName.equals(Unicode.normalize(newName)))
|
if (!newName.equals(Unicode.normalize(newName)))
|
||||||
return ValidationResult.NAME_NOT_NORMALIZED;
|
return ValidationResult.NAME_NOT_NORMALIZED;
|
||||||
|
|
||||||
|
// Check name doesn't look like an address
|
||||||
|
if (Crypto.isValidAddress(newName))
|
||||||
|
return ValidationResult.INVALID_ADDRESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check new data size bounds (0 length means don't update data)
|
// Check new data size bounds (0 length means don't update data)
|
||||||
|
@ -41,7 +41,7 @@ public abstract class Unicode {
|
|||||||
buildHomoglyphCodePointArrays();
|
buildHomoglyphCodePointArrays();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Returns string in Unicode canonical normalized form (NFC),<br>
|
/** Returns string in Unicode canonical normalized form (NFKC),<br>
|
||||||
* with zero-width spaces/joiners removed,<br>
|
* with zero-width spaces/joiners removed,<br>
|
||||||
* leading/trailing whitespace trimmed<br>
|
* leading/trailing whitespace trimmed<br>
|
||||||
* and all other whitespace blocks collapsed into a single space character.
|
* and all other whitespace blocks collapsed into a single space character.
|
||||||
|
@ -96,4 +96,46 @@ public class MiscTests extends Common {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// test trying to register a name that looks like an address
|
||||||
|
@Test
|
||||||
|
public void testRegisterAddressAsName() throws DataException {
|
||||||
|
try (final Repository repository = RepositoryManager.getRepository()) {
|
||||||
|
// Register-name
|
||||||
|
PrivateKeyAccount alice = Common.getTestAccount(repository, "alice");
|
||||||
|
String name = alice.getAddress();
|
||||||
|
String data = "{}";
|
||||||
|
|
||||||
|
RegisterNameTransactionData transactionData = new RegisterNameTransactionData(TestTransaction.generateBase(alice), name, data);
|
||||||
|
Transaction transaction = Transaction.fromData(repository, transactionData);
|
||||||
|
transaction.sign(alice);
|
||||||
|
|
||||||
|
ValidationResult result = transaction.importAsUnconfirmed();
|
||||||
|
assertTrue("Transaction should be invalid", ValidationResult.OK != result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// test register then trying to update to a name that looks like an address
|
||||||
|
@Test
|
||||||
|
public void testUpdateToAddressAsName() throws DataException {
|
||||||
|
try (final Repository repository = RepositoryManager.getRepository()) {
|
||||||
|
// Register-name
|
||||||
|
PrivateKeyAccount alice = Common.getTestAccount(repository, "alice");
|
||||||
|
String name = "test-name";
|
||||||
|
String data = "{}";
|
||||||
|
|
||||||
|
TransactionData transactionData = new RegisterNameTransactionData(TestTransaction.generateBase(alice), name, data);
|
||||||
|
TransactionUtils.signAndMint(repository, transactionData, alice);
|
||||||
|
|
||||||
|
// we shouldn't be able to update name to an address
|
||||||
|
String newName = alice.getAddress();
|
||||||
|
String newData = "";
|
||||||
|
transactionData = new UpdateNameTransactionData(TestTransaction.generateBase(alice), name, newName, newData);
|
||||||
|
Transaction transaction = Transaction.fromData(repository, transactionData);
|
||||||
|
transaction.sign(alice);
|
||||||
|
|
||||||
|
ValidationResult result = transaction.importAsUnconfirmed();
|
||||||
|
assertTrue("Transaction should be invalid", ValidationResult.OK != result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user