Skip to content

Commit 1240c38

Browse files
Merge branch 'develop' of https://github.com/tronprotocol/java-tron into develop
2 parents 07b6c79 + feee8dd commit 1240c38

File tree

6 files changed

+51
-61
lines changed

6 files changed

+51
-61
lines changed

build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ buildscript {
2323

2424
dependencies {
2525
testCompile group: 'junit', name: 'junit', version: '4.12'
26+
testCompile group: 'org.mockito', name: 'mockito-all', version: '1.9.5'
2627

2728
compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.25'
2829
compile group: 'org.slf4j', name: 'jcl-over-slf4j', version: '1.7.25'

src/main/java/org/tron/core/BlockUtils.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import java.text.DateFormat;
3131
import java.text.SimpleDateFormat;
3232
import java.util.List;
33+
import java.util.Optional;
3334

3435
import static org.tron.core.Constant.LAST_HASH;
3536
import static org.tron.crypto.Hash.sha3;
@@ -49,8 +50,10 @@ public static Block newBlock(List<Transaction> transactions, ByteString
4950
Block.Builder block = Block.newBuilder();
5051

5152
for (int i = 0; transactions != null && i < transactions.size(); i++) {
52-
Transaction transaction = transactions.get(i);
53-
block.addTransactions(i, transaction);
53+
final int index = i;
54+
Optional.ofNullable(transactions.get(index)).ifPresent((transaction) ->
55+
block.addTransactions(index, transaction)
56+
);
5457
}
5558

5659
//Chain programming

src/main/java/org/tron/core/Blockchain.java

Lines changed: 20 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -64,48 +64,34 @@ public class Blockchain {
6464
*/
6565
public Blockchain(String address) {
6666
if (dbExists()) {
67-
logger.info("blockchain already exists.");
68-
System.exit(0);
69-
}
67+
blockDB = new LevelDbDataSourceImpl(BLOCK_DB_NAME);
68+
blockDB.initDB();
7069

71-
blockDB = new LevelDbDataSourceImpl(BLOCK_DB_NAME);
72-
blockDB.initDB();
70+
this.lastHash = blockDB.getData(LAST_HASH);
71+
this.currentHash = this.lastHash;
7372

74-
Transaction coinbase = TransactionUtils.newCoinbaseTransaction
75-
(address, GENESIS_COINBASE_DATA);
76-
Block genesisBlock = BlockUtils.newGenesisBlock(coinbase);
73+
logger.info("load blockchain");
74+
} else {
75+
blockDB = new LevelDbDataSourceImpl(BLOCK_DB_NAME);
76+
blockDB.initDB();
7777

78-
this.lastHash = genesisBlock.getBlockHeader().getHash().toByteArray();
79-
this.currentHash = this.lastHash;
78+
Transaction coinbase = TransactionUtils.newCoinbaseTransaction
79+
(address, GENESIS_COINBASE_DATA);
80+
Block genesisBlock = BlockUtils.newGenesisBlock(coinbase);
8081

81-
blockDB.putData(genesisBlock.getBlockHeader().getHash().toByteArray(),
82-
genesisBlock.toByteArray());
83-
byte[] lastHash = genesisBlock.getBlockHeader()
84-
.getHash()
85-
.toByteArray();
82+
this.lastHash = genesisBlock.getBlockHeader().getHash().toByteArray();
83+
this.currentHash = this.lastHash;
8684

87-
blockDB.putData(LAST_HASH, lastHash);
85+
blockDB.putData(genesisBlock.getBlockHeader().getHash().toByteArray(),
86+
genesisBlock.toByteArray());
87+
byte[] lastHash = genesisBlock.getBlockHeader()
88+
.getHash()
89+
.toByteArray();
8890

89-
logger.info("new blockchain");
90-
}
91+
blockDB.putData(LAST_HASH, lastHash);
9192

92-
/**
93-
* create blockchain by dbStore source
94-
*/
95-
public Blockchain() {
96-
if (!dbExists()) {
97-
logger.info("no existing blockchain found. please create one " +
98-
"first");
99-
System.exit(0);
93+
logger.info("new blockchain");
10094
}
101-
102-
blockDB = new LevelDbDataSourceImpl(BLOCK_DB_NAME);
103-
blockDB.initDB();
104-
105-
this.lastHash = blockDB.getData(LAST_HASH);
106-
this.currentHash = this.lastHash;
107-
108-
logger.info("load blockchain");
10995
}
11096

11197
/**

src/main/java/org/tron/peer/Peer.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -106,11 +106,7 @@ private void initWallet() {
106106
}
107107

108108
private void initBlockchain() {
109-
if (Blockchain.dbExists()) {
110-
blockchain = new Blockchain();
111-
} else {
112-
blockchain = new Blockchain(ByteArray.toHexString(wallet.getAddress()));
113-
}
109+
blockchain = new Blockchain(ByteArray.toHexString(wallet.getAddress()));
114110
}
115111

116112
private void initUTXOSet() {

src/test/java/org/tron/core/BlockUtilsTest.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,12 @@
1616

1717
import com.google.protobuf.ByteString;
1818
import org.junit.Test;
19+
import org.mockito.Mockito;
1920
import org.slf4j.Logger;
2021
import org.slf4j.LoggerFactory;
2122
import org.tron.protos.core.TronBlock.Block;
2223
import org.tron.protos.core.TronTransaction.Transaction;
24+
import org.tron.storage.leveldb.LevelDbDataSourceImpl;
2325
import org.tron.utils.ByteArray;
2426

2527
import static org.tron.core.Blockchain.GENESIS_COINBASE_DATA;
@@ -97,7 +99,12 @@ public void testGetPowBoundary() {
9799

98100
@Test
99101
public void testGetIncreaseNumber() {
102+
LevelDbDataSourceImpl mockDb = Mockito.mock(LevelDbDataSourceImpl.class);
103+
104+
Blockchain mockBlockchain = Mockito.mock(Blockchain.class);
105+
Mockito.when(mockBlockchain.getBlockDB()).thenReturn(mockDb);
106+
100107
logger.info("test getData increase number: {}", BlockUtils
101-
.getIncreaseNumber(new Blockchain()));
108+
.getIncreaseNumber(mockBlockchain));
102109
}
103110
}

src/test/java/org/tron/core/BlockchainTest.java

Lines changed: 16 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,15 @@
1616

1717
import com.google.protobuf.ByteString;
1818
import com.google.protobuf.InvalidProtocolBufferException;
19+
import org.junit.AfterClass;
20+
import org.junit.BeforeClass;
1921
import org.junit.Test;
2022
import org.slf4j.Logger;
2123
import org.slf4j.LoggerFactory;
22-
import org.tron.storage.leveldb.LevelDbDataSourceImpl;
2324
import org.tron.protos.core.TronBlock.Block;
2425
import org.tron.protos.core.TronTXOutputs;
2526
import org.tron.protos.core.TronTransaction.Transaction;
27+
import org.tron.storage.leveldb.LevelDbDataSourceImpl;
2628
import org.tron.utils.ByteArray;
2729
import org.tron.wallet.Wallet;
2830

@@ -36,21 +38,27 @@
3638

3739
public class BlockchainTest {
3840
private static final Logger logger = LoggerFactory.getLogger("Test");
41+
private static Blockchain blockchain;
42+
43+
@BeforeClass
44+
public static void init() {
45+
blockchain = new Blockchain("0304f784e4e7bae517bcab94c3e0c9214fb4ac7ff9d7d5a937d1f40031f87b85");
46+
}
47+
48+
@AfterClass
49+
public static void teardown() {
50+
blockchain.getBlockDB().closeDB();
51+
}
3952

4053
@Test
4154
public void testBlockchain() {
42-
Blockchain blockchain = new Blockchain
43-
("0304f784e4e7bae517bcab94c3e0c9214fb4ac7ff9d7d5a937d1f40031f87b85");
44-
4555
logger.info("test blockchain: lashHash = {}, currentHash = {}",
4656
ByteArray.toHexString(blockchain.getLastHash()), ByteArray
4757
.toHexString(blockchain.getCurrentHash()));
4858
}
4959

5060
@Test
5161
public void testBlockchainNew() {
52-
Blockchain blockchain = new Blockchain();
53-
5462
logger.info("test blockchain new: lastHash = {}", ByteArray
5563
.toHexString(blockchain.getLastHash()));
5664

@@ -70,7 +78,6 @@ public void testBlockchainNew() {
7078

7179
@Test
7280
public void testIterator() {
73-
Blockchain blockchain = new Blockchain("");
7481
Block info = null;
7582
BlockchainIterator bi = new BlockchainIterator(blockchain);
7683
while (bi.hasNext()) {
@@ -84,10 +91,6 @@ public void testIterator() {
8491

8592
@Test
8693
public void testFindTransaction() {
87-
Blockchain blockchain = new Blockchain();
88-
LevelDbDataSourceImpl db = new LevelDbDataSourceImpl("test");
89-
db.initDB();
90-
blockchain.setBlockDB(db);
9194
Transaction transaction = blockchain.findTransaction(ByteString
9295
.copyFrom(ByteArray.fromHexString
9396
("15f3988aa8d56eab3bfca45144bad77fc60acce50437a0a9d794a03a83c15c5e")));
@@ -101,12 +104,11 @@ public void testDBExists() {
101104

102105
@Test
103106
public void testFindUTXO() {
104-
Blockchain blockchain = new Blockchain
105-
("fd0f3c8ab4877f0fd96cd156b0ad42ea7aa82c31");
106107
Wallet wallet = new Wallet();
107108
wallet.init();
109+
UTXOSet utxoSet = new UTXOSet();
108110
Transaction transaction = TransactionUtils.newTransaction(wallet,
109-
"fd0f3c8ab4877f0fd96cd156b0ad42ea7aa82c31", 10, null);
111+
"fd0f3c8ab4877f0fd96cd156b0ad42ea7aa82c31", 10, utxoSet);
110112
List<Transaction> transactions = new ArrayList<>();
111113
transactions.add(transaction);
112114
blockchain.addBlock(BlockUtils.newBlock(transactions, ByteString
@@ -122,14 +124,11 @@ public void testAddBlockToChain() {
122124
ByteString difficulty = ByteString.copyFrom(ByteArray.fromHexString
123125
("2001"));
124126

125-
//Blockchain blockchain = new Blockchain();
126127
Wallet wallet = new Wallet();
127128
wallet.init();
128129

129130
Block block = BlockUtils.newBlock(null, parentHash,
130131
difficulty, 0);
131-
//TronBlockChainImpl tronBlockChain = new TronBlockChainImpl();
132-
//tronBlockChain.addBlockToChain(block);
133132
LevelDbDataSourceImpl levelDbDataSource = new LevelDbDataSourceImpl
134133
("blockStore_test");
135134
levelDbDataSource.initDB();
@@ -139,8 +138,6 @@ public void testAddBlockToChain() {
139138
byte[] values = value.getBytes();
140139
levelDbDataSource.putData(key, values);
141140

142-
Blockchain blockchain = new Blockchain();
143141
blockchain.addBlock(block);
144-
145142
}
146143
}

0 commit comments

Comments
 (0)