forked from Qortal/qortal
cfd8b53fc1
Added more global parameters to /admin/unused API endpoint (formally /admin/dud) and also managed to remove /admin/unused from API documentation UI. Added results slicing to /assets/all Added /assets/orderbook API call that returns open asset orders Added /assets/trades that returns successful asset trades Added POST /assets/issue stub Unified HSQLDB connectionUrl to public variable inside Controller class. Can't deploy v1 ATs with isFinished=true flag as that prevents later transactions sending messages (during import of v1 chain). Some future hard-fork code will need to set all v1 ATs to "finished". Changed DB's "TransactionRecipients" to "TransactionParticipants" to properly support API call to find all transactions 'involving' a specific address. Support code needed in Block and Transaction with some transaction-specific overrides for Genesis and AT transactions. Removed old, deprecated calls from Transaction/TransactionRepository Moved HSQLDB database properties from connection URL to explicit SQL statements in HSQLDBDatabaseUpdates. They didn't work in connection URL during DB creation anyway. Retrofitted HSQLDB Accounts table with public_key column instead of rebuilding it later. Fixed incorrect comments in IssueAssetTransactionTransformer regarding v1 serialization for signing. Re-imported v1 chain to test latest changes.
94 lines
3.3 KiB
Java
94 lines
3.3 KiB
Java
package test;
|
|
|
|
import java.math.BigDecimal;
|
|
import java.util.List;
|
|
|
|
import org.junit.jupiter.api.Test;
|
|
import static org.junit.jupiter.api.Assertions.*;
|
|
import org.junit.jupiter.api.BeforeAll;
|
|
import org.junit.jupiter.api.AfterAll;
|
|
|
|
import data.transaction.TransactionData;
|
|
import qora.account.Account;
|
|
import qora.assets.Asset;
|
|
import qora.block.Block;
|
|
import qora.block.GenesisBlock;
|
|
import qora.transaction.Transaction;
|
|
import repository.DataException;
|
|
import repository.Repository;
|
|
import repository.RepositoryFactory;
|
|
import repository.RepositoryManager;
|
|
import repository.hsqldb.HSQLDBRepositoryFactory;
|
|
|
|
// Don't extend Common as we want an in-memory database
|
|
public class GenesisTests {
|
|
|
|
public static final String connectionUrl = "jdbc:hsqldb:mem:db/blockchain;create=true";
|
|
|
|
@BeforeAll
|
|
public static void setRepository() throws DataException {
|
|
RepositoryFactory repositoryFactory = new HSQLDBRepositoryFactory(connectionUrl);
|
|
RepositoryManager.setRepositoryFactory(repositoryFactory);
|
|
}
|
|
|
|
@AfterAll
|
|
public static void closeRepository() throws DataException {
|
|
RepositoryManager.closeRepositoryFactory();
|
|
}
|
|
|
|
@Test
|
|
public void testGenesisBlockTransactions() throws DataException {
|
|
try (final Repository repository = RepositoryManager.getRepository()) {
|
|
assertEquals(0, repository.getBlockRepository().getBlockchainHeight(), "Blockchain should be empty for this test");
|
|
|
|
GenesisBlock block = new GenesisBlock(repository);
|
|
|
|
assertNotNull(block);
|
|
assertTrue(block.isSignatureValid());
|
|
// Note: only true if blockchain is empty
|
|
assertEquals(Block.ValidationResult.OK, block.isValid());
|
|
|
|
List<Transaction> transactions = block.getTransactions();
|
|
assertNotNull(transactions);
|
|
|
|
for (Transaction transaction : transactions) {
|
|
assertNotNull(transaction);
|
|
|
|
TransactionData transactionData = transaction.getTransactionData();
|
|
|
|
assertEquals(Transaction.TransactionType.GENESIS, transactionData.getType());
|
|
assertTrue(transactionData.getFee().compareTo(BigDecimal.ZERO) == 0);
|
|
assertNull(transactionData.getReference());
|
|
assertNotNull(transactionData.getSignature());
|
|
assertTrue(transaction.isSignatureValid());
|
|
assertEquals(Transaction.ValidationResult.OK, transaction.isValid());
|
|
}
|
|
|
|
// Actually try to process genesis block onto empty blockchain
|
|
block.process();
|
|
repository.saveChanges();
|
|
|
|
// 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());
|
|
|
|
// Check known balance
|
|
Account testAccount = new Account(repository, "QegT2Ws5YjLQzEZ9YMzWsAZMBE8cAygHZN");
|
|
BigDecimal testBalance = testAccount.getConfirmedBalance(Asset.QORA);
|
|
BigDecimal expectedBalance = new BigDecimal("12606834").setScale(8);
|
|
assertTrue(testBalance.compareTo(expectedBalance) == 0);
|
|
}
|
|
}
|
|
|
|
}
|