* [availability] Add function setting Validator as Inactive=true if meets threshold
* [availability] Set Validators that did not meet signing threshold to inactive
* [availability] Wrap Setting invalid validator only if new epoch forthcoming
* [availability] Return right error value
* [staking] Add Active field to EditValidator staking txn
* [availability] Add validator snapshot type, thread throughout codebase
* [availability] Adjust check availability on a per epoch basis
* [availability] Address PR comments, simplify collection of validators
* [availability] Fold ValidatorSnapshot into ValidatorWrapper
* [blockchain] Move update of validator list to after availability removal of validator
* [availability] Move availability signing counts to Wrapper, out of Stats
* [availability] Record epoch on each validator update as well
* [availability] Remove update validator stats in writeblockwithstate, update validator signing in proposal of new block to get correct state written
* [availability] Mutate state for validators signing in finalize
* [availability] Set unavailable validators in finalize
* [consensus] Remove error level for non-error log
* [node] No point to broadcast crosslink if we are not in cross link time yet
* [availability] Remove moved blocksigners function
* [core] Give more context in failure
* [availability] Provide set as filter for which validators to track on signing increase and set inactivity
* [blockchain] Write snapshot of validator as is
* Fix format in staking transaction (#2127)
* [availability] Move increment of validator signing counter to before shard state proposal
* [availability] Kick out inactive validators right before new shard state proposal
* [availability] Keep logic of getting shard members as was
* [state-transition] Attach Epoch number to create validator txn
Co-authored-by: flicker-harmony <52401354+flicker-harmony@users.noreply.github.com>
* Add debug info for consensus main loop
* Fix potential OOB issue on p2p message parsing
* Add msg size check to prevent OOB in msg handler
* Add constant for p2p msg prefix
* [quorum] Add interface method to check if I am in committee, implement in both concrete types
* [quorum] Only handle message when I am in committee
* [quorum][consensus] Let non-member still get onCommitted messages
* [staking] Fix mistake on QurorumThreshold, change Harmony share to 68
* [staking] Use dec instead of big.Int for easier use
* [staking] Adjust one-vote quorum to account for usage of decimal
* [staking] Replace threshold with TwoThirdExplicit signer count, quorum threshold was becoming overloaded
* [staking] Count plain case of quorum achieved for one-node-one-vote
* [staking] Staked vote TODO
* [quorum] Factor out single vote & provide for staked quorum vote
* [quorum] Pass ShardID to decider via cb
* [quorum] Move ShardIDProvider higher, fix nil mistake
* [quorum] ReadAllSignatures optimization
* [quorum] Safer way to read over map, then to slice
* [quorum] Address PR comments - naming changes
* [committee] Move core.ShardingSchedule to shard.Schedule
* [consensus] Remove redundant PublicKeys field of Consensus as Decider maintains that
* [committee] Use committee package to pick PublicKeys
* [committee] Use committee inplace of CalculateShardState
* [committee] Remove core/resharding.go, complete usage of committee as implementation replacement
* [committee] Address PR comments
* [consensus] Factor out enums to core/values, begin factor out of consensus mechanisms
* [consensus] Make Mechanism explicit
* [consensus] Add ViewChange to QuorumPhase
* Update core/values/consensus.go
Co-Authored-By: Eugene Kim <ek@harmony.one>
* Update core/values/consensus.go
Co-Authored-By: Eugene Kim <ek@harmony.one>
* [mainnet-release] Address code comments
* [staking][consensus][project] Remove txgen, factor out consensus
* [consensus] Factor out PublicKeys
* [txgen] Bring back txgen
* [project] Undo prior consolidation of error values under core
* [consensus] Update tests using quorum decider
* [consensus] Fix overlooked resets during refactor
* [consensus] Fix wrong check of quorum phase
* [consensus] Address leftover TODO for prepare count
* [consensus] Simplfy reset switch
* [consensus] Fix mistake of wrong ReadSignature in ViewChange, need sender, not node PubKey
this is solve the problem of validators in different network connected
with each others.
* mainet is still using the original harmony prefix to keep backward
compatibility
* pangaea uses "pangaea" as network prefix
* testnet uses "testnet" as network prefix
All nodes in Pangaea and Testnet need to restart to re-connect with each
other. Mainnet nodes have no changes.
Signed-off-by: Leo Chen <leo@harmony.one>
block.Header is now a lightweight wrapper around an embedded
HeaderInterface value, which is implemented by both v0 and v1 headers.
It inherits all methods from the wrapped HeaderInterface, except it
overrides EncodeRLP, DecodeRLP, and Hash to handle tagged-RLP
encoding/decoding. (block.HeaderRegistry is the tagged RLP registry for
versioned headers.)
A ripple effect is that header instance creation now requires knowledge
of epoch. This logic is handled by blockfactory. blockfactory.Factory
is the interface, implemented by blockfactory.factory type. It uses a
chain config to pull in the right epoch for the right type.
As a convenience, blockfactory.NewTestHeader creates a new test-purpose
headers. Use this in contexts where the implied chain config is
TestChainConfig or the chain config does not matter.
Miscellaneous changes:
- block.HeaderFieldSetter now lives in its own file.
- The functionality of block.NewHeaderWith has been replaced by the
(*block.Header).With method.
The accompanying unit tests for (*block.Header).EncodeRLP and
(*block.Header).DecodeRLP() are the cross-sectional unit tests for the
functionality added by this. They make sure that v0 header is
encoded/decoded without tagged RLP envelope (compatibility mode), and v1
header is encoded/decoded with one. See comments of the RLP byte
sequence for differences.
Also introduce NewHeader and NewHeaderWith functions. The latter is
friendlier for create-and-initialize expressions, and can be used
in place of the old &Header{field: value, ...} syntax.