Module agora.consensus.protocol.Nominator

Contains the SCP consensus driver implementation.

Example

ditto

SCPStatement st;
SCPBallot prep;
SCPBallot prep_prime;

import std.conv;

() @trusted {
    st.pledges.prepare_ = SCPStatement._pledges_t._prepare_t.init;
    st.pledges.prepare_.prepared = &prep;
    st.pledges.prepare_.preparedPrime = &prep_prime;
    st.pledges.type_ = SCPStatementType.SCP_ST_PREPARE;
}();

auto getStHash () @trusted { return SCPStatementHash(&st); }

Hash[] st_hashes;
st_hashes ~= getStHash().hashFull();

prep.counter++;
st_hashes ~= getStHash().hashFull();

prep_prime.counter++;
st_hashes ~= getStHash().hashFull();

() @trusted { st.pledges.prepare_.prepared = null; }();
st_hashes ~= getStHash().hashFull();

() @trusted { st.pledges.prepare_.preparedPrime = null; }();
st_hashes ~= getStHash().hashFull();

() @trusted { st.pledges.nominate_ = SCPNomination.init; }();
st.pledges.type_ = SCPStatementType.SCP_ST_NOMINATE;
st_hashes ~= getStHash().hashFull();

() @trusted { st.pledges.confirm_ = SCPStatement._pledges_t._confirm_t.init; }();
st.pledges.type_ = SCPStatementType.SCP_ST_CONFIRM;
st_hashes ~= getStHash().hashFull();

() @trusted { st.pledges.externalize_ = SCPStatement._pledges_t._externalize_t.init; }();
st.pledges.type_ = SCPStatementType.SCP_ST_EXTERNALIZE;
st_hashes ~= getStHash().hashFull();

SCPEnvelope env;
auto getEnvHash () @trusted { return SCPEnvelopeHash(&env); }

Hash[] env_hashes;

// empty envelope
import std.conv;
env_hashes ~= getEnvHash().hashFull();

// with a statement
env.statement = st;
env_hashes ~= getEnvHash().hashFull();

// import agora.utils.Test;
// import std.stdio;
// writeln(WK.Keys.NODE5.sign(getStHash));
env.signature = Signature.fromString(
    "0x8e506b0d32457a3e6e2c7ba14dec178a53c567430e71dd036301c8246d8a782b" ~
    "3c4fdf745375bd2fed645433e2a9364b95d6e3931c29ea7fb445bc6ee80867a6")
    .toBlob();

// with a signature
env_hashes ~= getEnvHash().hashFull();

assert(Set!Hash.from(st_hashes).length == st_hashes.length);
assert(Set!Hash.from(env_hashes).length == env_hashes.length);

Classes

NameDescription
Nominator