forked from Qortal/qortal
Surround RepositoryManager.getRepository() calls within try-with-resources
This commit is contained in:
parent
c5818543ea
commit
c25ccc064f
@ -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
|
||||||
|
@ -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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -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");
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package repository;
|
package repository;
|
||||||
|
|
||||||
public interface Repository {
|
public interface Repository extends AutoCloseable {
|
||||||
|
|
||||||
public AccountRepository getAccountRepository();
|
public AccountRepository getAccountRepository();
|
||||||
|
|
||||||
|
@ -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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user