Skip to content
Merged
Show file tree
Hide file tree
Changes from 165 commits
Commits
Show all changes
179 commits
Select commit Hold shift + click to select a range
a880635
state_sync server init
gokutheengineer Jan 6, 2023
affc3a1
feat: state_sync and consensus interaction init
gokutheengineer Jan 6, 2023
ee550a5
state sync server initial placeholder for HandleStateSyncMetadataRequest
gokutheengineer Jan 6, 2023
5472099
state_sync (consensus): update how to send placeholder function
gokutheengineer Jan 6, 2023
4347ee1
refactor: clean extra lines
gokutheengineer Jan 8, 2023
7ef1579
refactor: proper proto definition for enum
gokutheengineer Jan 8, 2023
de5c9d6
refactor: remove IsServerModEnabled function from consensus module
gokutheengineer Jan 8, 2023
94d1c82
init sendToPeer and handleStateSyncMetaDataRequest functions
gokutheengineer Jan 9, 2023
a2f1bec
initial get block implementation
gokutheengineer Jan 9, 2023
35e9f6b
consensus WIP: update test utils for state sync tests
gokutheengineer Jan 10, 2023
1397f88
consensus WIP: testing
gokutheengineer Jan 11, 2023
606fdb5
consensus (refactor): new shared interface of consensus for pacemaker
gokutheengineer Jan 3, 2023
91b8b32
refactor (consensus): WIP, seperate interfaces, remove consensusMod f…
gokutheengineer Jan 4, 2023
7ffd4fe
refactor (consensus): create pacemaker submodule
gokutheengineer Jan 4, 2023
a82f0a9
refactor (consensus): clean some comments
gokutheengineer Jan 4, 2023
467c81e
consensus (refactor): WIP cleanup
gokutheengineer Jan 5, 2023
8339d95
refactor (consensus): WIP more cleanup
gokutheengineer Jan 5, 2023
e68b9ac
consensus (refactor): address remaining comments on PR
gokutheengineer Jan 5, 2023
8411b85
rafactor: remove unused function
gokutheengineer Jan 7, 2023
5c9e28c
refactor: address PR comments
gokutheengineer Jan 7, 2023
4ab88d2
Update shared/modules/consensus_module.go
gokutheengineer Jan 7, 2023
db8350d
Update shared/modules/consensus_module.go
gokutheengineer Jan 7, 2023
b803a38
Update consensus/pacemaker_consensus.go
gokutheengineer Jan 7, 2023
f6e81d9
Update shared/modules/consensus_module.go
gokutheengineer Jan 7, 2023
d3d479c
refactor (consensus): return error in GetPrepareQC
gokutheengineer Jan 7, 2023
e1a454c
Update shared/modules/consensus_module.go
gokutheengineer Jan 10, 2023
5795d08
initial rebased version, WIP
gokutheengineer Jan 11, 2023
1a4a682
refactor (consensus): clean and add some comments
gokutheengineer Jan 12, 2023
b05a7b5
WIP: clean some comments, start updating CHANGELOG
gokutheengineer Jan 12, 2023
c57197e
clean few comments, update CHANGELOGS, remove incomplete byzantine te…
gokutheengineer Jan 13, 2023
193786c
Update consensus/pacemaker/pacemaker.go
gokutheengineer Jan 14, 2023
3e518f0
Update consensus/doc/CHANGELOG.md
gokutheengineer Jan 14, 2023
cc8705f
clean, address comments
gokutheengineer Jan 14, 2023
ad80249
move pacemaker
gokutheengineer Jan 15, 2023
01f2efd
refactor: bring back pacemaker impl
gokutheengineer Jan 15, 2023
1949251
merge with issue/395
gokutheengineer Jan 15, 2023
1e0f143
rename state_sync module.go
gokutheengineer Jan 15, 2023
bd603a1
fix comments
gokutheengineer Jan 16, 2023
59e1ac7
remove pacemaker
gokutheengineer Jan 16, 2023
760ce07
add updated pacemaker
gokutheengineer Jan 16, 2023
bfed5c1
Bring back old pacemaker
Olshansk Jan 16, 2023
fc1bcfb
Move file
Olshansk Jan 16, 2023
aacef7e
Apply changes
Olshansk Jan 16, 2023
e49daf3
WIP: structre test for state sync
gokutheengineer Jan 16, 2023
907f5df
refactor: remove shouldHandleHotstuffMessage
gokutheengineer Jan 17, 2023
1887c02
Update consensus/module.go
gokutheengineer Jan 17, 2023
3351d9b
refactor: update prepareQC
gokutheengineer Jan 17, 2023
38798ee
refactor: address comments
gokutheengineer Jan 17, 2023
cfece55
Update consensus/pacemaker/pacemaker.go
gokutheengineer Jan 17, 2023
8e0b9a9
fix comment
gokutheengineer Jan 17, 2023
dbf3775
merge
gokutheengineer Jan 17, 2023
cd9c74e
update changelog in consensus
gokutheengineer Jan 17, 2023
81fa9e2
fix
gokutheengineer Jan 17, 2023
d5f8c87
fix round assertion
gokutheengineer Jan 17, 2023
3386f18
WIP able to receive req in server node
gokutheengineer Jan 18, 2023
509ce2e
fix leader id issue
gokutheengineer Jan 18, 2023
d038950
fix localnet issue
gokutheengineer Jan 19, 2023
398ba44
refactor: add comments, fix
gokutheengineer Jan 19, 2023
9b5c396
Merge branch 'main' into issue/395-decouple-consensus-and-pacemaker
gokutheengineer Jan 19, 2023
6c9ba7e
Revert "Merge branch 'main' into issue/395-decouple-consensus-and-pac…
gokutheengineer Jan 19, 2023
92e9a8d
update changelogs
gokutheengineer Jan 19, 2023
bfe8adc
update changelog of persistance
gokutheengineer Jan 19, 2023
536a588
feat: server test passes
gokutheengineer Jan 20, 2023
cd03619
testing: add max height test statement
gokutheengineer Jan 20, 2023
988aad1
merge: recent main
gokutheengineer Jan 20, 2023
205fd45
fix changelog date
gokutheengineer Jan 20, 2023
5c8f1c5
checkout makefile from master branch
gokutheengineer Jan 21, 2023
244cd66
add block.proto
gokutheengineer Jan 21, 2023
82ef4d8
add consensus state_sync.proto
gokutheengineer Jan 21, 2023
405b231
rm persistance block_persistance.proto
gokutheengineer Jan 21, 2023
fbfb238
update block type
gokutheengineer Jan 21, 2023
ef38cbe
update CHANGELOGs
gokutheengineer Jan 21, 2023
4d5d8d7
fix hotstuff_leader
gokutheengineer Jan 21, 2023
5bb8f14
fix hotstuff_replica
gokutheengineer Jan 21, 2023
6b95583
fix messages
gokutheengineer Jan 21, 2023
06a4cf5
fix state_sync module
gokutheengineer Jan 21, 2023
5061efe
remove extra comment line added by viscose
gokutheengineer Jan 21, 2023
1e727b2
fix changes of vscode
gokutheengineer Jan 21, 2023
ef7bf90
fix pacemaker test
gokutheengineer Jan 21, 2023
89b226e
fix persistance state test
gokutheengineer Jan 21, 2023
b1bcad0
add persistance files
gokutheengineer Jan 21, 2023
f8a12a3
merge main
gokutheengineer Jan 21, 2023
18632fb
add learning doc
gokutheengineer Jan 21, 2023
e96561d
udpate outdated file
gokutheengineer Jan 21, 2023
e49b2e2
udpate changelog date
gokutheengineer Jan 21, 2023
75f24b6
remove extra space
gokutheengineer Jan 21, 2023
78b57db
Merge branch 'issue/395-decouple-consensus-and-pacemaker' into issue/…
gokutheengineer Jan 23, 2023
bb1cdd0
merge with pacemaker changes
gokutheengineer Jan 23, 2023
5bd473e
WIP refactor, update tests, failing
gokutheengineer Jan 23, 2023
3bae0e6
udpate mocks
gokutheengineer Jan 24, 2023
cf03187
test: update tests, getblock is not passing yet
gokutheengineer Jan 24, 2023
1747674
clean debug comments
gokutheengineer Jan 24, 2023
21ee701
add TODOs
gokutheengineer Jan 24, 2023
fd74b98
add mock folder
gokutheengineer Jan 25, 2023
5ce1e6a
fix
gokutheengineer Jan 25, 2023
d39c4eb
Mock KV store to avoid nil blocks
Olshansk Jan 25, 2023
1d3fe8e
merge with main
gokutheengineer Jan 26, 2023
8d1512c
clean kvstore, mocks in persistence
gokutheengineer Jan 26, 2023
98fa477
clean Makefile
gokutheengineer Jan 26, 2023
06043a7
update getblockresponse, state sync tests are barely passting
gokutheengineer Jan 26, 2023
cf9d8b8
Revert "clean Makefile"
gokutheengineer Jan 26, 2023
7a51e96
Revert "clean kvstore, mocks in persistence"
gokutheengineer Jan 26, 2023
80e251c
consensus: refactor comments, tests
gokutheengineer Jan 26, 2023
5d8268a
update tests
gokutheengineer Jan 26, 2023
b366b77
refactor: clean code
gokutheengineer Jan 27, 2023
e6d52a7
refactor: clean some nits
gokutheengineer Jan 27, 2023
35b7e4b
clean state_sync test
gokutheengineer Jan 27, 2023
b4be181
refactor: more cleaning
gokutheengineer Jan 27, 2023
7ef66d4
small nits
gokutheengineer Jan 27, 2023
d26035f
Merge branch 'main' into issue/409-state-sync-server-to-advertise-blocks
gokutheengineer Jan 27, 2023
1ebf348
update changelogs
gokutheengineer Jan 27, 2023
3871218
fix some nits
gokutheengineer Jan 29, 2023
84d9dbd
fix nits
gokutheengineer Jan 30, 2023
3bd5e82
merge main
gokutheengineer Jan 30, 2023
acaf06c
update changeleg, fix nits, add comments
gokutheengineer Jan 30, 2023
f8b1305
update state sync initial status
gokutheengineer Jan 30, 2023
9100626
Update consensus/doc/CHANGELOG.md
gokutheengineer Jan 31, 2023
4c1d708
Update consensus/doc/CHANGELOG.md
gokutheengineer Jan 31, 2023
9635c25
Update persistence/docs/CHANGELOG.md
gokutheengineer Jan 31, 2023
2dc5306
Update consensus/module.go
gokutheengineer Jan 31, 2023
51ebc6b
Update consensus/doc/CHANGELOG.md
gokutheengineer Jan 31, 2023
1d62977
Update consensus/types/errors.go
gokutheengineer Jan 31, 2023
cc853ac
Update consensus/module.go
gokutheengineer Jan 31, 2023
1e2aaef
Update shared/modules/consensus_module.go
gokutheengineer Jan 31, 2023
0e96a8c
Update consensus/state_sync/helpers.go
gokutheengineer Jan 31, 2023
cd4ee45
Update consensus/module.go
gokutheengineer Jan 31, 2023
9cdb7e1
Update consensus/state_sync_handler.go
gokutheengineer Jan 31, 2023
1c61593
Update consensus/state_sync/server.go
gokutheengineer Jan 31, 2023
1d1887c
Update consensus/state_sync/server.go
gokutheengineer Jan 31, 2023
d20c8db
Update consensus/state_sync_handler.go
gokutheengineer Jan 31, 2023
610c016
Update consensus/state_sync_handler.go
gokutheengineer Jan 31, 2023
12923e2
Merge branch 'main' into issue/409-state-sync-server-to-advertise-blocks
gokutheengineer Jan 31, 2023
0adacea
unify height functions, fix comments
gokutheengineer Jan 31, 2023
3216b20
address comments
gokutheengineer Feb 1, 2023
c4dcacf
update state sync error message
gokutheengineer Feb 1, 2023
8d4fdb2
fix comments remove persistence/mocks.go
gokutheengineer Feb 1, 2023
1f8c156
remove msgtype from state sync message
gokutheengineer Feb 1, 2023
445a3bc
udpate app to handle getblock and get metadata functions
gokutheengineer Feb 3, 2023
cc5a6aa
update consensus
gokutheengineer Feb 3, 2023
c67b21d
update shared module
gokutheengineer Feb 3, 2023
098897a
update persistence module
gokutheengineer Feb 3, 2023
ab13bc4
fix test
gokutheengineer Feb 3, 2023
3299c43
updates to make debug client work
gokutheengineer Feb 3, 2023
0a008f2
Update consensus/debugging.go
gokutheengineer Feb 4, 2023
2a8c242
Update shared/converters/util.go
gokutheengineer Feb 4, 2023
c114bb8
Update consensus/e2e_tests/state_sync_test.go
gokutheengineer Feb 4, 2023
b33d858
update makefile
gokutheengineer Feb 5, 2023
19c1367
update configs
gokutheengineer Feb 5, 2023
3bde322
update config test and reading
gokutheengineer Feb 5, 2023
cae5bf0
address comments
gokutheengineer Feb 5, 2023
360ac54
merge with main
gokutheengineer Feb 5, 2023
ab00896
update changelogs, nit on ,akefile
gokutheengineer Feb 5, 2023
4bea633
refactor
gokutheengineer Feb 5, 2023
94aea17
update logging
gokutheengineer Feb 6, 2023
417965f
update changelogs
gokutheengineer Feb 6, 2023
a0cd270
add persistence mock generation
gokutheengineer Feb 6, 2023
94581fd
fix makefile
gokutheengineer Feb 6, 2023
1c6ad13
fix nit
gokutheengineer Feb 6, 2023
911ef8e
Merge branch 'main' into issue/409-state-sync-server-to-advertise-blocks
gokutheengineer Feb 7, 2023
4fb8763
merge with main
gokutheengineer Feb 7, 2023
4ba153b
put mocks placholder file for dynamically generated mocks
gokutheengineer Feb 7, 2023
05fb40c
fix some nits
gokutheengineer Feb 7, 2023
d9c41b7
Merge branch 'main' into issue/409-state-sync-server-to-advertise-blocks
gokutheengineer Feb 7, 2023
c87e263
address golint errors
gokutheengineer Feb 7, 2023
a8eb52d
update makefile
gokutheengineer Feb 7, 2023
064942e
merge with main
gokutheengineer Feb 8, 2023
feac475
update changelog dates
gokutheengineer Feb 8, 2023
d773aef
Update consensus/types/proto/state_sync.proto
gokutheengineer Feb 9, 2023
b6ecff5
Update consensus/state_sync/module.go
gokutheengineer Feb 9, 2023
3a797e4
Update shared/messaging/proto/debug_message.proto
gokutheengineer Feb 9, 2023
e984ae1
Update app/client/doc/CHANGELOG.md
gokutheengineer Feb 9, 2023
51f1833
Update build/docs/CHANGELOG.md
gokutheengineer Feb 9, 2023
3511a46
Update shared/modules/consensus_module.go
gokutheengineer Feb 9, 2023
a304534
Update consensus/state_sync/module.go
gokutheengineer Feb 9, 2023
ad0acc5
address pr comments
gokutheengineer Feb 9, 2023
86efb2e
merge with remote changes
gokutheengineer Feb 9, 2023
e4fe037
update changelog dates
gokutheengineer Feb 9, 2023
92e9c44
Update consensus/pacemaker/module.go
gokutheengineer Feb 9, 2023
fb2e70d
Update consensus/types/proto/state_sync.proto
gokutheengineer Feb 9, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,14 @@ prototype/vendor/
# Generated Mocks (for testing)
shared/modules/mocks/*
!shared/modules/mocks/mocks.go

p2p/types/mocks/*
!p2p/types/mocks/mocks.go

persistence/types/mocks/*
!persistence/types/mocks/mocks.go


# TODO(team): Does the `types` directory contain generated or raw type files?
# types/

Expand Down
16 changes: 9 additions & 7 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -222,13 +222,15 @@ mockgen: clean_mocks ## Use `mockgen` to generate mocks used for testing purpose
$(eval modules_dir = "shared/modules")
go generate ./${modules_dir}
echo "Mocks generated in ${modules_dir}/mocks"

$(eval p2p_dir = "p2p")
$(eval p2p_type_mocks_dir = "p2p/types/mocks")
find ${p2p_type_mocks_dir} -type f ! -name "mocks.go" -exec rm {} \;
go generate ./${p2p_dir}/...
echo "P2P mocks generated in ${p2p_type_mocks_dir}"


$(eval DIRS = p2p persistence)
for dir in $(DIRS); do \
echo "Processing $$dir mocks..."; \
find $$dir/types/mocks -type f ! -name "mocks.go" -exec rm {} \;; \
go generate ./${dir_name}/...; \
echo "$$dir mocks generated in $$dir/types/mocks"; \
done

# TODO(team): Tested locally with `protoc` version `libprotoc 3.19.4`. In the near future, only the Dockerfiles will be used to compile protos.

.PHONY: protogen_show
Expand Down
26 changes: 22 additions & 4 deletions app/client/cli/debug.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,15 @@ import (

// TECHDEBT: Lowercase variables / constants that do not need to be exported.
const (
PromptResetToGenesis string = "ResetToGenesis"
PromptPrintNodeState string = "PrintNodeState"
PromptTriggerNextView string = "TriggerNextView"
PromptTogglePacemakerMode string = "TogglePacemakerMode"
PromptResetToGenesis string = "ResetToGenesis"
PromptPrintNodeState string = "PrintNodeState"
PromptTriggerNextView string = "TriggerNextView"
PromptTogglePacemakerMode string = "TogglePacemakerMode"

PromptShowLatestBlockInStore string = "ShowLatestBlockInStore"

PromptSendMetadataRequest string = "MetadataRequest"
PromptSendBlockRequest string = "BlockRequest"
)

var (
Expand All @@ -36,6 +40,8 @@ var (
PromptTriggerNextView,
PromptTogglePacemakerMode,
PromptShowLatestBlockInStore,
PromptSendMetadataRequest,
PromptSendBlockRequest,
}

// validators holds the list of the validators at genesis time so that we can use it to create a debug address book provider.
Expand Down Expand Up @@ -159,6 +165,18 @@ func handleSelect(selection string) {
Message: nil,
}
sendDebugMessage(m)
case PromptSendMetadataRequest:
m := &messaging.DebugMessage{
Action: messaging.DebugMessageAction_DEBUG_CONSENSUS_SEND_METADATA_REQ,
Message: nil,
}
broadcastDebugMessage(m)
case PromptSendBlockRequest:
m := &messaging.DebugMessage{
Action: messaging.DebugMessageAction_DEBUG_CONSENSUS_SEND_BLOCK_REQ,
Message: nil,
}
broadcastDebugMessage(m)
default:
logger.Global.Error().Msg("Selection not yet implemented...")
}
Expand Down
6 changes: 6 additions & 0 deletions app/client/doc/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

## [0.0.0.11] - 2023-02-07

- Added debugging init for state sync
- SendMetadataRequest to send metadata request by all nodes to all nodes
- SendBlockRequest to send get block request by all nodes to all nodes

## [0.0.0.10] - 2023-02-07

- Added GITHUB_WIKI tags where it was missing
Expand Down
1 change: 1 addition & 0 deletions app/pocket/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ func main() {
if err != nil {
logger.Global.Fatal().Err(err).Msg("Failed to create pocket node")
}
pocketNode.GetBus().GetConsensusModule().EnableServerMode()

if err = pocketNode.Start(); err != nil {
logger.Global.Fatal().Err(err).Msg("Failed to start pocket node")
Expand Down
3 changes: 2 additions & 1 deletion build/config/config1.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@
"manual": true,
"debug_time_between_steps_msec": 1000
},
"private_key": "0ca1a40ddecdab4f5b04fa0bfed1d235beaa2b8082e7554425607516f0862075dfe357de55649e6d2ce889acf15eb77e94ab3c5756fe46d3c7538d37f27f115e"
"private_key": "0ca1a40ddecdab4f5b04fa0bfed1d235beaa2b8082e7554425607516f0862075dfe357de55649e6d2ce889acf15eb77e94ab3c5756fe46d3c7538d37f27f115e",
"server_mode_enabled": true
},
"utility": {
"max_mempool_transaction_bytes": 1073741824,
Expand Down
3 changes: 2 additions & 1 deletion build/config/config2.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@
"manual": true,
"debug_time_between_steps_msec": 1000
},
"private_key": "ba81e6e56d293895b299bc495ae75d490644429a5e0028fabeb5e1871c1098e7eb2c78364525a210d994a83e02d18b4287ab81f6670cf4510ab6c9f51e296d91"
"private_key": "ba81e6e56d293895b299bc495ae75d490644429a5e0028fabeb5e1871c1098e7eb2c78364525a210d994a83e02d18b4287ab81f6670cf4510ab6c9f51e296d91",
"server_mode_enabled": true
},
"utility": {
"max_mempool_transaction_bytes": 1073741824,
Expand Down
3 changes: 2 additions & 1 deletion build/config/config3.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@
"manual": true,
"debug_time_between_steps_msec": 1000
},
"private_key": "25b385b367a827eaafcdb1003bd17a25f2ecc0d10d41f138846f52ae1015aa941041a9c76539791fef9bee5b4fcd5bf4a1a489e0790c44cbdfa776b901e13b50"
"private_key": "25b385b367a827eaafcdb1003bd17a25f2ecc0d10d41f138846f52ae1015aa941041a9c76539791fef9bee5b4fcd5bf4a1a489e0790c44cbdfa776b901e13b50",
"server_mode_enabled": true
},
"utility": {
"max_mempool_transaction_bytes": 1073741824,
Expand Down
3 changes: 2 additions & 1 deletion build/config/config4.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@
"manual": true,
"debug_time_between_steps_msec": 1000
},
"private_key": "4ff3292ff14213149446f8208942b35439cb4b2c5e819f41fb612e880b5614bdd6cea8706f6ee6672c1e013e667ec8c46231e0e7abcf97ba35d89fceb8edae45"
"private_key": "4ff3292ff14213149446f8208942b35439cb4b2c5e819f41fb612e880b5614bdd6cea8706f6ee6672c1e013e667ec8c46231e0e7abcf97ba35d89fceb8edae45",
"server_mode_enabled": true
},
"utility": {
"max_mempool_transaction_bytes": 1073741824,
Expand Down
4 changes: 4 additions & 0 deletions build/docs/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

## [0.0.0.12] - 2023-02-07

- Updated all `config*.json` files with new `server_mode_enabled` value

## [0.0.0.11] - 2023-02-07

- Added GITHUB_WIKI tags where it was missing
Expand Down
61 changes: 61 additions & 0 deletions consensus/debugging.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package consensus

import (
typesCons "github.com/pokt-network/pocket/consensus/types"
cryptoPocket "github.com/pokt-network/pocket/shared/crypto"
"github.com/pokt-network/pocket/shared/messaging"
)

Expand All @@ -20,6 +21,10 @@ func (m *consensusModule) HandleDebugMessage(debugMessage *messaging.DebugMessag
m.triggerNextView(debugMessage)
case messaging.DebugMessageAction_DEBUG_CONSENSUS_TOGGLE_PACE_MAKER_MODE:
m.togglePacemakerManualMode(debugMessage)
case messaging.DebugMessageAction_DEBUG_CONSENSUS_SEND_BLOCK_REQ:
m.sendGetBlockStateSyncMessage(debugMessage)
case messaging.DebugMessageAction_DEBUG_CONSENSUS_SEND_METADATA_REQ:
m.sendGetMetadataStateSyncMessage(debugMessage)
default:
m.logger.Debug().Msgf("Debug message: %s", debugMessage.Message)
}
Expand Down Expand Up @@ -95,3 +100,59 @@ func (m *consensusModule) togglePacemakerManualMode(_ *messaging.DebugMessage) {
}
m.paceMaker.SetManualMode(newMode)
}

// requests current block from all validators
func (m *consensusModule) sendGetBlockStateSyncMessage(_ *messaging.DebugMessage) {
currentHeight := m.CurrentHeight()
requestHeight := currentHeight - 1
peerAddress := m.GetNodeAddress()

stateSyncGetBlockMessage := &typesCons.StateSyncMessage{
Message: &typesCons.StateSyncMessage_GetBlockReq{
GetBlockReq: &typesCons.GetBlockRequest{
PeerAddress: peerAddress,
Height: requestHeight,
},
},
}

validators, err := m.getValidatorsAtHeight(currentHeight)
if err != nil {
m.logger.Debug().Msgf(typesCons.ErrPersistenceGetAllValidators.Error(), err)
}

for _, val := range validators {
valAddress := cryptoPocket.AddressFromString(val.GetAddress())
if err := m.stateSync.SendStateSyncMessage(stateSyncGetBlockMessage, valAddress, requestHeight); err != nil {
m.logger.Debug().Msgf(typesCons.SendingStateSyncMessage(valAddress, requestHeight), err)
}
}
}

// requests metadata from all validators
func (m *consensusModule) sendGetMetadataStateSyncMessage(_ *messaging.DebugMessage) {
currentHeight := m.CurrentHeight()
requestHeight := currentHeight - 1
peerAddress := m.GetNodeAddress()

stateSyncMetaDataReqMessage := &typesCons.StateSyncMessage{
Message: &typesCons.StateSyncMessage_MetadataReq{
MetadataReq: &typesCons.StateSyncMetadataRequest{
PeerAddress: peerAddress,
},
},
}

validators, err := m.getValidatorsAtHeight(currentHeight)
if err != nil {
m.logger.Debug().Msgf(typesCons.ErrPersistenceGetAllValidators.Error(), err)
}

for _, val := range validators {
valAddress := cryptoPocket.AddressFromString(val.GetAddress())
if err := m.stateSync.SendStateSyncMessage(stateSyncMetaDataReqMessage, valAddress, requestHeight); err != nil {
m.logger.Debug().Msgf(typesCons.SendingStateSyncMessage(valAddress, requestHeight), err)
}
}

}
8 changes: 7 additions & 1 deletion consensus/doc/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

## [0.0.0.26] - 2023-02-06
## [0.0.0.27] - 2023-02-07
- Add `state_sync` submodule, with `state_sync` struct
- Implement state sync server to advertise blocks and metadata
- Create new `state_sync_handler.go` source file that handles `StateSyncMessage`s sent to the `Consensus` module
- Add two new tests in `state_sync_test.go`:`TestStateSyncServerGetMetaDataReq` and `TestStateSyncServerGetBlock`
- Update `TestHotstuff4Nodes1BlockHappyPath` test to also retrieve the committed block

## [0.0.0.26] - 2023-02-06
- Address legacy linter errors from `golangci-lint`

## [0.0.0.25] - 2023-02-04
Expand Down
44 changes: 44 additions & 0 deletions consensus/e2e_tests/hotstuff_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,10 @@ import (
"github.com/benbjohnson/clock"
"github.com/pokt-network/pocket/consensus"
typesCons "github.com/pokt-network/pocket/consensus/types"
"github.com/pokt-network/pocket/shared/codec"
"github.com/pokt-network/pocket/shared/modules"
"github.com/stretchr/testify/require"
"google.golang.org/protobuf/types/known/anypb"
)

func TestHotstuff4Nodes1BlockHappyPath(t *testing.T) {
Expand Down Expand Up @@ -188,6 +190,48 @@ func TestHotstuff4Nodes1BlockHappyPath(t *testing.T) {
nodeState)
require.Equal(t, typesCons.NodeId(0), nodeState.LeaderId, "Leader should be empty")
}

// Test state synchronisation's get block functionality
// At this stage, first round is finished, get block request for block height 1 must return non-nill block
serverNode := pocketNodes[1]

// We choose node 2 as the requester node.
requesterNode := pocketNodes[2]
requesterNodePeerAddress := requesterNode.GetBus().GetConsensusModule().GetNodeAddress()

stateSyncGetBlockReq := typesCons.GetBlockRequest{
PeerAddress: requesterNodePeerAddress,
Height: 1,
}

stateSyncGetBlockMessage := &typesCons.StateSyncMessage{
Message: &typesCons.StateSyncMessage_GetBlockReq{
GetBlockReq: &stateSyncGetBlockReq,
},
}

anyProto, err := anypb.New(stateSyncGetBlockMessage)
require.NoError(t, err)

// Send get block request to the server node
P2PSend(t, serverNode, anyProto)

// Start waiting for the get block request on server node,
numExpectedMsgs := 1
errMsg := "StateSync Get Block Request Message"
receivedMsg, err := WaitForNetworkStateSyncEvents(t, clockMock, eventsChannel, errMsg, numExpectedMsgs, 250, false)
require.NoError(t, err)

msg, err := codec.GetCodec().FromAny(receivedMsg[0])
require.NoError(t, err)

stateSyncGetBlockResMessage, ok := msg.(*typesCons.StateSyncMessage)
require.True(t, ok)

getBlockRes := stateSyncGetBlockResMessage.GetGetBlockRes()
require.NotEmpty(t, getBlockRes)

require.Equal(t, uint64(1), getBlockRes.Block.GetBlockHeader().Height)
}

// TODO: Implement these tests and use them as a starting point for new ones. Consider using ChatGPT to help you out :)
Expand Down
Loading