Skip to content

Commit d3eb573

Browse files
committed
consensus add to framwork
1 parent 9406f8e commit d3eb573

51 files changed

Lines changed: 512 additions & 1556 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

consensus/src/main/java/org/tron/consensus/Consensus.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,14 @@ public void start(Param param) {
2323
}
2424

2525
public void stop() {
26+
consensusInterface = dposService;
2627
consensusInterface.stop();
2728
}
2829

30+
public void receiveBlock(Block block){
31+
consensusInterface.receiveBlock(block);
32+
}
33+
2934
public boolean validBlock(Block block){
3035
return consensusInterface.validBlock(block);
3136
}

consensus/src/main/java/org/tron/consensus/ConsensusDelegate.java

Lines changed: 2 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -92,26 +92,14 @@ public void saveStateFlag(int flag) {
9292
dynamicPropertiesStore.saveStateFlag(flag);
9393
}
9494

95-
public int saveStateFlag() {
96-
return dynamicPropertiesStore.getStateFlag();
97-
}
98-
99-
public long getMaintenanceTimeInterval() {
100-
return dynamicPropertiesStore.getMaintenanceTimeInterval();
101-
}
102-
103-
public void saveMaintenanceTimeInterval(long time) {
104-
dynamicPropertiesStore.saveMaintenanceTimeInterval(time);
95+
public void updateNextMaintenanceTimes(long time) {
96+
dynamicPropertiesStore.updateNextMaintenanceTime(time);
10597
}
10698

10799
public long getNextMaintenanceTime() {
108100
return dynamicPropertiesStore.getNextMaintenanceTime();
109101
}
110102

111-
public void saveNextMaintenanceTime(long time) {
112-
dynamicPropertiesStore.saveNextMaintenanceTime(time);
113-
}
114-
115103
public long getWitnessPayPerBlock() {
116104
return dynamicPropertiesStore.getWitnessPayPerBlock();
117105
}
@@ -140,10 +128,6 @@ public void saveBlockFilledSlotsIndex(int index) {
140128
dynamicPropertiesStore.saveBlockFilledSlotsIndex(index);
141129
}
142130

143-
public int getBlockFilledSlotsNumber() {
144-
return dynamicPropertiesStore.getBlockFilledSlotsNumber();
145-
}
146-
147131
public Sha256Hash getLatestBlockHeaderHash() {
148132
return dynamicPropertiesStore.getLatestBlockHeaderHash();
149133
}

consensus/src/main/java/org/tron/consensus/base/BlockHandle.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,14 @@
22
package org.tron.consensus.base;
33

44
import org.tron.protos.Protocol.Block;
5-
import org.tron.protos.Protocol.BlockHeader;
65

76
public interface BlockHandle {
87

98
State getState();
109

1110
Object getLock();
1211

13-
Block produce();
12+
Block produce(long timeout);
1413

1514
void complete(Block block);
1615

consensus/src/main/java/org/tron/consensus/base/ConsensusInterface.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ public interface ConsensusInterface {
88

99
void stop();
1010

11+
void receiveBlock(Block block);
12+
1113
boolean validBlock(Block block);
1214

1315
boolean applyBlock(Block block);

consensus/src/main/java/org/tron/consensus/base/Constant.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ public class Constant {
1212

1313
public static final int BLOCK_FILLED_SLOTS_NUMBER = 128;
1414

15+
public static final int BLOCK_PRODUCE_TIMEOUT_PERCENT = 50;
16+
1517
public static final int SINGLE_REPEAT = 1;
1618

1719
}

consensus/src/main/java/org/tron/consensus/base/Param.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,11 @@ public class Miner {
3838
@Getter
3939
@Setter
4040
private ByteString witnessAddress;
41-
}
4241

42+
public Miner(byte[] privateKey, ByteString privateKeyAddress, ByteString witnessAddress) {
43+
this.privateKey = privateKey;
44+
this.privateKeyAddress = privateKeyAddress;
45+
this.witnessAddress = witnessAddress;
46+
}
47+
}
4348
}

consensus/src/main/java/org/tron/consensus/base/State.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@ public enum State {
55
NOT_SYNCED,
66
DUP_WITNESS,
77
CLOCK_ERROR,
8-
SLAVE_STATUS,
98
NOT_MY_TURN,
109
NOT_TIME_YET,
1110
PERMISSION_ERROR,
1211
LOW_PARTICIPATION,
1312
PRODUCE_BLOCK_FAILED,
13+
BACKUP_IS_NOT_MASTER,
1414
OTHER
1515
}

consensus/src/main/java/org/tron/consensus/dpos/DposService.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
import java.util.HashMap;
1010
import java.util.List;
1111
import java.util.Map;
12-
import java.util.Set;
1312
import java.util.stream.Collectors;
1413
import lombok.Getter;
1514
import lombok.Setter;
@@ -79,6 +78,7 @@ public void start(Param param) {
7978
param.getMiners().forEach(miner -> miners.put(miner.getWitnessAddress(), miner));
8079

8180
dposTask.setDposService(this);
81+
dposSlot.setDposService(this);
8282
stateManager.setDposService(this);
8383
maintenanceManager.setDposService(this);
8484

@@ -99,6 +99,11 @@ public void stop() {
9999
dposTask.stop();
100100
}
101101

102+
@Override
103+
public void receiveBlock(Block block){
104+
stateManager.receiveBlock(block);
105+
}
106+
102107
@Override
103108
public boolean validBlock(Block block) {
104109
if (consensusDelegate.getLatestBlockHeaderNumber() == 0) {
@@ -122,12 +127,12 @@ public boolean validBlock(Block block) {
122127
ByteArray.toHexString(witnessAddress.toByteArray()), new DateTime(timeStamp), slot);
123128
return false;
124129
}
130+
125131
return true;
126132
}
127133

128134
@Override
129135
public boolean applyBlock(Block block) {
130-
stateManager.applyBlock(block);
131136
statisticManager.applyBlock(block);
132137
incentiveManager.applyBlock(block);
133138
maintenanceManager.applyBlock(block);
@@ -146,7 +151,7 @@ private void updateSolidBlock() {
146151
long newSolidNum = numbers.get(position);
147152
long oldSolidNum = consensusDelegate.getLatestSolidifiedBlockNum();
148153
if (newSolidNum < oldSolidNum) {
149-
logger.warn("Update solid block number failed, new:{} < old:{}", newSolidNum, newSolidNum);
154+
logger.warn("Update solid block number failed, new:{} < old:{}", newSolidNum, oldSolidNum);
150155
return;
151156
}
152157
consensusDelegate.saveLatestSolidifiedBlockNum(newSolidNum);

consensus/src/main/java/org/tron/consensus/dpos/DposSlot.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import static org.tron.consensus.base.Constant.SINGLE_REPEAT;
66

77
import com.google.protobuf.ByteString;
8+
import lombok.Setter;
89
import lombok.extern.slf4j.Slf4j;
910
import org.springframework.beans.factory.annotation.Autowired;
1011
import org.springframework.stereotype.Component;
@@ -17,7 +18,7 @@ public class DposSlot {
1718
@Autowired
1819
private ConsensusDelegate consensusDelegate;
1920

20-
@Autowired
21+
@Setter
2122
private DposService dposService;
2223

2324
public long getAbSlot(long time) {

consensus/src/main/java/org/tron/consensus/dpos/DposTask.java

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package org.tron.consensus.dpos;
22

33
import static org.tron.consensus.base.Constant.BLOCK_PRODUCED_INTERVAL;
4+
import static org.tron.consensus.base.Constant.BLOCK_PRODUCE_TIMEOUT_PERCENT;
45

56
import com.google.protobuf.ByteString;
6-
import java.util.Arrays;
77
import lombok.Setter;
88
import lombok.extern.slf4j.Slf4j;
99
import org.joda.time.DateTime;
@@ -15,9 +15,7 @@
1515
import org.tron.common.utils.ByteArray;
1616
import org.tron.common.utils.Sha256Hash;
1717
import org.tron.consensus.ConsensusDelegate;
18-
import org.tron.consensus.base.Param.Miner;
1918
import org.tron.consensus.base.State;
20-
import org.tron.core.capsule.AccountCapsule;
2119
import org.tron.protos.Protocol.Block;
2220
import org.tron.protos.Protocol.BlockHeader;
2321

@@ -43,10 +41,11 @@ public class DposTask {
4341

4442
public void init() {
4543

44+
if (!dposService.isEnable() || StringUtils.isEmpty(dposService.getMiners())) {
45+
return;
46+
}
47+
4648
Runnable runnable = () -> {
47-
if (!dposService.isEnable() || StringUtils.isEmpty(dposService.getMiners())) {
48-
return;
49-
}
5049
while (isRunning) {
5150
try {
5251
if (dposService.isNeedSyncCheck()) {
@@ -73,7 +72,9 @@ public void init() {
7372

7473
public void stop() {
7574
isRunning = false;
76-
produceThread.interrupt();
75+
if (produceThread != null) {
76+
produceThread.interrupt();
77+
}
7778
logger.info("DPoS service stopped.");
7879
}
7980

@@ -91,18 +92,20 @@ private State produceBlock() {
9192
return State.NOT_TIME_YET;
9293
}
9394

94-
final ByteString scheduledWitness = dposSlot.getScheduledWitness(slot);
95-
state = stateManager.getState(scheduledWitness);
95+
ByteString pWitness = dposSlot.getScheduledWitness(slot);
96+
state = stateManager.getState(pWitness);
9697
if (!State.OK.equals(state)) {
9798
return state;
9899
}
99100

100-
Block block = dposService.getBlockHandle().produce();
101+
long pTime = dposSlot.getTime(slot);
102+
long timeout = pTime + BLOCK_PRODUCED_INTERVAL / 2 * BLOCK_PRODUCE_TIMEOUT_PERCENT / 100;
103+
Block block = dposService.getBlockHandle().produce(timeout);
101104
if (block == null) {
102105
return State.PRODUCE_BLOCK_FAILED;
103106
}
104107

105-
Block sBlock = getSignedBlock(block, scheduledWitness, slot);
108+
Block sBlock = getSignedBlock(block, pWitness, pTime);
106109

107110
stateManager.setCurrentBlock(sBlock);
108111

@@ -120,11 +123,11 @@ private State produceBlock() {
120123
return State.OK;
121124
}
122125

123-
public Block getSignedBlock(Block block, ByteString witness, long slot) {
126+
public Block getSignedBlock(Block block, ByteString witness, long time) {
124127
BlockHeader.raw raw = block.getBlockHeader().getRawData().toBuilder()
125128
.setParentHash(ByteString.copyFrom(consensusDelegate.getLatestBlockHeaderHash().getBytes()))
126129
.setNumber(consensusDelegate.getLatestBlockHeaderNumber() + 1)
127-
.setTimestamp(dposSlot.getTime(slot))
130+
.setTimestamp(time)
128131
.setWitnessAddress(witness)
129132
.build();
130133

0 commit comments

Comments
 (0)