From 72100fe1d8ef838a7624507389f9c9e5a94552f4 Mon Sep 17 00:00:00 2001 From: catbref Date: Tue, 19 May 2020 08:08:21 +0100 Subject: [PATCH] Refactor Unicode 'reduced' name code from side-effects into 'data' objects. CREATE_GROUP, ISSUE_ASSET, REGISTER_NAME and UPDATE_NAME transactions affected. The code to actually generate 'reduced' name was called inside isValid() and relied on setting the corresponding transaction data object field so that it would be saved by isValid()'s caller. Although this worked, it wasn't a very clean solution. Now the 'reduced' name is generated by transaction data object's constructors so it is always present. Also removed name/group/asset reduceName(String) methods as they were all the same single-line call to Unicode.sanitize(). --- src/main/java/org/qortal/asset/Asset.java | 5 ----- .../transaction/CreateGroupTransactionData.java | 11 ++++------- .../transaction/IssueAssetTransactionData.java | 11 ++++------- .../transaction/RegisterNameTransactionData.java | 8 ++------ .../transaction/UpdateNameTransactionData.java | 8 ++------ src/main/java/org/qortal/group/Group.java | 7 ------- src/main/java/org/qortal/naming/Name.java | 4 ---- .../transaction/CreateGroupTransaction.java | 14 +------------- .../qortal/transaction/IssueAssetTransaction.java | 15 +-------------- .../transaction/RegisterNameTransaction.java | 14 +------------- .../qortal/transaction/UpdateNameTransaction.java | 14 +------------- 11 files changed, 16 insertions(+), 95 deletions(-) diff --git a/src/main/java/org/qortal/asset/Asset.java b/src/main/java/org/qortal/asset/Asset.java index 53465423..c8df4565 100644 --- a/src/main/java/org/qortal/asset/Asset.java +++ b/src/main/java/org/qortal/asset/Asset.java @@ -8,7 +8,6 @@ import org.qortal.data.transaction.UpdateAssetTransactionData; import org.qortal.repository.DataException; import org.qortal.repository.Repository; import org.qortal.utils.Amounts; -import org.qortal.utils.Unicode; public class Asset { @@ -68,10 +67,6 @@ public class Asset { // Processing - public static String reduceName(String assetName) { - return Unicode.sanitize(assetName); - } - public void issue() throws DataException { this.repository.getAssetRepository().save(this.assetData); } diff --git a/src/main/java/org/qortal/data/transaction/CreateGroupTransactionData.java b/src/main/java/org/qortal/data/transaction/CreateGroupTransactionData.java index 4bcaa497..2471bb2f 100644 --- a/src/main/java/org/qortal/data/transaction/CreateGroupTransactionData.java +++ b/src/main/java/org/qortal/data/transaction/CreateGroupTransactionData.java @@ -8,9 +8,9 @@ import javax.xml.bind.annotation.XmlTransient; import org.eclipse.persistence.oxm.annotations.XmlDiscriminatorValue; import org.qortal.block.GenesisBlock; -import org.qortal.group.Group; import org.qortal.group.Group.ApprovalThreshold; import org.qortal.transaction.Transaction.TransactionType; +import org.qortal.utils.Unicode; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema.AccessMode; @@ -67,7 +67,7 @@ public class CreateGroupTransactionData extends TransactionData { * then we need to construct 'reduced' group name. */ if (parent instanceof GenesisBlock.GenesisInfo && this.reducedGroupName == null) - this.reducedGroupName = Group.reduceName(this.groupName); + this.reducedGroupName = Unicode.sanitize(this.groupName); } /** From repository */ @@ -91,7 +91,8 @@ public class CreateGroupTransactionData extends TransactionData { public CreateGroupTransactionData(BaseTransactionData baseTransactionData, String groupName, String description, boolean isOpen, ApprovalThreshold approvalThreshold, int minimumBlockDelay, int maximumBlockDelay) { - this(baseTransactionData, groupName, description, isOpen, approvalThreshold, minimumBlockDelay, maximumBlockDelay, null, null); + this(baseTransactionData, groupName, description, isOpen, approvalThreshold, minimumBlockDelay, + maximumBlockDelay, null, Unicode.sanitize(groupName)); } // Getters / setters @@ -132,10 +133,6 @@ public class CreateGroupTransactionData extends TransactionData { return this.reducedGroupName; } - public void setReducedGroupName(String reducedGroupName) { - this.reducedGroupName = reducedGroupName; - } - // Re-expose creatorPublicKey for this transaction type for JAXB @XmlElement(name = "creatorPublicKey") @Schema(name = "creatorPublicKey", description = "group creator's public key", example = "2tiMr5LTpaWCgbRvkPK8TFd7k63DyHJMMFFsz9uBf1ZP") diff --git a/src/main/java/org/qortal/data/transaction/IssueAssetTransactionData.java b/src/main/java/org/qortal/data/transaction/IssueAssetTransactionData.java index f86b4071..b24a9634 100644 --- a/src/main/java/org/qortal/data/transaction/IssueAssetTransactionData.java +++ b/src/main/java/org/qortal/data/transaction/IssueAssetTransactionData.java @@ -8,9 +8,9 @@ import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import org.eclipse.persistence.oxm.annotations.XmlDiscriminatorValue; import org.qortal.account.NullAccount; -import org.qortal.asset.Asset; import org.qortal.block.GenesisBlock; import org.qortal.transaction.Transaction.TransactionType; +import org.qortal.utils.Unicode; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema.AccessMode; @@ -76,7 +76,7 @@ public class IssueAssetTransactionData extends TransactionData { * then we need to construct 'reduced' form of asset name. */ if (parent instanceof GenesisBlock.GenesisInfo && this.reducedAssetName == null) - this.reducedAssetName = Asset.reduceName(this.assetName); + this.reducedAssetName = Unicode.sanitize(this.assetName); this.creatorPublicKey = this.issuerPublicKey; } @@ -101,7 +101,8 @@ public class IssueAssetTransactionData extends TransactionData { /** From network/API */ public IssueAssetTransactionData(BaseTransactionData baseTransactionData, String assetName, String description, long quantity, boolean isDivisible, String data, boolean isUnspendable) { - this(baseTransactionData, null, assetName, description, quantity, isDivisible, data, isUnspendable, null); + this(baseTransactionData, null, assetName, description, quantity, isDivisible, data, isUnspendable, + Unicode.sanitize(assetName)); } // Getters/Setters @@ -146,8 +147,4 @@ public class IssueAssetTransactionData extends TransactionData { return this.reducedAssetName; } - public void setReducedAssetName(String reducedAssetName) { - this.reducedAssetName = reducedAssetName; - } - } diff --git a/src/main/java/org/qortal/data/transaction/RegisterNameTransactionData.java b/src/main/java/org/qortal/data/transaction/RegisterNameTransactionData.java index 6f0ef214..d4455da1 100644 --- a/src/main/java/org/qortal/data/transaction/RegisterNameTransactionData.java +++ b/src/main/java/org/qortal/data/transaction/RegisterNameTransactionData.java @@ -6,8 +6,8 @@ import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlTransient; import org.eclipse.persistence.oxm.annotations.XmlDiscriminatorValue; -import org.qortal.naming.Name; import org.qortal.transaction.Transaction.TransactionType; +import org.qortal.utils.Unicode; import io.swagger.v3.oas.annotations.media.Schema; @@ -57,7 +57,7 @@ public class RegisterNameTransactionData extends TransactionData { /** From network */ public RegisterNameTransactionData(BaseTransactionData baseTransactionData, String name, String data) { - this(baseTransactionData, name, data, Name.reduceName(name)); + this(baseTransactionData, name, data, Unicode.sanitize(name)); } // Getters / setters @@ -78,8 +78,4 @@ public class RegisterNameTransactionData extends TransactionData { return this.reducedName; } - public void setReducedName(String reducedName) { - this.reducedName = reducedName; - } - } diff --git a/src/main/java/org/qortal/data/transaction/UpdateNameTransactionData.java b/src/main/java/org/qortal/data/transaction/UpdateNameTransactionData.java index 5d7e449a..43c8da59 100644 --- a/src/main/java/org/qortal/data/transaction/UpdateNameTransactionData.java +++ b/src/main/java/org/qortal/data/transaction/UpdateNameTransactionData.java @@ -5,8 +5,8 @@ import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlTransient; -import org.qortal.naming.Name; import org.qortal.transaction.Transaction.TransactionType; +import org.qortal.utils.Unicode; import io.swagger.v3.oas.annotations.media.Schema; @@ -64,7 +64,7 @@ public class UpdateNameTransactionData extends TransactionData { /** From network/API */ public UpdateNameTransactionData(BaseTransactionData baseTransactionData, String name, String newName, String newData) { - this(baseTransactionData, name, newName, newData, Name.reduceName(newName), null); + this(baseTransactionData, name, newName, newData, Unicode.sanitize(newName), null); } // Getters / setters @@ -89,10 +89,6 @@ public class UpdateNameTransactionData extends TransactionData { return this.reducedNewName; } - public void setReducedNewName(String reducedNewName) { - this.reducedNewName = reducedNewName; - } - public byte[] getNameReference() { return this.nameReference; } diff --git a/src/main/java/org/qortal/group/Group.java b/src/main/java/org/qortal/group/Group.java index a3cc017c..96c026b5 100644 --- a/src/main/java/org/qortal/group/Group.java +++ b/src/main/java/org/qortal/group/Group.java @@ -30,7 +30,6 @@ import org.qortal.data.transaction.UpdateGroupTransactionData; import org.qortal.repository.DataException; import org.qortal.repository.GroupRepository; import org.qortal.repository.Repository; -import org.qortal.utils.Unicode; public class Group { @@ -128,12 +127,6 @@ public class Group { return this.groupData; } - // Shortcuts to aid code clarity - - public static String reduceName(String name) { - return Unicode.sanitize(name); - } - // Membership private GroupMemberData getMember(String member) throws DataException { diff --git a/src/main/java/org/qortal/naming/Name.java b/src/main/java/org/qortal/naming/Name.java index b7570552..c372a8e3 100644 --- a/src/main/java/org/qortal/naming/Name.java +++ b/src/main/java/org/qortal/naming/Name.java @@ -60,10 +60,6 @@ public class Name { // Processing - public static String reduceName(String name) { - return Unicode.sanitize(name); - } - public void register() throws DataException { this.repository.getNameRepository().save(this.nameData); } diff --git a/src/main/java/org/qortal/transaction/CreateGroupTransaction.java b/src/main/java/org/qortal/transaction/CreateGroupTransaction.java index 17a0b052..63725cfb 100644 --- a/src/main/java/org/qortal/transaction/CreateGroupTransaction.java +++ b/src/main/java/org/qortal/transaction/CreateGroupTransaction.java @@ -40,15 +40,6 @@ public class CreateGroupTransaction extends Transaction { return this.getCreator(); } - private synchronized String getReducedGroupName() { - if (this.createGroupTransactionData.getReducedGroupName() == null) { - String reducedGroupName = Group.reduceName(this.createGroupTransactionData.getGroupName()); - this.createGroupTransactionData.setReducedGroupName(reducedGroupName); - } - - return this.createGroupTransactionData.getReducedGroupName(); - } - // Processing @Override @@ -89,16 +80,13 @@ public class CreateGroupTransaction extends Transaction { if (creator.getConfirmedBalance(Asset.QORT) < this.createGroupTransactionData.getFee()) return ValidationResult.NO_BALANCE; - // Fill in missing reduced name. Caller is likely to save this as next step. - getReducedGroupName(); - return ValidationResult.OK; } @Override public ValidationResult isProcessable() throws DataException { // Check the group name isn't already taken - if (this.repository.getGroupRepository().reducedGroupNameExists(getReducedGroupName())) + if (this.repository.getGroupRepository().reducedGroupNameExists(this.createGroupTransactionData.getReducedGroupName())) return ValidationResult.GROUP_ALREADY_EXISTS; return ValidationResult.OK; diff --git a/src/main/java/org/qortal/transaction/IssueAssetTransaction.java b/src/main/java/org/qortal/transaction/IssueAssetTransaction.java index 66d635e2..a562c7a5 100644 --- a/src/main/java/org/qortal/transaction/IssueAssetTransaction.java +++ b/src/main/java/org/qortal/transaction/IssueAssetTransaction.java @@ -7,7 +7,6 @@ import org.qortal.account.Account; import org.qortal.asset.Asset; import org.qortal.data.transaction.IssueAssetTransactionData; import org.qortal.data.transaction.TransactionData; -import org.qortal.naming.Name; import org.qortal.repository.DataException; import org.qortal.repository.Repository; import org.qortal.utils.Amounts; @@ -42,15 +41,6 @@ public class IssueAssetTransaction extends Transaction { return this.getCreator(); } - private String getReducedAssetName() { - if (this.issueAssetTransactionData.getReducedAssetName() == null) { - String reducedAssetName = Name.reduceName(this.issueAssetTransactionData.getAssetName()); - this.issueAssetTransactionData.setReducedAssetName(reducedAssetName); - } - - return this.issueAssetTransactionData.getReducedAssetName(); - } - // Processing @Override @@ -90,16 +80,13 @@ public class IssueAssetTransaction extends Transaction { if (issuer.getConfirmedBalance(Asset.QORT) < this.issueAssetTransactionData.getFee()) return ValidationResult.NO_BALANCE; - // Fill in missing reduced name. Caller is likely to save this as next step. - getReducedAssetName(); - return ValidationResult.OK; } @Override public ValidationResult isProcessable() throws DataException { // Check the name isn't already taken - if (this.repository.getAssetRepository().reducedAssetNameExists(getReducedAssetName())) + if (this.repository.getAssetRepository().reducedAssetNameExists(this.issueAssetTransactionData.getReducedAssetName())) return ValidationResult.ASSET_ALREADY_EXISTS; return ValidationResult.OK; diff --git a/src/main/java/org/qortal/transaction/RegisterNameTransaction.java b/src/main/java/org/qortal/transaction/RegisterNameTransaction.java index c0d91f0b..d02631c0 100644 --- a/src/main/java/org/qortal/transaction/RegisterNameTransaction.java +++ b/src/main/java/org/qortal/transaction/RegisterNameTransaction.java @@ -41,15 +41,6 @@ public class RegisterNameTransaction extends Transaction { return this.getCreator(); } - private synchronized String getReducedName() { - if (this.registerNameTransactionData.getReducedName() == null) { - String reducedName = Name.reduceName(this.registerNameTransactionData.getName()); - this.registerNameTransactionData.setReducedName(reducedName); - } - - return this.registerNameTransactionData.getReducedName(); - } - // Processing @Override @@ -75,16 +66,13 @@ public class RegisterNameTransaction extends Transaction { if (registrant.getConfirmedBalance(Asset.QORT) < this.registerNameTransactionData.getFee()) return ValidationResult.NO_BALANCE; - // Fill in missing reduced name. Caller is likely to save this as next step. - getReducedName(); - return ValidationResult.OK; } @Override public ValidationResult isProcessable() throws DataException { // Check the name isn't already taken - if (this.repository.getNameRepository().reducedNameExists(getReducedName())) + if (this.repository.getNameRepository().reducedNameExists(this.registerNameTransactionData.getReducedName())) return ValidationResult.NAME_ALREADY_REGISTERED; // If accounts are only allowed one registered name then check for this diff --git a/src/main/java/org/qortal/transaction/UpdateNameTransaction.java b/src/main/java/org/qortal/transaction/UpdateNameTransaction.java index f4cd3020..13c5f0fb 100644 --- a/src/main/java/org/qortal/transaction/UpdateNameTransaction.java +++ b/src/main/java/org/qortal/transaction/UpdateNameTransaction.java @@ -41,15 +41,6 @@ public class UpdateNameTransaction extends Transaction { return this.getCreator(); } - private synchronized String getReducedNewName() { - if (this.updateNameTransactionData.getReducedNewName() == null) { - String reducedNewName = Name.reduceName(this.updateNameTransactionData.getNewName()); - this.updateNameTransactionData.setReducedNewName(reducedNewName); - } - - return this.updateNameTransactionData.getReducedNewName(); - } - // Processing @Override @@ -99,9 +90,6 @@ public class UpdateNameTransaction extends Transaction { if (owner.getConfirmedBalance(Asset.QORT) < this.updateNameTransactionData.getFee()) return ValidationResult.NO_BALANCE; - // Fill in missing reduced new name. Caller is likely to save this as next step. - getReducedNewName(); - return ValidationResult.OK; } @@ -124,7 +112,7 @@ public class UpdateNameTransaction extends Transaction { return ValidationResult.INVALID_NAME_OWNER; // Check new name isn't already taken, unless it is the same name (this allows for case-adjusting renames) - NameData newNameData = this.repository.getNameRepository().fromReducedName(getReducedNewName()); + NameData newNameData = this.repository.getNameRepository().fromReducedName(this.updateNameTransactionData.getReducedNewName()); if (newNameData != null && !newNameData.getName().equals(nameData.getName())) return ValidationResult.NAME_ALREADY_REGISTERED;