mirror of https://github.com/qortal/qortal
catbref
6 years ago
5 changed files with 93 additions and 3 deletions
@ -0,0 +1,9 @@
|
||||
package repository; |
||||
|
||||
public interface Repository { |
||||
|
||||
// public void save();
|
||||
|
||||
// public void delete();
|
||||
|
||||
} |
@ -0,0 +1,9 @@
|
||||
package repository; |
||||
|
||||
import data.transaction.Transaction; |
||||
|
||||
public interface TransactionRepository extends Repository { |
||||
|
||||
public Transaction fromSignature(byte[] signature); |
||||
|
||||
} |
@ -0,0 +1,30 @@
|
||||
package repository.hsqldb; |
||||
|
||||
import java.math.BigDecimal; |
||||
import java.sql.ResultSet; |
||||
import java.sql.SQLException; |
||||
|
||||
import data.account.Account; |
||||
import data.account.PublicKeyAccount; |
||||
import data.transaction.GenesisTransaction; |
||||
import data.transaction.Transaction; |
||||
import database.DB; |
||||
|
||||
public class HSQLDBGenesisTransaction extends HSQLDBTransaction { |
||||
|
||||
protected Transaction fromSignature(byte[] signature, byte[] reference, PublicKeyAccount creator, long timestamp, BigDecimal fee) { |
||||
try { |
||||
ResultSet rs = DB.checkedExecute("SELECT recipient, amount FROM GenesisTransactions WHERE signature = ?", signature); |
||||
if (rs == null) |
||||
return null; |
||||
|
||||
Account recipient = new Account(rs.getString(1)); |
||||
BigDecimal amount = rs.getBigDecimal(2).setScale(8); |
||||
|
||||
return new GenesisTransaction(recipient, amount, timestamp, signature); |
||||
} catch (SQLException e) { |
||||
return null; |
||||
} |
||||
} |
||||
|
||||
} |
@ -0,0 +1,42 @@
|
||||
package repository.hsqldb; |
||||
|
||||
import java.math.BigDecimal; |
||||
import java.sql.ResultSet; |
||||
import java.sql.SQLException; |
||||
|
||||
import database.DB; |
||||
import data.account.PublicKeyAccount; |
||||
import data.transaction.Transaction; |
||||
import data.transaction.Transaction.TransactionType; |
||||
import repository.TransactionRepository; |
||||
|
||||
public class HSQLDBTransaction implements TransactionRepository { |
||||
|
||||
private static final int REFERENCE_LENGTH = 64; |
||||
|
||||
public Transaction fromSignature(byte[] signature) { |
||||
try { |
||||
ResultSet rs = DB.checkedExecute("SELECT type, reference, creator, creation, fee FROM Transactions WHERE signature = ?", signature); |
||||
if (rs == null) |
||||
return null; |
||||
|
||||
TransactionType type = TransactionType.valueOf(rs.getInt(1)); |
||||
byte[] reference = DB.getResultSetBytes(rs.getBinaryStream(1), REFERENCE_LENGTH); |
||||
// Note: can't use CREATOR_LENGTH in case we encounter Genesis Account's short, 8-byte public key
|
||||
PublicKeyAccount creator = new PublicKeyAccount(DB.getResultSetBytes(rs.getBinaryStream(2))); |
||||
long timestamp = rs.getTimestamp(3).getTime(); |
||||
BigDecimal fee = rs.getBigDecimal(4).setScale(8); |
||||
|
||||
switch (type) { |
||||
case GENESIS: |
||||
return new HSQLDBGenesisTransaction().fromSignature(signature, reference, creator, timestamp, fee); |
||||
|
||||
default: |
||||
return null; |
||||
} |
||||
} catch (SQLException e) { |
||||
return null; |
||||
} |
||||
} |
||||
|
||||
} |
Loading…
Reference in new issue