mirror of
https://github.com/Qortal/qortal.git
synced 2025-04-01 17:55:54 +00:00
Update SellNameTransaction.java
This commit is contained in:
parent
8ffb0625a1
commit
3ddef1e13f
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user