From 5f4b66e5b0dab9e30a5febfcd5fd7608d5131b04 Mon Sep 17 00:00:00 2001 From: catbref Date: Wed, 20 May 2020 15:53:43 +0100 Subject: [PATCH] Save public keys from CHAT transactions so they can be fetched via API. --- src/main/java/org/qortal/account/Account.java | 6 +++++- .../repository/hsqldb/HSQLDBAccountRepository.java | 4 ++-- src/main/java/org/qortal/transaction/Transaction.java | 9 +++++++++ 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/qortal/account/Account.java b/src/main/java/org/qortal/account/Account.java index feb4a336..417dde6d 100644 --- a/src/main/java/org/qortal/account/Account.java +++ b/src/main/java/org/qortal/account/Account.java @@ -52,6 +52,10 @@ public class Account { return new AccountData(this.address); } + public void ensureAccount() throws DataException { + this.repository.getAccountRepository().ensureAccount(this.buildAccountData()); + } + // Balance manipulations - assetId is 0 for QORT public long getConfirmedBalance(long assetId) throws DataException { @@ -77,7 +81,7 @@ public class Account { } // Can't have a balance without an account - make sure it exists! - this.repository.getAccountRepository().ensureAccount(this.buildAccountData()); + this.ensureAccount(); AccountBalanceData accountBalanceData = new AccountBalanceData(this.address, assetId, balance); this.repository.getAccountRepository().save(accountBalanceData); diff --git a/src/main/java/org/qortal/repository/hsqldb/HSQLDBAccountRepository.java b/src/main/java/org/qortal/repository/hsqldb/HSQLDBAccountRepository.java index afcd12b5..928a251b 100644 --- a/src/main/java/org/qortal/repository/hsqldb/HSQLDBAccountRepository.java +++ b/src/main/java/org/qortal/repository/hsqldb/HSQLDBAccountRepository.java @@ -143,9 +143,9 @@ public class HSQLDBAccountRepository implements AccountRepository { @Override public void ensureAccount(AccountData accountData) throws DataException { - String sql = "INSERT IGNORE INTO Accounts (account) VALUES (?)"; // MySQL syntax + String sql = "INSERT IGNORE INTO Accounts (account, public_key) VALUES (?, ?)"; // MySQL syntax try { - this.repository.checkedExecuteUpdateCount(sql, accountData.getAddress()); + this.repository.checkedExecuteUpdateCount(sql, accountData.getAddress(), accountData.getPublicKey()); } catch (SQLException e) { throw new DataException("Unable to ensure minimal account in repository", e); } diff --git a/src/main/java/org/qortal/transaction/Transaction.java b/src/main/java/org/qortal/transaction/Transaction.java index 06a699aa..6928894c 100644 --- a/src/main/java/org/qortal/transaction/Transaction.java +++ b/src/main/java/org/qortal/transaction/Transaction.java @@ -794,6 +794,15 @@ 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(); + repository.saveChanges(); return ValidationResult.OK;