* Add revert mechanism for UpdateValidatorWrapper
Closesharmony-one/bounties#90
(1) Use LRU for ValidatorWrapper objects in stateDB to plug a potential
memory leak
(2) Merge ValidatorWrapper and ValidatorWrapperCopy to let callers ask
for either a copy, or a pointer to the cached object. Additionally,
give callers the option to not deep copy delegations (which is a
heavy process). Copies need to be explicitly committed (and thus
can be reverted), while the pointers are committed when Finalise
is called.
(3) Add a UpdateValidatorWrapperWithRevert function, which is used by
staking txs `Delegate`, `Undelegate`, and `CollectRewards`. Other
2 types of staking txs and `db.Finalize` continue to use
UpdateValidateWrapper without revert, again, to save memoery
(4) Add unit tests which check
a) Revert goes through
b) Wrapper is as expected after revert
c) State is as expected after revert
* Change back to dictionary for stateValidators
Since the memory / CPU usage saved is not significantly different when
using an LRU + map structure, go back to the original dictionary
structure to keep code easy to read and have limited modifications.
* Add tests for validator wrapper reverts
As requested by @rlan35, add tests beyond just adding and reverting a
delegation. The tests are successive in the sense that we do multiple
modifications to the wrapper, save a snapshot before each modification
and revert to each of them to confirm everything works well. This change
improves test coverage of statedb.go to 66.7% from 64.8% and that of
core/state to 71.9% from 70.8%, and covers all the code that has been
modified by this PR in statedb.go.
For clarity, the modifications to the wrapper include (1) creation of
wrapper in state, (2) adding a delegation to the wrapper, (3)
increasing the blocks signed, and (4) a change in the validator Name and
the BlockReward. Two additional tests have been added to cover the
`panic` and the `GetCode` cases.
* HIP-6: increase external voting power to 51%
* HIP-8: increase external slots to 900
* never enable for local net
Signed-off-by: Leo Chen <leo@harmony.one>
* SHA3-256 FIPS-202 precompiled contract implementation
* go fmt
* Added precompiles address under VRF
* added sha3 prcompiles to Istanbul
* fix goimports error
* Updated the sha3 & ecreceover pk contract address to 253 & 254 respectively
* Added a new PrecompiledContractsSHA3FIPS and add forking epoch & Changed the gas prices for sha3
Co-authored-by: Ganesha Upadhyaya <ganeshrvce@gmail.com>
* Add logic to do aggregated reward distribution
* Fix build and consensus
* add aggregated reward logic
* refactor payouts
* Fix batch scheduling
* test code
* revert test code
* more comments
* [rpc] updated rpc to GetCirculationSupply to sub token burnt
* [explorer] add a small fix
* [rpc] fix at getInaccessible tokens
* [rpc] added fix at header.Root
* Add rate limit to metrics
* Compliance with harmony's metrics specifications
* Improve rate limit metrics info
* minor: remove the redundancy of rpc metrics name
Signed-off-by: Leo Chen <leo@harmony.one>
* [rpc] set default rate limit to 1000
Signed-off-by: Leo Chen <leo@harmony.one>
* [rpc] fix test errors
Signed-off-by: Leo Chen <leo@harmony.one>
* [metrics] init rpc rate limiter
Signed-off-by: Leo Chen <leo@harmony.one>
Co-authored-by: Leo Chen <leo@harmony.one>
* 40% external voting power enabled at epoch 530, around Apr 12th 2021, 22:30 UTC
* reduce number of internal slots to 50 per shard,
increase the number of available slots from 640 to 800 to external validators.
Signed-off-by: Leo Chen <leo@harmony.one>