diff --git a/src/main/java/org/qortal/transaction/PresenceTransaction.java b/src/main/java/org/qortal/transaction/PresenceTransaction.java index 22422908..5e976511 100644 --- a/src/main/java/org/qortal/transaction/PresenceTransaction.java +++ b/src/main/java/org/qortal/transaction/PresenceTransaction.java @@ -6,12 +6,15 @@ import static java.util.stream.Collectors.toMap; import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.Set; +import java.util.function.Supplier; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.qortal.account.Account; import org.qortal.controller.Controller; -import org.qortal.crosschain.BitcoinACCTv1; +import org.qortal.crosschain.ACCT; +import org.qortal.crosschain.SupportedBlockchain; import org.qortal.crypto.Crypto; import org.qortal.crypto.MemoryPoW; import org.qortal.data.at.ATData; @@ -25,6 +28,7 @@ import org.qortal.transform.TransformationException; import org.qortal.transform.transaction.PresenceTransactionTransformer; import org.qortal.transform.transaction.TransactionTransformer; import org.qortal.utils.Base58; +import org.qortal.utils.ByteArray; import com.google.common.primitives.Longs; @@ -158,13 +162,19 @@ public class PresenceTransaction extends Transaction { // Check signer is known trade address String signerAddress = Crypto.toAddress(this.transactionData.getCreatorPublicKey()); - byte[] codeHash = BitcoinACCTv1.CODE_BYTES_HASH; + Map> acctSuppliersByCodeHash = SupportedBlockchain.getAcctMap(); + Set codeHashes = acctSuppliersByCodeHash.keySet(); boolean isExecutable = true; - List atsData = repository.getATRepository().getATsByFunctionality(codeHash, isExecutable, null, null, null); + List atsData = repository.getATRepository().getAllATsByFunctionality(codeHashes, isExecutable); for (ATData atData : atsData) { - CrossChainTradeData crossChainTradeData = BitcoinACCTv1.getInstance().populateTradeData(repository, atData); + ByteArray atCodeHash = new ByteArray(atData.getCodeHash()); + Supplier acctSupplier = acctSuppliersByCodeHash.get(atCodeHash); + if (acctSupplier == null) + continue; + + CrossChainTradeData crossChainTradeData = acctSupplier.get().populateTradeData(repository, atData); if (crossChainTradeData.qortalCreatorTradeAddress.equals(signerAddress)) return ValidationResult.OK;