Browse Source

Fix PresenceTransaction to work with any ACCT, not only BitcoinACCTv1

blocksig
catbref 4 years ago
parent
commit
c10a5db280
  1. 18
      src/main/java/org/qortal/transaction/PresenceTransaction.java

18
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<ByteArray, Supplier<ACCT>> acctSuppliersByCodeHash = SupportedBlockchain.getAcctMap();
Set<ByteArray> codeHashes = acctSuppliersByCodeHash.keySet();
boolean isExecutable = true;
List<ATData> atsData = repository.getATRepository().getATsByFunctionality(codeHash, isExecutable, null, null, null);
List<ATData> atsData = repository.getATRepository().getAllATsByFunctionality(codeHashes, isExecutable);
for (ATData atData : atsData) {
CrossChainTradeData crossChainTradeData = BitcoinACCTv1.getInstance().populateTradeData(repository, atData);
ByteArray atCodeHash = new ByteArray(atData.getCodeHash());
Supplier<ACCT> acctSupplier = acctSuppliersByCodeHash.get(atCodeHash);
if (acctSupplier == null)
continue;
CrossChainTradeData crossChainTradeData = acctSupplier.get().populateTradeData(repository, atData);
if (crossChainTradeData.qortalCreatorTradeAddress.equals(signerAddress))
return ValidationResult.OK;

Loading…
Cancel
Save