Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
parity
Mirrored projects
polkadot
Commits
7cecb28c
Commit
7cecb28c
authored
Jul 09, 2018
by
asynchronous rob
Committed by
Gav Wood
Jul 09, 2018
Browse files
PoC-1 consensus extracted to "rhododendron" (#284)
parent
bedde457
Changes
5
Hide whitespace changes
Inline
Side-by-side
consensus/Cargo.toml
View file @
7cecb28c
...
...
@@ -11,6 +11,7 @@ ed25519 = { path = "../../substrate/ed25519" }
error-chain
=
"0.12"
log
=
"0.3"
exit-future
=
"0.1"
rhododendron
=
"0.2"
polkadot-api
=
{
path
=
"../api"
}
polkadot-parachain
=
{
path
=
"../parachain"
}
polkadot-primitives
=
{
path
=
"../primitives"
}
...
...
consensus/src/lib.rs
View file @
7cecb28c
...
...
@@ -47,6 +47,7 @@ extern crate substrate_client as client;
extern
crate
exit_future
;
extern
crate
tokio
;
extern
crate
rhododendron
;
#[macro_use]
extern
crate
error_chain
;
...
...
@@ -530,7 +531,7 @@ impl<C> bft::Proposer<Block> for Proposer<C>
}
fn
import_misbehavior
(
&
self
,
misbehavior
:
Vec
<
(
AuthorityId
,
bft
::
Misbehavior
<
Hash
>
)
>
)
{
use
bft
::
generic
::
Misbehavior
as
GenericMisbehavior
;
use
rhododendron
::
Misbehavior
as
GenericMisbehavior
;
use
runtime_primitives
::
bft
::{
MisbehaviorKind
,
MisbehaviorReport
};
use
runtime_primitives
::
MaybeUnsigned
;
use
polkadot_runtime
::{
Call
,
Extrinsic
,
BareExtrinsic
,
UncheckedExtrinsic
,
ConsensusCall
};
...
...
network/Cargo.toml
View file @
7cecb28c
...
...
@@ -20,3 +20,4 @@ ed25519 = { path = "../../substrate/ed25519" }
futures
=
"0.1"
tokio
=
"0.1.7"
log
=
"0.4"
rhododendron
=
"0.2"
network/src/consensus.rs
View file @
7cecb28c
...
...
@@ -53,8 +53,8 @@ impl<E> Sink for BftSink<E> {
fn
start_send
(
&
mut
self
,
message
:
bft
::
Communication
<
Block
>
)
->
::
futures
::
StartSend
<
bft
::
Communication
<
Block
>
,
E
>
{
let
network_message
=
net
::
LocalizedBftMessage
{
message
:
match
message
{
bft
::
generic
::
Communication
::
Consensus
(
c
)
=>
msg
::
BftMessage
::
Consensus
(
match
c
{
bft
::
generic
::
LocalizedMessage
::
Propose
(
proposal
)
=>
msg
::
SignedConsensusMessage
::
Propose
(
msg
::
SignedConsensusProposal
{
::
rhododendron
::
Communication
::
Consensus
(
c
)
=>
msg
::
BftMessage
::
Consensus
(
match
c
{
::
rhododendron
::
LocalizedMessage
::
Propose
(
proposal
)
=>
msg
::
SignedConsensusMessage
::
Propose
(
msg
::
SignedConsensusProposal
{
round_number
:
proposal
.round_number
as
u32
,
proposal
:
proposal
.proposal
,
digest
:
proposal
.digest
,
...
...
@@ -62,17 +62,20 @@ impl<E> Sink for BftSink<E> {
digest_signature
:
proposal
.digest_signature.signature
,
full_signature
:
proposal
.full_signature.signature
,
}),
bft
::
generic
::
LocalizedMessage
::
Vote
(
vote
)
=>
msg
::
SignedConsensusMessage
::
Vote
(
msg
::
SignedConsensusVote
{
::
rhododendron
::
LocalizedMessage
::
Vote
(
vote
)
=>
msg
::
SignedConsensusMessage
::
Vote
(
msg
::
SignedConsensusVote
{
sender
:
vote
.sender
,
signature
:
vote
.signature.signature
,
vote
:
match
vote
.vote
{
bft
::
generic
::
Vote
::
Prepare
(
r
,
h
)
=>
msg
::
ConsensusVote
::
Prepare
(
r
as
u32
,
h
),
bft
::
generic
::
Vote
::
Commit
(
r
,
h
)
=>
msg
::
ConsensusVote
::
Commit
(
r
as
u32
,
h
),
bft
::
generic
::
Vote
::
AdvanceRound
(
r
)
=>
msg
::
ConsensusVote
::
AdvanceRound
(
r
as
u32
),
::
rhododendron
::
Vote
::
Prepare
(
r
,
h
)
=>
msg
::
ConsensusVote
::
Prepare
(
r
as
u32
,
h
),
::
rhododendron
::
Vote
::
Commit
(
r
,
h
)
=>
msg
::
ConsensusVote
::
Commit
(
r
as
u32
,
h
),
::
rhododendron
::
Vote
::
AdvanceRound
(
r
)
=>
msg
::
ConsensusVote
::
AdvanceRound
(
r
as
u32
),
}
}),
}),
bft
::
generic
::
Communication
::
Auxiliary
(
justification
)
=>
msg
::
BftMessage
::
Auxiliary
(
justification
.uncheck
()
.into
()),
::
rhododendron
::
Communication
::
Auxiliary
(
justification
)
=>
{
let
unchecked
:
bft
::
UncheckedJustification
<
_
>
=
justification
.uncheck
()
.into
();
msg
::
BftMessage
::
Auxiliary
(
unchecked
.into
())
}
},
parent_hash
:
self
.parent_hash
,
};
...
...
@@ -90,10 +93,10 @@ impl<E> Sink for BftSink<E> {
// check signature and authority validity of message.
fn
process_bft_message
(
msg
:
msg
::
LocalizedBftMessage
<
Block
,
Hash
>
,
local_id
:
&
SessionKey
,
authorities
:
&
[
SessionKey
])
->
Result
<
Option
<
bft
::
Communication
<
Block
>>
,
bft
::
Error
>
{
Ok
(
Some
(
match
msg
.message
{
msg
::
BftMessage
::
Consensus
(
c
)
=>
bft
::
generic
::
Communication
::
Consensus
(
match
c
{
msg
::
SignedConsensusMessage
::
Propose
(
proposal
)
=>
bft
::
generic
::
LocalizedMessage
::
Propose
({
msg
::
BftMessage
::
Consensus
(
c
)
=>
::
rhododendron
::
Communication
::
Consensus
(
match
c
{
msg
::
SignedConsensusMessage
::
Propose
(
proposal
)
=>
::
rhododendron
::
LocalizedMessage
::
Propose
({
if
&
proposal
.sender
==
local_id
{
return
Ok
(
None
)
}
let
proposal
=
bft
::
generic
::
LocalizedProposal
{
let
proposal
=
::
rhododendron
::
LocalizedProposal
{
round_number
:
proposal
.round_number
as
usize
,
proposal
:
proposal
.proposal
,
digest
:
proposal
.digest
,
...
...
@@ -112,18 +115,18 @@ fn process_bft_message(msg: msg::LocalizedBftMessage<Block, Hash>, local_id: &Se
trace!
(
target
:
"bft"
,
"importing proposal message for round {} from {}"
,
proposal
.round_number
,
Hash
::
from
(
proposal
.sender
.0
));
proposal
}),
msg
::
SignedConsensusMessage
::
Vote
(
vote
)
=>
bft
::
generic
::
LocalizedMessage
::
Vote
({
msg
::
SignedConsensusMessage
::
Vote
(
vote
)
=>
::
rhododendron
::
LocalizedMessage
::
Vote
({
if
&
vote
.sender
==
local_id
{
return
Ok
(
None
)
}
let
vote
=
bft
::
generic
::
LocalizedVote
{
let
vote
=
::
rhododendron
::
LocalizedVote
{
sender
:
vote
.sender
,
signature
:
ed25519
::
LocalizedSignature
{
signature
:
vote
.signature
,
signer
:
ed25519
::
Public
(
vote
.sender
.0
),
},
vote
:
match
vote
.vote
{
msg
::
ConsensusVote
::
Prepare
(
r
,
h
)
=>
bft
::
generic
::
Vote
::
Prepare
(
r
as
usize
,
h
),
msg
::
ConsensusVote
::
Commit
(
r
,
h
)
=>
bft
::
generic
::
Vote
::
Commit
(
r
as
usize
,
h
),
msg
::
ConsensusVote
::
AdvanceRound
(
r
)
=>
bft
::
generic
::
Vote
::
AdvanceRound
(
r
as
usize
),
msg
::
ConsensusVote
::
Prepare
(
r
,
h
)
=>
::
rhododendron
::
Vote
::
Prepare
(
r
as
usize
,
h
),
msg
::
ConsensusVote
::
Commit
(
r
,
h
)
=>
::
rhododendron
::
Vote
::
Commit
(
r
as
usize
,
h
),
msg
::
ConsensusVote
::
AdvanceRound
(
r
)
=>
::
rhododendron
::
Vote
::
AdvanceRound
(
r
as
usize
),
}
};
bft
::
check_vote
::
<
Block
>
(
authorities
,
&
msg
.parent_hash
,
&
vote
)
?
;
...
...
@@ -137,7 +140,7 @@ fn process_bft_message(msg: msg::LocalizedBftMessage<Block, Hash>, local_id: &Se
// TODO: get proper error
let
justification
:
Result
<
_
,
bft
::
Error
>
=
bft
::
check_prepare_justification
::
<
Block
>
(
authorities
,
msg
.parent_hash
,
justification
)
.map_err
(|
_
|
bft
::
ErrorKind
::
InvalidJustification
.into
());
bft
::
generic
::
Communication
::
Auxiliary
(
justification
?
)
::
rhododendron
::
Communication
::
Auxiliary
(
justification
?
)
},
}))
}
...
...
network/src/lib.rs
View file @
7cecb28c
...
...
@@ -38,6 +38,7 @@ extern crate ed25519;
extern
crate
futures
;
extern
crate
parking_lot
;
extern
crate
tokio
;
extern
crate
rhododendron
;
#[macro_use]
extern
crate
log
;
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment