package shardingconfig import ( "math/big" "github.com/harmony-one/harmony/numeric" "github.com/harmony-one/harmony/internal/genesis" "github.com/harmony-one/harmony/internal/params" ) // StressNetSchedule is the long-running public stressNet sharding // configuration schedule. var StressNetSchedule stressnetSchedule type stressnetSchedule struct{} const ( // ~0.5 hour per epoch stressnetBlocksPerEpoch = 1024 stressnetVdfDifficulty = 10000 // This takes about 20s to finish the vdf // StressNetHTTPPattern is the http pattern for stressnet. StressNetHTTPPattern = "https://api.s%d.stn.hmny.io" // StressNetWSPattern is the websocket pattern for stressnet. StressNetWSPattern = "wss://ws.s%d.stn.hmny.io" ) func (ss stressnetSchedule) InstanceForEpoch(epoch *big.Int) Instance { switch { case params.StressnetChainConfig.IsSixtyPercent(epoch): return stressnetV2 case epoch.Cmp(params.StressnetChainConfig.StakingEpoch) >= 0: return stressnetV1 default: // genesis return stressnetV0 } } func (ss stressnetSchedule) BlocksPerEpoch() uint64 { return stressnetBlocksPerEpoch } func (ss stressnetSchedule) CalcEpochNumber(blockNum uint64) *big.Int { epoch := blockNum / ss.BlocksPerEpoch() return big.NewInt(int64(epoch)) } func (ss stressnetSchedule) IsLastBlock(blockNum uint64) bool { return (blockNum+1)%ss.BlocksPerEpoch() == 0 } func (ss stressnetSchedule) EpochLastBlock(epochNum uint64) uint64 { return ss.BlocksPerEpoch()*(epochNum+1) - 1 } func (ss stressnetSchedule) VdfDifficulty() int { return stressnetVdfDifficulty } // TODO: remove it after randomness feature turned on mainnet //RandonnessStartingEpoch returns starting epoch of randonness generation func (ss stressnetSchedule) RandomnessStartingEpoch() uint64 { return mainnetRandomnessStartingEpoch } func (ss stressnetSchedule) GetNetworkID() NetworkID { return StressNet } // GetShardingStructure is the sharding structure for stressnet. func (ss stressnetSchedule) GetShardingStructure(numShard, shardID int) []map[string]interface{} { return genShardingStructure(numShard, shardID, StressNetHTTPPattern, StressNetWSPattern) } // IsSkippedEpoch returns if an epoch was skipped on shard due to staking epoch func (ss stressnetSchedule) IsSkippedEpoch(shardID uint32, epoch *big.Int) bool { return false } var stressnetReshardingEpoch = []*big.Int{ big.NewInt(0), params.StressnetChainConfig.StakingEpoch, } var stressnetV0 = MustNewInstance(2, 10, 10, numeric.OneDec(), genesis.TNHarmonyAccounts, genesis.TNFoundationalAccounts, stressnetReshardingEpoch, StressNetSchedule.BlocksPerEpoch()) var stressnetV1 = MustNewInstance(2, 30, 10, numeric.MustNewDecFromStr("0.9"), genesis.TNHarmonyAccounts, genesis.TNFoundationalAccounts, stressnetReshardingEpoch, StressNetSchedule.BlocksPerEpoch()) var stressnetV2 = MustNewInstance(2, 30, 10, numeric.MustNewDecFromStr("0.6"), genesis.TNHarmonyAccounts, genesis.TNFoundationalAccounts, stressnetReshardingEpoch, StressNetSchedule.BlocksPerEpoch())