Update SellNameTransaction.java

This commit is contained in:
cwd.systems | 0KN 2024-11-30 19:19:25 +06:00 committed by GitHub
parent 8ffb0625a1
commit 3ddef1e13f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -24,28 +24,23 @@ public class SellNameTransaction extends Transaction {
private SellNameTransactionData sellNameTransactionData; private SellNameTransactionData sellNameTransactionData;
// Constructors // Constructors
public SellNameTransaction(Repository repository, TransactionData transactionData) { public SellNameTransaction(Repository repository, TransactionData transactionData) {
super(repository, transactionData); super(repository, transactionData);
this.sellNameTransactionData = (SellNameTransactionData) this.transactionData; this.sellNameTransactionData = (SellNameTransactionData) this.transactionData;
} }
// More information // More information
@Override @Override
public List<String> getRecipientAddresses() throws DataException { public List<String> getRecipientAddresses() throws DataException {
return Collections.emptyList(); return Collections.emptyList(); // No direct recipient address for this transaction
} }
// Navigation // Navigation
public Account getOwner() { public Account getOwner() {
return this.getCreator(); return this.getCreator(); // Owner is the creator of the transaction
} }
// Processing // Processing
@Override @Override
public ValidationResult isValid() throws DataException { public ValidationResult isValid() throws DataException {
String name = this.sellNameTransactionData.getName(); String name = this.sellNameTransactionData.getName();
@ -59,59 +54,54 @@ public class SellNameTransaction extends Transaction {
if (!name.equals(Unicode.normalize(name))) if (!name.equals(Unicode.normalize(name)))
return ValidationResult.NAME_NOT_NORMALIZED; return ValidationResult.NAME_NOT_NORMALIZED;
// Retrieve name data from repository
NameData nameData = this.repository.getNameRepository().fromName(name); NameData nameData = this.repository.getNameRepository().fromName(name);
// Check name exists // Check if name exists
if (nameData == null) if (nameData == null)
return ValidationResult.NAME_DOES_NOT_EXIST; return ValidationResult.NAME_DOES_NOT_EXIST;
// Check name isn't currently for sale // Check name is not already for sale
if (nameData.isForSale()) if (nameData.isForSale())
return ValidationResult.NAME_ALREADY_FOR_SALE; return ValidationResult.NAME_ALREADY_FOR_SALE;
// Check transaction's public key matches name's current owner // Validate transaction's public key matches name's current owner
Account owner = getOwner(); Account owner = getOwner();
if (!owner.getAddress().equals(nameData.getOwner())) if (!owner.getAddress().equals(nameData.getOwner()))
return ValidationResult.INVALID_NAME_OWNER; return ValidationResult.INVALID_NAME_OWNER;
// Check amount is positive // Check amount is positive and within valid range
if (this.sellNameTransactionData.getAmount() <= 0) long amount = this.sellNameTransactionData.getAmount();
if (amount <= 0)
return ValidationResult.NEGATIVE_AMOUNT; return ValidationResult.NEGATIVE_AMOUNT;
if (amount >= MAX_AMOUNT)
// Check amount within bounds
if (this.sellNameTransactionData.getAmount() >= MAX_AMOUNT)
return ValidationResult.INVALID_AMOUNT; return ValidationResult.INVALID_AMOUNT;
// Check issuer has enough funds // Check if owner has enough balance for the transaction fee
if (owner.getConfirmedBalance(Asset.QORT) < this.sellNameTransactionData.getFee()) if (owner.getConfirmedBalance(Asset.QORT) < this.sellNameTransactionData.getFee())
return ValidationResult.NO_BALANCE; return ValidationResult.NO_BALANCE;
return ValidationResult.OK; return ValidationResult.OK; // All validation checks passed
} }
@Override @Override
public void preProcess() throws DataException { public void preProcess() throws DataException {
SellNameTransactionData sellNameTransactionData = (SellNameTransactionData) transactionData; // Directly access class field rather than local variable for clarity
// Rebuild this name in the Names table from the transaction history
// This is necessary because in some rare cases names can be missing from the Names table after registration
// but we have been unable to reproduce the issue and track down the root cause
NamesDatabaseIntegrityCheck namesDatabaseIntegrityCheck = new NamesDatabaseIntegrityCheck(); NamesDatabaseIntegrityCheck namesDatabaseIntegrityCheck = new NamesDatabaseIntegrityCheck();
namesDatabaseIntegrityCheck.rebuildName(sellNameTransactionData.getName(), this.repository); namesDatabaseIntegrityCheck.rebuildName(this.sellNameTransactionData.getName(), this.repository);
} }
@Override @Override
public void process() throws DataException { public void process() throws DataException {
// Sell Name // Sell the name
Name name = new Name(this.repository, this.sellNameTransactionData.getName()); Name name = new Name(this.repository, this.sellNameTransactionData.getName());
name.sell(this.sellNameTransactionData); name.sell(this.sellNameTransactionData);
} }
@Override @Override
public void orphan() throws DataException { public void orphan() throws DataException {
// Revert name // Revert the name sale in case of orphaning
Name name = new Name(this.repository, this.sellNameTransactionData.getName()); Name name = new Name(this.repository, this.sellNameTransactionData.getName());
name.unsell(this.sellNameTransactionData); name.unsell(this.sellNameTransactionData);
} }
} }