Skip to content

Commit

Permalink
Merge branch 'develop' into decouple-client
Browse files Browse the repository at this point in the history
  • Loading branch information
sasaxie authored Jan 12, 2018
2 parents 49b56fc + 5abb855 commit 1c33b7d
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 73 deletions.
67 changes: 13 additions & 54 deletions src/main/java/org/tron/core/Blockchain.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,8 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.tron.config.Configer;
import org.tron.core.events.BlockchainListener;
import org.tron.core.events.BlockchainListener
import org.tron.consensus.client.Client;
import org.tron.crypto.ECKey;
import org.tron.overlay.Net;
import org.tron.peer.Peer;
Expand All @@ -33,15 +34,10 @@
import org.tron.storage.leveldb.LevelDbDataSourceImpl;
import org.tron.utils.ByteArray;

import javax.inject.Inject;
import javax.inject.Named;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Paths;
import java.util.*;

import static org.tron.core.Constant.BLOCK_DB_NAME;
import static org.tron.core.Constant.LAST_HASH;

public class Blockchain {
Expand All @@ -50,7 +46,7 @@ public class Blockchain {
public static String parentName=Constant.NORMAL;

public static final Logger logger = LoggerFactory.getLogger("BlockChain");
private LevelDbDataSourceImpl blockDB = null;
private LevelDbDataSourceImpl blockDB;
private PendingState pendingState = new PendingStateImpl();

private byte[] lastHash;
Expand All @@ -61,21 +57,16 @@ public class Blockchain {
/**
* create new blockchain
*
* @param blockDB block database
* @param address wallet address
* @param type peer type
*
*/
public Blockchain(String address, String type) {
if (dbExists()) {
blockDB = new LevelDbDataSourceImpl(parentName,BLOCK_DB_NAME);
blockDB.initDB();

this.lastHash = blockDB.getData(LAST_HASH);
this.currentHash = this.lastHash;

logger.info("load blockchain");
} else {
blockDB = new LevelDbDataSourceImpl(Constant.NORMAL,BLOCK_DB_NAME);
blockDB.initDB();
public Blockchain(LevelDbDataSourceImpl blockDB, String address, String type) {
this.blockDB = blockDB;
this.lastHash = blockDB.getData(LAST_HASH);

if(this.lastHash == null) {
InputStream is = getClass().getClassLoader().getResourceAsStream("genesis.json");
String json = null;
try {
Expand Down Expand Up @@ -116,27 +107,12 @@ public Blockchain(String address, String type) {
}

logger.info("new blockchain");
} else {
this.currentHash = this.lastHash;
logger.info("load blockchain");
}
}

/**
* create blockchain by db source
*/
@Inject
public Blockchain(@Named("block") LevelDbDataSourceImpl blockDb) {
if (!dbExists()) {
logger.info("no existing blockchain found. please create one first");
throw new IllegalStateException("No existing blockchain found. please create one first");
}

blockDB = blockDb;

this.lastHash = blockDB.getData(LAST_HASH);
this.currentHash = this.lastHash;

logger.info("load blockchain");
}

/**
* find transaction by id
*
Expand Down Expand Up @@ -224,23 +200,6 @@ public HashMap<String, TXOutputs> findUTXO() {
return utxo;
}

/**
* Checks if the database file exists
*
* @return boolean
*/
public static boolean dbExists() {
if (Constant.NORMAL==parentName){
parentName= Configer.getConf(Constant.NORMAL_CONF).getString(Constant.DATABASE_DIR);
}else {
parentName=Configer.getConf(Constant.TEST_CONF).getString(Constant.DATABASE_DIR);

}
File file = new File(Paths.get(parentName, BLOCK_DB_NAME).toString());
return file.exists();
}


/**
* add a block into database
*
Expand Down
10 changes: 9 additions & 1 deletion src/main/java/org/tron/peer/PeerBuilder.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,13 @@

import com.google.inject.Injector;
import org.tron.consensus.client.BlockchainClientListener;
import com.google.inject.Key;
import com.google.inject.name.Names;
import org.tron.consensus.client.Client;
import org.tron.core.Blockchain;
import org.tron.core.UTXOSet;
import org.tron.crypto.ECKey;
import org.tron.storage.leveldb.LevelDbDataSourceImpl;
import org.tron.utils.ByteArray;
import org.tron.wallet.Wallet;

Expand Down Expand Up @@ -34,7 +37,12 @@ private void buildBlockchain() {
if (wallet == null) throw new IllegalStateException("Wallet must be set before building the blockchain");
if (type == null) throw new IllegalStateException("Type must be set before building the blockchain");

blockchain = new Blockchain(ByteArray.toHexString(wallet.getAddress()), this.type);
blockchain = new Blockchain(
injector.getInstance(Key.get(LevelDbDataSourceImpl.class, Names.named("block"))),
ByteArray.toHexString(wallet.getAddress()),
this.type
);
blockchain.setClient(injector.getInstance(Client.class));
}

private void buildUTXOSet() {
Expand Down
35 changes: 17 additions & 18 deletions src/test/java/org/tron/core/BlockchainTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,7 @@

import com.google.protobuf.ByteString;
import com.google.protobuf.InvalidProtocolBufferException;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mockito;
import org.slf4j.Logger;
Expand All @@ -29,26 +28,31 @@
import org.tron.utils.ByteArray;
import org.tron.wallet.Wallet;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import static org.tron.core.Blockchain.dbExists;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
import static org.tron.core.Constant.LAST_HASH;
import static org.tron.utils.ByteArray.toHexString;

public class BlockchainTest {
private static final Logger logger = LoggerFactory.getLogger("Test");
private static Blockchain blockchain;

@BeforeClass
public static void init() {
blockchain = new Blockchain
("0304f784e4e7bae517bcab94c3e0c9214fb4ac7ff9d7d5a937d1f40031f87b85","normal");
}

@AfterClass
public static void teardown() {
blockchain.getBlockDB().closeDB();
private static LevelDbDataSourceImpl mockBlockDB;

@Before
public void setup() throws IOException {
mockBlockDB = Mockito.mock(LevelDbDataSourceImpl.class);
Mockito.when(mockBlockDB.getData(eq(LAST_HASH))).thenReturn(null);
Mockito.when(mockBlockDB.getData(any())).thenReturn(ByteArray.fromString(""));
blockchain = new Blockchain(
mockBlockDB,
"0304f784e4e7bae517bcab94c3e0c9214fb4ac7ff9d7d5a937d1f40031f87b85",
"normal"
);
}

@Test
Expand Down Expand Up @@ -98,11 +102,6 @@ public void testFindTransaction() {
logger.info("{}", TransactionUtils.toPrintString(transaction));
}

@Test
public void testDBExists() {
logger.info("test dbStore exists: {}", dbExists());
}

@Test
public void testFindUTXO() {
long testAmount = 10;
Expand Down

0 comments on commit 1c33b7d

Please sign in to comment.