Skip to content

Commit 34a75eb

Browse files
authored
Merge pull request #491 from tronprotocol/refactor_block_store
Refactor block store
2 parents 0f70ed3 + 71d37fa commit 34a75eb

File tree

10 files changed

+204
-92
lines changed

10 files changed

+204
-92
lines changed

src/main/java/org/tron/common/application/ApplicationImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public class ApplicationImpl implements Application {
3131
private void resetP2PNode() {
3232
p2pNode.listen();
3333
//p2pNode.connectToP2PNetWork();
34-
p2pNode.syncFrom(blockStoreDb.getHeadBlockId());
34+
p2pNode.syncFrom(null);
3535
}
3636

3737
@Override

src/main/java/org/tron/common/utils/Sha256Hash.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
import com.google.common.io.ByteStreams;
2323
import com.google.common.primitives.Ints;
24+
import com.google.common.primitives.Longs;
2425
import com.google.protobuf.ByteString;
2526
import java.io.File;
2627
import java.io.FileInputStream;
@@ -44,6 +45,34 @@ public class Sha256Hash implements Serializable, Comparable<Sha256Hash> {
4445

4546
private final byte[] bytes;
4647

48+
49+
private byte[] generateBlockId(long blockNum, Sha256Hash blockHash) {
50+
byte[] numBytes = Longs.toByteArray(blockNum);
51+
byte[] hash = blockHash.getBytes();
52+
System.arraycopy(numBytes, 0, hash, 0, 8);
53+
return hash;
54+
}
55+
56+
private byte[] generateBlockId(long blockNum, byte[] blockHash) {
57+
byte[] numBytes = Longs.toByteArray(blockNum);
58+
byte[] hash = blockHash;
59+
System.arraycopy(numBytes, 0, hash, 0, 8);
60+
return hash;
61+
}
62+
63+
public Sha256Hash(long num, byte[] hash) {
64+
byte[] rawHashBytes = this.generateBlockId(num, hash);
65+
checkArgument(rawHashBytes.length == LENGTH);
66+
this.bytes = rawHashBytes;
67+
}
68+
69+
public Sha256Hash(long num, Sha256Hash hash) {
70+
byte[] rawHashBytes = this.generateBlockId(num, hash);
71+
checkArgument(rawHashBytes.length == LENGTH);
72+
this.bytes = rawHashBytes;
73+
}
74+
75+
4776
/**
4877
* Use {@link #wrap(byte[])} instead.
4978
*/

src/main/java/org/tron/core/capsule/BlockCapsule.java

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
package org.tron.core.capsule;
1717

18+
import com.google.common.primitives.Longs;
1819
import com.google.protobuf.ByteString;
1920
import com.google.protobuf.InvalidProtocolBufferException;
2021
import java.security.SignatureException;
@@ -42,6 +43,7 @@ public class BlockCapsule implements ProtoCapsule<Block> {
4243

4344
public static class BlockId extends Sha256Hash {
4445

46+
4547
@Override
4648
public boolean equals(Object o) {
4749
if (this == o) {
@@ -87,21 +89,28 @@ public BlockId() {
8789
num = 0;
8890
}
8991

92+
public BlockId(Sha256Hash blockId) {
93+
super(blockId.getBytes());
94+
byte[] blockNum = new byte[8];
95+
System.arraycopy(blockId.getBytes(), 0, blockNum, 0, 8);
96+
num = Longs.fromByteArray(blockNum);
97+
}
98+
9099
/**
91100
* Use {@link #wrap(byte[])} instead.
92101
*/
93102
public BlockId(Sha256Hash hash, long num) {
94-
super(hash.getBytes());
103+
super(num, hash);
95104
this.num = num;
96105
}
97106

98107
public BlockId(byte[] hash, long num) {
99-
super(hash);
108+
super(num, hash);
100109
this.num = num;
101110
}
102111

103112
public BlockId(ByteString hash, long num) {
104-
super(hash.toByteArray());
113+
super(num, hash.toByteArray());
105114
this.num = num;
106115
}
107116

@@ -302,7 +311,8 @@ public String toString() {
302311
toStringBuff.append("hash=").append(getBlockId()).append("\n");
303312
toStringBuff.append("number=").append(getNum()).append("\n");
304313
toStringBuff.append("parentId=").append(getParentHash()).append("\n");
305-
toStringBuff.append("witness address=").append(ByteUtil.toHexString(getWitnessAddress().toByteArray())).append("\n");
314+
toStringBuff.append("witness address=")
315+
.append(ByteUtil.toHexString(getWitnessAddress().toByteArray())).append("\n");
306316

307317
toStringBuff.append("generated by myself=").append(generatedByMyself).append("\n");
308318
toStringBuff.append("generate time=").append(Time.getTimeString(getTimeStamp())).append("\n");
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package org.tron.core.capsule;
2+
3+
public class BlockIdentifierCapsule {
4+
5+
}

src/main/java/org/tron/core/capsule/TransactionCapsule.java

Lines changed: 53 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import java.security.SignatureException;
2929
import java.util.Arrays;
3030
import java.util.List;
31+
import java.util.concurrent.atomic.AtomicInteger;
3132
import lombok.extern.slf4j.Slf4j;
3233
import org.tron.common.crypto.ECKey;
3334
import org.tron.common.crypto.ECKey.ECDSASignature;
@@ -334,8 +335,58 @@ public Transaction getInstance() {
334335
return this.transaction;
335336
}
336337

338+
private StringBuffer toStringBuff = new StringBuffer();
339+
340+
337341
@Override
338342
public String toString() {
339-
return this.transaction.toString();
343+
344+
toStringBuff.setLength(0);
345+
toStringBuff.append("TransactionCapsule \n[ ");
346+
347+
toStringBuff.append("hash=").append(getTransactionId()).append("\n");
348+
AtomicInteger i = new AtomicInteger();
349+
if (!getInstance().getRawData().getContractList().isEmpty()) {
350+
toStringBuff.append("contract list:{ ");
351+
getInstance().getRawData().getContractList().forEach(contract -> {
352+
toStringBuff.append("[" + i + "] ").append("type: ").append(contract.getType())
353+
.append("\n");
354+
toStringBuff.append("from address=").append(getOwner(contract)).append("\n");
355+
toStringBuff.append("to address=").append(getToAddress(contract)).append("\n");
356+
if (contract.getType().equals(ContractType.TransferContract)) {
357+
TransferContract transferContract;
358+
try {
359+
transferContract = contract.getParameter()
360+
.unpack(TransferContract.class);
361+
toStringBuff.append("transfer amount=").append(transferContract.getAmount())
362+
.append("\n");
363+
} catch (InvalidProtocolBufferException e) {
364+
e.printStackTrace();
365+
}
366+
} else if (contract.getType().equals(ContractType.TransferAssetContract)) {
367+
TransferAssetContract transferAssetContract;
368+
try {
369+
transferAssetContract = contract.getParameter()
370+
.unpack(TransferAssetContract.class);
371+
toStringBuff.append("transfer asset=").append(transferAssetContract.getAssetName())
372+
.append("\n");
373+
toStringBuff.append("transfer amount=").append(transferAssetContract.getAmount())
374+
.append("\n");
375+
} catch (InvalidProtocolBufferException e) {
376+
e.printStackTrace();
377+
}
378+
}
379+
if ( this.transaction.getSignatureList().size() >= i.get() + 1) {
380+
toStringBuff.append("sign=").append(getBase64FromByteString(
381+
this.transaction.getSignature(i.getAndIncrement()))).append("\n");
382+
}
383+
});
384+
toStringBuff.append("}\n");
385+
} else {
386+
toStringBuff.append("contract list is empty\n");
387+
}
388+
389+
toStringBuff.append("]");
390+
return toStringBuff.toString();
340391
}
341-
}
392+
}

src/main/java/org/tron/core/db/BlockStore.java

Lines changed: 3 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,9 @@
1919
import java.util.Iterator;
2020
import lombok.extern.slf4j.Slf4j;
2121
import org.apache.commons.lang3.ArrayUtils;
22-
import org.joda.time.DateTime;
23-
import org.joda.time.format.DateTimeFormat;
2422
import org.springframework.beans.factory.annotation.Autowired;
2523
import org.springframework.beans.factory.annotation.Qualifier;
2624
import org.springframework.stereotype.Component;
27-
import org.tron.common.utils.Sha256Hash;
2825
import org.tron.core.capsule.BlockCapsule;
2926
import org.tron.core.db.common.iterator.BlockIterator;
3027
import org.tron.core.exception.BadItemException;
@@ -57,45 +54,20 @@ public void put(byte[] key, BlockCapsule item) {
5754
super.put(key, item);
5855
}
5956

60-
/** create fun. */
57+
/**
58+
* create fun.
59+
*/
6160
public static BlockStore create(String dbName) {
6261
if (instance == null) {
6362
synchronized (BlockStore.class) {
6463
if (instance == null) {
65-
logger.info("adafasdfasdfasdfasdf");
6664
instance = new BlockStore(dbName);
6765
}
6866
}
6967
}
7068
return instance;
7169
}
7270

73-
/** to do. */
74-
public Sha256Hash getHeadBlockId() {
75-
return head == null ? Sha256Hash.ZERO_HASH : head.getBlockId();
76-
}
77-
78-
/** Get the head block's number. */
79-
@Deprecated
80-
public long getHeadBlockNum() {
81-
return head == null ? 0 : head.getNum();
82-
}
83-
84-
@Deprecated
85-
public DateTime getHeadBlockTime() {
86-
return head == null ? getGenesisTime() : new DateTime(head.getTimeStamp());
87-
}
88-
89-
@Deprecated
90-
public long currentASlot() {
91-
return getHeadBlockNum(); // assume no missed slot
92-
}
93-
94-
// genesis_time
95-
public DateTime getGenesisTime() {
96-
return DateTime.parse("20180101", DateTimeFormat.forPattern("yyyyMMdd"));
97-
}
98-
9971
@Override
10072
public BlockCapsule get(byte[] key) throws ItemNotFoundException, BadItemException {
10173
byte[] value = dbSource.getData(key);

0 commit comments

Comments
 (0)