Refactor post-importAsUnconfirmed as method to be overridden by Transaction subclasses, e.g. CHAT

This commit is contained in:
catbref 2020-11-26 16:08:56 +00:00
parent 9b7c2c50fb
commit 90b993e234
2 changed files with 22 additions and 7 deletions

View File

@ -188,6 +188,16 @@ public class ChatTransaction extends Transaction {
return MemoryPoW.verify2(transactionBytes, POW_BUFFER_SIZE, difficulty, nonce);
}
/**
* Ensure there's at least a skeleton account so people
* can retrieve sender's public key using address, even if all their messages
* expire.
*/
@Override
protected void onImportAsUnconfirmed() throws DataException {
this.getCreator().ensureAccount();
}
@Override
public void process() throws DataException {
throw new DataException("CHAT transactions should never be processed");

View File

@ -800,13 +800,7 @@ public abstract class Transaction {
repository.getTransactionRepository().save(transactionData);
repository.getTransactionRepository().unconfirmTransaction(transactionData);
/*
* If CHAT transaction then ensure there's at least a skeleton account so people
* can retrieve sender's public key using address, even if all their messages
* expire.
*/
if (transactionData.getType() == TransactionType.CHAT)
this.getCreator().ensureAccount();
this.onImportAsUnconfirmed();
repository.saveChanges();
@ -816,6 +810,17 @@ public abstract class Transaction {
}
}
/**
* Callback for when a transaction is imported as unconfirmed.
* <p>
* Called after transaction is added to repository, but before commit.
* <p>
* Blockchain lock is being held during this time.
*/
protected void onImportAsUnconfirmed() throws DataException {
/* To be optionally overridden */
}
/**
* Returns whether transaction can be added to the blockchain.
* <p>