Surround RepositoryManager.getRepository() calls within try-with-resources

This commit is contained in:
catbref 2018-06-13 17:46:51 +01:00
parent c5818543ea
commit c25ccc064f
11 changed files with 215 additions and 192 deletions

View File

@ -89,6 +89,8 @@ public class Block {
this.generator = generator; this.generator = generator;
this.blockData = new BlockData(version, reference, 0, BigDecimal.ZERO.setScale(8), null, 0, timestamp, generatingBalance, generator.getPublicKey(), this.blockData = new BlockData(version, reference, 0, BigDecimal.ZERO.setScale(8), null, 0, timestamp, generatingBalance, generator.getPublicKey(),
null, atBytes, atFees); null, atBytes, atFees);
this.transactions = new ArrayList<Transaction>();
} }
// Getters/setters // Getters/setters

View File

@ -46,35 +46,38 @@ public class BlockChain {
} }
private static boolean isGenesisBlockValid() throws DataException { private static boolean isGenesisBlockValid() throws DataException {
BlockRepository blockRepository = RepositoryManager.getRepository().getBlockRepository(); try (final Repository repository = RepositoryManager.getRepository()) {
BlockRepository blockRepository = repository.getBlockRepository();
int blockchainHeight = blockRepository.getBlockchainHeight(); int blockchainHeight = blockRepository.getBlockchainHeight();
if (blockchainHeight < 1) if (blockchainHeight < 1)
return false; return false;
BlockData blockData = blockRepository.fromHeight(1); BlockData blockData = blockRepository.fromHeight(1);
if (blockData == null) if (blockData == null)
return false; return false;
return GenesisBlock.isGenesisBlock(blockData); return GenesisBlock.isGenesisBlock(blockData);
}
} }
private static void rebuildBlockchain() throws DataException { private static void rebuildBlockchain() throws DataException {
// (Re)build repository // (Re)build repository
Repository repository = RepositoryManager.getRepository(); try (final Repository repository = RepositoryManager.getRepository()) {
repository.rebuild(); repository.rebuild();
// Add Genesis Block // Add Genesis Block
GenesisBlock genesisBlock = new GenesisBlock(repository); GenesisBlock genesisBlock = new GenesisBlock(repository);
genesisBlock.process(); genesisBlock.process();
// Add QORA asset. // Add QORA asset.
// NOTE: Asset's transaction reference is Genesis Block's generator signature which doesn't exist as a transaction! // NOTE: Asset's transaction reference is Genesis Block's generator signature which doesn't exist as a transaction!
AssetData qoraAssetData = new AssetData(Asset.QORA, genesisBlock.getGenerator().getAddress(), "Qora", "This is the simulated Qora asset.", 10_000_000_000L, true, AssetData qoraAssetData = new AssetData(Asset.QORA, genesisBlock.getGenerator().getAddress(), "Qora", "This is the simulated Qora asset.",
genesisBlock.getBlockData().getGeneratorSignature()); 10_000_000_000L, true, genesisBlock.getBlockData().getGeneratorSignature());
repository.getAssetRepository().save(qoraAssetData); repository.getAssetRepository().save(qoraAssetData);
repository.saveChanges(); repository.saveChanges();
}
} }
/** /**

View File

@ -3,6 +3,7 @@ package qora.block;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.IOException; import java.io.IOException;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import com.google.common.primitives.Bytes; import com.google.common.primitives.Bytes;
@ -32,6 +33,8 @@ public class GenesisBlock extends Block {
super(repository, new BlockData(GENESIS_BLOCK_VERSION, GENESIS_REFERENCE, 0, BigDecimal.ZERO.setScale(8), GENESIS_TRANSACTIONS_SIGNATURE, 1, super(repository, new BlockData(GENESIS_BLOCK_VERSION, GENESIS_REFERENCE, 0, BigDecimal.ZERO.setScale(8), GENESIS_TRANSACTIONS_SIGNATURE, 1,
GENESIS_TIMESTAMP, GENESIS_GENERATING_BALANCE, GENESIS_GENERATOR_PUBLIC_KEY, GENESIS_GENERATOR_SIGNATURE, null, null)); GENESIS_TIMESTAMP, GENESIS_GENERATING_BALANCE, GENESIS_GENERATOR_PUBLIC_KEY, GENESIS_GENERATOR_SIGNATURE, null, null));
this.transactions = new ArrayList<Transaction>();
// Genesis transactions // Genesis transactions
addGenesisTransaction("QUD9y7NZqTtNwvSAUfewd7zKUGoVivVnTW", "7032468.191"); addGenesisTransaction("QUD9y7NZqTtNwvSAUfewd7zKUGoVivVnTW", "7032468.191");
addGenesisTransaction("QVafvKkE5bZTkq8PcXvdaxwuLNN2DGCwYk", "1716146.084"); addGenesisTransaction("QVafvKkE5bZTkq8PcXvdaxwuLNN2DGCwYk", "1716146.084");

View File

@ -1,6 +1,6 @@
package repository; package repository;
public interface Repository { public interface Repository extends AutoCloseable {
public AccountRepository getAccountRepository(); public AccountRepository getAccountRepository();

View File

@ -22,100 +22,101 @@ public class BlockTests extends Common {
@Test @Test
public void testGenesisBlockTransactions() throws DataException { public void testGenesisBlockTransactions() throws DataException {
Repository repository = RepositoryManager.getRepository(); try (final Repository repository = RepositoryManager.getRepository()) {
GenesisBlock block = new GenesisBlock(repository); GenesisBlock block = new GenesisBlock(repository);
assertNotNull(block); assertNotNull(block);
assertTrue(block.isSignatureValid()); assertTrue(block.isSignatureValid());
// only true if blockchain is empty // only true if blockchain is empty
// assertTrue(block.isValid(connection)); // assertTrue(block.isValid(connection));
List<Transaction> transactions = block.getTransactions(); List<Transaction> transactions = block.getTransactions();
assertNotNull(transactions); assertNotNull(transactions);
for (Transaction transaction : transactions) { for (Transaction transaction : transactions) {
assertNotNull(transaction); assertNotNull(transaction);
TransactionData transactionData = transaction.getTransactionData(); TransactionData transactionData = transaction.getTransactionData();
assertEquals(Transaction.TransactionType.GENESIS, transactionData.getType());
assertTrue(transactionData.getFee().compareTo(BigDecimal.ZERO) == 0);
assertNull(transactionData.getReference());
assertTrue(transaction.isSignatureValid());
assertEquals(Transaction.ValidationResult.OK, transaction.isValid());
}
// Attempt to load first transaction directly from database
TransactionData transactionData = repository.getTransactionRepository().fromSignature(transactions.get(0).getTransactionData().getSignature());
assertNotNull(transactionData);
assertEquals(Transaction.TransactionType.GENESIS, transactionData.getType()); assertEquals(Transaction.TransactionType.GENESIS, transactionData.getType());
assertTrue(transactionData.getFee().compareTo(BigDecimal.ZERO) == 0); assertTrue(transactionData.getFee().compareTo(BigDecimal.ZERO) == 0);
assertNull(transactionData.getReference()); assertNull(transactionData.getReference());
Transaction transaction = Transaction.fromData(repository, transactionData);
assertNotNull(transaction);
assertTrue(transaction.isSignatureValid()); assertTrue(transaction.isSignatureValid());
assertEquals(Transaction.ValidationResult.OK, transaction.isValid()); assertEquals(Transaction.ValidationResult.OK, transaction.isValid());
} }
// Attempt to load first transaction directly from database
TransactionData transactionData = repository.getTransactionRepository().fromSignature(transactions.get(0).getTransactionData().getSignature());
assertNotNull(transactionData);
assertEquals(Transaction.TransactionType.GENESIS, transactionData.getType());
assertTrue(transactionData.getFee().compareTo(BigDecimal.ZERO) == 0);
assertNull(transactionData.getReference());
Transaction transaction = Transaction.fromData(repository, transactionData);
assertNotNull(transaction);
assertTrue(transaction.isSignatureValid());
assertEquals(Transaction.ValidationResult.OK, transaction.isValid());
} }
@Test @Test
public void testBlockPaymentTransactions() throws DataException { public void testBlockPaymentTransactions() throws DataException {
Repository repository = RepositoryManager.getRepository(); try (final Repository repository = RepositoryManager.getRepository()) {
// Block 949 has lots of varied transactions
// Blocks 390 & 754 have only payment transactions
BlockData blockData = repository.getBlockRepository().fromHeight(754);
assertNotNull("Block 754 is required for this test", blockData);
// Block 949 has lots of varied transactions Block block = new Block(repository, blockData);
// Blocks 390 & 754 have only payment transactions assertTrue(block.isSignatureValid());
BlockData blockData = repository.getBlockRepository().fromHeight(754);
assertNotNull("Block 754 is required for this test", blockData);
Block block = new Block(repository, blockData); List<Transaction> transactions = block.getTransactions();
assertTrue(block.isSignatureValid()); assertNotNull(transactions);
List<Transaction> transactions = block.getTransactions(); for (Transaction transaction : transactions) {
assertNotNull(transactions); assertNotNull(transaction);
for (Transaction transaction : transactions) { TransactionData transactionData = transaction.getTransactionData();
assertEquals(Transaction.TransactionType.PAYMENT, transactionData.getType());
assertFalse(transactionData.getFee().compareTo(BigDecimal.ZERO) == 0);
assertNotNull(transactionData.getReference());
assertTrue(transaction.isSignatureValid());
}
// Attempt to load first transaction directly from database
TransactionData transactionData = repository.getTransactionRepository().fromSignature(transactions.get(0).getTransactionData().getSignature());
assertNotNull(transactionData);
assertEquals(Transaction.TransactionType.GENESIS, transactionData.getType());
assertTrue(transactionData.getFee().compareTo(BigDecimal.ZERO) == 0);
assertNull(transactionData.getReference());
Transaction transaction = Transaction.fromData(repository, transactionData);
assertNotNull(transaction); assertNotNull(transaction);
TransactionData transactionData = transaction.getTransactionData();
assertEquals(Transaction.TransactionType.PAYMENT, transactionData.getType());
assertFalse(transactionData.getFee().compareTo(BigDecimal.ZERO) == 0);
assertNotNull(transactionData.getReference());
assertTrue(transaction.isSignatureValid()); assertTrue(transaction.isSignatureValid());
} }
// Attempt to load first transaction directly from database
TransactionData transactionData = repository.getTransactionRepository().fromSignature(transactions.get(0).getTransactionData().getSignature());
assertNotNull(transactionData);
assertEquals(Transaction.TransactionType.GENESIS, transactionData.getType());
assertTrue(transactionData.getFee().compareTo(BigDecimal.ZERO) == 0);
assertNull(transactionData.getReference());
Transaction transaction = Transaction.fromData(repository, transactionData);
assertNotNull(transaction);
assertTrue(transaction.isSignatureValid());
} }
@Test @Test
public void testBlockSerialization() throws DataException, TransformationException { public void testBlockSerialization() throws DataException, TransformationException {
Repository repository = RepositoryManager.getRepository(); try (final Repository repository = RepositoryManager.getRepository()) {
// Block 949 has lots of varied transactions
// Blocks 390 & 754 have only payment transactions
BlockData blockData = repository.getBlockRepository().fromHeight(754);
assertNotNull("Block 754 is required for this test", blockData);
// Block 949 has lots of varied transactions Block block = new Block(repository, blockData);
// Blocks 390 & 754 have only payment transactions assertTrue(block.isSignatureValid());
BlockData blockData = repository.getBlockRepository().fromHeight(754);
assertNotNull("Block 754 is required for this test", blockData);
Block block = new Block(repository, blockData); byte[] bytes = BlockTransformer.toBytes(block);
assertTrue(block.isSignatureValid());
byte[] bytes = BlockTransformer.toBytes(block); assertEquals(BlockTransformer.getDataLength(block), bytes.length);
}
assertEquals(BlockTransformer.getDataLength(block), bytes.length);
} }
} }

View File

@ -18,71 +18,74 @@ public class LoadTests extends Common {
@Test @Test
public void testLoadPaymentTransaction() throws DataException { public void testLoadPaymentTransaction() throws DataException {
Repository repository = RepositoryManager.getRepository(); try (final Repository repository = RepositoryManager.getRepository()) {
TransactionRepository transactionRepository = repository.getTransactionRepository(); TransactionRepository transactionRepository = repository.getTransactionRepository();
assertTrue("Migrate from old database to at least block 49778 before running this test", assertTrue("Migrate from old database to at least block 49778 before running this test",
repository.getBlockRepository().getBlockchainHeight() >= 49778); repository.getBlockRepository().getBlockchainHeight() >= 49778);
String signature58 = "1211ZPwG3hk5evWzXCZi9hMDRpwumWmkENjwWkeTCik9xA5uoYnxzF7rwR5hmHH3kG2RXo7ToCAaRc7dvnynByJt"; String signature58 = "1211ZPwG3hk5evWzXCZi9hMDRpwumWmkENjwWkeTCik9xA5uoYnxzF7rwR5hmHH3kG2RXo7ToCAaRc7dvnynByJt";
byte[] signature = Base58.decode(signature58); byte[] signature = Base58.decode(signature58);
TransactionData transactionData = transactionRepository.fromSignature(signature); TransactionData transactionData = transactionRepository.fromSignature(signature);
assertNotNull("Transaction data not loaded from repository", transactionData); assertNotNull("Transaction data not loaded from repository", transactionData);
assertEquals("Transaction data not PAYMENT type", TransactionType.PAYMENT, transactionData.getType().value); assertEquals("Transaction data not PAYMENT type", TransactionType.PAYMENT, transactionData.getType());
assertEquals(PublicKeyAccount.getAddress(transactionData.getCreatorPublicKey()), "QXwu8924WdgPoRmtiWQBUMF6eedmp1Hu2E"); assertEquals(PublicKeyAccount.getAddress(transactionData.getCreatorPublicKey()), "QXwu8924WdgPoRmtiWQBUMF6eedmp1Hu2E");
PaymentTransactionData paymentTransactionData = (PaymentTransactionData) transactionData; PaymentTransactionData paymentTransactionData = (PaymentTransactionData) transactionData;
assertNotNull(paymentTransactionData); assertNotNull(paymentTransactionData);
assertEquals(PublicKeyAccount.getAddress(paymentTransactionData.getSenderPublicKey()), "QXwu8924WdgPoRmtiWQBUMF6eedmp1Hu2E"); assertEquals(PublicKeyAccount.getAddress(paymentTransactionData.getSenderPublicKey()), "QXwu8924WdgPoRmtiWQBUMF6eedmp1Hu2E");
assertEquals(paymentTransactionData.getRecipient(), "QZsv8vbJ6QfrBNba4LMp5UtHhAzhrxvVUU"); assertEquals(paymentTransactionData.getRecipient(), "QZsv8vbJ6QfrBNba4LMp5UtHhAzhrxvVUU");
assertEquals(paymentTransactionData.getTimestamp(), 1416209264000L); assertEquals(paymentTransactionData.getTimestamp(), 1416209264000L);
assertEquals(Base58.encode(paymentTransactionData.getReference()), assertEquals(Base58.encode(paymentTransactionData.getReference()),
"31dC6kHHBeG5vYb8LMaZDjLEmhc9kQB2VUApVd8xWncSRiXu7yMejdprjYFMP2rUnzZxWd4KJhkq6LsV7rQvU1kY"); "31dC6kHHBeG5vYb8LMaZDjLEmhc9kQB2VUApVd8xWncSRiXu7yMejdprjYFMP2rUnzZxWd4KJhkq6LsV7rQvU1kY");
}
} }
@Test @Test
public void testLoadFactory() throws DataException { public void testLoadFactory() throws DataException {
Repository repository = RepositoryManager.getRepository(); try (final Repository repository = RepositoryManager.getRepository()) {
TransactionRepository transactionRepository = repository.getTransactionRepository(); TransactionRepository transactionRepository = repository.getTransactionRepository();
assertTrue("Migrate from old database to at least block 49778 before running this test", assertTrue("Migrate from old database to at least block 49778 before running this test",
repository.getBlockRepository().getBlockchainHeight() >= 49778); repository.getBlockRepository().getBlockchainHeight() >= 49778);
String signature58 = "1211ZPwG3hk5evWzXCZi9hMDRpwumWmkENjwWkeTCik9xA5uoYnxzF7rwR5hmHH3kG2RXo7ToCAaRc7dvnynByJt"; String signature58 = "1211ZPwG3hk5evWzXCZi9hMDRpwumWmkENjwWkeTCik9xA5uoYnxzF7rwR5hmHH3kG2RXo7ToCAaRc7dvnynByJt";
byte[] signature = Base58.decode(signature58); byte[] signature = Base58.decode(signature58);
while (true) { while (true) {
TransactionData transactionData = transactionRepository.fromSignature(signature); TransactionData transactionData = transactionRepository.fromSignature(signature);
if (transactionData == null) if (transactionData == null)
break; break;
PaymentTransactionData paymentTransactionData = (PaymentTransactionData) transactionData; PaymentTransactionData paymentTransactionData = (PaymentTransactionData) transactionData;
System.out.println(PublicKeyAccount.getAddress(paymentTransactionData.getSenderPublicKey()) + " sent " + paymentTransactionData.getAmount() System.out.println(PublicKeyAccount.getAddress(paymentTransactionData.getSenderPublicKey()) + " sent " + paymentTransactionData.getAmount()
+ " QORA to " + paymentTransactionData.getRecipient()); + " QORA to " + paymentTransactionData.getRecipient());
signature = paymentTransactionData.getReference(); signature = paymentTransactionData.getReference();
}
} }
} }
@Test @Test
public void testLoadNonexistentTransaction() throws DataException { public void testLoadNonexistentTransaction() throws DataException {
Repository repository = RepositoryManager.getRepository(); try (final Repository repository = RepositoryManager.getRepository()) {
TransactionRepository transactionRepository = repository.getTransactionRepository(); TransactionRepository transactionRepository = repository.getTransactionRepository();
String signature58 = "1111222233334444"; String signature58 = "1111222233334444";
byte[] signature = Base58.decode(signature58); byte[] signature = Base58.decode(signature58);
TransactionData transactionData = transactionRepository.fromSignature(signature); TransactionData transactionData = transactionRepository.fromSignature(signature);
if (transactionData != null) { if (transactionData != null) {
PaymentTransactionData paymentTransactionData = (PaymentTransactionData) transactionData; PaymentTransactionData paymentTransactionData = (PaymentTransactionData) transactionData;
System.out.println(PublicKeyAccount.getAddress(paymentTransactionData.getSenderPublicKey()) + " sent " + paymentTransactionData.getAmount() System.out.println(PublicKeyAccount.getAddress(paymentTransactionData.getSenderPublicKey()) + " sent " + paymentTransactionData.getAmount()
+ " QORA to " + paymentTransactionData.getRecipient()); + " QORA to " + paymentTransactionData.getRecipient());
fail(); fail();
}
} }
} }

View File

@ -17,27 +17,28 @@ public class NavigationTests extends Common {
@Test @Test
public void testNavigateFromTransactionToBlock() throws DataException { public void testNavigateFromTransactionToBlock() throws DataException {
Repository repository = RepositoryManager.getRepository(); try (final Repository repository = RepositoryManager.getRepository()) {
TransactionRepository transactionRepository = repository.getTransactionRepository(); TransactionRepository transactionRepository = repository.getTransactionRepository();
assertTrue("Migrate from old database to at least block 49778 before running this test", assertTrue("Migrate from old database to at least block 49778 before running this test",
repository.getBlockRepository().getBlockchainHeight() >= 49778); repository.getBlockRepository().getBlockchainHeight() >= 49778);
String signature58 = "1211ZPwG3hk5evWzXCZi9hMDRpwumWmkENjwWkeTCik9xA5uoYnxzF7rwR5hmHH3kG2RXo7ToCAaRc7dvnynByJt"; String signature58 = "1211ZPwG3hk5evWzXCZi9hMDRpwumWmkENjwWkeTCik9xA5uoYnxzF7rwR5hmHH3kG2RXo7ToCAaRc7dvnynByJt";
byte[] signature = Base58.decode(signature58); byte[] signature = Base58.decode(signature58);
System.out.println("Navigating to Block from transaction " + signature58); System.out.println("Navigating to Block from transaction " + signature58);
TransactionData transactionData = transactionRepository.fromSignature(signature); TransactionData transactionData = transactionRepository.fromSignature(signature);
assertNotNull("Transaction data not loaded from repository", transactionData); assertNotNull("Transaction data not loaded from repository", transactionData);
assertEquals("Transaction data not PAYMENT type", TransactionType.PAYMENT, transactionData.getType().value); assertEquals("Transaction data not PAYMENT type", TransactionType.PAYMENT, transactionData.getType());
BlockData blockData = transactionRepository.toBlock(transactionData); BlockData blockData = transactionRepository.toBlock(transactionData);
assertNotNull("Block 49778 not loaded from database", blockData); assertNotNull("Block 49778 not loaded from database", blockData);
System.out.println("Block " + blockData.getHeight() + ", signature: " + Base58.encode(blockData.getSignature())); System.out.println("Block " + blockData.getHeight() + ", signature: " + Base58.encode(blockData.getSignature()));
assertEquals(49778, blockData.getHeight()); assertEquals(49778, blockData.getHeight());
}
} }
} }

View File

@ -12,8 +12,9 @@ public class RepositoryTests extends Common {
@Test @Test
public void testGetRepository() throws DataException { public void testGetRepository() throws DataException {
Repository repository = RepositoryManager.getRepository(); try (final Repository repository = RepositoryManager.getRepository()) {
assertNotNull(repository); assertNotNull(repository);
}
} }
@Test @Test
@ -25,19 +26,24 @@ public class RepositoryTests extends Common {
repositories[i] = RepositoryManager.getRepository(); repositories[i] = RepositoryManager.getRepository();
assertNotNull(repositories[i]); assertNotNull(repositories[i]);
} }
for (int i = 0; i < n_instances; ++i) {
repositories[i].close();
repositories[i] = null;
}
} }
@Test @Test
public void testAccessAfterCommit() throws DataException { public void testAccessAfterClose() throws DataException {
Repository repository = RepositoryManager.getRepository(); Repository repository = RepositoryManager.getRepository();
assertNotNull(repository); assertNotNull(repository);
repository.saveChanges(); repository.close();
try { try {
repository.discardChanges(); repository.discardChanges();
fail(); fail();
} catch (DataException e) { } catch (NullPointerException | DataException e) {
} }
} }

View File

@ -16,18 +16,18 @@ public class SaveTests extends Common {
@Test @Test
public void testSavePaymentTransaction() throws DataException { public void testSavePaymentTransaction() throws DataException {
Repository repository = RepositoryManager.getRepository(); try (final Repository repository = RepositoryManager.getRepository()) {
String reference58 = "rrrr";
byte[] reference = Base58.decode(reference58);
String signature58 = "ssss";
byte[] signature = Base58.decode(signature58);
PublicKeyAccount sender = new PublicKeyAccount(repository, "Qsender".getBytes());
String reference58 = "rrrr"; PaymentTransactionData paymentTransactionData = new PaymentTransactionData(sender.getPublicKey(), "Qrecipient", BigDecimal.valueOf(12345L),
byte[] reference = Base58.decode(reference58); BigDecimal.ONE, Instant.now().getEpochSecond(), reference, signature);
String signature58 = "ssss";
byte[] signature = Base58.decode(signature58);
PublicKeyAccount sender = new PublicKeyAccount(repository, "Qsender".getBytes());
PaymentTransactionData paymentTransactionData = new PaymentTransactionData(sender.getPublicKey(), "Qrecipient", BigDecimal.valueOf(12345L), repository.getTransactionRepository().save(paymentTransactionData);
BigDecimal.ONE, Instant.now().getEpochSecond(), reference, signature); }
repository.getTransactionRepository().save(paymentTransactionData);
} }
} }

View File

@ -22,13 +22,15 @@ public class SignatureTests extends Common {
public void testGenesisBlockSignature() throws DataException { public void testGenesisBlockSignature() throws DataException {
String expected58 = "6pHMBFif7jXFG654joT8GPaymau1fMtaxacRyqSrnAwQMQDvqRuLpHpfFyqX4gWVvj4pF1mwQhFgqWAvjVvPJUjmBZQvL751dM9cEcQBTaUcxtNLuWZCVUAtbnWN9f7FsLppHhkPbxwpoodL3UJYRGt3EZrG17mhv1RJbmq8j6rr7Mk"; String expected58 = "6pHMBFif7jXFG654joT8GPaymau1fMtaxacRyqSrnAwQMQDvqRuLpHpfFyqX4gWVvj4pF1mwQhFgqWAvjVvPJUjmBZQvL751dM9cEcQBTaUcxtNLuWZCVUAtbnWN9f7FsLppHhkPbxwpoodL3UJYRGt3EZrG17mhv1RJbmq8j6rr7Mk";
Repository repository = RepositoryManager.getRepository(); try (final Repository repository = RepositoryManager.getRepository()) {
GenesisBlock block = new GenesisBlock(repository); GenesisBlock block = new GenesisBlock(repository);
BlockData blockData = block.getBlockData(); BlockData blockData = block.getBlockData();
System.out.println("Generator: " + block.getGenerator().getAddress() + ", generator signature: " + Base58.encode(blockData.getGeneratorSignature())); System.out
.println("Generator: " + block.getGenerator().getAddress() + ", generator signature: " + Base58.encode(blockData.getGeneratorSignature()));
assertEquals(expected58, Base58.encode(block.getSignature())); assertEquals(expected58, Base58.encode(block.getSignature()));
}
} }
@Test @Test
@ -42,20 +44,21 @@ public class SignatureTests extends Common {
BigDecimal generatingBalance = BigDecimal.valueOf(10_000_000L).setScale(8); BigDecimal generatingBalance = BigDecimal.valueOf(10_000_000L).setScale(8);
Repository repository = RepositoryManager.getRepository(); try (final Repository repository = RepositoryManager.getRepository()) {
PrivateKeyAccount generator = new PrivateKeyAccount(repository, PrivateKeyAccount generator = new PrivateKeyAccount(repository,
new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 }); new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 });
byte[] atBytes = null; byte[] atBytes = null;
BigDecimal atFees = null; BigDecimal atFees = null;
Block block = new Block(repository, version, reference, timestamp, generatingBalance, generator, atBytes, atFees); Block block = new Block(repository, version, reference, timestamp, generatingBalance, generator, atBytes, atFees);
block.calcGeneratorSignature(); block.calcGeneratorSignature();
block.calcTransactionsSignature(); block.calcTransactionsSignature();
assertTrue(block.isSignatureValid()); assertTrue(block.isSignatureValid());
}
} }
} }

View File

@ -25,25 +25,26 @@ public class TransactionTests extends Common {
@Test @Test
public void testGenesisSerialization() throws TransformationException, DataException { public void testGenesisSerialization() throws TransformationException, DataException {
Repository repository = RepositoryManager.getRepository(); try (final Repository repository = RepositoryManager.getRepository()) {
GenesisBlock block = new GenesisBlock(repository); GenesisBlock block = new GenesisBlock(repository);
GenesisTransaction transaction = (GenesisTransaction) block.getTransactions().get(1); GenesisTransaction transaction = (GenesisTransaction) block.getTransactions().get(1);
assertNotNull(transaction); assertNotNull(transaction);
GenesisTransactionData genesisTransactionData = (GenesisTransactionData) transaction.getTransactionData(); GenesisTransactionData genesisTransactionData = (GenesisTransactionData) transaction.getTransactionData();
System.out.println(genesisTransactionData.getTimestamp() + ": " + genesisTransactionData.getRecipient() + " received " System.out.println(genesisTransactionData.getTimestamp() + ": " + genesisTransactionData.getRecipient() + " received "
+ genesisTransactionData.getAmount().toPlainString()); + genesisTransactionData.getAmount().toPlainString());
byte[] bytes = TransactionTransformer.toBytes(genesisTransactionData); byte[] bytes = TransactionTransformer.toBytes(genesisTransactionData);
GenesisTransactionData parsedTransactionData = (GenesisTransactionData) TransactionTransformer.fromBytes(bytes); GenesisTransactionData parsedTransactionData = (GenesisTransactionData) TransactionTransformer.fromBytes(bytes);
System.out.println(parsedTransactionData.getTimestamp() + ": " + parsedTransactionData.getRecipient() + " received " System.out.println(parsedTransactionData.getTimestamp() + ": " + parsedTransactionData.getRecipient() + " received "
+ parsedTransactionData.getAmount().toPlainString()); + parsedTransactionData.getAmount().toPlainString());
assertTrue(Arrays.equals(genesisTransactionData.getSignature(), parsedTransactionData.getSignature())); assertTrue(Arrays.equals(genesisTransactionData.getSignature(), parsedTransactionData.getSignature()));
}
} }
private void testGenericSerialization(TransactionData transactionData) throws TransformationException { private void testGenericSerialization(TransactionData transactionData) throws TransformationException {
@ -60,21 +61,21 @@ public class TransactionTests extends Common {
@Test @Test
public void testPaymentSerialization() throws TransformationException, DataException { public void testPaymentSerialization() throws TransformationException, DataException {
Repository repository = RepositoryManager.getRepository(); try (final Repository repository = RepositoryManager.getRepository()) {
// Block 949 has lots of varied transactions
// Blocks 390 & 754 have only payment transactions
BlockData blockData = repository.getBlockRepository().fromHeight(754);
assertNotNull("Block 754 is required for this test", blockData);
// Block 949 has lots of varied transactions Block block = new Block(repository, blockData);
// Blocks 390 & 754 have only payment transactions assertTrue(block.isSignatureValid());
BlockData blockData = repository.getBlockRepository().fromHeight(754);
assertNotNull("Block 754 is required for this test", blockData);
Block block = new Block(repository, blockData); List<Transaction> transactions = block.getTransactions();
assertTrue(block.isSignatureValid()); assertNotNull(transactions);
List<Transaction> transactions = block.getTransactions(); for (Transaction transaction : transactions)
assertNotNull(transactions); testGenericSerialization(transaction.getTransactionData());
}
for (Transaction transaction : transactions)
testGenericSerialization(transaction.getTransactionData());
} }
@Test @Test