[slashing] Checkpoint to verify changing of committee works

pull/1850/head
Edgar Aroutiounian 5 years ago
parent c1baaeaa06
commit f1cf151ba1
  1. 2
      cmd/client/wallet/main.go
  2. 9
      cmd/harmony/main.go
  3. 4
      consensus/consensus.go
  4. 9
      consensus/consensus_service.go
  5. 27
      consensus/consensus_v2.go
  6. 1
      consensus/quorum/quorum.go
  7. 212
      core/blockchain.go
  8. 2
      internal/configs/sharding/localnet.go
  9. 2
      internal/params/config.go
  10. 7
      node/node.go
  11. 2
      node/node_genesis.go
  12. 40
      node/node_handler.go
  13. 11
      node/node_newblock.go
  14. 3
      shard/committee/assignment.go
  15. 2
      shard/shard_state.go

@ -304,7 +304,7 @@ func createWalletNode() *node.Node {
panic(err)
}
chainDBFactory := &shardchain.MemDBFactory{}
w := node.New(host, nil, chainDBFactory, false)
w := node.New(host, nil, chainDBFactory, false, "")
w.Client = client.NewClient(w.GetHost(), uint32(shardID))
w.NodeConfig.SetRole(nodeconfig.ClientNode)

@ -310,7 +310,11 @@ func setupConsensusAndNode(nodeConfig *nodeconfig.ConfigType) *node.Node {
// Current node.
chainDBFactory := &shardchain.LDBFactory{RootDir: nodeConfig.DBDir}
currentNode := node.New(myHost, currentConsensus, chainDBFactory, *isArchival)
// fmt.Println("What is my port at this moment", *port)
currentNode := node.New(
myHost, currentConsensus, chainDBFactory, *isArchival, *port,
)
switch {
case *networkType == nodeconfig.Localnet:
@ -340,7 +344,6 @@ func setupConsensusAndNode(nodeConfig *nodeconfig.ConfigType) *node.Node {
currentNode.NodeConfig.SetPushgatewayIP(nodeConfig.PushgatewayIP)
currentNode.NodeConfig.SetPushgatewayPort(nodeConfig.PushgatewayPort)
currentNode.NodeConfig.SetMetricsFlag(nodeConfig.MetricsFlag)
currentNode.NodeConfig.SetBeaconGroupID(nodeconfig.NewGroupIDByShardID(0))
switch *nodeType {
@ -496,6 +499,8 @@ func main() {
currentNode.ServiceManagerSetup()
currentNode.RunServices()
// fmt.Println("CurrentRPC-port", *port)
// RPC for SDK not supported for mainnet.
if err := currentNode.StartRPC(*port); err != nil {
utils.Logger().Warn().

@ -160,6 +160,10 @@ func (consensus *Consensus) SetCommitDelay(delay time.Duration) {
consensus.delayCommit = delay
}
func (consensus *Consensus) SetPrivateKey(priKey *bls.SecretKey) {
consensus.priKey = priKey
}
// DisableViewChangeForTestingOnly makes the receiver not propose view
// changes when it should, e.g. leader timeout.
//

@ -119,6 +119,7 @@ func (consensus *Consensus) UpdatePublicKeys(pubKeys []*bls.PublicKey) int64 {
for i := range pubKeys {
utils.Logger().Info().Int("index", i).Str("BLSPubKey", pubKeys[i].SerializeToHexStr()).Msg("Member")
}
consensus.LeaderPubKey = pubKeys[0]
utils.Logger().Info().
Str("info", consensus.LeaderPubKey.SerializeToHexStr()).Msg("My Leader")
@ -457,8 +458,16 @@ func (consensus *Consensus) UpdateConsensusInformation() Mode {
hasError := false
header := consensus.ChainReader.CurrentHeader()
epoch := header.Epoch()
// fmt.Println("update-consensus",
// epoch,
// consensus.Decider.Policy() != quorum.SuperMajorityStake,
// consensus.ChainReader.Config().IsStaking(epoch),
// )
if consensus.Decider.Policy() != quorum.SuperMajorityStake &&
consensus.ChainReader.Config().IsStaking(epoch) {
fmt.Println("Hit new decider on quorum")
consensus.Decider = quorum.NewDecider(quorum.SuperMajorityStake)
}
_, curPubKeys := committee.WithStakingEnabled.ComputePublicKeys(

@ -4,6 +4,7 @@ import (
"bytes"
"encoding/binary"
"encoding/hex"
"fmt"
"time"
"github.com/ethereum/go-ethereum/common"
@ -315,11 +316,37 @@ func (consensus *Consensus) onPrepare(msg *msg_pb.Message) {
}
senderKey, err := consensus.verifySenderKey(msg)
// fmt.Println("prepare-sender-key", senderKey.SerializeToHexStr())
// for _, v := range consensus.Decider.DumpParticipants() {
// fmt.Println("in-committee-", consensus.ShardID, v)
// }
if err != nil {
fmt.Println("On Prepare is busted =/")
// type t struct {
// Participants []string `json:"committee-members"`
// ShardID uint32 `json:"shard-id"`
// }
// b, _ := json.Marshal(t{consensus.Decider.DumpParticipants(), consensus.ShardID})
// fmt.Println(string(b))
utils.Logger().Error().Err(err).Msg("[OnPrepare] VerifySenderKey failed")
return
}
if err = verifyMessageSig(senderKey, msg); err != nil {
fmt.Println("unable to verify message sig")
// p := consensus.Decider.DumpParticipants()
// for _, k := range p {
// if senderKey.SerializeToHexStr() == k {
// fmt.Println("Sender is in my committee quorum", consensus.PubKey.SerializeToHexStr())
// break
// }
// }
// fmt.Println("Bad sender?", senderKey.SerializeToHexStr())
utils.Logger().Error().Err(err).Msg("[OnPrepare] Failed to verify sender's signature")
return
}

@ -271,7 +271,6 @@ func NewDecider(p Policy) Decider {
case SuperMajorityVote:
return &uniformVoteWeight{c.DependencyInjectionWriter, c}
case SuperMajorityStake:
fmt.Println("HRS")
return &stakedVoteWeight{
c.SignatureReader,
c.DependencyInjectionWriter,

@ -18,7 +18,6 @@
package core
import (
"bytes"
"errors"
"fmt"
"io"
@ -2442,7 +2441,6 @@ func (bc *BlockChain) CurrentValidatorAddresses() []common.Address {
const (
// Pick big number for interesting looking one addresses
amount = 400
fixedRandomGen = 98765654323123134
fixedRandomGenStakeL = 40
fixedRandomGenStakeH = 150
@ -2457,14 +2455,192 @@ var (
blsSlotsGen = rand.New(rand.NewSource(8080))
)
type TempTest struct {
Public string `json:"public-key"`
Private string `json:"private-key"`
}
var (
tempBank map[common.Address]*staking.Validator = map[common.Address]*staking.Validator{}
addrs []common.Address
NewKeys map[string]TempTest = map[string]TempTest{
// Shard0
"9012": TempTest{"e2c13c84c8f2396cf7180d5026e048e59ec770a2851003f1f2ab764a79c07463681ed7ddfe62bc4d440526a270891c86", "19e9adb6f6a10a160b951c33fee81e53beb7e41ba1b500626a1082215faba010"},
"9010": TempTest{"1480fca328daaddd3487195c5500969ecccbb806b6bf464734e0e3ad18c64badfae8578d76e2e9281b6a3645d056960a", "8e7874184b1fe76d23b6a3e20b7178928123e7e4e63ae642235c5a955983c26c"},
"9108": TempTest{"9d657b1854d6477dba8bca9606f6ac884df308558f2b3b545fc76a9ef02abc87d3518cf1134d21acf03036cea2820f02", "f2b677a9cc5b2325843d493dbc1a970d40c7edc032ff848a6116fcfe9a465015"},
// Shard1
"9011": TempTest{"72ccee6c5767a21d9b659a510482acca9b2303055d8efe09c2b55bd7d8910de4521036274c8a3a30564f0e9378b05189", "df8c569d2ed038f34408dcf980895de448bd25866192cc994aeb094982d7f769"},
"9013": TempTest{"249976f984f30306f800ef42fb45272b391cfdd17f966e093a9f711e30f66f77ecda6c367bf79afc9fa31a1789e9ee8e", "ba742bf554447d0a6bb8da47f9134817c3f8a5c3717ed50e6c3fe6bc488fbc67"},
"9107": TempTest{"ec143fa8ca3febd4b8b8d160b214a7135ab48f13d5f37ffce22607959e5da5b5852c8a8403ba0836fe64645fc1d92f97", "8ac153f6efc02cb4eb7c566a5fe89dd9bbe6da3df0c68b3e5dd5f4887b09725f"},
}
)
var (
accounts = [...][]string{
{"14cab59f60837090b428a4fe6bca8f82c0bd995322feec4684c444d8f6e7c6c0a6c3f1705b0d285fe0257b266626a316", "1c733e5866e2f615e4d299e493f6593f4f282d10e35ca0362dfc4fba526be863"},
{"d3c9c227f945c8a7dc0857884710a9904e29b9aeb8ffe1460e978568385cf3a1b6d2a73b47af0c2bb4851aff684ed383", "20667b58e47025b8b4a5524e5fd5fcd094f0126926098d8cba91cf8c57828237"},
{"ea50cd0a7263d5530b633c5056d183388ac6fc5dfa6e7a8b59ed2c0ca9025d27d54d78e45a817bc3821a5d96d5ae7c97", "353a96f7484637fc5c806b14ed409c89c884f97aec14152be2dc02a95c02a256"},
{"56b1e97e79fe37e19a5876c1f0e24e12e4252a086088221f73ad43174f477c02b2083e301216791092a8aa2633428883", "255f3197ee303e20a42223ea9dbe1cd2791c6c91d50ff7d2f406d480e133db22"},
{"b166d48dec6934dbf6c446742de9adee53c7a6872f63e62611634382b163b7a1e0400996674db8c8d6910c4d8d935889", "083d9eb3915564ecaa4997ad4011e42a660287bf0175bd46cbfc5ec766b97d54"},
{"9cf1e8c8cc7e32cdbdb762d464032a6fa5b74e7dbf916909ca22a57ff0c01856e350e2a7c2b1c74d8871d0c9af70640e", "a506f6895829956c8c514868f7283fcd6833e7cadc4c62e57365678f9417622a"},
{"e43ac882bdac2bfd79f0645d8a97263ba6aede152400c946ff6670eee1da6154dade87eb43c5fc13316ec3cffbbc8b8f", "2d5ed7ebf50eb0a3586800d691d28b4ba4ff701afd3f1246dfa216b89cc9131a"},
{"40b33fbbb15a002693bd5a4a7da86e45941f66c82c8c41cbaecadcf3d1956dd4a19208d69908663bcbc606a4c9f67002", "40c57ce993f53c298434a4be3e78dfc35c45c336671e2e8c0cfdb56eda36dc20"},
{"2b6d32cd1a32f813bb98991002d42703cdb00be6d5f4f319204d2a539da58a14c5a9b3d8bb74a16c054c55339a53ae08", "b52394fc0fc094e71a1a64ef25897db58abc6cd1bb172672e4c0382d5b4a7826"},
{"444ac7f6f16a4f023c18d7e7acf2cf8ebb96a2473e02a403f2252839b0309851df3abb1d24f7ae4819c7e9283e818897", "3043bbfddc4d950ef65f45e364c5e28b416abc5d5643dd14d59d19410f25f65d"},
{"dcdc15f99ecd08d6e8e7a8746fc781d0113855ef6866c9d03f445f5b8bf4bde005148b28b75a3c7c3a0f37ac49e77986", "96aedec3f2b3d48c8464f04dcaf4dbf4c27b7108af836d0581d347e569d29344"},
{"1c4b625ac8424d7e45df5aca7179113af2edeea36457418ae84a1294e54f4b740309fc1b4e4b981b6f51ac0a68dd5791", "15a1b5aa27fe98682db715ad177e8e3c661ad917405a135b18acdfb73a71881e"},
{"7e72cbeb6152d45903cb476cef4c2e65eb6a5e0fa8d90d46e0bba4ff16853969c73bbaee66d0c3f47a556c502f87a319", "c4cdb2f30ccbad6200fee58cc622c8849139484599cb43b65e52aac55d888a4e"},
{"1fdf24b10e748798be733d4be7d8c5d18fde8800e3828cf6e7ec66beb87c55aae345bfb5b6321ff059089dcaef67e696", "be1e345b4f85583750c6ed3a912d613d9a47ae06e79492d8a7a63362ed02dd06"},
{"c29b37816e1ddf0b7736af7ed22f4ddcab26dbb4bdd7a5347474aeffb9d933e81a14b66e98018c4dc125b2b0c1c1f605", "65e2a6aad957d23917ef958e9465b10bf0271122820682bd9360225e0b17c667"},
{"7990b4f5975e399398b82bdf87eba6852dfff49ce25bcc88a360861a660c1fcee3a1f994a4879f482f467fc53aa54e13", "12deb9915b4b28ea7b822467030910878bfcc1cc27d3f0147dd0cd9213b77718"},
{"27877ce5cbed77848fa7f894c2b4a7f8fd11d0e31e0c49f88682ef063c44da291a728797e6e5852d0bcec659bf05dd85", "7a84694b1084c2f79d0f61cb46e7ff724a31f3774194e535eedc51df3e89e214"},
{"73a0feab8fc245419d8459e3d50e5133a835a69050c417e501f826873149c645cf1290619a054d1b4485b9175c69a092", "27ff614de69f7da721c0ec240af78c928ee60418940869b9dbeba6e939f9df70"},
{"dca05a3e1d080b69496beb131b2c18dfbccf9c5fb470f16bb4a39b5c3aff19fb6aa37b115009ca7724038059dbfa2d02", "ae84b73e496fcf5f5661773ba92125b3d19f53f9539e0ef5f8cabd7c5a739321"},
{"0a9221c81cfb6340e4e40a46403970d6f929c090bc4169540bbcbe02fb0ad6b06941dcb192677b9e2204a5ef27a24487", "a18c0fbea616989fc31e919c1f8090dc42cf02f410808ab1573d0b1618f3ec00"},
{"e03d395369fee3c9bc7261bbb17bfb5eaf09e0b88978cb70a6c18f9860c7b68f231db64dd69d04035683762866febe00", "e7ac0c215d3fc055426dfdb4a05b4c48d41c7e850d6c5d7ecb24a6a5061e750c"},
{"6a58a3ba54421cfd0bf2c8b15b92d1f9015ffc4d6e76852c5609b092a14a5ed2fa49ba1183414640e3c2c43e41b55286", "7d09db6b6fd3f9fa03ef6f788f59c12292250950ebe37e0def2db46c1af8325f"},
{"adda915c4ca55d78c7dc595bc26452a3cd1a8cc117fbd30bfdd35ab234519566b4ad0aa581ae6ac64812990eabdd1204", "4fd18f56ad25de60b60caedc2c3b14eb8b2cc30e2a258b3f1348fa337b25ae59"},
{"af1ba6ca3e3ba7436e3054d4b5cb3e19b7b1e0403bfbb76a4e25a1ed0fb75258d9fdf53f609394e002e865bfe525988b", "9cbaa24d59024b19a14f399a8183f4ab8a2558714eb01c3a8ff35890e6750908"},
{"dcbfe47fdfee29df070c078609be69c412e44b5f7dd10b1ef58ed368b7a8c422f1c3b70debed3441c0cf15ad7d03df05", "82d910e82dd49e79f13829ed74f8562760df0956a7ae7e60ed1cfec9ef2f9727"},
{"a61d2dfea77bd324d2188181487a99e8afa12b09ebe41e5bd031f24a07eef785fb0ef80f3425ed44ab1023a5a41fac81", "015e5b8a897f4bad686f29b8c1fcc81c1654dff616fd21b1664194369d0c5e62"},
{"a82bdbd2c017fe51aee694151138a7a1b9df848c7998ad7a9fb1df2003f0d52cc99099d5fc12a3211f91d411c3553b11", "a49de622d95e586b1bf55b53d18364ff46bab263e73e2b03f00fe5d69923d248"},
{"390851593559be7658ac6c342422f4a447a8291dc517cb1809e150e6b5fd538ab60e1b9bdbe6941ff78fde71ca68f989", "2f5ba8ef8e25999004a5c319cc5a5a4c62ac5c6a0bfc8d25419bfeac91c07f73"},
{"c04d3fd26431a4d0ebe1ed385b46ad975f6a663365b891dd1b25a731cb7b4295f88b920451337152480571006eafa180", "e8538488afc01b044e01f6eaad582949c792160906fcb7d6047d174ecf2e7b39"},
{"02e8a378a863080f06f4714161a4b592550e6889e15f296bdb33a156675a37af13a03522973e7329ba0bf8c79dfb4d06", "8b57d172579dbe19c21dfcf00d47ac5eced33a531c298df13038350c5aea391b"},
{"a39b6cff47d06e9857c94da5229f814ebeaf041a704dcbff8d64224b5fa996e923e015e1c36b9e48031f48948d816b86", "c6bb4e835e4c8949117606d6bdb9610a0ebaf7eafe66ff93e97e8f6d054b8a72"},
{"226c9493a85f82fd2efd3d933cf0a90436e0d16ad86d06619f01b75d2b89371e51b9c8b9417e3737538f09382a657717", "ae0e6194d4b86bbbfd6a7d557f0b520a37c1d58350801c6b2fe691c8e8b7a617"},
{"8b0d5f40e3d655f9b8e6e4cef1c005c02ccbee539d7a35e5b148233e2cba8d050a838e69a156c29e416746961513f819", "8539c03e72eb85ff3321593fbb7f8a86806f93756c52b611ccdc0fdc3849ac11"},
{"72506fb7d6467a9be5dc91051d3639e8eeebf2cf9ef81b3d8a5e95a47c35c2636c74f21ac22ae8bb9e9f43cda4edbf02", "563cce730dab68d1d9a57d8ad092d48b9589b4fb0926a6e2a3d92b110cfc9b6e"},
{"27614c62a76a38b79dddee0fd9142b1d18b1b2502a411b86a2e43eba3a01b6a87f11192dbc02492647173c77c2cd290d", "e31ad7aed3c46221e36f2bedf1ba30ef4c891d0dfb2ca271a695175224fe2907"},
{"bd59cbb9514ea7e9a6d8b7d6b5d05497f66aae8d32b3b97657ffe13748963dccdc4d3ff48002dd2b6e05b59e7cd6090c", "65f1a41835f471005c8ab1a65b513372c4a40a68d4c8300313f1368a28d14064"},
{"5f49373eba2af47b6f0ec9f9ab925b0e4d1769dddc656bdf2adc992eca654495222a1b6e89fd97e86c52b039bb7c3212", "7845b0f43a621204bfbe7d22ca91fdf9abf7eb6ba355bca2f1e650b33d69b20a"},
{"511329bd1ccce0bb0d86751fb9dbfe7c7e3dd1176112f182145b1123a850e75b13df43c199153de8078b3d2ebbadb086", "0f800ac46d8ce7131f09532ee239ce14a8356375cd374c2d48081a02a3a1de61"},
{"37df36cc1a203a38264442093e424ff7b56a854ec9ff07e12e316f0f5b0f0ae82262eef41418f74593daafbb3e12780b", "f6d241140bef139880c66042c2a77cd94d5183f982c83359849ded6de196a319"},
{"6d66cc4174873e1df4c34f56c3d1d01281a2bfd25fbfbd45af64d4aaa5fcbcd889aabeeee6314a0061986074f9937b88", "d9da208d426380be14beee42db5e47f1950927af70bb1f7d30488ce829d28436"},
{"e965403c1eecd5ed151e844b2d9bf601fb8d8d1fc86169e60346dc9bdfd4c5317312c02b9caada3c9dcecef61b21ba96", "8ff45b01787acd4b2d4a780c1bf3bea1495e6cba6328371028155d4c0fc0d773"},
{"7bd979db856a697dce7da76feab7f6e3c036984ea766198c695dff95532f8599d4cf6e3c00e2455bfb4b5ce0b26b5192", "c83952ee8ac4b25452a3fcfc75ba07ce58c392878b7c519922fa4200d1169e40"},
{"4c40089a3eddbef0886fd375302c5dcd7b56f83cf9ff48afa56389d9d7b8b0d6daa0f2e2241773fa7ab7f0cc77621917", "7cd8e8fac117a7e327a9d609f176dfd0445749ec823096ff3f29930047959303"},
{"2694baa0e0bd4e24c192ae5bc4b3a096b2adb0026823298c4c96bacf062b591a1a3b557d6c81773a0bcd0e1031755b8e", "81ae0d5dd80d47acb9761f3734533fa9543a19ae1a1fd67b10555775f1dcea37"},
{"68bc09c6277fe5a478a4b036e9ede1934b38e7ba86315360b7c75c1999b848df0bac7fe00f9d1e43ca1fa20c0a200c07", "8a4172905299d69fb005ea2650b42604d8900ce9967304648545e8c0267f6b0f"},
{"77c4d9e0ec0f1cf6c981481f766b1395ba0912a8020a5ef1e15949ffa95c6844fba6a87cb7dc3a01774ab7e26360cb96", "09a98961b4ca28357fefb75ab183074e8e439a9109d4c8a12e06f1678fcf9c1a"},
{"7fa504b0d97596010748564f736385fda141c12f1dee6bd1f0c3bf1793f5089a1c78db84ac0ca23dc48b764d356ea188", "26ee79bf3c2391bd9af142058f773b93c9d9b8659cc2899452ba9f3eb017151c"},
{"ddf52e6c80dc39fa940e85265ef09ade1a44e3c83eb5bc2798555ca3ecd5ec8438db21cbfe79be0f4ccdbffb22699d08", "2350f67df6146af7aef3f36de4a815574aa33db097a22184ef11911014546a4e"},
{"b0e476eb3d88e44fe6d654b78302009940f5f7ec80e0c236802554f223c8c4011a6732930e7425973210a6d669b92696", "6898e732291fc8fad1eeb76e42be8ac8c15abf6f028bc965bef92acfae389d3a"},
{"ae7eff87ebc4c3ea47474367a10880139cde747de0be5278c7935f54e245c762294e1fa0094ede65e6f716a0c7ee7680", "d68df81e8b89abf32597524d52240c17d0be7e3a02bc34a2ed3d633307e72f17"},
{"30b89a0199fb280398f0d65b200b4b45327368a45337f679993ec3e7d38969d08ba3e1387e1c85ab2c4b43ce674bc105", "8340272fa1b8c273102ffed66a3934d8320772dfd5fdffdbfb969fee97364464"},
{"9542e021b19160efc08a5aca567f7d4cba277e25927b756f3e0ad535b74caa8b3d62216c90304625f3c4293827c3c38c", "01c590a4f2bd80c5411d744b2223f5851d2e1c46731dc3a730902ad017e67c5a"},
{"7ed1287d91d29e1fbdf43360a494f53d450fab14e3b9cc08a63f06c868d757c32e781622603a37057c909d57f1901088", "f56915dc69dea77304cab132e8bc247e568a0b2b11672a39b84c38c9dcc49468"},
{"514051f789312e3a1851ad56ae4f64bf798c1147d99065903f5aa5807e938ce6cafa0b4122b0e3b6636f425241b2ce09", "1bb85c34055d3a9e12482136a65a837078119927296ebb5ae6a7ddd0c0aba514"},
{"f8727e55841bd8ae53db38e67377b58e882072e937f54cdcf70c4c7f151fe7b175110d0962b66167de26c6074b6a8c17", "58847f00751f7d5bf9594957e47a88c773b16257627cd052b7180e1c0721e950"},
{"b4225d7cbe4a290cf880dce13d65155b8ddb2d27ee495929338780d268ad96747f4013e7455fcd589ceadeecfc138a03", "3e305f7d0941507b251469d4628294582bd9ac3c995067606321422492e3442b"},
{"82ec676e743abf1265d81b1bab873acc911d533cf9aec5043dbbaa7b29ee1163180cc84bb22d1a567c532e3d676cc281", "da0a4974718fd08ae9cd46a6d0217a67c3fb2758e81a2419d13bb2be56eb134e"},
{"cce64ff99850372b795fd146688c9c8f54d6aab555cf624623e665ebaffc44b3587d7759a95968b4cc874380be096993", "440bbf61908f54e4801fcf215e62256b1d2bdac6a2c0cd940a20beed04cbb844"},
{"0b10167f5ca2979864e46125df72aca33956173aee020ca88dec3e65a5e0d41c1f317ba930d66ef9075c9ab20595f58e", "bdd7446112ddf42ce0d468a01a0c1c08e45b6b76239336878922235216002210"},
{"502ca2a064d45970776140c190ae8ff0472f8c7c3236f43d0d706e72a430ffff4050bb8214de2fcbec7e9c3b1577f688", "184d37b6d7f04f232e5f8262b28a4aa26dc68f2208810d02665383cbfa074835"},
{"02e95502143d16ab34f082b4368113f49a6b7a4dbe33e10c172a1376add5405a934c2992a4e0755636e3faecc11abd88", "7dbaa1c7760334a0c6b7148fe91d7bde88d212317b45115643e29d0cb8484155"},
{"9d0892d0e8e2474fcbe225b69b9560571842cbcd8a35f0ecd0d3cb9885a079dfb2d1669f886062f28e2ea347fb7aa014", "b5a7ed451787128bee2b256be308e5b0f73ec1f3504f0400fb801c4ae373c327"},
{"c4349aa33c18eeda0be31e0a519c5a53cfc6940b995c88b5b34b81bc22310f3eb68a7d6abce6d7e609a6a269a75eeb8d", "5c142f86bbe3fd2f6e446060682587fec7dcef6f360fb1659bd380ecfba9c656"},
{"ba97d3b920e7590afd420458e4dfbce3328a7890dc150439bc9f9b343d4267851eddad645940a14c14f9c9dd085bab85", "966ca693d191cd6dfe003862122adee65c96d1aeca2ec85aff716c3ffef4ad35"},
{"6caaa02b4289dff76ddc7f8441bd83821847a7d1d2739303dca02b8510a3cb6037cb2562c2ad5a4528b555ff3128a618", "96bc5bcf9421b96e63c150d2ebdb9a75a85ff3854867462efe0178a7c4855623"},
{"1467f6aa800e4476846e721d6cd684cd899aa46d87c5b6ba674f9f9565c2fb64cbfec5b4af7b55e86fa2d8604acdb884", "1ef689c2fdcb0e93ed3830311f146f37dc1df26b7027760292a3818b4964671a"},
{"176f9edf6b38ce85d35f2d314287c03f2939a88230c2a493476a337133f9f2c00d1a69e0d24587b89597c400236d2f10", "c06afc1859c5148fc2c3820614739cc5132d50505fa7dc40e8a914e4b65c9847"},
{"4a6a00e30b327b8d9a01ebce8b5c765fa1a5ebdd3d7a06207590e5a293ab8b38a2a197e386e678cac86826953f2c5301", "1fda30d5de8a0e8b9d725af8805996f7e8a31f36406dee7e1d1e046265c4de04"},
{"5c33b153ee8c281b484c20f0a8d9626a1b13aa20d386347250996032df2cc607a307055ac46796de7e65b50e5149648e", "cc1a270c065654d949c5e9d2e158acdd3750655cb94ec94810041dd7a26c9e38"},
{"0633521bb2c3c27477e97ed506587ab4994072e97f307b87a735a0b77fb48de51975114bd24ea4938063d4edcd1da313", "f555d422832a7f8f8309f61b94cc4dd96d77041684dd08e72396bca00c52b439"},
{"e4ad16fd499040c0315c91eb645c0fba1b1f922772d39bd894c055735c9b9d483473d8b6321638e007bfcfcc1a67988f", "ba2d5d76f3178b954ad624c6af84467d4b55e43bfdd1add98dc50e9857514c02"},
{"ea8353454271fc95a17543728255a4c3135ec6a48b82458ff18568b155d30f3449c480882bc77d38cd553195fde5dc12", "964fac9a31467514411d96a44cacf2a5a6f0a2db985a12dcfb87adade0cecb4c"},
{"e298500b9c972c42cdac74a11a096ba2d64405d015fd5626e07561a297dc6c4f36fb5f1cb1c4d86894aec82d5e2ef691", "08bb76af47e9385c354655e9001ada326e811ae241c4d22f81a2111ad9baba44"},
{"04e34592e6f062a9558fc09ca379585e15b4ed6131e2766354cce6796233db689c340ed6ee0b7e9f40e85ef7b50e6a13", "efc1f64c2d8cda2d1107c0046703ddf4cf7ecfc6f38adc4631736e83846a145d"},
{"8c4b304f3a0c7310de817b6e958588cabb4124d0cdea74eecb8113a2daea0dad1ae203bd0d9ce228e2ee89d68965868a", "6e8f06bf1128b4a148b47ba8f2678398add67e0a8b11f81aa7adef4bd7d0c22d"},
{"02f3d61f931c09d5954878afc08799e1b8de77b1756576e3a11ef836247bdc212bad1fd287712a815228c2b13f5b128f", "468049f68a279e8be38b0d3f0c67758e45cc5bd4b5a236fc7ef3eba78b45176a"},
{"323245a1027c2a00b9fbb908840601a9bc2fd5808cc313a93b2f14714ebfd234dabe8984bc2169b09ad5327e2a3f6584", "5a65a9fa599fd7ef2140b7b80fd78842dcdbb4084f6e069ef427fee4cb2ca240"},
{"62a08494a9808ba4fb15431dfb431c8d993afe6a4e2d18214b8ea8ebedcbd46594894d4afc0290739fb17d4f7b71c389", "1d73c784cbd13c5e7987c78540aa21aabc395fd2cbb50a6561677945c2558d39"},
{"fd46f1477459c863f903ac7daba941e2c91031dc000740ca8d185a86939907bc9893ffe586dacdeabb1a3459c6e8a696", "04ca4066f6f3a49e8ff5ab3680a90bb2e17da973c4fb67022a6ceb3b05b1a152"},
{"e71d1a01831e052622264ad4d7e7a9123ede454257501c7c60d214904d124dafb023dba7d48dfcc49d50fca5ef2c5098", "de295122f5c2982ad00cda3cf81eba0fb05c087969b01862d7e75569c931b856"},
{"ea16cc1fd08e907911f247e6837ccbb8ebefbf8986fdbf2cb1e3c29254cf030ea211a279d8e368b61a48e49d1833db17", "1b3a20dfc6f2a25b1da99b2c836b1e8707d897a16313790ad0618f3c952dee10"},
{"dc90ec2c5c2e82793bcc45aa9ab72fe40b68d63e394e2f8b3b654f1b8bc87cf5e94a2fef0b955acac1018ef526858f84", "0973be2092613e69d8d16d251b74e6ebbb39932f9fecad384cc96f917438b811"},
{"cb7ce449200b1bbcec236273d2fd79bd6f633cfb21ea4720571d36a4ac0dfbe6d218f74d1093a7888652c2f82ab6820b", "568363bf1acd8ab07feaaf324401eb418883b936c720088a23a1867233083b35"},
{"277544d9b04150060bf5b53a9e53e64216613e2e5356a2113c7e4706f16a0babe6353a585444495aa175cc157aa40087", "ea0a26d7406f3ecaeb602a129cc6052db891fdec7a11e6ee852e8dbf3520a91d"},
{"92eeb95ca74d9f4e9deb0afb2f7a1f9973e2edfcd62c0c3d13c66b61bd3cef962198b5b5a2451934ea079ed1182d3591", "5a5fe61ae2e047bc0e8c81d5c5949749f4c419ad921a858e07524f2486f0a12b"},
{"e307e3b4bc5da252d020a755aba61f3adf35b3bb56b3ec8e0ded021674b620fa14d6071ccbb19f04820955474458bb19", "d44f0e3a91f72df286ae784ea61ec12b7340fafe647ec25b8155d630b55a3b12"},
{"f59598f47bfde137d5023f865861832949606c6256c235c697f01cfdc41583161ee6674ee89a1766c0a75e623be22509", "f310ef9048ed84f7474802b4ce8778582d1d91c6cb6e03af9741ed3c5759af3e"},
{"249976f984f30306f800ef42fb45272b391cfdd17f966e093a9f711e30f66f77ecda6c367bf79afc9fa31a1789e9ee8e", "ba742bf554447d0a6bb8da47f9134817c3f8a5c3717ed50e6c3fe6bc488fbc67"},
{"72ccee6c5767a21d9b659a510482acca9b2303055d8efe09c2b55bd7d8910de4521036274c8a3a30564f0e9378b05189", "df8c569d2ed038f34408dcf980895de448bd25866192cc994aeb094982d7f769"},
{"08a71ab590ae132ca2e1a7211e0f90498629b55a0a1e2b753b43c5f1cae8cefb4f2494e4fed603f2b725cd893cbb0c90", "14fac9e0979b69f4c9ba3de4eaefa4e26615dfb67430d459d3eda58567849e57"},
{"a59ffa292bb9162f55a83164c6162dd9b485b156d18c9d701649299da38aa5c3b2713ab9cac64132b98a3bece2061897", "8777f023e07075346c3ea3b2fe95f765284d952b3c04548085519fd9ff09dc61"},
{"e2c13c84c8f2396cf7180d5026e048e59ec770a2851003f1f2ab764a79c07463681ed7ddfe62bc4d440526a270891c86", "19e9adb6f6a10a160b951c33fee81e53beb7e41ba1b500626a1082215faba010"},
{"ec143fa8ca3febd4b8b8d160b214a7135ab48f13d5f37ffce22607959e5da5b5852c8a8403ba0836fe64645fc1d92f97", "8ac153f6efc02cb4eb7c566a5fe89dd9bbe6da3df0c68b3e5dd5f4887b09725f"},
{"dcee54914821c267328842dfa7aa8fc993488505818384169562f1fde35067b3258600e9bec801ffa91b2d4d44b04580", "3c4816103eab7b9e4f279dac808ef79a1754a526682503c9dade0c1b9413a316"},
{"cc120db9a2d189e58128b6c2c546be5a68c173de71b7f5062c184b3909faeed2699503aea5f2685a1b150685244cfe00", "a409124667a202e4ec48ae124dd1551e2f138090ad5aad51407cbcd5c2a56b5d"},
{"5005ee176e5040d0cbd2ed7464ea826690e9aa8c846adee42eb438db86be34cac177f50ae66db56f1f2759e06cd4ca86", "c66c665432c441e90bd14746c8b8dcfb0284e16f0214fb4b48da97dd23ba9f0e"},
{"9d657b1854d6477dba8bca9606f6ac884df308558f2b3b545fc76a9ef02abc87d3518cf1134d21acf03036cea2820f02", "f2b677a9cc5b2325843d493dbc1a970d40c7edc032ff848a6116fcfe9a465015"},
{"1480fca328daaddd3487195c5500969ecccbb806b6bf464734e0e3ad18c64badfae8578d76e2e9281b6a3645d056960a", "8e7874184b1fe76d23b6a3e20b7178928123e7e4e63ae642235c5a955983c26c"},
{"5139d2fbd1af771f76ecb93444d15a1a0bdb9706ef8149db9f88d9456e2b616a812f2bc21a320185c4619248950c9582", "3a0032951ccdcca696f82f16b16178f7d239db5444b6203292573ed1109e6466"},
{"3e15ed2b396c2076d2df067e58dec3c5fc0d5f31ff3b20cd245bfcaa58d73db8373da74ce7b852d95863c1954f1f4986", "8adbbb081aa9885854b8ce9b6d437e30136d065f2835f11ea6a0b89b74509372"},
{"e99f29a4791a9da645539d154acacb731f15906201e194a77aa7cf2cd4827692c28e7f3cb8d57a3dd0157d79c01e0492", "a68648839687f1bfab70ae1b8d41eab44cfdb00b599f4dfb5aae31cb77c1a60e"},
{"744d03bb36aec3680fd894d3761d30bd8f9bddabfcc0465e80bb288a43c02801073eaf441a4f99f10776788dc6bcdd8f", "be1fec362830fd7457db13e45cc5e24bf9aa15c54d347385b112bfe18044ff2a"},
{"a3b437fee6d9c0455b34b70c984e21ee8f1d6c17fb857462c67592b1994c72d72de61afbdc9fdfe5a90d598444b10516", "319f70b9d21899f6a9db38a9262e59a37212004ee8678f143d71bfb1b8bb5b54"},
{"02dbc59d3d2a173f2799ec5d9010238c762311beb1cf63df03937e416c9c67e491ba5fb912c2e46488c022c009257806", "2c39b8517d58e6f11d71459ad5f074cace01335bffc572741da5845e357b2d26"},
{"f26d9fe117f382c14128352de40ea9b662168f50a89cc10ccb20a3680c1ebfa5fe1efe84a7b1090e316ab86dbd734094", "f79aea85a3673fc026e1314139cbf9c12fbe5a688623465c966c175b69472f65"},
{"f3b034ab8643ac72cd29f3151d124348cf459aa7ad69dc0f98782120f69ebc82a21df0bd1db01ff5f9fe304f4c7b0485", "e6fb858d69eff707637c4c1a2c14a9bbc8c7f05ea58b208b119214c236c1512b"},
{"0a7559029ae550507facd6375a30f70cbc108407bb9c4fab8381fe5b8a30c0a2d99800b21a788b2d2f0e74f3c23c8b12", "25af65b82f969650b0c50d9916fd10798dda73f34382181e238106ebb9649652"},
{"c4b9926ffc51e45404cecc06dfe0d652c9510651470fbe2b948d6730373d472b3a9a87e748f80785f22544afbb16ec97", "8a2e1d44667d5082350de9b05536de4b3de88becc68b99d4cd922fa006d6481c"},
{"4a10b2749f91f9d8577f612b374274f8bd90e50d1294ec1bb043e4d0de590ae8adc0e48a7c494cf6559d9ee5bfb2ec82", "f2159355c79d46d5abd239a780d584846bb7f3622306e3dc6aef5d7646f8b037"},
{"cf03b1d8da5a8b063e278215d8e6677e9cee9a09cd0ededb32e28e623cd43ac7fa72e571e786ac925253e56941170099", "4a4939ded1d7210f01decf8905967a8814d94c7e6901923e49c0c862bda1cb0d"},
{"eb28831cc5257b4e85f824e4e1c71bd530eb60112f21a8284dc6272e11abc711041b64afebf202086b18917d765a2301", "09cf22643028d316bec1ecedddb2881064132939a7b63f50fc94509b6c5f5433"},
{"5220fa5b230d78234a25adfefff480a3664405f231eb87c797b33fb9338e5bdcad58e3b80780bf7cfc0705a51fd5d519", "7e985ff6ad71d8968bd7dede437467a9bb120d67cbe26866b81e9df6153e9e73"},
{"7402dc3baa41314482037cad9ac5487d0af9b8775b82b0cd4265af078a8b6af48358b884c3047c0c46f4bacb658c5b02", "12044340eb632a6ba4e9dc81f9bbcf33fa68792c45773ba51e4d62642c5ff761"},
{"43f08c35d400b36299cce44c74064da8ad15c2f4896dfa9c5810b09197e8f26e5d0ab11db797f2dc72f3fdd8b8fe4b8b", "00165cab4cea976f26edc80afc9e5a4b15678b20cfbe3d7f38a630fb1824c44a"},
{"4ad485a064eebbc26fc4c016b8ec979aa6816d1b847fe52111f677e9729f8793576946d67b9aa01265f98d4e437de988", "82e9fed6646457d008201d7cf489e0e308ab54235d1ef59a5ae484ad6e93ec34"},
{"733cab5ae15056a40cf515acac9a5e283f0dc56e5f7b7a1aed4e258d4ca0477a9804f2ddd59a6c2eef0697538fb8c491", "015db82e40041eeffc1573d93427be038b26d7600cd0651771daf3a97f747701"},
{"2abd73dd3f286c23e7bc0650a580b6bd29ce3a948067314629898d683b9e4c1d30924c01ff0813f7e912e7e69f07b28e", "c32154e8d23412450a33f46bc61716199d1316a3c3ae00ed7e374b0bc7fb3d0d"},
{"5ec4b7f1636b7d565addb55c6cf182b044560296dc3c82c846b3faae8e485fef77ce9d8b0e6a04f832454fedbad46a00", "63cae9af8c9adcd402aecce77cf0de3912e4c6e1574cdbf2ed3046c1605f4b30"},
{"160004f16449ca70b454f6260d8fccfd6b399e4a099ee05c745cea26ba48047373f105bbd426a7035fb582f8e6348291", "09bcf84d83fac97648715d60b7b70eee4e3abc03c0253bc5147913b9ed405717"},
{"23b33c8771e70d1a84dd2f24b924c50a7c518a6e6f5a073f4c223ef299876689c4164a8f29fc21a531895750166e0b85", "c7c917686f6829fc79cb5020ca7271bee4cd2c3fe8c7b31ddca5e8c1c11e7b1e"},
{"563a4f6d39adc91bd9033573a517e5a365b181b8b5b6f086f67bce1e09f80489a6b173f0ee02201e5d333dab3b1f9e0c", "452971a484dd203669f330cc5cc7a96febddb72ff8884d63a6ff225728c0ca46"},
{"d6be59700f6d81ea11cc22481d70b972741d52f9495f1637e7e2a478ed99898a4cbe5a5fbd6fd2648a10ad09796a5811", "52a6e2b5c5da26e75b96894f1a443d948f6235873040a511b4a33202f36cde1e"},
{"8fce243f7d8f4bb28195c428bc54c4a233d9ac7c204e75cb45771f1d4ba9725b3b9c69c24e390dd932ad930ef4741997", "1b3aab5c04b451cd714d55273f3749aaad4a45247911292ae84f02ccb6a30d1c"},
{"56318730454846ca6d9d7b23f2de5b3a67b4b62fa057e4556c144d6f543e2e9defc031ba3057be59b5532bb0b2f81c06", "5f434becf1c975090deeda7bf15c5705c03b767db5bd338f400368baffba9825"},
{"5f64a969b0ca0e06b78c8d6f0f655116dc526efa48115fc33320abfcf73dc1136a5833362dc3f9147a574fc0e5cb2f0c", "98a256ff411ebaacba2d0d1519a1f952b2e143dfe323202fed5046ccb24b2224"},
{"4ba427d9624cca3f21a76e31793debe6c7adaa871693ee3d88e8e943c4934f941896ca7e1cdac50901eea77998504f99", "39b81fcf87f18e479a6abbe2a7011fe5992fae0beca763782d911cf5dc8e5b0c"},
{"3a24c5b01460b83f48bc10eb56acb75252d800f3a57d42a04311d195dd63a0b768979c4a7291802d09b5339c3de84a88", "832df5a953bb748109d3346c2d9f1cd2268ae5026cb7d3251cf15e9ae60aad50"},
{"77f8d0e62982ae95a91b31b2d1ec05035784c4d63c91d213c499a4e6fac839057c53c15eaff6716c150a3888f05a4a13", "1fb813936193004802f311f7b24e034ca52d121c4e715cbe9f3ce6dd3f819356"},
{"f094a37f1631d595b40aec0ce15822f8a66e7403aad52858dc30e1a740ee83abe4a47d574725f90e9d2149d3afca5309", "b433b444d92f22f05f59b27e150442d1731c95e002610b5da3f265b0c25a6561"},
{"86d8c9181fc53c83d5c5a59ff71a5552422a4d5f50125c8235605bbed442250ab5eedc2a9af96e72d9df185af0b4620c", "b70c758757675dce385eb2a6019ae4b9768836a29cb8faa50e8a8016c603871d"},
{"69327dcb847bc70a01fad93968cc746628bf1422ff92b8b32202015ff75d85f8a3edd0a8c738c1d8c6a465ab895a6d13", "cdc4d41677731c59ae715be9a250fa0a674cabfe70b200afc1c11b651f977134"},
{"7493640a45a5cecbf761ce67b4070d1864e27972ed3ca7c55fd7c1f191be3dc3b5fca52202d4c5fae1156d1659cf4c97", "488a0d363880eaa61904ceadfcdcde361321926b532001e9b33f9e066eb76730"},
{"441e760d4d1d6fadc9dc4d67194375e14500c7c82d2fa8eb460bc9980dba72f213a34840ff10fd7ebf17cdf8215f7807", "bca8878d4b7da98864ca552843f7b0bb35bbc62b793ef0320b810549e50d0059"},
{"e44a73e261e0650238743e889e8ba28d77f6d760e4dddc8979b64c2b76716443801b6335700a32d8da477494cafeb301", "d35d194f207d2f1e5032ef4f138c6d732fa371b259f8a954a2c7f4b1bd0cd94e"},
{"73b97bd2114bd822efdb31fda3bd45d32b11ea2277d88a7e5b7de25e81363aa8a4f2d069111b08e215b933cd96705902", "7760a6f816e7d345554dc4559d9514eb5947226a349d464eda3a75f1af679a26"},
{"123f4ba326f048e9a9f650e7769db67d17b6a20198aec99fe92c74a8055fc78a9ec28171a1a09ab6d508172100974a06", "097af324bc4757ba78553480f11c0ba001c3cc96590f8537215a1514329f560e"},
{"0b859a8b28dfe7898f4f4e1cc346cc705da88403157f17813715d5c4e73e99fd2ac0d4c7afd1c87e8268c3f9380fdd05", "313a7f8c831827383a350b6c55a9d24b4532e63f610ac187bc7a92303ec5c604"},
{"77ce9b523ebc8339e0bce80d249954797e9749be4bf73bdc5bec030a81207be9d76051982c5b80c628de39c4c8e22598", "9d1452e022fd6a280ce7baf4ac3a7151cd71af54f3d0894289f95aa39ad4d439"},
{"cecdd9c3b88b68ea1a84c7d9e14e6a0112e27a8e7883730ddf129526b513f7630af673f9a89f5f28341163bc3f040e80", "07165b308d2924c30ca2a3e7205f46cd6094c8cfca62e1fb46b0e9ba4290043c"},
{"da6e4afdafbd87cebe3a7bfa165d118912e2ff180795196f49b0129bd777d671d78486b2660c5528aaee27aa2c314d03", "350fcb263739dc7b718982a9180037da35d067886d7a569854497d6dca56fc39"},
{"80e59409d68e0caeb5105c02234a861fd8bbc6962928d50f5f244e7ce73fb5425fc0668dd70207a3bcd0135372a8820e", "eb8af67f82be8f3ac0c01f4bf438e4215603cf07e4cf154932f9f4f2e220cd47"},
{"dfe1f5b9f22293440603171f7b0234ed76a5c3db16de169e94a2d04615e32db6b5099ea9e7607aea9f41694b3ee2a387", "427880ecb5a18008be31af70ac35feba1b7ecb774750509c46fedc6fe87a3c03"},
{"211c5709ec1d114b427d956a4d4433e3798ec214740ccd4c8dcc8688d8f5e2b54614f1b66c8032d76e8617ada8836e14", "dd00cdc07bc1454de81e99c7bcf08d96f5487f16c6b08c8c25642bf6f671671c"},
{"b7f66b9f9f023c98b5e4c5ca751561d55914e96d8db25aa1a2d482f4dfa9c38049a1697b432c9500adf9b0a2cc8d1390", "f9679df2366b7076068dcb62478c436d488a1234f46bc5d23a2582c30504ce39"},
{"24fc0f43dc21bfe7252bc26fd1ecd4c108b5ca6dcd6e213b4497ee3b9f39704a31ce4e4dd4dab8ecc4a0cccbbb9d050f", "818e23447a8c4028d57e3d450c7eb78312fca20a11168df831c629468f3da93e"},
{"3cf72ba7a2e414f3e3e42591f19b7811cc86abb09b689bcb321bac2280f59e0a052bafbf0dc05f9671ef3d48e6ea0892", "7852d030e30ef02fccddade41dd11dad0761ff3e0de2bf80a220afda46e60a04"},
{"525cf97855946b70709d2c56313ee51376082681c9a351a1829d49a6d18f337bdca6e5cf2219948b46b733dbe2657e05", "507f1cf227ecc51b58a6cb260a2ad88d0fae52b14df33080ffe634d125420d3a"},
{"2d43b3290b7d056e9f3d470d5c16a5018dc102b25ab5ccff98c4a7610241c956352d56652466158dd92024d65ad8300a", "dc9a9e84e89c316d7e82f17b6af209f7eecfa0592514b86ed367a0f36e91894f"},
{"16adbe52c89f86d6746e6135224eb0268db5b82fdc9f3332505daf7a79aab69b274cfc77ab63e0f6ecca5e1bf970fe17", "4464353707dd05051ef67ab31070b44e524c1a31f47681e7a88ae97142a13955"},
{"1432dc6b2c5c1b546acade2a96482350f2d5369ae7e6eb7cbe5e6abc4680237336ad9715552a110ce7d15c75a5440d80", "93ff03d1944a65e99cbf205094246c19c0269dfd17e75c4094fdb7ad99151b43"},
{"4f0b413335c109ac5fb56229816bd4aa6969678922125c9ecbbc1b371ed73dab6e743b6bc5ecedfd89a636dec3cb3396", "00de6ebd1259754b4d13117ed98410e6f794de52c91e85f827b2580b6a8e8a28"},
{"2bd7f336338b4af9ee6ffb24ebd4076b7bc3805bc496325379649356c1d98cb7e1245cd184c885f6271e8c08d765a603", "309ab0f63625e579b9294209fa00b949ed92f1c2203ef7e149d8e9713a45a551"},
{"7d86fe374d3e108b6988503428984b5a34e5b71746e5371c0f8df0ed29cc5852d89afb395a33503d580f6cef521b9e96", "49e42da63171901d51b62abc234100ecc9c07b22e6f180a747da15da66fa280e"},
{"95137562374a17ed96a3272a05889e52630a7c7c4c3a7d4c389d9a067805ad246b259e60949260aabc704a89beb10c05", "d0d08d77a535903dcc509f016825a12f6f49219bfef6e16fcc6d29b9b30de30f"},
}
)
// Public key first, private key second
func init() {
addrs = make([]common.Address, amount)
for i := 0; i < amount; i++ {
const a = 100
addrs = make([]common.Address, a)
for i := 0; i < a; i++ {
addr := common.Address{}
addr.SetBytes(
big.NewInt(int64(accountGenerator.Int63n(fixedRandomGen))).Bytes(),
@ -2483,30 +2659,26 @@ func init() {
someValidator.Stake = new(big.Int).Abs(big.NewInt(int64(
(r % modBy) + low,
)))
const amt = 2
pubKeys := make([]shard.BlsPublicKey, amt)
for j := 0; j < amt; j++ {
pair := accounts[i+j]
priKey := bls.SecretKey{}
pubKey := bls.PublicKey{}
slotsCount := blsSlotsGen.Intn(10)
if slotsCount <= 0 {
slotsCount *= -1
slotsCount++
}
pubKeys := make([]shard.BlsPublicKey, slotsCount)
pubKey.DeserializeHexStr(pair[0])
priKey.DeserializeHexStr(pair[1])
for i := 0; i < slotsCount; i++ {
k := shard.BlsPublicKey{}
j := bls.PublicKey{}
b := bytes.Buffer{}
b.Write(big.NewInt(int64(accountGenerator.Int63n(fixedRandomGen))).Bytes())
b.Write(big.NewInt(int64(accountGenerator.Int63n(fixedRandomGen))).Bytes())
b.Write(big.NewInt(int64(accountGenerator.Int63n(fixedRandomGen))).Bytes())
b.Write(big.NewInt(int64(accountGenerator.Int63n(fixedRandomGen))).Bytes())
j.Deserialize(b.Bytes()[:shard.PublicKeySizeInBytes])
k.FromLibBLSPublicKey(&j)
pubKeys[i] = k
k.FromLibBLSPublicKey(&pubKey)
pubKeys[j] = k
}
someValidator.SlotPubKeys = pubKeys
tempBank[addr] = someValidator
}
// b, _ := json.Marshal(TestBank)
// fmt.Println("keys", string(b))
}
// ValidatorCandidates returns the up to date validator candidates for next epoch

@ -17,7 +17,7 @@ const (
localnetV1Epoch = 1
localnetV2Epoch = 2
localnetEpochBlock1 = 10
localnetEpochBlock1 = 3
twoOne = 5
localnetVdfDifficulty = 5000 // This takes about 10s to finish the vdf

@ -37,7 +37,7 @@ var (
CrossTxEpoch: big.NewInt(0),
CrossLinkEpoch: big.NewInt(0),
// MinEpoch needed is at least 1, crashes on 0
StakingEpoch: EpochTBD,
StakingEpoch: big.NewInt(1),
EIP155Epoch: big.NewInt(0),
S3Epoch: big.NewInt(0),
}

@ -103,6 +103,7 @@ type syncConfig struct {
// Node represents a protocol-participating node in the network
type Node struct {
myPort string
Consensus *consensus.Consensus // Consensus object containing all Consensus related data (e.g. committee members, signatures, commits)
BlockChannel chan *types.Block // The channel to send newly proposed blocks
ConfirmedBlockChannel chan *types.Block // The channel to send confirmed blocks
@ -381,9 +382,13 @@ func (node *Node) GetSyncID() [SyncIDLength]byte {
}
// New creates a new node.
func New(host p2p.Host, consensusObj *consensus.Consensus, chainDBFactory shardchain.DBFactory, isArchival bool) *Node {
func New(host p2p.Host, consensusObj *consensus.Consensus,
chainDBFactory shardchain.DBFactory, isArchival bool, port string) *Node {
node := Node{}
node.myPort = port
// fmt.Println("as node, my port is", node.myPort)
node.syncFreq = SyncFrequency
node.beaconSyncFreq = SyncFrequency

@ -43,6 +43,8 @@ func (gi *genesisInitializer) InitChainDB(db ethdb.Database, shardID uint32) err
shardState, _ := committee.WithStakingEnabled.Compute(
big.NewInt(core.GenesisEpoch), gi.node.chainConfig, nil,
)
// fmt.Println("initial-shard-state", shardState.JSON())
if shardID != shard.BeaconChainShardID {
// store only the local shard for shard chains
c := shardState.FindCommitteeByID(shardID)

@ -3,6 +3,7 @@ package node
import (
"bytes"
"context"
"fmt"
"math/big"
"math/rand"
"sync/atomic"
@ -17,6 +18,7 @@ import (
proto_discovery "github.com/harmony-one/harmony/api/proto/discovery"
proto_node "github.com/harmony-one/harmony/api/proto/node"
"github.com/harmony-one/harmony/block"
"github.com/harmony-one/harmony/core"
"github.com/harmony-one/harmony/core/types"
nodeconfig "github.com/harmony-one/harmony/internal/configs/node"
"github.com/harmony-one/harmony/internal/ctxerror"
@ -332,6 +334,8 @@ func (node *Node) PostConsensusProcessing(newBlock *types.Block, commitSigAndBit
return
}
// fmt.Println("Finished consensus->", node.NodeConfig.Port)
// Update last consensus time for metrics
// TODO: randomly selected a few validators to broadcast messages instead of only leader broadcast
// TODO: refactor the asynchronous calls to separate go routine.
@ -360,8 +364,44 @@ func (node *Node) PostConsensusProcessing(newBlock *types.Block, commitSigAndBit
node.BroadcastMissingCXReceipts()
// Update consensus keys at last so the change of leader status doesn't mess up normal flow
// Not just at end of epoch, but end of pre-staking now
if shard.Schedule.IsLastBlock(newBlock.Number().Uint64()) {
type t struct {
ShardID uint32 `json:"shard-id"`
Count int `json:"count"`
Participants []string `json:"committee-members"`
}
// b1, _ := json.Marshal(t{node.Consensus.ShardID, len(node.Consensus.Decider.DumpParticipants()), node.Consensus.Decider.DumpParticipants()})
// fmt.Println("before", string(b1))
node.Consensus.UpdateConsensusInformation()
newKeys := node.Consensus.Decider.DumpParticipants()
myK := node.Consensus.PubKey.SerializeToHexStr()
myKeyInCommittee := false
for _, k := range newKeys {
if k == myK {
myKeyInCommittee = true
break
}
}
if myKeyInCommittee == false {
pair := core.NewKeys[node.myPort]
pub, priv := pair.Public, pair.Private
priKey := bls.SecretKey{}
pubKey := bls.PublicKey{}
pubKey.DeserializeHexStr(pub)
priKey.DeserializeHexStr(priv)
fmt.Println("new-pair", pair)
node.NodeConfig.ConsensusPriKey = &priKey
node.NodeConfig.ConsensusPubKey = &pubKey
node.Consensus.PubKey = &pubKey
node.Consensus.SetPrivateKey(&priKey)
}
}
// TODO chao: uncomment this after beacon syncing is stable

@ -1,6 +1,7 @@
package node
import (
"math/big"
"sort"
"time"
@ -120,6 +121,15 @@ func (node *Node) proposeNewBlock() (*types.Block, error) {
node.Consensus.ShardID, node.Beaconchain(),
)
// fmt.Println("Update my keys, right", "on port", node.NodeConfig.Port)
if node.Beaconchain().CurrentHeader().Epoch().Cmp(big.NewInt(1)) == 0 {
// fmt.Println("Update my keys, right", "on port", node.NodeConfig.Port)
// node.NodeConfig.ConsensusPriKey
// node.NodeConfig.ConsensusPubKey
}
// fmt.Println("super-comm", shardState.JSON())
if err != nil {
return nil, err
}
@ -133,6 +143,7 @@ func (node *Node) proposeNewBlock() (*types.Block, error) {
return node.Worker.FinalizeNewBlock(sig, mask, node.Consensus.GetViewID(), coinbase, crossLinks, shardState)
}
// TODO is this still needed?
func (node *Node) proposeLocalShardState(block *types.Block) {
logger := block.Logger(utils.Logger())
// TODO ek – read this from beaconchain once BC sync is fixed

@ -203,7 +203,7 @@ func eposStakedCommittee(
}
}
}
// fmt.Println("epos-based-committee", superComm.JSON())
return superComm, nil
}
@ -313,5 +313,6 @@ func (def partialStakingEnabled) Compute(
stakedSlots :=
(instance.NumNodesPerShard() - instance.NumHarmonyOperatedNodesPerShard()) *
int(instance.NumShards())
fmt.Println("Hit staking epoch -- compute")
return eposStakedCommittee(instance, stakerReader, stakedSlots)
}

@ -54,7 +54,7 @@ type Committee struct {
func (ss State) JSON() string {
type t struct {
NodeID
EcdsaAddress string `json:"one-address"`
EcdsaAddress string `json:"ecdsa-address"`
}
type v struct {
Committee

Loading…
Cancel
Save