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
Name | Description |
---|---|
Nominator
|