* [rpc] Fix sanity check to accept "latest"
* [rpc] Return as much data possible when using GetAllValidatorInformationByBlockNumber
* [rpc] Remove beacon check for getValidators, returns valid information on all shards
* [rpc] Add GetValidatorKeys to get BLS Keys of committee for a particular epoch
* [rpc] Add getBlockSignerKeys to return public bls keys of signers for a block
* [rpc] Fix lint
* [rpc] Address PR comments
* [rpc] Add common function to API backend instead of separate implementations in V1 & V2
* [rpc] Remove extra parenthesis
* [rpc] Fix lint
[validator] Fix typo
* [rpc] Revert change to sanity check in V2
* [rpc] Fix lint
* fix signers share computation to use only non-harmony nodes (#3008)
* Add LastEpochInCommittee at prestaking epoch too (#3014)
* write validator stats at the end of prestaking epoch (#3021)
* write validator stats at the end of prestaking epoch
* also need to write block reward accumulator
* [build] enable static build by default (#2885)
scripts/go_executable_build.sh -s (static build, default)
scripts/go_executable_build.sh -S (non-static build)
Signed-off-by: Leo Chen <leo@harmony.one>
* Code formatting fix based on `staticcheck` (#3023)
* fix some static check issues
* more fixes according to staticcheck
* add nil check on getHeader
* Add more log info
* [rpc] Revert change to v2 GetBalance RPC (#3037)
* Cherrypick crosslink related fixes from t3 to master. (#3045)
* Optimize crosslink verification logic and add more cache (#3032)
* make crosslink broadcast smarter and more efficient (#3036)
* adjust catch up speed to be a sane number
* Fix crosslink broadcast condition (#3041)
* Tx pool error report fix & local build fix (#3046)
* [tx_list] Add transaction after you can fetch tx cost
* [tx_pool] Add error sink reports for removed tx
* Correct log levels for known transactions
* Remove redundant hash to `enqueue` and `add` signatures
* Update tests for signature changes
* [build] Fix local build for MacOs
* [tx_pool] Correct typo & logging level for known tx
* [config] Create Testnet config
* [node.sh] update testnet network config
* [config] correct testnet config
* [main] Enable beacon sync for explorer nodes (#3059)
* [apr] should not use snapshot from last epoch, use current epoch snapshot (#3051)
* use snapshot total delegation instead of current total delegation
* should not use snapshot from last epoch, use current epoch snapshot (#3049)
Co-authored-by: Rongjian Lan <rongjian.lan@gmail.com>
Co-authored-by: Rongjian Lan <rongjian.lan@gmail.com>
* cherrypick log level change
* [rpc] Add active status back to Validator information
[validator] Fix typo for ValidatorRPCEnhanced
[Makefile] Change make exe to build non-static by default
* [network] Added caching to node server (#3048)
* [network] Added caching to node server
* [network] renamed two singleflight.Group
* [network] added two error handling
* [network] added forget logic for single flight
* [network] changed single flight to lru cache solution
* [network] adjusted the cache size
* [network] changed cache size to 10000
* Transaction api improvements (#3057)
* [node] Add option to broadcast invalid tx (on by default)
* update main args to take in broadcast invalid tx
* update node.sh for new broadcast invalid tx option
* [rpc] Do not submit transaction if tx has been finalized
* Support legacy behavior and not return errors on tx submission
* [main] make broadcasting invalid tx default false
* [node] Fix formatting
* Add timeouts for the explorer HTTP service
* [test] State trans unit test (#3043)
* completing create-validator tests
generalizing create validator tests, started with edit validator tests
one round completed before major refactor
* [test] finished coding test TestCheckDuplicateFields
* [test] finished debug TestCheckDuplicateFields
* [test] Added TestDescription_EnsureLength
* [test] added test in validator_test.go TestUpdateDescription
* [test] Added test TestComputed_String
* [test] refactored TestValidatorSanityCheck and added some message in error message returned from sanity check
* [test] removed test index for debugging
* [test] Added test TestValidatorWrapper_SanityCheck. Added value check for TestMarshalUnmarshalValidator. Fixed rlp usage defect in UnmarshalValidator
* [test] added test TestVerifyBLSKeys
* [test] added test TestContainsHarmonyBLSKeys
* [test] added test TestCreateValidatorFromNewMsg
* [test] fixed some tests errors
* [test] added test TestUpdateValidatorFromEditMsg, last editted the test file, finished testing validator_test.go
* [staking] added numeric.Dec.Copy method
* [staking] added CommissionRates.Copy
* [staking] add nil case handle to copy method and related test case
* [test] added nil case for commissionRates.Copy test
* [staking] finished CreateValidator.Copy and related test case
* [staking] added EditValidator.Copy method and related test case
* [test] added zero test cases for Copy method
* [staking] implemented Delegate.Copy and related unit test case
* [staking] added Undelegate.Copy and CollectReward.Copy method. Implemented corresponding test cases
* [test] added two more simple unit tests
* [test] solving the merge conflict with deep copy fix
* [test] added schedule for sharding
* [test] refactored double_sign_test.go
* [test] comment out all test cases for now.
* [test] added record Copy method for testing
* [test] added the first test case in TestVerify
* [test] finished test TestVerify
* [test] Added test TestVerify, TestApplySlashRate, TestSetDifference
* [test] half through TestDelegatorSlashApply
* [test] fix the problem cause by unsafe usage of big.Int
* [staking] added the copy methods to validatorWrapper
* [test] added test cases for copy method for staking/validatorWrapper
* [test] added test case TestApply
* [test] added test case TestRate
* [test] fix the golint errors
* [test] removed commented out unit test code
* [test] remote the empty line in imports
* [test] moved copy methods to stake_testing module
* [test] removed usage of interface stateDB
* [test] removed empty lines in imports
* [test] fixed golint package name issues
* [test] removed a todo when writing code
* [test] moved record.Copy to staking/slash/test
* [test] add some changes
* [test] added prototypes in staketest module
* [test] fix the golint issue in staketest
* [test] make prototype more beautiful
* [test] refactored test TestCheckDuplicateFields
* [test] add createValidator test data
* [test] added positive test case for VerifyAndCreateValidatorFromMsg
* [test] added create validator test
* [test] added the positive test case for TestVerifyAndEditValidatorFromMsg
* [test] added the tests case TestVerifyAndEditValidatorFromMsg
* [test] fix one of the error is not triggered as expected
* [test] more changes in test
* [test] fix the positive test data for TestVerifyAndDelegateFromMsg
* [test] Fixed two comment golint errors
* [test] added delegate tests
* [test] added a make function. WIP
* [test] added undelegate positive test
* [test] added negative test cases for undelegate
* [test] added positive test. not passed. Need to add assert method in test suites
* [test] added equal function to check Validator Equality
* [test] added equals for staketest
* [test] replaced deep equal with new equal methods:
* [test] removed unused codes
* [test] Finishing touch
* [test] fix comment golint issue
* [test] removed dead code in staking_verifier_test.go
Co-authored-by: Ganesha Upadhyaya <ganeshrvce@gmail.com>
* changed the sync port to dns port in flag
* [network] Limit client sync connection (#3071)
* [network] limit client connected peers
* Changed signature and added tests
* Set secure permissions on generated blskey pass file in node.sh
* Fix spellin gtypo in node.sh
* fix latest param handling in api v1
* added comment for the isGreaterThanLatestBlockNum check
* fix a nil pointer crash due to previous revert
Signed-off-by: Leo Chen <leo@harmony.one>
* fix nil pointer crash
Signed-off-by: Leo Chen <leo@harmony.one>
* fix nil pointer of block
Signed-off-by: Leo Chen <leo@harmony.one>
* [rpc] add viewID and epoch to RPCMarshalBlock (#3009)
* [rpc] add viewID and epoch to RPCMarshalBlock
* add apt-get update
* Do not rollback current block on failed block sync (#3101)
Co-authored-by: Ganesha Upadhyaya <ganeshrvce@gmail.com>
Co-authored-by: Rongjian Lan <rongjian.lan@gmail.com>
Co-authored-by: Jacky Wang <jackyw.se@gmail.com>
Co-authored-by: Janet Liang <56005637+janet-harmony@users.noreply.github.com>
Co-authored-by: Daniel Van Der Maden <dvandermaden0@berkeley.edu>
Co-authored-by: Janet Liang <janet@harmony.one>
Co-authored-by: Sebastian Johnsson <sebastian.johnsson@gmail.com>
Co-authored-by: hsiung <hsiung@pinterest.com>
Co-authored-by: Dennis Won <jhwon0820@gmail.com>
Co-authored-by: Yishuang Chen <34232522+ivorytowerdds@users.noreply.github.com>
* [node] Add option to broadcast invalid tx (on by default)
* update main args to take in broadcast invalid tx
* update node.sh for new broadcast invalid tx option
* [rpc] Do not submit transaction if tx has been finalized
* Support legacy behavior and not return errors on tx submission
* [main] make broadcasting invalid tx default false
* [node] Fix formatting
* validator stats regression due to apr bug fixed
* better coding style
* correctly computing apr accounting for epoch holes
* APRHistory for only 30 last epochs
* [rpc] Move all error definitions to error.go
* [core] Add function to read delegations from offchain data for a specific block
[rpc] Add GetDelegationsByDelegatorAt
* [rpc] Return error when calling all staking blockchain rpcs on auxillary shards
* [rpc] Rename to GetDelegationsByDelegatorByBlockNumber to follow naming conventions
* [rpc] Return error when requested block is greater than exists on chain
* [rpc] Fix lint errors
* [rpc] Fix check to not break on current block
* [rpc] Fix broken getBalance RPC
[rpc] Change getValidators to give balance at the end of the selected epoch or current block
* [rpc] Address PR comments
* [README] Update go version
* [rpc] Revert changes to Call
* [rpc] Move error checks to blockchain
* [rpc] Rename to ByBlock, because it takes a block as input
* [rpc] Small performance optimization for getting delegator information
* [types] Add TransactionErrorSink to report failed txs
[node] Create ErrorSink handler for unique error msgs
Implemented with a LRU cache.
[node] Rename ErrorSink to TransactionErrorSink
* Rename RPCTransactionError to TransactionError
[node] Make tx error sink not return err on Add & Remove
[node] Make tx errorSink Contains check take string as tx hash param
[errorsink] Move tx error sink into errorsink pkg
[errorsink] Rename Errors and Count methods
[errorsink] Rename NewTransactionErrorSink to NewTransactionSink
[types] Move error sink to core/types
* Rename NewTransactionSink to NewTransactionErrorSink
* [types] Fix log msg for unfound errors
* [types] Rename TransactionError to TransactionErrorReport
* [core] Remove RPCTransactionError & refactor tx_pool to use TxErrorSink
* [staking] Remove RPCTransactionError
* [node] Refactor tx_pool init to use new TxErrorSink
* [main] Construct transaction error sink before initing the node
* [node] Refactor error sink reporting at RPC layer
* [rpc] Refactor returned type of ErrorSink RPCs to 1 type
* [core] Remove tx from TxErrorSink on Add to tx_pool
* [types] Make NewTransactionErrorSink not return err
* [node] Make node.New create error sink
* [cmd] Revert to origin main.go
* [core] Add TxErrorSink unit test & fix bad ErrExcessiveBLSKeys in tests
* [testnet config] Change testnet config to allow for 5*4 external keys
* [cmd] Revert main.go to original node instantiation
* [rpc] Add GetPoolStats rpc to fetch pending and queued tx counts
* apr average over last hundred epochs
* minor
* upcounting once activation to include the impact on apr when not in committeee
* validator stats maintain APR histories as fixed length circular slice
* use map instead of slice for flexibility
* use APRHistoryLength instead of 100
* APR for currentEpochSuperCommittee.Epoch and not newEpochSuperCommittee.Epoch
* [rpc][votepower] Add hack
* [consensus] Use hack, change from one addr to bls key
* update super committee rpc to add rawstake and median to output
* only retrieve total delegation once
* better name
* nil pointer check
Co-authored-by: Ganesha Upadhyaya <ganeshrvce@gmail.com>
* [rpc] Remove filter code - it is not used
* [node][project] Remove more dead code, bump max message handler to 200
* [rpc] Undo overzealous filter removal
* [node] Unused package level big.Int
* [p2p] Throttle receives to a max of 100
* [project] Remove msgq
* [node][p2p] Only allow 100 max message handling at time
* [node][p2p] Throttle max message handler with Weighted Semaphore - init w/ uniform weight
* [node] Use go routine for passing handled block
* [p2p] Leftover commented out
* [node] Add log for when cannot pay semaphore cost
* [node] Bump max message handlers
* [internal] Remove file_embed
* [project] Remove unused file, unused function
* [consensus] Unused values
* [config] Unused field & function
* [internal] Unused address & hash
* [project] More unused tests, values, types
* [project] Move conn logger just to bootnode
* [rpc] Remove dead functions
* [internal] More unused functions
* [project] Remove dead keystore dir package
* [p2p] Need lock to grab all Topics
* [node] Force side effect of topic join, give each topic own weighted semaphore
* separate transaction counts rpi api into regular vs staking
* fix api_test.sh for getTransactionCount apiv1
* nit. return results directly for get(Staking)TransactionsCount apis
* [project] Use tracepointer
* [project] Remove dead dependencies
* [rpc] Add unix time at boot as value for node metadata rpc - need direct machine uptime
* [internal] Remove dead RPC/wallet
* [rpc] Reduce API surface area for dead RPC
* [node] Remove dead flags, unused setters
* [project] Unused logger, too many loggers
* [core] staticcheck fixes, remove unused db keys
* [project] More dead code through, now in param and genesis
* [internal] Useless test
* staking txn. look up by hash fix on api backend rawdb storage
* node explorer staking txn 'history' RPC layer support
* fix unit test
* add error log when explorer node db instance cannot be fetched
* revert unwanted merge changes during rebase
* use already encoded tx message fields for get staking txn rpc
* update explorer node storage service for staking txns
* use hex string for staking transaction data field
* revert transaction pool apiv1 changes
* [rpc][validator] Extend hmy blockchain validator information
* [availability] Optimize bump count
* [staking][validator][rpc] Remove validator stats rpc, fold into validator information, make existing pattern default behavior
* [slash] Reimplement SetDifference
* [reward][engine][network] Remove bad API from fall, begin setup for Per validator awards
* [header] Custom Marshal header for downstream, remove dev code
* [effective][committee] Factor out EPoS round of computation thereby unification in codebase of EPoS
* [unit-test] Fix semantically wrong validator unit tests, punt on maxBLS key wrt tx-pool test
* [reward] Use excellent singleflight package for caching lookup of subcommittees
* [apr][reward] Begin APR package itself, iterate on iterface signatures
* [reward] Handle possible error from singleflight
* [rpc][validator][reward] Adjust RPC committees, singleflight on votingPower, foldStats into Validator Information
* [apr] Stub out computation of APR
* [effective][committee] Upgrade SlotPurchase with named fields, provide marshal
* [effective] Update Tests
* [blockchain] TODO Remove the validators no longer in committee
* [validator][effective] More expressive string representation of eligibilty, ValidatorRPC explicit say if in committee now
* [rpc] Median-stake more semantic meaningful
* [validator] Iterate on semantic meaning of JSON representation
* [offchain] Make validator stats return explicit error
* [availability] Small typo
* [rpc] Quick visual hack until fix delete out kicked out validators
* [offchain] Delete validator from offchain that lost their slot
* [apr] Forgot to update interface signature
* [apr] Mul instead of Div
* [protocol][validator] Fold block reward accum per vaidator into validator-wrapper, off-chain => on-chain
* [votepower] Refactor votepower Roster, simplify aggregation of network wide rosters
* [votepower][shard] Adjust roster, optimize usage of BLSPublicKey as key, use MarshalText trick
* [shard] Granular errors
* [votepower][validator] Unify votepower data structure with off-chain usage
* [votepower][consensus][validator] Further simplify and unify votepower with off-chain, validator stats
* [votepower] Use RJs naming convention group,overall
* [votepower] Remove Println, do keep enforcing order
* [effective][reward] Expand semantics of eligibility as it was overloaded and confusing, evict old voting power computations
* [apr] Adjust json field name
* [votepower] Only aggregate on external validator
* [votepower] Mistake on aggregation, custom presentation network-wide
* [rpc][validator][availability] Remove parameter, take into account empty snapshot
* [apr] Use snapshots from two, one epochs ago. Still have question on header
* [apr] Use GetHeaderByNumber for the header needed for time stamp
* [chain] Evict > 3 epoch old voting power
* [blockchain] Leave Delete Validator snapshot as TODO
* [validator][rpc][effective] Undo changes to Protocol field, use virtual construct at RPC layer for meaning
* [project] Address PR comments
* [committee][rpc] Move +1 to computation of epos round rather than hack mutation
* [reward] Remove entire unnecessary loop, hook on AddReward. Remove unnecessary new big int
* [votepower][rpc][validator] Stick with numeric.Dec for token involved with computation, expose accumulate block-reward in RPC
* [effective][committee] Track the candidates for the EPoS auction, RPC median-stake benefits
* [node] Add hack way to get real error reason of why cannot load shardchain
* [consensus] Expand log on current issue on nil block
* [apr] Do the actual call to compute for validator's APR
* [committee] Wrap SlotOrder with validator address, manifests in median-stake RPC
* [apr] Incorrect error handle order
* [quorum] Remove incorrect compare on bls Key, (typo), remove redundant error check
* [shard] Add log if stakedSlots is 0
* [apr] More sanity check on div by zero, more lenient on error when dont have historical data yet
* [committee] Remove + 1 on seat count
* [apr] Use int64() directly
* [apr] Log when odd empty nil header
* [apr] Do not crash on empty header, figure out later
* [staking][validation][protocol] Limit max bls keys
* [staking-era] Fold banned and active into single field
* [slash][effective] Remove LRU cache for slash, change .Active to enumeration
* [slash] Remove leftover wrong usage of Logger
* [slash][offchain] Only Decode if len > 0
* [offchain] cosmetic
* [slash] Remove some logs in proposal
* [webhook] Move webhook with call for when cannot commit block
* [shard] Finally make finding subcommittee by shardID an explicit error
* [node] Whitespace, prefer literal
* [webhook] Report bad block to webhook
* [slash] Expand verify, remove bad log usage, explicit error handle
* [slash] Check on key size
* [slash] Explicit upper bound of pending slashes
* [slash] Use right epoch snapshot, fail to verify if epoch wrong on beaconchain
* [multibls] Make max count allowed be 1/3 of external slots
* [quorum] Remove bad API of ShardIDProvider, factor out committee key as method of committee
* [verify] Begin factor out of common verification approach
* [project] Further remove RawJSON log, use proper epoch for snapshot
* [slash] Implement verification
* [slash] Implement BLS key verification of ballots
* [rpc] Keep validator information as meaningful as possible
* [staking] Never can stop being banned
* [slash] Comments and default Unknown case of eligibility
* [slash] Be explicit on what input values allowed when want to change EPOSStatus
* [consensus] Remove unneeded TODO
* [verify] Add proper error message
* [rpc] Give back to caller their wrong chain id
* [chain] Add extra map dump of delegation sizing for downstream analysis
* [engine] Less code, more methods
* [offchain] More leniency in handling slash bytes and delete from pending
* [validator] Remove errors on bad input for edit
* [webhook] Loop over all self address
* [rpc] Remove accidential recursion
* [rpc] Never ignore errors, fix RPC with current snap info, no div by zero
* [rpc] Expose BadBlock for downstream
* [availability] Thread through missing signers for offchain usage in WriteBlockWithState
* [project] Merge with master, accept master conflicts
* [offchain] Remove inactive signers from offchain data, should fix median-stake issues
* [rpc] Test idea that returning error cause jenkins failure
* [staking] Put editvalidator back into validator list cache
* [rpc] Add network voting-power to validator information
* [votepower] Extend roster with raw percentage
* [rpc] If have validator but not snapshot, give back validator
* [rpc] Expose effective-stake as well
* [project] Remove missedSignThreshold map, use instance for stakedslots count
* [staking] Remove edit-validator idea from previous filter idea
* [assignment] Make error case be explicit on public keys, log out important committee size info
* [committee] Do hmy nodes first, exit early if 0 externals to do
* [genesis] Never ignore errors
* [slash][availability] Remove log, remove leftover yaml
* [committee] Maintain same API as before
* [rpc] Enchance RPC of validator information for current epoch signing percent
* [availability] Remove excessive log
* [availability][slash] Unify yaml hook config
* [availability][webhooks] Call webhook when reach missing signing threshold