pull/1064/head
ak 6 years ago
commit 5fa474a1cf
  1. 15
      accounts/keystore/keystore.go
  2. 173
      api/proto/message/message.pb.go
  3. 33
      api/proto/message/message.proto
  4. 3
      api/service/syncing/syncing.go
  5. 140
      cmd/client/wallet/main.go
  6. 28
      cmd/harmony/main.go
  7. 62
      consensus/consensus.go
  8. 6
      consensus/consensus_leader_msg_test.go
  9. 173
      consensus/consensus_service.go
  10. 24
      consensus/consensus_service_test.go
  11. 203
      consensus/consensus_v2.go
  12. 2
      consensus/consensus_viewchange_msg.go
  13. 48
      consensus/view_change.go
  14. 27
      core/resharding.go
  15. 6
      drand/drand_leader.go
  16. 1
      drand/drand_leader_msg.go
  17. 2
      drand/drand_validator_msg.go
  18. 2
      go.mod
  19. 221
      internal/genesis/foundational.go
  20. 904
      internal/genesis/genesis.go
  21. 20
      internal/genesis/newnodes.go
  22. 8
      internal/memprofiling/lib.go
  23. 59
      internal/utils/passphrase.go
  24. 44
      internal/utils/passphrase_test.go
  25. 46
      internal/utils/testing/tempfile.go
  26. 2
      node/node.go
  27. 2
      node/node_genesis.go
  28. 11
      node/node_handler.go
  29. 24
      node/node_newblock.go
  30. 4
      node/node_syncing.go
  31. 72
      scripts/monitor.sh
  32. 263
      scripts/node.sh
  33. 8
      test/crypto/bls/main.go
  34. 2
      test/debug.sh
  35. 11
      test/deploy.sh

@ -237,7 +237,7 @@ func (ks *KeyStore) Delete(a accounts.Account, passphrase string) error {
// Decrypting the key isn't really necessary, but we do
// it anyway to check the password and zero out the key
// immediately afterwards.
a, key, err := ks.getDecryptedKey(a, passphrase)
a, key, err := ks.GetDecryptedKey(a, passphrase)
if key != nil {
zeroKey(key.PrivateKey)
}
@ -291,7 +291,7 @@ func (ks *KeyStore) SignTx(a accounts.Account, tx *types.Transaction, chainID *b
// can be decrypted with the given passphrase. The produced signature is in the
// [R || S || V] format where V is 0 or 1.
func (ks *KeyStore) SignHashWithPassphrase(a accounts.Account, passphrase string, hash []byte) (signature []byte, err error) {
_, key, err := ks.getDecryptedKey(a, passphrase)
_, key, err := ks.GetDecryptedKey(a, passphrase)
if err != nil {
return nil, err
}
@ -302,7 +302,7 @@ func (ks *KeyStore) SignHashWithPassphrase(a accounts.Account, passphrase string
// SignTxWithPassphrase signs the transaction if the private key matching the
// given address can be decrypted with the given passphrase.
func (ks *KeyStore) SignTxWithPassphrase(a accounts.Account, passphrase string, tx *types.Transaction, chainID *big.Int) (*types.Transaction, error) {
_, key, err := ks.getDecryptedKey(a, passphrase)
_, key, err := ks.GetDecryptedKey(a, passphrase)
if err != nil {
return nil, err
}
@ -340,7 +340,7 @@ func (ks *KeyStore) Lock(addr common.Address) error {
// shortens the active unlock timeout. If the address was previously unlocked
// indefinitely the timeout is not altered.
func (ks *KeyStore) TimedUnlock(a accounts.Account, passphrase string, timeout time.Duration) error {
a, key, err := ks.getDecryptedKey(a, passphrase)
a, key, err := ks.GetDecryptedKey(a, passphrase)
if err != nil {
return err
}
@ -377,7 +377,8 @@ func (ks *KeyStore) Find(a accounts.Account) (accounts.Account, error) {
return a, err
}
func (ks *KeyStore) getDecryptedKey(a accounts.Account, auth string) (accounts.Account, *Key, error) {
// GetDecryptedKey decrypt and return the key for the account.
func (ks *KeyStore) GetDecryptedKey(a accounts.Account, auth string) (accounts.Account, *Key, error) {
a, err := ks.Find(a)
if err != nil {
return a, nil, err
@ -422,7 +423,7 @@ func (ks *KeyStore) NewAccount(passphrase string) (accounts.Account, error) {
// Export exports as a JSON key, encrypted with newPassphrase.
func (ks *KeyStore) Export(a accounts.Account, passphrase, newPassphrase string) (keyJSON []byte, err error) {
_, key, err := ks.getDecryptedKey(a, passphrase)
_, key, err := ks.GetDecryptedKey(a, passphrase)
if err != nil {
return nil, err
}
@ -468,7 +469,7 @@ func (ks *KeyStore) importKey(key *Key, passphrase string) (accounts.Account, er
// Update changes the passphrase of an existing account.
func (ks *KeyStore) Update(a accounts.Account, passphrase, newPassphrase string) error {
a, key, err := ks.getDecryptedKey(a, passphrase)
a, key, err := ks.GetDecryptedKey(a, passphrase)
if err != nil {
return err
}

@ -523,9 +523,10 @@ func (m *StakingRequest) GetNodeId() string {
type ConsensusRequest struct {
ViewId uint32 `protobuf:"varint,1,opt,name=view_id,json=viewId,proto3" json:"view_id,omitempty"`
BlockNum uint64 `protobuf:"varint,2,opt,name=block_num,json=blockNum,proto3" json:"block_num,omitempty"`
BlockHash []byte `protobuf:"bytes,3,opt,name=block_hash,json=blockHash,proto3" json:"block_hash,omitempty"`
SenderPubkey []byte `protobuf:"bytes,4,opt,name=sender_pubkey,json=senderPubkey,proto3" json:"sender_pubkey,omitempty"`
Payload []byte `protobuf:"bytes,5,opt,name=payload,proto3" json:"payload,omitempty"`
ShardId uint32 `protobuf:"varint,3,opt,name=shard_id,json=shardId,proto3" json:"shard_id,omitempty"`
BlockHash []byte `protobuf:"bytes,4,opt,name=block_hash,json=blockHash,proto3" json:"block_hash,omitempty"`
SenderPubkey []byte `protobuf:"bytes,5,opt,name=sender_pubkey,json=senderPubkey,proto3" json:"sender_pubkey,omitempty"`
Payload []byte `protobuf:"bytes,6,opt,name=payload,proto3" json:"payload,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
@ -570,6 +571,13 @@ func (m *ConsensusRequest) GetBlockNum() uint64 {
return 0
}
func (m *ConsensusRequest) GetShardId() uint32 {
if m != nil {
return m.ShardId
}
return 0
}
func (m *ConsensusRequest) GetBlockHash() []byte {
if m != nil {
return m.BlockHash
@ -592,9 +600,10 @@ func (m *ConsensusRequest) GetPayload() []byte {
}
type DrandRequest struct {
SenderPubkey []byte `protobuf:"bytes,1,opt,name=sender_pubkey,json=senderPubkey,proto3" json:"sender_pubkey,omitempty"`
BlockHash []byte `protobuf:"bytes,2,opt,name=block_hash,json=blockHash,proto3" json:"block_hash,omitempty"`
Payload []byte `protobuf:"bytes,3,opt,name=payload,proto3" json:"payload,omitempty"`
ShardId uint32 `protobuf:"varint,1,opt,name=shard_id,json=shardId,proto3" json:"shard_id,omitempty"`
SenderPubkey []byte `protobuf:"bytes,2,opt,name=sender_pubkey,json=senderPubkey,proto3" json:"sender_pubkey,omitempty"`
BlockHash []byte `protobuf:"bytes,3,opt,name=block_hash,json=blockHash,proto3" json:"block_hash,omitempty"`
Payload []byte `protobuf:"bytes,4,opt,name=payload,proto3" json:"payload,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
@ -625,6 +634,13 @@ func (m *DrandRequest) XXX_DiscardUnknown() {
var xxx_messageInfo_DrandRequest proto.InternalMessageInfo
func (m *DrandRequest) GetShardId() uint32 {
if m != nil {
return m.ShardId
}
return 0
}
func (m *DrandRequest) GetSenderPubkey() []byte {
if m != nil {
return m.SenderPubkey
@ -649,17 +665,18 @@ func (m *DrandRequest) GetPayload() []byte {
type ViewChangeRequest struct {
ViewId uint32 `protobuf:"varint,1,opt,name=view_id,json=viewId,proto3" json:"view_id,omitempty"`
BlockNum uint64 `protobuf:"varint,2,opt,name=block_num,json=blockNum,proto3" json:"block_num,omitempty"`
SenderPubkey []byte `protobuf:"bytes,3,opt,name=sender_pubkey,json=senderPubkey,proto3" json:"sender_pubkey,omitempty"`
LeaderPubkey []byte `protobuf:"bytes,4,opt,name=leader_pubkey,json=leaderPubkey,proto3" json:"leader_pubkey,omitempty"`
Payload []byte `protobuf:"bytes,5,opt,name=payload,proto3" json:"payload,omitempty"`
ViewchangeSig []byte `protobuf:"bytes,6,opt,name=viewchange_sig,json=viewchangeSig,proto3" json:"viewchange_sig,omitempty"`
ViewidSig []byte `protobuf:"bytes,7,opt,name=viewid_sig,json=viewidSig,proto3" json:"viewid_sig,omitempty"`
ShardId uint32 `protobuf:"varint,3,opt,name=shard_id,json=shardId,proto3" json:"shard_id,omitempty"`
SenderPubkey []byte `protobuf:"bytes,4,opt,name=sender_pubkey,json=senderPubkey,proto3" json:"sender_pubkey,omitempty"`
LeaderPubkey []byte `protobuf:"bytes,5,opt,name=leader_pubkey,json=leaderPubkey,proto3" json:"leader_pubkey,omitempty"`
Payload []byte `protobuf:"bytes,6,opt,name=payload,proto3" json:"payload,omitempty"`
ViewchangeSig []byte `protobuf:"bytes,7,opt,name=viewchange_sig,json=viewchangeSig,proto3" json:"viewchange_sig,omitempty"`
ViewidSig []byte `protobuf:"bytes,8,opt,name=viewid_sig,json=viewidSig,proto3" json:"viewid_sig,omitempty"`
// below is for newview message only
// only need 1 valid m1 type message which is in payload
M2Aggsigs []byte `protobuf:"bytes,8,opt,name=m2_aggsigs,json=m2Aggsigs,proto3" json:"m2_aggsigs,omitempty"`
M2Bitmap []byte `protobuf:"bytes,9,opt,name=m2_bitmap,json=m2Bitmap,proto3" json:"m2_bitmap,omitempty"`
M3Aggsigs []byte `protobuf:"bytes,10,opt,name=m3_aggsigs,json=m3Aggsigs,proto3" json:"m3_aggsigs,omitempty"`
M3Bitmap []byte `protobuf:"bytes,11,opt,name=m3_bitmap,json=m3Bitmap,proto3" json:"m3_bitmap,omitempty"`
M2Aggsigs []byte `protobuf:"bytes,9,opt,name=m2_aggsigs,json=m2Aggsigs,proto3" json:"m2_aggsigs,omitempty"`
M2Bitmap []byte `protobuf:"bytes,10,opt,name=m2_bitmap,json=m2Bitmap,proto3" json:"m2_bitmap,omitempty"`
M3Aggsigs []byte `protobuf:"bytes,11,opt,name=m3_aggsigs,json=m3Aggsigs,proto3" json:"m3_aggsigs,omitempty"`
M3Bitmap []byte `protobuf:"bytes,12,opt,name=m3_bitmap,json=m3Bitmap,proto3" json:"m3_bitmap,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
@ -704,6 +721,13 @@ func (m *ViewChangeRequest) GetBlockNum() uint64 {
return 0
}
func (m *ViewChangeRequest) GetShardId() uint32 {
if m != nil {
return m.ShardId
}
return 0
}
func (m *ViewChangeRequest) GetSenderPubkey() []byte {
if m != nil {
return m.SenderPubkey
@ -784,65 +808,66 @@ func init() {
func init() { proto.RegisterFile("message.proto", fileDescriptor_33c57e4bae7b9afd) }
var fileDescriptor_33c57e4bae7b9afd = []byte{
// 914 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x95, 0xcd, 0x8e, 0xe2, 0x46,
0x10, 0xc7, 0x31, 0x30, 0x18, 0x97, 0x0d, 0xd3, 0xdb, 0x49, 0x76, 0x9d, 0xc9, 0x46, 0x19, 0xb1,
0x8a, 0x34, 0x5a, 0x29, 0xa3, 0x15, 0x1c, 0xa2, 0x48, 0xb9, 0x30, 0xa6, 0xb5, 0x58, 0x33, 0x63,
0x48, 0x63, 0x76, 0x94, 0x93, 0x65, 0xa0, 0xc5, 0x58, 0x63, 0x6c, 0xe2, 0x36, 0xb3, 0xe2, 0x85,
0x72, 0xc9, 0x3d, 0xe7, 0xe4, 0x79, 0xf2, 0x12, 0x51, 0xb7, 0x6d, 0xcc, 0xc7, 0x46, 0x91, 0x72,
0xc8, 0x8d, 0xfa, 0x57, 0xfd, 0xaa, 0xab, 0xcb, 0x5d, 0x05, 0xb4, 0x56, 0x8c, 0x73, 0x7f, 0xc9,
0xae, 0xd7, 0x49, 0x9c, 0xc6, 0x58, 0xcd, 0xcd, 0xce, 0xef, 0x35, 0x50, 0xef, 0xb3, 0xdf, 0xf8,
0x7b, 0x30, 0x38, 0x4b, 0x9e, 0x83, 0x39, 0xf3, 0xd2, 0xed, 0x9a, 0x99, 0xca, 0xa5, 0x72, 0xd5,
0xee, 0x7e, 0x7e, 0x5d, 0xa0, 0x93, 0xcc, 0xe9, 0x6e, 0xd7, 0x8c, 0xea, 0xbc, 0x34, 0xf0, 0x15,
0xd4, 0x25, 0x50, 0x3d, 0x02, 0xf2, 0xc4, 0x12, 0x90, 0x11, 0xf8, 0x35, 0x68, 0x3c, 0x58, 0x46,
0x7e, 0xba, 0x49, 0x98, 0x59, 0xbb, 0x54, 0xae, 0x0c, 0x5a, 0x0a, 0xb8, 0x07, 0x2a, 0x4f, 0xfd,
0xa7, 0x20, 0x5a, 0x9a, 0xf5, 0x4b, 0xe5, 0x4a, 0xef, 0xbe, 0x2a, 0xcf, 0xce, 0x74, 0xca, 0x7e,
0xd9, 0x30, 0x9e, 0x0e, 0x2b, 0xb4, 0x88, 0xc4, 0x3f, 0x80, 0x36, 0x8f, 0x23, 0xce, 0x22, 0xbe,
0xe1, 0xe6, 0x99, 0xc4, 0xbe, 0xdc, 0x61, 0x56, 0xe1, 0x29, 0xc1, 0x32, 0x1a, 0x7f, 0x07, 0x67,
0x8b, 0xc4, 0x8f, 0x16, 0x66, 0x43, 0x62, 0x5f, 0xec, 0xb0, 0x81, 0x50, 0x4b, 0x24, 0x8b, 0xc2,
0x3f, 0x02, 0x3c, 0x07, 0xec, 0xe3, 0xfc, 0xd1, 0x8f, 0x96, 0xcc, 0x54, 0x25, 0x73, 0xb1, 0x63,
0x3e, 0x04, 0xec, 0xa3, 0x25, 0x5d, 0x25, 0xb8, 0x17, 0x8f, 0x6f, 0xe0, 0x3c, 0x8c, 0xd3, 0x94,
0x25, 0x5b, 0x2f, 0xc9, 0x02, 0xcc, 0xe6, 0xd1, 0x25, 0xef, 0x32, 0x7f, 0xc9, 0xb7, 0xc3, 0x03,
0xe5, 0x46, 0x03, 0x35, 0x67, 0x3b, 0x7f, 0x28, 0xd0, 0xa4, 0x8c, 0xaf, 0xc5, 0x65, 0xfe, 0x8f,
0x2f, 0x47, 0x00, 0x95, 0xe5, 0x67, 0xc7, 0xca, 0x0f, 0xa8, 0x77, 0xcd, 0xd3, 0xfa, 0x33, 0xff,
0xb0, 0x42, 0xcf, 0xc3, 0x43, 0xe9, 0x06, 0xa0, 0x59, 0xe0, 0x9d, 0xf7, 0x70, 0x7e, 0x44, 0x60,
0x13, 0xd4, 0x75, 0xe8, 0x6f, 0x59, 0xc2, 0xcd, 0xea, 0x65, 0xed, 0x4a, 0xa3, 0x85, 0x89, 0x2f,
0xa0, 0x39, 0xf3, 0x43, 0x3f, 0x9a, 0x33, 0x6e, 0xd6, 0xa4, 0x6b, 0x67, 0x77, 0x7e, 0x53, 0xa0,
0x7d, 0xd8, 0x3b, 0xfc, 0x2e, 0xbf, 0x58, 0xd6, 0x89, 0xd7, 0xff, 0xd0, 0xe2, 0xeb, 0xbd, 0x0b,
0x7e, 0x03, 0xfa, 0x3a, 0x09, 0x9e, 0xfd, 0x94, 0x79, 0x4f, 0x6c, 0x2b, 0x3b, 0xa2, 0x51, 0xc8,
0xa5, 0x5b, 0xb6, 0xc5, 0x2f, 0xa1, 0xe1, 0xaf, 0xe2, 0x4d, 0x94, 0xca, 0x7b, 0xd7, 0x68, 0x6e,
0x75, 0xae, 0xa1, 0x2e, 0x7b, 0xa9, 0xc1, 0x19, 0x71, 0x5c, 0x42, 0x51, 0x05, 0x03, 0x34, 0x28,
0x99, 0x4c, 0xef, 0x5c, 0xa4, 0xe0, 0x73, 0xd0, 0xc7, 0xb6, 0x75, 0xeb, 0x3d, 0xd8, 0x8e, 0x43,
0x28, 0xaa, 0x76, 0x6e, 0xa1, 0x7d, 0xf8, 0x9a, 0xf1, 0x25, 0xe8, 0x69, 0xe2, 0x47, 0xdc, 0x9f,
0xa7, 0x41, 0x1c, 0xc9, 0x9a, 0x0d, 0xba, 0x2f, 0xe1, 0x57, 0xa0, 0x46, 0xf1, 0x82, 0x79, 0xc1,
0x22, 0x2f, 0xac, 0x21, 0x4c, 0x7b, 0xd1, 0xf9, 0x55, 0x01, 0x74, 0xfc, 0xc8, 0x45, 0xb4, 0x78,
0x78, 0x22, 0x5a, 0xe4, 0x6a, 0xd1, 0x86, 0x30, 0xed, 0x05, 0xfe, 0x0a, 0xb4, 0x59, 0x18, 0xcf,
0x9f, 0xbc, 0x68, 0xb3, 0x92, 0x89, 0xea, 0xb4, 0x29, 0x05, 0x67, 0xb3, 0xc2, 0x5f, 0x03, 0x64,
0xce, 0x47, 0x9f, 0x3f, 0x16, 0xc3, 0x29, 0x95, 0xa1, 0xcf, 0x1f, 0xf1, 0x1b, 0x68, 0x71, 0x16,
0x2d, 0x58, 0xe2, 0xad, 0x37, 0x33, 0xd1, 0xa1, 0xba, 0x8c, 0x30, 0x32, 0x71, 0x2c, 0x35, 0xf9,
0xfd, 0xfc, 0x6d, 0x18, 0xfb, 0x0b, 0x39, 0x8a, 0x06, 0x2d, 0xcc, 0x4e, 0x08, 0xc6, 0xfe, 0x54,
0x9d, 0xa6, 0x53, 0x3e, 0x91, 0xee, 0xb0, 0xa4, 0xea, 0x71, 0x49, 0x7b, 0xa7, 0xd5, 0x0e, 0x4f,
0xfb, 0xab, 0x0a, 0x2f, 0x4e, 0x06, 0xf2, 0x3f, 0xf6, 0xe5, 0xa4, 0xd2, 0xda, 0x27, 0x2a, 0x7d,
0x03, 0xad, 0x90, 0xf9, 0xa7, 0xdd, 0xc9, 0xc4, 0x7f, 0xeb, 0x0e, 0xfe, 0x16, 0xda, 0xe5, 0xaa,
0xf0, 0x78, 0xb0, 0x94, 0x2b, 0xc9, 0xa0, 0xad, 0x52, 0x9d, 0x04, 0x4b, 0xd1, 0x0f, 0x21, 0x04,
0x0b, 0x19, 0xa2, 0x66, 0xfd, 0xc8, 0x94, 0xdc, 0xbd, 0xea, 0x7a, 0xfe, 0x72, 0xc9, 0x83, 0x25,
0x97, 0xdb, 0xc5, 0xa0, 0xda, 0xaa, 0xdb, 0xcf, 0x04, 0x71, 0xcb, 0x55, 0xd7, 0x9b, 0x05, 0xe9,
0xca, 0x5f, 0x9b, 0x9a, 0xf4, 0x36, 0x57, 0xdd, 0x1b, 0x69, 0x4b, 0xb6, 0xb7, 0x63, 0x21, 0x67,
0x7b, 0xfb, 0x6c, 0xaf, 0x60, 0xf5, 0x9c, 0xed, 0x65, 0xec, 0xdb, 0x21, 0xe8, 0x7b, 0x1b, 0x06,
0xb7, 0x40, 0xb3, 0x46, 0xce, 0x84, 0x38, 0x93, 0xe9, 0x04, 0x55, 0xb0, 0x0e, 0xea, 0xc4, 0xed,
0xdf, 0xda, 0xce, 0x7b, 0xa4, 0x88, 0x21, 0x19, 0xd0, 0xbe, 0x33, 0x40, 0x55, 0x8c, 0xa1, 0x6d,
0xdd, 0xd9, 0xc4, 0x71, 0xbd, 0xc9, 0x74, 0x3c, 0x1e, 0x51, 0x17, 0xd5, 0xde, 0xfe, 0xa9, 0x80,
0xbe, 0xb7, 0x7b, 0xf0, 0x05, 0xbc, 0x74, 0xc8, 0x83, 0x33, 0x1a, 0x10, 0xef, 0x86, 0xf4, 0xad,
0x91, 0xe3, 0x15, 0xa9, 0x2a, 0xd8, 0x80, 0x66, 0xdf, 0x71, 0x46, 0x53, 0xc7, 0x22, 0x48, 0x11,
0xa7, 0x8c, 0x29, 0x19, 0xf7, 0x29, 0x41, 0x55, 0xe1, 0xca, 0x8d, 0x01, 0xaa, 0x89, 0x69, 0xb4,
0x46, 0xf7, 0xf7, 0xb6, 0x8b, 0xea, 0x59, 0x6d, 0xe2, 0xb7, 0x4b, 0x06, 0xe8, 0x0c, 0xb7, 0x01,
0x3e, 0xd8, 0xe4, 0xc1, 0x1a, 0xf6, 0x9d, 0xf7, 0x04, 0x35, 0x44, 0x16, 0x87, 0x3c, 0x08, 0x09,
0xa9, 0xc2, 0x29, 0x6b, 0xf5, 0x6c, 0xc7, 0x76, 0x11, 0x60, 0x04, 0x46, 0x66, 0xe7, 0xd9, 0x74,
0xfc, 0x19, 0x9c, 0xdf, 0x8d, 0x5c, 0x97, 0xd0, 0x9f, 0x3d, 0x4a, 0x7e, 0x9a, 0x92, 0x89, 0x8b,
0x8c, 0x6e, 0x1f, 0x5a, 0x56, 0x18, 0xb0, 0x28, 0xcd, 0x7b, 0x82, 0xdf, 0x81, 0x3a, 0x4e, 0xe2,
0x39, 0xe3, 0x1c, 0xa3, 0xe3, 0x0d, 0x7b, 0xf1, 0x62, 0xa7, 0x14, 0x4b, 0xb0, 0x53, 0x99, 0x35,
0xe4, 0xbf, 0x74, 0xef, 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0x27, 0x52, 0x45, 0x7b, 0xb6, 0x07,
0x00, 0x00,
// 934 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x95, 0xdf, 0x6e, 0xe2, 0x46,
0x14, 0xc6, 0x31, 0x10, 0x0c, 0xc7, 0x86, 0xcc, 0x4e, 0xdb, 0x5d, 0x6f, 0xba, 0x55, 0x23, 0x56,
0x95, 0xa2, 0x95, 0x1a, 0xad, 0xe0, 0xa2, 0xaa, 0xd4, 0x1b, 0x02, 0xa3, 0xc4, 0x4a, 0x62, 0xe8,
0xe0, 0x6c, 0xd4, 0x2b, 0x6b, 0x82, 0x47, 0xc4, 0x0a, 0xd8, 0xd4, 0x63, 0xb2, 0xe2, 0x05, 0xda,
0x87, 0xe9, 0x7d, 0xaf, 0xbb, 0x6f, 0x56, 0xcd, 0x8c, 0xc1, 0xfc, 0xd9, 0xaa, 0x37, 0x55, 0xef,
0x38, 0xdf, 0x39, 0xbf, 0x99, 0x73, 0x3e, 0xcf, 0x0c, 0xd0, 0x9c, 0x73, 0x21, 0xd8, 0x94, 0x9f,
0x2f, 0xd2, 0x24, 0x4b, 0xb0, 0x99, 0x87, 0xed, 0x3f, 0x2b, 0x60, 0xde, 0xea, 0xdf, 0xf8, 0x07,
0xb0, 0x05, 0x4f, 0x9f, 0xa3, 0x09, 0x0f, 0xb2, 0xd5, 0x82, 0x3b, 0xc6, 0xa9, 0x71, 0xd6, 0xea,
0x7c, 0x79, 0xbe, 0x46, 0xc7, 0x3a, 0xe9, 0xaf, 0x16, 0x9c, 0x5a, 0xa2, 0x08, 0xf0, 0x19, 0x54,
0x15, 0x50, 0xde, 0x03, 0xf2, 0x85, 0x15, 0xa0, 0x2a, 0xf0, 0x1b, 0x68, 0x88, 0x68, 0x1a, 0xb3,
0x6c, 0x99, 0x72, 0xa7, 0x72, 0x6a, 0x9c, 0xd9, 0xb4, 0x10, 0x70, 0x17, 0x4c, 0x91, 0xb1, 0xa7,
0x28, 0x9e, 0x3a, 0xd5, 0x53, 0xe3, 0xcc, 0xea, 0xbc, 0x2a, 0xf6, 0xd6, 0x3a, 0xe5, 0xbf, 0x2e,
0xb9, 0xc8, 0xae, 0x4a, 0x74, 0x5d, 0x89, 0x7f, 0x84, 0xc6, 0x24, 0x89, 0x05, 0x8f, 0xc5, 0x52,
0x38, 0x47, 0x0a, 0x7b, 0xbd, 0xc1, 0xfa, 0xeb, 0x4c, 0x01, 0x16, 0xd5, 0xf8, 0x7b, 0x38, 0x0a,
0x53, 0x16, 0x87, 0x4e, 0x4d, 0x61, 0x5f, 0x6d, 0xb0, 0x81, 0x54, 0x0b, 0x44, 0x57, 0xe1, 0x9f,
0x00, 0x9e, 0x23, 0xfe, 0x71, 0xf2, 0xc8, 0xe2, 0x29, 0x77, 0x4c, 0xc5, 0x9c, 0x6c, 0x98, 0x0f,
0x11, 0xff, 0xd8, 0x57, 0xa9, 0x02, 0xdc, 0xaa, 0xc7, 0x17, 0x70, 0x3c, 0x4b, 0xb2, 0x8c, 0xa7,
0xab, 0x20, 0xd5, 0x05, 0x4e, 0x7d, 0x6f, 0xc8, 0x1b, 0x9d, 0x2f, 0xf8, 0xd6, 0x6c, 0x47, 0xb9,
0x68, 0x80, 0x99, 0xb3, 0xed, 0xbf, 0x0c, 0xa8, 0x53, 0x2e, 0x16, 0x72, 0x98, 0xff, 0xe3, 0xcb,
0x11, 0x40, 0x45, 0xfb, 0x7a, 0x5b, 0xf5, 0x01, 0xad, 0x8e, 0x73, 0xd8, 0xbf, 0xce, 0x5f, 0x95,
0xe8, 0xf1, 0x6c, 0x57, 0xba, 0x00, 0xa8, 0xaf, 0xf1, 0xf6, 0x25, 0x1c, 0xef, 0x11, 0xd8, 0x01,
0x73, 0x31, 0x63, 0x2b, 0x9e, 0x0a, 0xa7, 0x7c, 0x5a, 0x39, 0x6b, 0xd0, 0x75, 0x88, 0x4f, 0xa0,
0xfe, 0xc0, 0x66, 0x2c, 0x9e, 0x70, 0xe1, 0x54, 0x54, 0x6a, 0x13, 0xb7, 0xff, 0x30, 0xa0, 0xb5,
0xeb, 0x1d, 0x7e, 0x9f, 0x0f, 0xa6, 0x9d, 0x78, 0xf3, 0x0f, 0x16, 0x9f, 0x6f, 0x0d, 0xf8, 0x2d,
0x58, 0x8b, 0x34, 0x7a, 0x66, 0x19, 0x0f, 0x9e, 0xf8, 0x4a, 0x39, 0xd2, 0xa0, 0x90, 0x4b, 0xd7,
0x7c, 0x85, 0x5f, 0x42, 0x8d, 0xcd, 0x93, 0x65, 0x9c, 0xa9, 0xb9, 0x2b, 0x34, 0x8f, 0xda, 0xe7,
0x50, 0x55, 0x5e, 0x36, 0xe0, 0x88, 0x78, 0x3e, 0xa1, 0xa8, 0x84, 0x01, 0x6a, 0x94, 0x8c, 0xef,
0x6e, 0x7c, 0x64, 0xe0, 0x63, 0xb0, 0x46, 0x6e, 0xff, 0x3a, 0xb8, 0x77, 0x3d, 0x8f, 0x50, 0x54,
0x6e, 0x5f, 0x43, 0x6b, 0xf7, 0x34, 0xe3, 0x53, 0xb0, 0xb2, 0x94, 0xc5, 0x82, 0x4d, 0xb2, 0x28,
0x89, 0x55, 0xcf, 0x36, 0xdd, 0x96, 0xf0, 0x2b, 0x30, 0xe3, 0x24, 0xe4, 0x41, 0x14, 0xe6, 0x8d,
0xd5, 0x64, 0xe8, 0x86, 0xed, 0x4f, 0x06, 0xa0, 0xfd, 0x43, 0x2e, 0xab, 0xe5, 0xc1, 0x93, 0xd5,
0x72, 0xad, 0x26, 0xad, 0xc9, 0xd0, 0x0d, 0xf1, 0xd7, 0xd0, 0x78, 0x98, 0x25, 0x93, 0xa7, 0x20,
0x5e, 0xce, 0xd5, 0x42, 0x55, 0x5a, 0x57, 0x82, 0xb7, 0x9c, 0xe3, 0xd7, 0x50, 0x17, 0x8f, 0x2c,
0x0d, 0x25, 0x56, 0x51, 0x98, 0xa9, 0x62, 0x37, 0xc4, 0xdf, 0x00, 0x68, 0xee, 0x91, 0x89, 0x47,
0x75, 0x37, 0x6d, 0xaa, 0x57, 0xba, 0x62, 0xe2, 0x11, 0xbf, 0x85, 0xa6, 0xe0, 0x71, 0xc8, 0xd3,
0x60, 0xb1, 0x7c, 0x90, 0xe6, 0x1d, 0xa9, 0x0a, 0x5b, 0x8b, 0x23, 0xa5, 0xa9, 0x4f, 0xcb, 0x56,
0xb3, 0x84, 0xe9, 0xeb, 0x66, 0xd3, 0x75, 0xd8, 0xfe, 0xdd, 0x00, 0x7b, 0xfb, 0xc6, 0xed, 0x74,
0x62, 0xec, 0x76, 0x72, 0xb0, 0x55, 0xf9, 0x33, 0x5b, 0xed, 0xb6, 0x5b, 0xd9, 0x6f, 0x77, 0xab,
0x93, 0xea, 0x6e, 0x27, 0xbf, 0x55, 0xe0, 0xc5, 0xc1, 0x3d, 0xfe, 0xef, 0xed, 0x3c, 0x18, 0xa2,
0xfa, 0x99, 0x21, 0xde, 0x42, 0x73, 0xc6, 0xd9, 0xa1, 0xa9, 0x5a, 0xfc, 0x37, 0x53, 0xf1, 0x77,
0xd0, 0x2a, 0x1e, 0x9f, 0x40, 0x44, 0x53, 0xf5, 0x60, 0xd9, 0xb4, 0x59, 0xa8, 0xe3, 0x68, 0x2a,
0xad, 0x92, 0x42, 0x14, 0xaa, 0x92, 0xba, 0xb6, 0x4a, 0x2b, 0x79, 0x7a, 0xde, 0x09, 0xd8, 0x74,
0x2a, 0xa2, 0xa9, 0x70, 0x1a, 0x3a, 0x3d, 0xef, 0xf4, 0xb4, 0x20, 0x0d, 0x98, 0x77, 0x82, 0x87,
0x28, 0x9b, 0xb3, 0x85, 0x03, 0x2a, 0x5b, 0x9f, 0x77, 0x2e, 0x54, 0xac, 0xd8, 0xee, 0x86, 0xb5,
0x72, 0xb6, 0xbb, 0xcd, 0x76, 0xd7, 0xac, 0x9d, 0xb3, 0x5d, 0xcd, 0xbe, 0xbb, 0x02, 0x6b, 0xeb,
0xcd, 0xc2, 0x4d, 0x68, 0xf4, 0x87, 0xde, 0x98, 0x78, 0xe3, 0xbb, 0x31, 0x2a, 0x61, 0x0b, 0xcc,
0xb1, 0xdf, 0xbb, 0x76, 0xbd, 0x4b, 0x64, 0xc8, 0x6b, 0x37, 0xa0, 0x3d, 0x6f, 0x80, 0xca, 0x18,
0x43, 0xab, 0x7f, 0xe3, 0x12, 0xcf, 0x0f, 0xc6, 0x77, 0xa3, 0xd1, 0x90, 0xfa, 0xa8, 0xf2, 0xee,
0x93, 0x01, 0xd6, 0xd6, 0x6b, 0x86, 0x4f, 0xe0, 0xa5, 0x47, 0xee, 0xbd, 0xe1, 0x80, 0x04, 0x17,
0xa4, 0xd7, 0x1f, 0x7a, 0xc1, 0x7a, 0xa9, 0x12, 0xb6, 0xa1, 0xde, 0xf3, 0xbc, 0xe1, 0x9d, 0xd7,
0x27, 0xc8, 0x90, 0xbb, 0x8c, 0x28, 0x19, 0xf5, 0x28, 0x41, 0x65, 0x99, 0xca, 0x83, 0x01, 0xaa,
0xc8, 0xfb, 0xdd, 0x1f, 0xde, 0xde, 0xba, 0x3e, 0xaa, 0xea, 0xde, 0xe4, 0x6f, 0x9f, 0x0c, 0xd0,
0x11, 0x6e, 0x01, 0x7c, 0x70, 0xc9, 0x7d, 0xff, 0xaa, 0xe7, 0x5d, 0x12, 0x54, 0x93, 0xab, 0x78,
0xe4, 0x5e, 0x4a, 0xc8, 0x94, 0x49, 0xd5, 0x6b, 0xe0, 0x7a, 0xae, 0x8f, 0x00, 0x23, 0xb0, 0x75,
0x9c, 0xaf, 0x66, 0xe1, 0x2f, 0xe0, 0xf8, 0x66, 0xe8, 0xfb, 0x84, 0xfe, 0x12, 0x50, 0xf2, 0xf3,
0x1d, 0x19, 0xfb, 0xc8, 0xee, 0xf4, 0xa0, 0xd9, 0x9f, 0x45, 0x3c, 0xce, 0x72, 0x4f, 0xf0, 0x7b,
0x30, 0x47, 0x69, 0x32, 0xe1, 0x42, 0x60, 0xb4, 0xff, 0x66, 0x9f, 0xbc, 0xd8, 0x28, 0xeb, 0x67,
0xb5, 0x5d, 0x7a, 0xa8, 0xa9, 0xff, 0xfd, 0xee, 0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, 0xe3, 0x60,
0x9a, 0xe1, 0x08, 0x08, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.

@ -82,31 +82,34 @@ message StakingRequest {
message ConsensusRequest {
uint32 view_id = 1;
uint64 block_num = 2;
bytes block_hash = 3;
bytes sender_pubkey = 4;
bytes payload = 5;
uint32 shard_id = 3;
bytes block_hash = 4;
bytes sender_pubkey = 5;
bytes payload = 6;
}
message DrandRequest {
bytes sender_pubkey = 1;
bytes block_hash = 2;
bytes payload = 3;
uint32 shard_id = 1;
bytes sender_pubkey = 2;
bytes block_hash = 3;
bytes payload = 4;
}
message ViewChangeRequest {
uint32 view_id = 1;
uint64 block_num = 2;
bytes sender_pubkey = 3;
bytes leader_pubkey = 4;
bytes payload = 5; // message payload: either m1 type or m2 type
bytes viewchange_sig = 6; // signature on payload
bytes viewid_sig = 7; // signature on view_id
uint32 shard_id = 3;
bytes sender_pubkey = 4;
bytes leader_pubkey = 5;
bytes payload = 6; // message payload: either m1 type or m2 type
bytes viewchange_sig = 7; // signature on payload
bytes viewid_sig = 8; // signature on view_id
// below is for newview message only
// only need 1 valid m1 type message which is in payload
bytes m2_aggsigs = 8; // m2: |nil|
bytes m2_bitmap = 9;
bytes m3_aggsigs = 10; // m3: |viewID|
bytes m3_bitmap= 11;
bytes m2_aggsigs = 9; // m2: |nil|
bytes m2_bitmap = 10;
bytes m3_aggsigs = 11; // m3: |viewID|
bytes m3_bitmap= 12;
}

@ -476,6 +476,9 @@ func (ss *StateSync) updateBlockAndStatus(block *types.Block, bc *core.BlockChai
_, err := bc.InsertChain([]*types.Block{block})
if err != nil {
utils.GetLogInstance().Debug("Error adding new block to blockchain", "Error", err)
utils.GetLogInstance().Debug("Rolling back current block!", "block", bc.CurrentBlock())
bc.Rollback([]common.Hash{bc.CurrentBlock().Hash()})
return false
}
ss.syncMux.Lock()

@ -2,6 +2,7 @@ package main
import (
"encoding/base64"
"encoding/hex"
"flag"
"fmt"
"io/ioutil"
@ -70,6 +71,10 @@ var (
exportCommand = flag.NewFlagSet("export", flag.ExitOnError)
exportCommandAccountPtr = exportCommand.String("account", "", "The account to be exported")
// ExportPriKey subcommands
exportPriKeyCommand = flag.NewFlagSet("exportPriKey", flag.ExitOnError)
exportPriKeyCommandAccountPtr = exportPriKeyCommand.String("account", "", "The account whose private key to be exported")
// Account subcommands
accountImportCommand = flag.NewFlagSet("import", flag.ExitOnError)
accountImportPtr = accountImportCommand.String("privateKey", "", "Specify the private keyfile to import")
@ -87,8 +92,11 @@ var (
freeTokenCommand = flag.NewFlagSet("getFreeToken", flag.ExitOnError)
freeTokenAddressPtr = freeTokenCommand.String("address", "", "Specify the account address to receive the free token")
balanceCommand = flag.NewFlagSet("getFreeToken", flag.ExitOnError)
balanceCommand = flag.NewFlagSet("balances", flag.ExitOnError)
balanceAddressPtr = balanceCommand.String("address", "", "Specify the account address to check balance for")
formatCommand = flag.NewFlagSet("format", flag.ExitOnError)
formatAddressPtr = formatCommand.String("address", "", "Specify the account address to display different encoding formats")
)
var (
@ -138,8 +146,12 @@ func main() {
fmt.Println(" --pass - Passphrase of sender's private key")
fmt.Println(" 8. export - Export account key to a new file")
fmt.Println(" --account - Specify the account to export. Empty will export every key.")
fmt.Println(" 9. blsgen - Generate a bls key and store private key locally.")
fmt.Println(" 9. exportPriKey - Export account private key")
fmt.Println(" --account - Specify the account to export private key.")
fmt.Println(" 10. blsgen - Generate a bls key and store private key locally.")
fmt.Println(" --nopass - The private key has no passphrase (for test only)")
fmt.Println(" 11. format - Shows different encoding formats of specific address")
fmt.Println(" --address - The address to display the different encoding formats for")
os.Exit(1)
}
@ -183,6 +195,8 @@ ARG:
processListCommand()
case "export":
processExportCommand()
case "exportPriKey":
processExportPriKeyCommand()
case "blsgen":
processBlsgenCommand()
case "removeAll":
@ -198,6 +212,8 @@ ARG:
case "transfer":
readProfile(profile)
processTransferCommand()
case "format":
formatAddressCommand()
default:
fmt.Printf("Unknown action: %s\n", os.Args[1])
flag.PrintDefaults()
@ -312,6 +328,19 @@ func _exportAccount(account accounts.Account) {
}
}
func _exportPriKeyAccount(account accounts.Account) {
fmt.Printf("account: %s\n", common2.MustAddressToBech32(account.Address))
fmt.Printf("URL: %s\n", account.URL)
pass := utils.AskForPassphrase("Original Passphrase: ")
account, key, err := ks.GetDecryptedKey(account, pass)
if err != nil {
fmt.Printf("Failed to decrypt the account: %s \n", err)
} else {
fmt.Printf("Private key: %s \n", hex.EncodeToString(key.PrivateKey.D.Bytes()))
}
}
func processListCommand() {
if err := listCommand.Parse(os.Args[2:]); err != nil {
fmt.Println(ctxerror.New("failed to parse flags").WithCause(err))
@ -334,12 +363,27 @@ func processExportCommand() {
allAccounts := ks.Accounts()
for _, account := range allAccounts {
if acc == "" || acc == common2.MustAddressToBech32(account.Address) {
if acc == "" || common2.ParseAddr(acc) == account.Address {
_exportAccount(account)
}
}
}
func processExportPriKeyCommand() {
if err := exportCommand.Parse(os.Args[2:]); err != nil {
fmt.Println(ctxerror.New("failed to parse flags").WithCause(err))
return
}
acc := *exportCommandAccountPtr
allAccounts := ks.Accounts()
for _, account := range allAccounts {
if acc == "" || common2.ParseAddr(acc) == account.Address {
_exportPriKeyAccount(account)
}
}
}
func processBlsgenCommand() {
newCommand.Parse(os.Args[2:])
noPass := *newCommandNoPassPtr
@ -401,18 +445,42 @@ func processBalancesCommand() {
fmt.Printf("Account %d:\n", i)
fmt.Printf(" Address: %s\n", common2.MustAddressToBech32(account.Address))
for shardID, balanceNonce := range FetchBalance(account.Address) {
fmt.Printf(" Balance in Shard %d: %s, nonce: %v \n", shardID, convertBalanceIntoReadableFormat(balanceNonce.balance), balanceNonce.nonce)
if balanceNonce != nil {
fmt.Printf(" Balance in Shard %d: %s, nonce: %v \n", shardID, convertBalanceIntoReadableFormat(balanceNonce.balance), balanceNonce.nonce)
} else {
fmt.Printf(" Balance in Shard %d: connection failed", shardID)
}
}
}
} else {
address := common2.ParseAddr(*balanceAddressPtr)
fmt.Printf("Account: %s:\n", common2.MustAddressToBech32(address))
for shardID, balanceNonce := range FetchBalance(address) {
fmt.Printf(" Balance in Shard %d: %s, nonce: %v \n", shardID, convertBalanceIntoReadableFormat(balanceNonce.balance), balanceNonce.nonce)
if balanceNonce != nil {
fmt.Printf(" Balance in Shard %d: %s, nonce: %v \n", shardID, convertBalanceIntoReadableFormat(balanceNonce.balance), balanceNonce.nonce)
} else {
fmt.Printf(" Balance in Shard %d: connection failed \n", shardID)
}
}
}
}
func formatAddressCommand() {
if err := formatCommand.Parse(os.Args[2:]); err != nil {
fmt.Println(ctxerror.New("failed to parse flags").WithCause(err))
return
}
if *formatAddressPtr == "" {
fmt.Println("Please specify the --address to show formats for.")
} else {
address := common2.ParseAddr(*formatAddressPtr)
fmt.Printf("account address in Bech32: %s\n", common2.MustAddressToBech32(address))
fmt.Printf("account address in Base16 (deprecated): %s\n", address.Hex())
}
}
func processGetFreeToken() {
if err := freeTokenCommand.Parse(os.Args[2:]); err != nil {
fmt.Println(ctxerror.New("Failed to parse flags").WithCause(err))
@ -471,8 +539,8 @@ func processTransferCommand() {
shardIDToAccountState := FetchBalance(senderAddress)
state, ok := shardIDToAccountState[uint32(shardID)]
if !ok {
state := shardIDToAccountState[shardID]
if state != nil {
fmt.Printf("Failed connecting to the shard %d\n", shardID)
return
}
@ -563,34 +631,46 @@ func convertBalanceIntoReadableFormat(balance *big.Int) string {
}
// FetchBalance fetches account balance of specified address from the Harmony network
func FetchBalance(address common.Address) map[uint32]AccountState {
result := make(map[uint32]AccountState)
for i := 0; i < walletProfile.Shards; i++ {
func FetchBalance(address common.Address) []*AccountState {
result := []*AccountState{}
for shardID := 0; shardID < walletProfile.Shards; shardID++ {
// Fill in nil pointers for each shard; nil represent failed balance fetch.
result = append(result, nil)
}
for shardID := 0; shardID < walletProfile.Shards; shardID++ {
balance := big.NewInt(0)
var nonce uint64
result[uint32(i)] = AccountState{balance, 0}
for retry := 0; retry < rpcRetry; retry++ {
server := walletProfile.RPCServer[i][rand.Intn(len(walletProfile.RPCServer[i]))]
client, err := clientService.NewClient(server.IP, server.Port)
if err != nil {
continue
}
log.Debug("FetchBalance", "server", server)
response, err := client.GetBalance(address)
if err != nil {
log.Info("failed to get balance, retrying ...")
time.Sleep(200 * time.Millisecond)
continue
result[uint32(shardID)] = &AccountState{balance, 0}
LOOP:
for j := 0; j < len(walletProfile.RPCServer[shardID]); j++ {
for retry := 0; retry < rpcRetry; retry++ {
server := walletProfile.RPCServer[shardID][j]
client, err := clientService.NewClient(server.IP, server.Port)
if err != nil {
continue
}
log.Debug("FetchBalance", "server", server)
response, err := client.GetBalance(address)
if err != nil {
log.Info("failed to get balance, retrying ...")
time.Sleep(200 * time.Millisecond)
continue
}
log.Debug("FetchBalance", "response", response)
respBalance := big.NewInt(0)
respBalance.SetBytes(response.Balance)
if balance.Cmp(respBalance) < 0 {
balance.SetBytes(response.Balance)
nonce = response.Nonce
}
break LOOP
}
log.Debug("FetchBalance", "response", response)
balance.SetBytes(response.Balance)
nonce = response.Nonce
break
}
result[uint32(i)] = AccountState{balance, nonce}
result[shardID] = &AccountState{balance, nonce}
}
return result
}

@ -13,6 +13,7 @@ import (
"github.com/ethereum/go-ethereum/ethdb"
"github.com/ethereum/go-ethereum/log"
"github.com/harmony-one/bls/ffi/go/bls"
"github.com/harmony-one/harmony/accounts"
"github.com/harmony-one/harmony/accounts/keystore"
"github.com/harmony-one/harmony/consensus"
@ -23,7 +24,7 @@ import (
"github.com/harmony-one/harmony/internal/ctxerror"
"github.com/harmony-one/harmony/internal/genesis"
hmykey "github.com/harmony-one/harmony/internal/keystore"
memprofiling "github.com/harmony-one/harmony/internal/memprofiling"
"github.com/harmony-one/harmony/internal/memprofiling"
"github.com/harmony-one/harmony/internal/profiler"
"github.com/harmony-one/harmony/internal/shardchain"
"github.com/harmony-one/harmony/internal/utils"
@ -95,6 +96,8 @@ var (
isGenesis = flag.Bool("is_genesis", true, "true means this node is a genesis node")
// isArchival indicates this node is an archival node that will save and archive current blockchain
isArchival = flag.Bool("is_archival", false, "true means this node is a archival node")
// delayCommit is the commit-delay timer, used by Harmony nodes
delayCommit = flag.String("delay_commit", "0ms", "how long to delay sending commit messages in consensus, ex: 500ms, 1s")
//isNewNode indicates this node is a new node
isNewNode = flag.Bool("is_newnode", false, "true means this node is a new node")
shardID = flag.Int("shard_id", -1, "the shard ID of this node")
@ -108,6 +111,10 @@ var (
// -nopass is false by default. The keyfile must be encrypted.
hmyNoPass = flag.Bool("nopass", false, "No passphrase for the key (testing only)")
// -pass takes on "pass:password", "env:var", "file:pathname",
// "fd:number", or "stdin" form.
// See “PASS PHRASE ARGUMENTS” section of openssl(1) for details.
hmyPass = flag.String("pass", "", "how to get passphrase for the key")
stakingAccounts = flag.String("accounts", "", "account addresses of the node")
@ -194,7 +201,14 @@ func initSetup() {
var myPass string
if !*hmyNoPass {
myPass = utils.AskForPassphrase("Passphrase: ")
if *hmyPass == "" {
myPass = utils.AskForPassphrase("Passphrase: ")
} else if pass, err := utils.GetPassphraseFromSource(*hmyPass); err != nil {
fmt.Printf("Cannot read passphrase: %s\n", err)
os.Exit(3)
} else {
myPass = pass
}
err := ks.Unlock(myAccount, myPass)
if err != nil {
fmt.Printf("Wrong Passphrase! Unable to unlock account key!\n")
@ -242,7 +256,7 @@ func createGlobalConfig() *nodeconfig.ConfigType {
if *isGenesis {
err := consensusPriKey.DeserializeHexStr(genesisAccount.BlsPriKey)
if err != nil {
panic(fmt.Errorf("generate key error"))
panic(fmt.Errorf("Failed to parse BLS private key: %s, %s", genesisAccount.BlsPriKey, err))
}
} else {
// NewNode won't work
@ -263,7 +277,7 @@ func createGlobalConfig() *nodeconfig.ConfigType {
// Consensus keys are the BLS12-381 keys used to sign consensus messages
nodeConfig.ConsensusPriKey, nodeConfig.ConsensusPubKey = consensusPriKey, consensusPriKey.GetPublicKey()
if nodeConfig.ConsensusPriKey == nil || nodeConfig.ConsensusPubKey == nil {
panic(fmt.Errorf("generate key error"))
panic(fmt.Errorf("Failed to initialize BLS keys: %s", consensusPriKey.SerializeToHexStr()))
}
// Key Setup ================= [End]
@ -303,6 +317,12 @@ func setUpConsensusAndNode(nodeConfig *nodeconfig.ConfigType) *node.Node {
fmt.Fprintf(os.Stderr, "Error :%v \n", err)
os.Exit(1)
}
commitDelay, err := time.ParseDuration(*delayCommit)
if err != nil || commitDelay < 0 {
_, _ = fmt.Fprintf(os.Stderr, "invalid commit delay %#v", *delayCommit)
os.Exit(1)
}
currentConsensus.SetCommitDelay(commitDelay)
currentConsensus.MinPeers = *minPeers
if *disableViewChange {
currentConsensus.DisableViewChangeForTestingOnly()

@ -4,6 +4,7 @@ package consensus // consensus
import (
"math/big"
"sync"
"time"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/common/hexutil"
@ -15,7 +16,6 @@ import (
"github.com/harmony-one/harmony/core/state"
"github.com/harmony-one/harmony/core/types"
bls_cosi "github.com/harmony-one/harmony/crypto/bls"
common2 "github.com/harmony-one/harmony/internal/common"
nodeconfig "github.com/harmony-one/harmony/internal/configs/node"
"github.com/harmony-one/harmony/internal/ctxerror"
"github.com/harmony-one/harmony/internal/genesis"
@ -42,21 +42,27 @@ type Consensus struct {
// channel to receive consensus message
MsgChan chan []byte
// How long to delay sending commit messages.
delayCommit time.Duration
// Consensus rounds whose commit phase finished
commitFinishChan chan uint32
// 2 types of timeouts: normal and viewchange
consensusTimeout map[TimeoutType]*utils.Timeout
// Commits collected from validators.
prepareSigs map[common.Address]*bls.Sign // key is the validator's address
commitSigs map[common.Address]*bls.Sign // key is the validator's address
prepareSigs map[string]*bls.Sign // key is the bls public key
commitSigs map[string]*bls.Sign // key is the bls public key
aggregatedPrepareSig *bls.Sign
aggregatedCommitSig *bls.Sign
prepareBitmap *bls_cosi.Mask
commitBitmap *bls_cosi.Mask
// Commits collected from view change
bhpSigs map[common.Address]*bls.Sign // bhpSigs: blockHashPreparedSigs is the signature on m1 type message
nilSigs map[common.Address]*bls.Sign // nilSigs: there is no prepared message when view change, it's signature on m2 type (i.e. nil) messages
viewIDSigs map[common.Address]*bls.Sign // viewIDSigs: every validator sign on |viewID|blockHash| in view changing message
bhpSigs map[string]*bls.Sign // bhpSigs: blockHashPreparedSigs is the signature on m1 type message
nilSigs map[string]*bls.Sign // nilSigs: there is no prepared message when view change, it's signature on m2 type (i.e. nil) messages
viewIDSigs map[string]*bls.Sign // viewIDSigs: every validator sign on |viewID|blockHash| in view changing message
bhpBitmap *bls_cosi.Mask
nilBitmap *bls_cosi.Mask
viewIDBitmap *bls_cosi.Mask
@ -77,19 +83,19 @@ type Consensus struct {
leader p2p.Peer
// Public keys of the committee including leader and validators
PublicKeys []*bls.PublicKey
// The addresses of my committee
CommitteeAddresses map[common.Address]bool
pubKeyLock sync.Mutex
PublicKeys []*bls.PublicKey
CommitteePublicKeys map[string]bool
pubKeyLock sync.Mutex
// private/public keys of current node
priKey *bls.SecretKey
PubKey *bls.PublicKey
SelfAddress common.Address
// the publickey of leader
LeaderPubKey *bls.PublicKey
// Leader or validator address in hex
SelfAddress common.Address
// Consensus Id (View Id) - 4 byte
viewID uint32 // TODO(chao): change it to uint64 or add overflow checking mechanism
@ -137,11 +143,19 @@ type Consensus struct {
// Used to convey to the consensus main loop that block syncing has finished.
syncReadyChan chan struct{}
// Used to convey to the consensus main loop that node is out of sync
syncNotReadyChan chan struct{}
// If true, this consensus will not propose view change.
disableViewChange bool
}
// SetCommitDelay sets the commit message delay. If set to non-zero,
// validator delays commit message by the amount.
func (consensus *Consensus) SetCommitDelay(delay time.Duration) {
consensus.delayCommit = delay
}
// StakeInfoFinder returns the stake information finder instance this
// consensus uses, e.g. for block reward distribution.
func (consensus *Consensus) StakeInfoFinder() StakeInfoFinder {
@ -170,6 +184,11 @@ func (consensus *Consensus) BlocksSynchronized() {
consensus.syncReadyChan <- struct{}{}
}
// BlocksNotSynchronized lets the main loop know that block is not synchronized
func (consensus *Consensus) BlocksNotSynchronized() {
consensus.syncNotReadyChan <- struct{}{}
}
// WaitForSyncing informs the node syncing service to start syncing
func (consensus *Consensus) WaitForSyncing() {
<-consensus.blockNumLowChan
@ -180,6 +199,12 @@ func (consensus *Consensus) Quorum() int {
return len(consensus.PublicKeys)*2/3 + 1
}
// RewardThreshold returns the threshold to stop accepting commit messages
// when leader receives enough signatures for block reward
func (consensus *Consensus) RewardThreshold() int {
return len(consensus.PublicKeys) * 9 / 10
}
// StakeInfoFinder finds the staking account for the given consensus key.
type StakeInfoFinder interface {
// FindStakeInfoByNodeKey returns a list of staking information matching
@ -214,14 +239,13 @@ func New(host p2p.Host, ShardID uint32, leader p2p.Peer, blsPriKey *bls.SecretKe
nodeconfig.GetDefaultConfig().SetIsLeader(false)
}
consensus.prepareSigs = map[common.Address]*bls.Sign{}
consensus.commitSigs = map[common.Address]*bls.Sign{}
consensus.CommitteeAddresses = make(map[common.Address]bool)
consensus.prepareSigs = map[string]*bls.Sign{}
consensus.commitSigs = map[string]*bls.Sign{}
consensus.CommitteePublicKeys = make(map[string]bool)
consensus.validators.Store(common2.MustAddressToBech32(utils.GetBlsAddress(leader.ConsensusPubKey)), leader)
consensus.validators.Store(leader.ConsensusPubKey.SerializeToHexStr(), leader)
// For now use socket address as ID
// TODO: populate Id derived from address
consensus.SelfAddress = utils.GetBlsAddress(selfPeer.ConsensusPubKey)
if blsPriKey != nil {
@ -237,6 +261,8 @@ func New(host p2p.Host, ShardID uint32, leader p2p.Peer, blsPriKey *bls.SecretKe
consensus.MsgChan = make(chan []byte)
consensus.syncReadyChan = make(chan struct{})
consensus.syncNotReadyChan = make(chan struct{})
consensus.commitFinishChan = make(chan uint32)
consensus.ReadySignal = make(chan struct{})
if nodeconfig.GetDefaultConfig().IsLeader() {

@ -3,8 +3,6 @@ package consensus
import (
"testing"
"github.com/ethereum/go-ethereum/common"
"github.com/harmony-one/harmony/crypto/bls"
"github.com/harmony-one/harmony/internal/ctxerror"
@ -61,8 +59,8 @@ func TestConstructPreparedMessage(test *testing.T) {
consensus.blockHash = [32]byte{}
message := "test string"
consensus.prepareSigs[common.Address{}] = leaderPriKey.Sign(message)
consensus.prepareSigs[common.Address{}] = validatorPriKey.Sign(message)
consensus.prepareSigs[leaderPubKey.SerializeToHexStr()] = leaderPriKey.Sign(message)
consensus.prepareSigs[validatorPubKey.SerializeToHexStr()] = validatorPriKey.Sign(message)
// According to RJ these failures are benign.
if err := consensus.prepareBitmap.SetKey(leaderPubKey, true); err != nil {
test.Log(ctxerror.New("prepareBitmap.SetKey").WithCause(err))

@ -4,11 +4,9 @@ import (
"encoding/hex"
"errors"
"fmt"
"reflect"
"time"
"github.com/harmony-one/harmony/crypto/hash"
common2 "github.com/harmony-one/harmony/internal/common"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/log"
@ -18,7 +16,6 @@ import (
libp2p_peer "github.com/libp2p/go-libp2p-peer"
"golang.org/x/crypto/sha3"
proto_discovery "github.com/harmony-one/harmony/api/proto/discovery"
msg_pb "github.com/harmony-one/harmony/api/proto/message"
consensus_engine "github.com/harmony-one/harmony/consensus/engine"
"github.com/harmony-one/harmony/core/state"
@ -29,7 +26,6 @@ import (
"github.com/harmony-one/harmony/internal/profiler"
"github.com/harmony-one/harmony/internal/utils"
"github.com/harmony-one/harmony/p2p"
"github.com/harmony-one/harmony/p2p/host"
)
// WaitForNewRandomness listens to the RndChannel to receive new VDF randomness.
@ -88,6 +84,12 @@ func (consensus *Consensus) Seal(chain consensus_engine.ChainReader, block *type
return nil
}
// Author returns the author of the block header.
func (consensus *Consensus) Author(header *types.Header) (common.Address, error) {
// TODO: implement this
return common.Address{}, nil
}
// Prepare is to prepare ...
// TODO(RJ): fix it.
func (consensus *Consensus) Prepare(chain consensus_engine.ChainReader, header *types.Header) error {
@ -95,23 +97,18 @@ func (consensus *Consensus) Prepare(chain consensus_engine.ChainReader, header *
return nil
}
// GetSelfAddress returns the address in hex
func (consensus *Consensus) GetSelfAddress() common.Address {
return consensus.SelfAddress
}
// Populates the common basic fields for all consensus message.
func (consensus *Consensus) populateMessageFields(request *msg_pb.ConsensusRequest) {
request.ViewId = consensus.viewID
request.BlockNum = consensus.blockNum
request.ShardId = consensus.ShardID
// 32 byte block hash
request.BlockHash = consensus.blockHash[:]
// sender address
request.SenderPubkey = consensus.PubKey.Serialize()
utils.GetLogInstance().Debug("[populateMessageFields]", "myViewID", consensus.viewID, "SenderAddress", consensus.SelfAddress, "blockNum", consensus.blockNum)
consensus.getLogger().Debug("[populateMessageFields]", "SenderKey", consensus.PubKey.SerializeToHexStr())
}
// Signs the consensus message and returns the marshaled message.
@ -168,33 +165,18 @@ func (consensus *Consensus) DebugPrintPublicKeys() {
utils.GetLogInstance().Debug("PublicKeys:", "#", len(consensus.PublicKeys))
}
// DebugPrintValidators print all validator ip/port/key in string format in Consensus
func (consensus *Consensus) DebugPrintValidators() {
count := 0
consensus.validators.Range(func(k, v interface{}) bool {
if p, ok := v.(p2p.Peer); ok {
str2 := fmt.Sprintf("%s", p.ConsensusPubKey.Serialize())
utils.GetLogInstance().Debug("validator:", "IP", p.IP, "Port", p.Port, "address", utils.GetBlsAddress(p.ConsensusPubKey), "Key", str2)
count++
return true
}
return false
})
utils.GetLogInstance().Debug("Validators", "#", count)
}
// UpdatePublicKeys updates the PublicKeys variable, protected by a mutex
func (consensus *Consensus) UpdatePublicKeys(pubKeys []*bls.PublicKey) int {
consensus.pubKeyLock.Lock()
consensus.PublicKeys = append(pubKeys[:0:0], pubKeys...)
consensus.CommitteeAddresses = map[common.Address]bool{}
consensus.CommitteePublicKeys = map[string]bool{}
for _, pubKey := range consensus.PublicKeys {
consensus.CommitteeAddresses[utils.GetBlsAddress(pubKey)] = true
consensus.CommitteePublicKeys[pubKey.SerializeToHexStr()] = true
}
// TODO: use pubkey to identify leader rather than p2p.Peer.
consensus.leader = p2p.Peer{ConsensusPubKey: pubKeys[0]}
consensus.LeaderPubKey = pubKeys[0]
prepareBitmap, err := bls_cosi.NewMask(consensus.PublicKeys, consensus.leader.ConsensusPubKey)
prepareBitmap, err := bls_cosi.NewMask(consensus.PublicKeys, consensus.LeaderPubKey)
if err == nil {
consensus.prepareBitmap = prepareBitmap
}
@ -204,7 +186,7 @@ func (consensus *Consensus) UpdatePublicKeys(pubKeys []*bls.PublicKey) int {
consensus.commitBitmap = commitBitmap
}
utils.GetLogInstance().Info("My Leader", "info", hex.EncodeToString(consensus.leader.ConsensusPubKey.Serialize()))
utils.GetLogInstance().Info("My Leader", "info", consensus.LeaderPubKey.SerializeToHexStr())
utils.GetLogInstance().Info("My Committee", "info", consensus.PublicKeys)
consensus.pubKeyLock.Unlock()
// reset states after update public keys
@ -262,12 +244,6 @@ func (consensus *Consensus) Finalize(chain consensus_engine.ChainReader, header
return types.NewBlock(header, txs, receipts), nil
}
// Author returns the author of the block header.
func (consensus *Consensus) Author(header *types.Header) (common.Address, error) {
// TODO: implement this
return common.Address{}, nil
}
// Sign on the hash of the message
func (consensus *Consensus) signMessage(message []byte) []byte {
hash := hash.Keccak256(message)
@ -353,8 +329,8 @@ func (consensus *Consensus) GetViewIDSigsArray() []*bls.Sign {
func (consensus *Consensus) ResetState() {
consensus.phase = Announce
consensus.blockHash = [32]byte{}
consensus.prepareSigs = map[common.Address]*bls.Sign{}
consensus.commitSigs = map[common.Address]*bls.Sign{}
consensus.prepareSigs = map[string]*bls.Sign{}
consensus.commitSigs = map[string]*bls.Sign{}
prepareBitmap, _ := bls_cosi.NewMask(consensus.PublicKeys, consensus.LeaderPubKey)
commitBitmap, _ := bls_cosi.NewMask(consensus.PublicKeys, consensus.LeaderPubKey)
@ -372,82 +348,8 @@ func (consensus *Consensus) String() string {
} else {
duty = "VLD" // validator
}
return fmt.Sprintf("[duty:%s, PubKey:%s, ShardID:%v, Address:%v]",
duty, hex.EncodeToString(consensus.PubKey.Serialize()), consensus.ShardID, consensus.SelfAddress)
}
// AddPeers adds new peers into the validator map of the consensus
// and add the public keys
func (consensus *Consensus) AddPeers(peers []*p2p.Peer) int {
count := 0
for _, peer := range peers {
_, ok := consensus.validators.LoadOrStore(common2.MustAddressToBech32(utils.GetBlsAddress(peer.ConsensusPubKey)), *peer)
if !ok {
consensus.pubKeyLock.Lock()
if _, ok := consensus.CommitteeAddresses[peer.ConsensusPubKey.GetAddress()]; !ok {
consensus.PublicKeys = append(consensus.PublicKeys, peer.ConsensusPubKey)
consensus.CommitteeAddresses[peer.ConsensusPubKey.GetAddress()] = true
}
consensus.pubKeyLock.Unlock()
}
count++
}
return count
}
// RemovePeers will remove the peer from the validator list and PublicKeys
// It will be called when leader/node lost connection to peers
func (consensus *Consensus) RemovePeers(peers []p2p.Peer) int {
// early return as most of the cases no peers to remove
if len(peers) == 0 {
return 0
}
count := 0
count2 := 0
newList := append(consensus.PublicKeys[:0:0], consensus.PublicKeys...)
for _, peer := range peers {
consensus.validators.Range(func(k, v interface{}) bool {
if p, ok := v.(p2p.Peer); ok {
// We are using peer.IP and peer.Port to identify the unique peer
// FIXME (lc): use a generic way to identify a peer
if p.IP == peer.IP && p.Port == peer.Port {
consensus.validators.Delete(k)
count++
}
return true
}
return false
})
for i, pp := range newList {
// Not Found the pubkey, if found pubkey, ignore it
if reflect.DeepEqual(peer.ConsensusPubKey, pp) {
// consensus.Log.Debug("RemovePeers", "i", i, "pp", pp, "peer.PubKey", peer.PubKey)
newList = append(newList[:i], newList[i+1:]...)
count2++
}
}
}
if count2 > 0 {
consensus.UpdatePublicKeys(newList)
// Send out Pong messages to everyone in the shard to keep the publickeys in sync
// Or the shard won't be able to reach consensus if public keys are mismatch
validators := consensus.GetValidatorPeers()
pong := proto_discovery.NewPongMessage(validators, consensus.PublicKeys, consensus.leader.ConsensusPubKey, consensus.ShardID)
buffer := pong.ConstructPongMessage()
if err := consensus.host.SendMessageToGroups([]p2p.GroupID{p2p.NewGroupIDByShardID(p2p.ShardID(consensus.ShardID))}, host.ConstructP2pMessage(byte(17), buffer)); err != nil {
ctxerror.Warn(utils.GetLogger(), err, "cannot send pong message")
}
}
return count2
return fmt.Sprintf("[duty:%s, PubKey:%s, ShardID:%v]",
duty, consensus.PubKey.SerializeToHexStr(), consensus.ShardID)
}
// ToggleConsensusCheck flip the flag of whether ignore viewID check during consensus process
@ -457,25 +359,9 @@ func (consensus *Consensus) ToggleConsensusCheck() {
consensus.ignoreViewIDCheck = !consensus.ignoreViewIDCheck
}
// GetPeerByAddress the validator peer based on validator Address.
// TODO: deprecate this, as validators network info shouldn't known to everyone
func (consensus *Consensus) GetPeerByAddress(validatorAddress string) *p2p.Peer {
v, ok := consensus.validators.Load(validatorAddress)
if !ok {
utils.GetLogInstance().Warn("Unrecognized validator", "validatorAddress", validatorAddress, "consensus", consensus)
return nil
}
value, ok := v.(p2p.Peer)
if !ok {
utils.GetLogInstance().Warn("Invalid validator", "validatorAddress", validatorAddress, "consensus", consensus)
return nil
}
return &value
}
// IsValidatorInCommittee returns whether the given validator BLS address is part of my committee
func (consensus *Consensus) IsValidatorInCommittee(validatorBlsAddress common.Address) bool {
_, ok := consensus.CommitteeAddresses[validatorBlsAddress]
func (consensus *Consensus) IsValidatorInCommittee(pubKey *bls.PublicKey) bool {
_, ok := consensus.CommitteePublicKeys[pubKey.SerializeToHexStr()]
return ok
}
@ -508,28 +394,24 @@ func (consensus *Consensus) verifySenderKey(msg *msg_pb.Message) (*bls.PublicKey
if err != nil {
return nil, err
}
addrBytes := senderKey.GetAddress()
senderAddr := common.BytesToAddress(addrBytes[:])
if !consensus.IsValidatorInCommittee(senderAddr) {
return nil, fmt.Errorf("Validator address %s is not in committee", common2.MustAddressToBech32(senderAddr))
if !consensus.IsValidatorInCommittee(senderKey) {
return nil, fmt.Errorf("Validator %s is not in committee", senderKey.SerializeToHexStr())
}
return senderKey, nil
}
func (consensus *Consensus) verifyViewChangeSenderKey(msg *msg_pb.Message) (*bls.PublicKey, common.Address, error) {
func (consensus *Consensus) verifyViewChangeSenderKey(msg *msg_pb.Message) (*bls.PublicKey, error) {
vcMsg := msg.GetViewchange()
senderKey, err := bls_cosi.BytesToBlsPublicKey(vcMsg.SenderPubkey)
if err != nil {
return nil, common.Address{}, err
return nil, err
}
addrBytes := senderKey.GetAddress()
senderAddr := common.BytesToAddress(addrBytes[:])
if !consensus.IsValidatorInCommittee(senderAddr) {
return nil, common.Address{}, fmt.Errorf("Validator address %s is not in committee", common2.MustAddressToBech32(senderAddr))
if !consensus.IsValidatorInCommittee(senderKey) {
return nil, fmt.Errorf("Validator %s is not in committee", senderKey.SerializeToHexStr())
}
return senderKey, senderAddr, nil
return senderKey, nil
}
// SetViewID set the viewID to the height of the blockchain
@ -551,13 +433,16 @@ func (consensus *Consensus) RegisterRndChannel(rndChannel chan [64]byte) {
func (consensus *Consensus) checkViewID(msg *PbftMessage) error {
// just ignore consensus check for the first time when node join
if consensus.ignoreViewIDCheck {
//in syncing mode, node accepts incoming messages without viewID/leaderKey checking
//so only set mode to normal when new node enters consensus and need checking viewID
consensus.mode.SetMode(Normal)
consensus.viewID = msg.ViewID
consensus.mode.SetViewID(msg.ViewID)
consensus.LeaderPubKey = msg.SenderPubkey
consensus.ignoreViewIDCheck = false
consensus.consensusTimeout[timeoutConsensus].Start()
utils.GetLogger().Debug("viewID and leaderKey override", "viewID", consensus.viewID, "leaderKey", consensus.LeaderPubKey.SerializeToHexStr()[:20])
utils.GetLogger().Debug("start consensus timeout", "viewID", consensus.viewID, "block", consensus.blockNum)
utils.GetLogger().Debug("Start consensus timer", "viewID", consensus.viewID, "block", consensus.blockNum)
return nil
} else if msg.ViewID > consensus.viewID {
return consensus_engine.ErrViewIDNotMatch

@ -4,10 +4,7 @@ import (
"bytes"
"testing"
"github.com/ethereum/go-ethereum/common"
"github.com/harmony-one/harmony/crypto/bls"
common2 "github.com/harmony-one/harmony/internal/common"
msg_pb "github.com/harmony-one/harmony/api/proto/message"
"github.com/harmony-one/harmony/internal/utils"
@ -15,26 +12,6 @@ import (
"github.com/harmony-one/harmony/p2p/p2pimpl"
)
func TestGetPeerFromID(t *testing.T) {
leaderPriKey := bls.RandPrivateKey()
leaderPubKey := leaderPriKey.GetPublicKey()
leader := p2p.Peer{IP: "127.0.0.1", Port: "9902", ConsensusPubKey: leaderPubKey}
priKey, _, _ := utils.GenKeyP2P("127.0.0.1", "9902")
host, err := p2pimpl.NewHost(&leader, priKey)
if err != nil {
t.Fatalf("newhost failure: %v", err)
}
consensus, err := New(host, 0, leader, leaderPriKey)
if err != nil {
t.Fatalf("Cannot craeate consensus: %v", err)
}
leaderAddress := utils.GetAddressFromBlsPubKey(leader.ConsensusPubKey)
l := consensus.GetPeerByAddress(common2.MustAddressToBech32(leaderAddress))
if l.IP != leader.IP || l.Port != leader.Port {
t.Errorf("leader IP not equal")
}
}
func TestPopulateMessageFields(t *testing.T) {
leader := p2p.Peer{IP: "127.0.0.1", Port: "9902"}
priKey, _, _ := utils.GenKeyP2P("127.0.0.1", "9902")
@ -83,7 +60,6 @@ func TestSignAndMarshalConsensusMessage(t *testing.T) {
}
consensus.viewID = 2
consensus.blockHash = [32]byte{}
consensus.SelfAddress = common.Address{}
msg := &msg_pb.Message{}
marshaledMessage, err := consensus.signAndMarshalConsensusMessage(msg)

@ -37,6 +37,20 @@ func (consensus *Consensus) handleMessageUpdate(payload []byte) {
return
}
if msg.Type == msg_pb.MessageType_VIEWCHANGE || msg.Type == msg_pb.MessageType_NEWVIEW {
if msg.GetViewchange() != nil && msg.GetViewchange().ShardId != consensus.ShardID {
consensus.getLogger().Warn("Received view change message from different shard",
"myShardId", consensus.ShardID, "receivedShardId", msg.GetConsensus().ShardId)
return
}
} else {
if msg.GetConsensus() != nil && msg.GetConsensus().ShardId != consensus.ShardID {
consensus.getLogger().Warn("Received consensus message from different shard",
"myShardId", consensus.ShardID, "receivedShardId", msg.GetConsensus().ShardId)
return
}
}
switch msg.Type {
case msg_pb.MessageType_ANNOUNCE:
consensus.onAnnounce(msg)
@ -57,23 +71,14 @@ func (consensus *Consensus) handleMessageUpdate(payload []byte) {
}
// TODO: move to consensus_leader.go later
func (consensus *Consensus) tryAnnounce(block *types.Block) {
// here we assume the leader should always be update to date
if block.NumberU64() != consensus.blockNum {
consensus.getLogger().Debug("tryAnnounce blockNum not match", "blockNum", block.NumberU64())
return
}
if !consensus.PubKey.IsEqual(consensus.LeaderPubKey) {
consensus.getLogger().Debug("tryAnnounce key not match", "myKey", consensus.PubKey, "leaderKey", consensus.LeaderPubKey)
return
}
func (consensus *Consensus) announce(block *types.Block) {
blockHash := block.Hash()
copy(consensus.blockHash[:], blockHash[:])
// prepare message and broadcast to validators
encodedBlock, err := rlp.EncodeToBytes(block)
if err != nil {
consensus.getLogger().Debug("tryAnnounce Failed encoding block")
consensus.getLogger().Debug("announce Failed encoding block")
return
}
consensus.block = encodedBlock
@ -86,7 +91,7 @@ func (consensus *Consensus) tryAnnounce(block *types.Block) {
_ = protobuf.Unmarshal(msgPayload, msg)
pbftMsg, err := ParsePbftMessage(msg)
if err != nil {
consensus.getLogger().Warn("tryAnnounce unable to parse pbft message", "error", err)
consensus.getLogger().Warn("announce unable to parse pbft message", "error", err)
return
}
@ -94,7 +99,7 @@ func (consensus *Consensus) tryAnnounce(block *types.Block) {
consensus.pbftLog.AddBlock(block)
// Leader sign the block hash itself
consensus.prepareSigs[consensus.SelfAddress] = consensus.priKey.SignHash(consensus.blockHash[:])
consensus.prepareSigs[consensus.PubKey.SerializeToHexStr()] = consensus.priKey.SignHash(consensus.blockHash[:])
// Construct broadcast p2p message
if err := consensus.host.SendMessageToGroups([]p2p.GroupID{p2p.NewGroupIDByShardID(p2p.ShardID(consensus.ShardID))}, host.ConstructP2pMessage(byte(17), msgToSend)); err != nil {
@ -152,17 +157,6 @@ func (consensus *Consensus) onAnnounce(msg *msg_pb.Message) {
}
}
// skip verify block in Syncing mode
if consensus.BlockVerifier == nil || consensus.mode.Mode() != Normal {
// do nothing
} else if err := consensus.BlockVerifier(&blockObj); err != nil {
// TODO ek – maybe we could do this in commit phase
err := ctxerror.New("block verification failed",
"blockHash", blockObj.Hash(),
).WithCause(err)
ctxerror.Log15(utils.GetLogger().Warn, err)
return
}
//blockObj.Logger(consensus.getLogger()).Debug("received announce", "viewID", recvMsg.ViewID, "msgBlockNum", recvMsg.BlockNum)
logMsgs := consensus.pbftLog.GetMessagesByTypeSeqView(msg_pb.MessageType_ANNOUNCE, recvMsg.BlockNum, recvMsg.ViewID)
if len(logMsgs) > 0 {
@ -194,24 +188,17 @@ func (consensus *Consensus) onAnnounce(msg *msg_pb.Message) {
consensus.getLogger().Debug("viewID check failed", "msgViewID", recvMsg.ViewID, "msgBlockNum", recvMsg.BlockNum)
return
}
consensus.tryPrepare(blockObj.Header().Hash())
consensus.prepare(&blockObj)
return
}
// tryPrepare will try to send prepare message
func (consensus *Consensus) tryPrepare(blockHash common.Hash) {
var hash common.Hash
copy(hash[:], blockHash[:])
block := consensus.pbftLog.GetBlockByHash(hash)
if block == nil {
return
}
if consensus.blockNum != block.NumberU64() || !consensus.pbftLog.HasMatchingViewAnnounce(consensus.blockNum, consensus.viewID, hash) {
consensus.getLogger().Debug("blockNum or announce message not match")
return
}
func (consensus *Consensus) prepare(block *types.Block) {
// if consensus.blockNum != block.NumberU64() || !consensus.pbftLog.HasMatchingViewAnnounce(consensus.blockNum, consensus.viewID, hash) {
// consensus.getLogger().Debug("blockNum or announce message not match")
// return
// }
consensus.switchPhase(Prepare, true)
@ -258,9 +245,7 @@ func (consensus *Consensus) onPrepare(msg *msg_pb.Message) {
return
}
validatorPubKey := recvMsg.SenderPubkey
addrBytes := validatorPubKey.GetAddress()
validatorAddress := common.BytesToAddress(addrBytes[:])
validatorPubKey := recvMsg.SenderPubkey.SerializeToHexStr()
prepareSig := recvMsg.Payload
prepareSigs := consensus.prepareSigs
@ -270,13 +255,14 @@ func (consensus *Consensus) onPrepare(msg *msg_pb.Message) {
defer consensus.mutex.Unlock()
if len(prepareSigs) >= consensus.Quorum() {
// already have enough signatures
consensus.getLogger().Info("received additional prepare message", "validatorPubKey", validatorPubKey)
return
}
// proceed only when the message is not received before
_, ok := prepareSigs[validatorAddress]
_, ok := prepareSigs[validatorPubKey]
if ok {
consensus.getLogger().Debug("Already received prepare message from the validator", "validatorAddress", validatorAddress)
consensus.getLogger().Debug("Already received prepare message from the validator", "validatorPubKey", validatorPubKey)
return
}
@ -284,23 +270,22 @@ func (consensus *Consensus) onPrepare(msg *msg_pb.Message) {
var sign bls.Sign
err = sign.Deserialize(prepareSig)
if err != nil {
consensus.getLogger().Error("Failed to deserialize bls signature", "validatorAddress", validatorAddress)
consensus.getLogger().Error("Failed to deserialize bls signature", "validatorPubKey", validatorPubKey)
return
}
if !sign.VerifyHash(validatorPubKey, consensus.blockHash[:]) {
consensus.getLogger().Error("Received invalid BLS signature", "validatorAddress", validatorAddress)
if !sign.VerifyHash(recvMsg.SenderPubkey, consensus.blockHash[:]) {
consensus.getLogger().Error("Received invalid BLS signature", "validatorPubKey", validatorPubKey)
return
}
consensus.getLogger().Debug("Received new prepare signature", "numReceivedSoFar", len(prepareSigs), "validatorAddress", validatorAddress, "PublicKeys", len(consensus.PublicKeys))
prepareSigs[validatorAddress] = &sign
consensus.getLogger().Debug("Received new prepare signature", "numReceivedSoFar", len(prepareSigs), "validatorPubKey", validatorPubKey, "PublicKeys", len(consensus.PublicKeys))
prepareSigs[validatorPubKey] = &sign
// Set the bitmap indicating that this validator signed.
if err := prepareBitmap.SetKey(validatorPubKey, true); err != nil {
if err := prepareBitmap.SetKey(recvMsg.SenderPubkey, true); err != nil {
ctxerror.Warn(consensus.getLogger(), err, "prepareBitmap.SetKey failed")
}
if len(prepareSigs) >= consensus.Quorum() {
consensus.switchPhase(Commit, true)
// Construct and broadcast prepared message
msgToSend, aggSig := consensus.constructPreparedMessage()
consensus.aggregatedPrepareSig = aggSig
@ -322,11 +307,15 @@ func (consensus *Consensus) onPrepare(msg *msg_pb.Message) {
consensus.getLogger().Debug("sent prepared message")
}
consensus.switchPhase(Commit, true)
// Leader add commit phase signature
blockNumHash := make([]byte, 8)
binary.LittleEndian.PutUint64(blockNumHash, consensus.blockNum)
commitPayload := append(blockNumHash, consensus.blockHash[:]...)
consensus.commitSigs[consensus.SelfAddress] = consensus.priKey.SignHash(commitPayload)
consensus.commitSigs[consensus.PubKey.SerializeToHexStr()] = consensus.priKey.SignHash(commitPayload)
if err := consensus.commitBitmap.SetKey(consensus.PubKey, true); err != nil {
consensus.getLogger().Debug("leader commit bitmap set failed")
}
}
return
}
@ -411,11 +400,16 @@ func (consensus *Consensus) onPrepared(msg *msg_pb.Message) {
consensus.prepareBitmap = mask
// Construct and send the commit message
blockNumHash := make([]byte, 8)
binary.LittleEndian.PutUint64(blockNumHash, consensus.blockNum)
commitPayload := append(blockNumHash, consensus.blockHash[:]...)
blockNumBytes := make([]byte, 8)
binary.LittleEndian.PutUint64(blockNumBytes, consensus.blockNum)
commitPayload := append(blockNumBytes, consensus.blockHash[:]...)
msgToSend := consensus.constructCommitMessage(commitPayload)
// TODO: genesis account node delay for 1 second, this is a temp fix for allows FN nodes to earning reward
if consensus.delayCommit > 0 {
time.Sleep(consensus.delayCommit)
}
if err := consensus.host.SendMessageToGroups([]p2p.GroupID{p2p.NewGroupIDByShardID(p2p.ShardID(consensus.ShardID))}, host.ConstructP2pMessage(byte(17), msgToSend)); err != nil {
consensus.getLogger().Warn("cannot send commit message")
} else {
@ -464,17 +458,15 @@ func (consensus *Consensus) onCommit(msg *msg_pb.Message) {
return
}
validatorPubKey := recvMsg.SenderPubkey
addrBytes := validatorPubKey.GetAddress()
validatorAddress := common.BytesToAddress(addrBytes[:])
validatorPubKey := recvMsg.SenderPubkey.SerializeToHexStr()
commitSig := recvMsg.Payload
consensus.mutex.Lock()
defer consensus.mutex.Unlock()
if !consensus.IsValidatorInCommittee(validatorAddress) {
consensus.getLogger().Error("Invalid validator", "validatorAddress", validatorAddress)
if !consensus.IsValidatorInCommittee(recvMsg.SenderPubkey) {
consensus.getLogger().Error("Invalid validator", "validatorPubKey", validatorPubKey)
return
}
@ -482,48 +474,58 @@ func (consensus *Consensus) onCommit(msg *msg_pb.Message) {
commitBitmap := consensus.commitBitmap
// proceed only when the message is not received before
_, ok := commitSigs[validatorAddress]
_, ok := commitSigs[validatorPubKey]
if ok {
consensus.getLogger().Debug("Already received commit message from the validator", "validatorAddress", validatorAddress)
consensus.getLogger().Info("Already received commit message from the validator", "validatorPubKey", validatorPubKey)
return
}
// already had enough signautres
if len(commitSigs) >= consensus.Quorum() {
return
}
quorumWasMet := len(commitSigs) >= consensus.Quorum()
// Verify the signature on commitPayload is correct
var sign bls.Sign
err = sign.Deserialize(commitSig)
if err != nil {
consensus.getLogger().Debug("Failed to deserialize bls signature", "validatorAddress", validatorAddress)
consensus.getLogger().Debug("Failed to deserialize bls signature", "validatorPubKey", validatorPubKey)
return
}
blockNumHash := make([]byte, 8)
binary.LittleEndian.PutUint64(blockNumHash, recvMsg.BlockNum)
commitPayload := append(blockNumHash, recvMsg.BlockHash[:]...)
if !sign.VerifyHash(validatorPubKey, commitPayload) {
if !sign.VerifyHash(recvMsg.SenderPubkey, commitPayload) {
consensus.getLogger().Error("cannot verify commit message", "msgViewID", recvMsg.ViewID, "msgBlock", recvMsg.BlockNum)
return
}
consensus.getLogger().Debug("Received new commit message", "numReceivedSoFar", len(commitSigs), "msgViewID", recvMsg.ViewID, "msgBlock", recvMsg.BlockNum, "validatorAddress", validatorAddress)
commitSigs[validatorAddress] = &sign
consensus.getLogger().Debug("Received new commit message", "numReceivedSoFar", len(commitSigs), "msgViewID", recvMsg.ViewID, "msgBlock", recvMsg.BlockNum, "validatorPubKey", validatorPubKey)
commitSigs[validatorPubKey] = &sign
// Set the bitmap indicating that this validator signed.
if err := commitBitmap.SetKey(validatorPubKey, true); err != nil {
if err := commitBitmap.SetKey(recvMsg.SenderPubkey, true); err != nil {
ctxerror.Warn(consensus.getLogger(), err, "commitBitmap.SetKey failed")
}
if len(commitSigs) >= consensus.Quorum() {
consensus.getLogger().Info("Enough commits received!", "num", len(commitSigs))
consensus.finalizeCommits()
quorumIsMet := len(commitSigs) >= consensus.Quorum()
rewardThresholdIsMet := len(commitSigs) >= consensus.RewardThreshold()
if !quorumWasMet && quorumIsMet {
consensus.getLogger().Info("enough commits received for consensus", "num", len(commitSigs))
go func(viewID uint32) {
time.Sleep(2 * time.Second)
consensus.getLogger().Debug("Commit grace period ended")
consensus.commitFinishChan <- viewID
}(consensus.viewID)
}
if rewardThresholdIsMet {
go func(viewID uint32) {
consensus.commitFinishChan <- viewID
consensus.getLogger().Debug("enough commits received for block reward", "num", len(commitSigs))
}(consensus.viewID)
}
}
func (consensus *Consensus) finalizeCommits() {
consensus.getLogger().Info("finalizing block", "num", len(consensus.commitSigs))
consensus.switchPhase(Announce, true)
// Construct and broadcast committed message
msgToSend, aggSig := consensus.constructCommittedMessage()
@ -535,6 +537,7 @@ func (consensus *Consensus) finalizeCommits() {
consensus.getLogger().Debug("sent committed message", "len", len(msgToSend))
}
consensus.switchPhase(Announce, true)
var blockObj types.Block
err := rlp.DecodeBytes(consensus.block, &blockObj)
if err != nil {
@ -567,14 +570,17 @@ func (consensus *Consensus) finalizeCommits() {
if consensus.consensusTimeout[timeoutBootstrap].IsActive() {
consensus.consensusTimeout[timeoutBootstrap].Stop()
consensus.getLogger().Debug("start consensus timeout; stop bootstrap timeout only once")
consensus.getLogger().Debug("start consensus timer; stop bootstrap timer only once")
} else {
consensus.getLogger().Debug("start consensus timeout")
consensus.getLogger().Debug("start consensus timer")
}
consensus.consensusTimeout[timeoutConsensus].Start()
consensus.OnConsensusDone(&blockObj)
consensus.getLogger().Debug("HOORAY!!!!!!! CONSENSUS REACHED!!!!!!!", "numOfSignatures", len(consensus.commitSigs))
consensus.getLogger().Info("HOORAY!!!!!!! CONSENSUS REACHED!!!!!!!", "numOfSignatures", len(consensus.commitSigs))
// TODO: wait for validators receive committed message; remove this temporary delay
time.Sleep(time.Second)
// Send signal to Node so the new block can be added and new round of consensus can be triggered
consensus.ReadySignal <- struct{}{}
@ -607,6 +613,7 @@ func (consensus *Consensus) onCommitted(msg *msg_pb.Message) {
return
}
if recvMsg.BlockNum < consensus.blockNum {
consensus.getLogger().Info("received old blocks", "msgBlock", recvMsg.BlockNum)
return
}
@ -618,17 +625,21 @@ func (consensus *Consensus) onCommitted(msg *msg_pb.Message) {
// check has 2f+1 signatures
if count := utils.CountOneBits(mask.Bitmap); count < consensus.Quorum() {
consensus.getLogger().Debug("not have enough signature", "need", consensus.Quorum(), "have", count)
consensus.getLogger().Warn("not have enough signature", "need", consensus.Quorum(), "have", count)
return
}
blockNumHash := make([]byte, 8)
binary.LittleEndian.PutUint64(blockNumHash, recvMsg.BlockNum)
commitPayload := append(blockNumHash, recvMsg.BlockHash[:]...)
blockNumBytes := make([]byte, 8)
binary.LittleEndian.PutUint64(blockNumBytes, recvMsg.BlockNum)
commitPayload := append(blockNumBytes, recvMsg.BlockHash[:]...)
if !aggSig.VerifyHash(mask.AggregatePublic, commitPayload) {
consensus.getLogger().Error("Failed to verify the multi signature for commit phase", "msgBlock", recvMsg.BlockNum)
return
}
consensus.mutex.Lock()
defer consensus.mutex.Unlock()
consensus.aggregatedCommitSig = aggSig
consensus.commitBitmap = mask
consensus.getLogger().Debug("committed message added", "msgViewID", recvMsg.ViewID, "msgBlock", recvMsg.BlockNum)
@ -655,14 +666,12 @@ func (consensus *Consensus) onCommitted(msg *msg_pb.Message) {
// }
consensus.tryCatchup()
consensus.mutex.Lock()
defer consensus.mutex.Unlock()
if consensus.consensusTimeout[timeoutBootstrap].IsActive() {
consensus.consensusTimeout[timeoutBootstrap].Stop()
consensus.getLogger().Debug("start consensus timeout; stop bootstrap timeout only once")
consensus.getLogger().Debug("start consensus timer; stop bootstrap timer only once")
} else {
consensus.getLogger().Debug("start consensus timeout")
consensus.getLogger().Debug("start consensus timer")
}
consensus.consensusTimeout[timeoutConsensus].Start()
return
@ -690,6 +699,13 @@ func (consensus *Consensus) tryCatchup() {
break
}
if consensus.BlockVerifier == nil {
// do nothing
} else if err := consensus.BlockVerifier(block); err != nil {
consensus.getLogger().Info("block verification faied")
return
}
if block.ParentHash() != consensus.ChainReader.CurrentHeader().Hash() {
consensus.getLogger().Debug("[PBFT] parent block hash not match")
break
@ -788,12 +804,16 @@ func (consensus *Consensus) Start(blockChannel chan *types.Block, stopChan chan
break
}
}
case <-consensus.syncReadyChan:
consensus.mode.SetMode(Normal)
consensus.SetBlockNum(consensus.ChainReader.CurrentHeader().Number.Uint64() + 1)
consensus.getLogger().Info("Node is in sync")
consensus.ignoreViewIDCheck = true
case <-consensus.syncNotReadyChan:
consensus.SetBlockNum(consensus.ChainReader.CurrentHeader().Number.Uint64() + 1)
consensus.mode.SetMode(Syncing)
consensus.getLogger().Info("Node is out of sync")
case newBlock := <-blockChannel:
consensus.getLogger().Info("receive newBlock", "msgBlock", newBlock.NumberU64())
if consensus.ShardID == 0 {
@ -826,11 +846,20 @@ func (consensus *Consensus) Start(blockChannel chan *types.Block, stopChan chan
startTime = time.Now()
consensus.getLogger().Debug("STARTING CONSENSUS", "numTxs", len(newBlock.Transactions()), "consensus", consensus, "startTime", startTime, "publicKeys", len(consensus.PublicKeys))
consensus.tryAnnounce(newBlock)
consensus.announce(newBlock)
case msg := <-consensus.MsgChan:
consensus.handleMessageUpdate(msg)
case viewID := <-consensus.commitFinishChan:
func() {
consensus.mutex.Lock()
defer consensus.mutex.Unlock()
if viewID == consensus.viewID {
consensus.finalizeCommits()
}
}()
case <-stopChan:
return
}

@ -22,6 +22,7 @@ func (consensus *Consensus) constructViewChangeMessage() []byte {
vcMsg := message.GetViewchange()
vcMsg.ViewId = consensus.mode.GetViewID()
vcMsg.BlockNum = consensus.blockNum
vcMsg.ShardId = consensus.ShardID
// sender address
vcMsg.SenderPubkey = consensus.PubKey.Serialize()
@ -77,6 +78,7 @@ func (consensus *Consensus) constructNewViewMessage() []byte {
vcMsg := message.GetViewchange()
vcMsg.ViewId = consensus.mode.GetViewID()
vcMsg.BlockNum = consensus.blockNum
vcMsg.ShardId = consensus.ShardID
// sender address
vcMsg.SenderPubkey = consensus.PubKey.Serialize()
vcMsg.Payload = consensus.m1Payload

@ -146,9 +146,9 @@ func (consensus *Consensus) ResetViewChangeState() {
consensus.viewIDBitmap = viewIDBitmap
consensus.m1Payload = []byte{}
consensus.bhpSigs = map[common.Address]*bls.Sign{}
consensus.nilSigs = map[common.Address]*bls.Sign{}
consensus.viewIDSigs = map[common.Address]*bls.Sign{}
consensus.bhpSigs = map[string]*bls.Sign{}
consensus.nilSigs = map[string]*bls.Sign{}
consensus.viewIDSigs = map[string]*bls.Sign{}
}
func createTimeout() map[TimeoutType]*utils.Timeout {
@ -179,11 +179,11 @@ func (consensus *Consensus) startViewChange(viewID uint32) {
consensus.consensusTimeout[timeoutViewChange].SetDuration(duration)
consensus.consensusTimeout[timeoutViewChange].Start()
consensus.getLogger().Debug("start view change timeout", "viewChangingID", consensus.mode.ViewID())
consensus.getLogger().Debug("start view change timer", "viewChangingID", consensus.mode.ViewID())
}
func (consensus *Consensus) onViewChange(msg *msg_pb.Message) {
senderKey, validatorAddress, err := consensus.verifyViewChangeSenderKey(msg)
senderKey, err := consensus.verifyViewChangeSenderKey(msg)
if err != nil {
consensus.getLogger().Debug("onViewChange verifySenderKey failed", "error", err)
return
@ -220,29 +220,29 @@ func (consensus *Consensus) onViewChange(msg *msg_pb.Message) {
defer consensus.vcLock.Unlock()
// add self m1 or m2 type message signature and bitmap
_, ok1 := consensus.nilSigs[consensus.SelfAddress]
_, ok2 := consensus.bhpSigs[consensus.SelfAddress]
_, ok1 := consensus.nilSigs[consensus.PubKey.SerializeToHexStr()]
_, ok2 := consensus.bhpSigs[consensus.PubKey.SerializeToHexStr()]
if !(ok1 || ok2) {
// add own signature for newview message
preparedMsgs := consensus.pbftLog.GetMessagesByTypeSeq(msg_pb.MessageType_PREPARED, recvMsg.BlockNum)
preparedMsg := consensus.pbftLog.FindMessageByMaxViewID(preparedMsgs)
if preparedMsg == nil {
sign := consensus.priKey.SignHash(NIL)
consensus.nilSigs[consensus.SelfAddress] = sign
consensus.nilSigs[consensus.PubKey.SerializeToHexStr()] = sign
consensus.nilBitmap.SetKey(consensus.PubKey, true)
} else {
msgToSign := append(preparedMsg.BlockHash[:], preparedMsg.Payload...)
consensus.bhpSigs[consensus.SelfAddress] = consensus.priKey.SignHash(msgToSign)
consensus.bhpSigs[consensus.PubKey.SerializeToHexStr()] = consensus.priKey.SignHash(msgToSign)
consensus.bhpBitmap.SetKey(consensus.PubKey, true)
}
}
// add self m3 type message signature and bitmap
_, ok3 := consensus.viewIDSigs[consensus.SelfAddress]
_, ok3 := consensus.viewIDSigs[consensus.PubKey.SerializeToHexStr()]
if !ok3 {
viewIDHash := make([]byte, 4)
binary.LittleEndian.PutUint32(viewIDHash, recvMsg.ViewID)
sign := consensus.priKey.SignHash(viewIDHash)
consensus.viewIDSigs[consensus.SelfAddress] = sign
consensus.viewIDSigs[consensus.PubKey.SerializeToHexStr()] = sign
consensus.viewIDBitmap.SetKey(consensus.PubKey, true)
}
@ -252,9 +252,9 @@ func (consensus *Consensus) onViewChange(msg *msg_pb.Message) {
// m2 type message
if len(recvMsg.Payload) == 0 {
_, ok := consensus.nilSigs[validatorAddress]
_, ok := consensus.nilSigs[senderKey.SerializeToHexStr()]
if ok {
consensus.getLogger().Debug("onViewChange already received m2 message from the validator", "validatorAddress", validatorAddress)
consensus.getLogger().Debug("onViewChange already received m2 message from the validator", "validatorPubKey", senderKey.SerializeToHexStr())
return
}
@ -262,12 +262,12 @@ func (consensus *Consensus) onViewChange(msg *msg_pb.Message) {
consensus.getLogger().Warn("onViewChange failed to verify signature for m2 type viewchange message")
return
}
consensus.nilSigs[validatorAddress] = recvMsg.ViewchangeSig
consensus.nilSigs[senderKey.SerializeToHexStr()] = recvMsg.ViewchangeSig
consensus.nilBitmap.SetKey(recvMsg.SenderPubkey, true) // Set the bitmap indicating that this validator signed.
} else { // m1 type message
_, ok := consensus.bhpSigs[validatorAddress]
_, ok := consensus.bhpSigs[senderKey.SerializeToHexStr()]
if ok {
consensus.getLogger().Debug("onViewChange already received m1 message from the validator", "validatorAddress", validatorAddress)
consensus.getLogger().Debug("onViewChange already received m1 message from the validator", "validatorPubKey", senderKey.SerializeToHexStr())
return
}
if !recvMsg.ViewchangeSig.VerifyHash(recvMsg.SenderPubkey, recvMsg.Payload) {
@ -311,14 +311,14 @@ func (consensus *Consensus) onViewChange(msg *msg_pb.Message) {
consensus.pbftLog.AddMessage(&preparedMsg)
}
}
consensus.bhpSigs[validatorAddress] = recvMsg.ViewchangeSig
consensus.bhpSigs[senderKey.SerializeToHexStr()] = recvMsg.ViewchangeSig
consensus.bhpBitmap.SetKey(recvMsg.SenderPubkey, true) // Set the bitmap indicating that this validator signed.
}
// check and add viewID (m3 type) message signature
_, ok := consensus.viewIDSigs[validatorAddress]
_, ok := consensus.viewIDSigs[senderKey.SerializeToHexStr()]
if ok {
consensus.getLogger().Debug("onViewChange already received m3 viewID message from the validator", "validatorAddress", validatorAddress)
consensus.getLogger().Debug("onViewChange already received m3 viewID message from the validator", "senderKey.SerializeToHexStr()", senderKey.SerializeToHexStr())
return
}
viewIDHash := make([]byte, 4)
@ -327,7 +327,7 @@ func (consensus *Consensus) onViewChange(msg *msg_pb.Message) {
consensus.getLogger().Warn("onViewChange failed to verify viewID signature", "msgViewID", recvMsg.ViewID)
return
}
consensus.viewIDSigs[validatorAddress] = recvMsg.ViewidSig
consensus.viewIDSigs[senderKey.SerializeToHexStr()] = recvMsg.ViewidSig
consensus.viewIDBitmap.SetKey(recvMsg.SenderPubkey, true) // Set the bitmap indicating that this validator signed.
if len(consensus.viewIDSigs) >= consensus.Quorum() {
@ -353,7 +353,7 @@ func (consensus *Consensus) onViewChange(msg *msg_pb.Message) {
blockNumHash := make([]byte, 8)
binary.LittleEndian.PutUint64(blockNumHash, consensus.blockNum)
commitPayload := append(blockNumHash, consensus.blockHash[:]...)
consensus.commitSigs[consensus.SelfAddress] = consensus.priKey.SignHash(commitPayload)
consensus.commitSigs[consensus.PubKey.SerializeToHexStr()] = consensus.priKey.SignHash(commitPayload)
}
consensus.mode.SetViewID(recvMsg.ViewID)
@ -366,7 +366,7 @@ func (consensus *Consensus) onViewChange(msg *msg_pb.Message) {
consensus.ResetViewChangeState()
consensus.consensusTimeout[timeoutViewChange].Stop()
consensus.consensusTimeout[timeoutConsensus].Start()
consensus.getLogger().Debug("new leader start consensus timeout and stop view change timeout", "viewChangingID", consensus.mode.ViewID())
consensus.getLogger().Debug("new leader start consensus timer and stop view change timer", "viewChangingID", consensus.mode.ViewID())
consensus.getLogger().Debug("I am the new leader", "myKey", consensus.PubKey.SerializeToHexStr(), "viewID", consensus.viewID, "block", consensus.blockNum)
}
consensus.getLogger().Debug("onViewChange", "numSigs", len(consensus.viewIDSigs), "needed", consensus.Quorum())
@ -376,7 +376,7 @@ func (consensus *Consensus) onViewChange(msg *msg_pb.Message) {
// TODO: move to consensus_leader.go later
func (consensus *Consensus) onNewView(msg *msg_pb.Message) {
consensus.getLogger().Debug("onNewView received new view message")
senderKey, _, err := consensus.verifyViewChangeSenderKey(msg)
senderKey, err := consensus.verifyViewChangeSenderKey(msg)
if err != nil {
consensus.getLogger().Warn("onNewView verifySenderKey failed", "error", err)
return
@ -485,7 +485,7 @@ func (consensus *Consensus) onNewView(msg *msg_pb.Message) {
consensus.getLogger().Info("onNewView === announce")
}
consensus.getLogger().Debug("new leader changed", "newLeaderKey", consensus.LeaderPubKey.SerializeToHexStr())
consensus.getLogger().Debug("validator start consensus timeout and stop view change timeout")
consensus.getLogger().Debug("validator start consensus timer and stop view change timer")
consensus.consensusTimeout[timeoutConsensus].Start()
consensus.consensusTimeout[timeoutViewChange].Stop()
}

@ -27,7 +27,7 @@ const (
// GenesisShardSize is the size of each shard at genesis
GenesisShardSize = 100
// GenesisShardHarmonyNodes is the number of harmony node at each shard
GenesisShardHarmonyNodes = 76
GenesisShardHarmonyNodes = 75
// CuckooRate is the percentage of nodes getting reshuffled in the second step of cuckoo resharding.
CuckooRate = 0.1
)
@ -226,10 +226,17 @@ func GetInitShardState() types.ShardState {
com := types.Committee{ShardID: uint32(i)}
for j := 0; j < GenesisShardHarmonyNodes; j++ {
index := i + j*GenesisShardNum // The initial account to use for genesis nodes
priKey := bls.SecretKey{}
priKey.DeserializeHexStr(genesis.GenesisAccounts[index].BlsPriKey)
// TODO: Old code. Will remove it later as long as the migration works.
// priKey := bls.SecretKey{}
// priKey.DeserializeHexStr(genesis.GenesisAccounts[index].BlsPriKey)
// pubKey := types.BlsPublicKey{}
// pubKey.FromLibBLSPublicKey(priKey.GetPublicKey())
pub := &bls.PublicKey{}
pub.DeserializeHexStr(genesis.GenesisAccounts[index].BlsPublicKey)
pubKey := types.BlsPublicKey{}
pubKey.FromLibBLSPublicKey(priKey.GetPublicKey())
pubKey.FromLibBLSPublicKey(pub)
// TODO: directly read address for bls too
curNodeID := types.NodeID{common2.ParseAddr(genesis.GenesisAccounts[index].Address), pubKey}
com.NodeList = append(com.NodeList, curNodeID)
@ -238,10 +245,16 @@ func GetInitShardState() types.ShardState {
// add FN runner's key
for j := GenesisShardHarmonyNodes; j < GenesisShardSize; j++ {
index := i + (j-GenesisShardHarmonyNodes)*GenesisShardNum
priKey := bls.SecretKey{}
priKey.DeserializeHexStr(genesis.GenesisFNAccounts[index].BlsPriKey)
// TODO: this is old code. We will remove as long as the migration works.
// priKey := bls.SecretKey{}
// priKey.DeserializeHexStr(genesis.GenesisFNAccounts[index].BlsPriKey)
pub := &bls.PublicKey{}
pub.DeserializeHexStr(genesis.GenesisFNAccounts[index].BlsPublicKey)
pubKey := types.BlsPublicKey{}
pubKey.FromLibBLSPublicKey(priKey.GetPublicKey())
pubKey.FromLibBLSPublicKey(pub)
// TODO: directly read address for bls too
curNodeID := types.NodeID{common2.ParseAddr(genesis.GenesisFNAccounts[index].Address), pubKey}
com.NodeList = append(com.NodeList, curNodeID)

@ -89,6 +89,12 @@ func (dRand *DRand) ProcessMessageLeader(payload []byte) {
utils.GetLogInstance().Error("Failed to unmarshal message payload.", "err", err, "dRand", dRand)
}
if message.GetDrand().ShardId != dRand.ShardID {
utils.GetLogInstance().Warn("Received drand message from different shard",
"myShardId", dRand.ShardID, "receivedShardId", message.GetDrand().ShardId)
return
}
switch message.Type {
case msg_pb.MessageType_DRAND_COMMIT:
dRand.processCommitMessage(message)

@ -19,6 +19,7 @@ func (dRand *DRand) constructInitMessage() []byte {
drandMsg := message.GetDrand()
drandMsg.SenderPubkey = dRand.pubKey.Serialize()
drandMsg.BlockHash = dRand.blockHash[:]
drandMsg.ShardId = dRand.ShardID
// Don't need the payload in init message
marshaledMessage, err := dRand.signAndMarshalDRandMessage(message)
if err != nil {

@ -19,7 +19,7 @@ func (dRand *DRand) constructCommitMessage(vrf [32]byte, proof []byte) []byte {
drandMsg := message.GetDrand()
drandMsg.SenderPubkey = dRand.pubKey.Serialize()
drandMsg.BlockHash = dRand.blockHash[:]
drandMsg.BlockHash = dRand.blockHash[:]
drandMsg.ShardId = dRand.ShardID
drandMsg.Payload = append(vrf[:], proof...)
// Adding the public key into payload so leader can verify the vrf
// TODO: change the curve to follow the same curve with consensus, so the public key doesn't need to be attached.

@ -23,7 +23,7 @@ require (
github.com/gorilla/handlers v1.4.0
github.com/gorilla/mux v1.7.0
github.com/harmony-ek/gencodec v0.0.0-20190215044613-e6740dbdd846
github.com/harmony-one/bls v0.0.2
github.com/harmony-one/bls v0.0.4
github.com/hashicorp/golang-lru v0.5.1
github.com/iancoleman/strcase v0.0.0-20190422225806-e506e3ef7365
github.com/ipfs/go-datastore v0.0.1

@ -2,125 +2,104 @@ package genesis
// GenesisFNAccounts are the ECSDA accounts for the foundational nodes.
var GenesisFNAccounts = [...]DeployAccount{
// 0 - 9
{Address: "0x04c3636dF766ad2d3E74424c016842f5704FAE3A", BlsPriKey: "ff889b96e38934c08ea158ce32fb94ec605180a4f665ed378aea9b9ac1c39320"},
{Address: "0x053515CC2CAae77F7e2F0A9C48A27c8f6D76E99d", BlsPriKey: "aedc22d8d56a316ae67b05605deaa4981cdd0cd1aacbe5b7a0bf1b7caa23146d"},
{Address: "0x0850243810E77fC6261965d2F163d36628E77E05", BlsPriKey: "556fcff9cc94c9f1d6bb22438e97b5c1c3f1f5ffc6d6268803dded1127e4ba3c"},
{Address: "0x08aB87F3A8EB0b69a833575B6400670f3F330302", BlsPriKey: "99b6aa347e721aadfad46862ed69aeb1c98520b172e8f9cc27b4320fbbfda047"},
{Address: "0x0d51F2d1EB1716F30c6f72673a4A89a0A10cdf64", BlsPriKey: "50d376eb002d63978ce57bd1cf05fb9d14c9848b050349d72d6a91387a40c270"},
{Address: "0x144B2Fd168147311f749B0f9573664676C333e2A", BlsPriKey: "93ae6e013464d4c735212bd53449d96686e64c8555e5196ac9ca86cc00899052"},
{Address: "0x22117D26611161b1b1f4EBB06C441aeeA102261c", BlsPriKey: "266a3235097fe6e4bd62c50c6e0c7254489815c1d66a3669d5385f80968a3217"},
{Address: "0x24A8cD56bABef297F1C7234F830362466d01ff5d", BlsPriKey: "94d892425e444df361a55b6b1d1da422f345d69fc3a28d70d5e8923de182234b"},
{Address: "0x25347d09373B2644191f1DC4beDEFEBE26a5b2d1", BlsPriKey: "dbd4292efae96e3754fb4033ea071967505874527aeea7a49f046ad5b8fdfc33"},
{Address: "0x25441821ecA41DEc79578aAB866d3627A2e9BB9f", BlsPriKey: "a2f17bab1b77c816280ffdab1f5eed93a07f2f12533b60c16ac46019fc10496a"},
// 10 - 19
{Address: "0x27930D539fA8B118B5547a81Fd4cd0f0Fd295503", BlsPriKey: "ba87900f76922f4a1d2b92ec0e926b2d88569e1e7d5984c0911757a951169003"},
{Address: "0x28085D40501df849246040Ea815fbD71F08c2fc4", BlsPriKey: "73e6ba60b0ff0532edda429254e4b4bb2c5fb16efe3c20d57b8226e1b24a603f"},
{Address: "0x28dA1beF8F5361863DcD427B6264f9DdF05B5D14", BlsPriKey: "f3959feb13ed9e067255f563cdf634e771dc5798ace447bd3abff4c38dd69b2a"},
{Address: "0x2FB4584233B07d99ed7215c2E32dFCac8A2d5575", BlsPriKey: "e0ecefd475748154e05a2fcd176c6246f656fcc9dbc64d2d10d131203883683f"},
{Address: "0x2b3234Ee92270A486a1598c5Bd74e739EC26fd9b", BlsPriKey: "9a10ab54809b631f6bb883936e98a858562b78fcca65624063c1ffd6a4764344"},
{Address: "0x2bC858D0967384C0093e12824Bb3d6486d51c30D", BlsPriKey: "06b61ea63b79ea06f2348ca228f8e81e1254f27c258071f4864f13859880eb49"},
{Address: "0x324c741430F5B970b61E398434B4F3957a6BC6E0", BlsPriKey: "0287afb975f206d113ad390cd69bd10b40c90e741d0a2ea436de917f1920bd01"},
{Address: "0x3413e7e39eE7394b692FB04c12f5671d5Bb43e0b", BlsPriKey: "37e7ece9845538d6da54cbdd81c780f60ca94dc55662329e47617bfaa1c9ef3d"},
{Address: "0x386333bfe5Dbdb4c0b5633E71190F3F822b3C0bC", BlsPriKey: "7b7cf3a71e9380a402739bf2f70f0d710b22d32a77ef1b82aafb4206dc036139"},
{Address: "0x3BF69655b3cE5212A3d56f0D78064Cb6F124a60B", BlsPriKey: "02588dbcabdb4c5acf70d63a29f5c4e479bd9d3d373528f132411a2a9884cc59"},
// 20 - 29
{Address: "0x3D88FF444D18F7bcC530F5f5171048e725AEc79C", BlsPriKey: "93649cc817c7d430b7a8e5897bf406619ee2fc78e0fa78509378f2c35750e40b"},
{Address: "0x40d6f48c7b27BA7544b04456445Cf19B680F5484", BlsPriKey: "b49ae8ad8f6633590c947696e2450e1990a7c3a505ffa664d955a1645d37420a"},
{Address: "0x43bcBa1c3c3Bf76790d04cad7357229ECD71BDAD", BlsPriKey: "87bb88febe2ffaa04ce2285a7459bd57b5a265bbdd0837e6e572f97ddbbb4536"},
{Address: "0x52D77E90caE790ad2bA9DE138Ea8B65cCC5EF652", BlsPriKey: "fed900228f6a9537de84a28d593345937eb7ea5b4fe9d73197a6bb91f1ccf209"},
{Address: "0x583B5d4a45E2ce2E29F2Dc6c0645344Bad901755", BlsPriKey: "63e7fbd3fdc7f6a178a47c1e1df687b300a61333e2961d0743fc354546b8060e"},
{Address: "0x593815C55fC25B4BcC84473038A121a22796aAA8", BlsPriKey: "51c18cd21102919157db972f2bb7e6a2409359e0d9340829f58da6d5937c633e"},
{Address: "0x59ebA70c8D8B3d4157432815c2A2DA774bA63aa8", BlsPriKey: "aeec4383a72ae86d60806fb211ba291bacabb9e421f6c7f91f0d446d89df5753"},
{Address: "0x5E49BB8be4e199e8ddDe3A09E67D3c23239AC16c", BlsPriKey: "4707bc077bf10f471ee13aebf1f6d76c20315b8aacaa124b8f62fbbcaa7e213f"},
{Address: "0x5dc4D61A44EBEb41549021342a290bd726623A38", BlsPriKey: "e1723649c8391386c27ee824b8272e00b33b4ffca8ae817e3889fbfd9714933f"},
{Address: "0x609e8747cdcE518fB86C5990dCE325649C487133", BlsPriKey: "eb0c8944a1c71d2b0fa2e71ae54269065e30ae1af3f6be5b0afa37221f814624"},
// 30 - 39
{Address: "0x638Ff0c3c291eA08c2653Bb993E3360D63038678", BlsPriKey: "df05f4cf396113df0dba76db551376c0393c28d2a9ef4546eed6d4ab2a806f16"},
{Address: "0x65c123f9492De546B6e5852f58eB0Df39307Bf45", BlsPriKey: "7ae51f7e896107d4ad7ba4d3cb675b92a45a78164190f84d636ddc2f389db872"},
{Address: "0x689a35324d6B8DDDfa3bF5E7b26A23E704dD0100", BlsPriKey: "331ff92b2b15572baea16f48eace71aac2458fb20a9ba08c6726fc8e5a4eda1d"},
{Address: "0x6A6A5FBfA9923EBB76f9E42013e7C4f3CfDC145C", BlsPriKey: "e02a9898a456d4107f3808d892b6183d8a518e1f34cfbbd49800a421f9461617"},
{Address: "0x6b9E03aB56786f4F228eE11D965A1a81ed7dA1D4", BlsPriKey: "52bd07e13d1559c7784fb82c10089320ae60d32926621f1dfd101f8dae359e1a"},
{Address: "0x6c11b83856804D1eae8823beB697d09569fE87A0", BlsPriKey: "398a6bd069f18715865464eaeb97b0be3c5f0c4223ba5adaeea7a5a1fab5006f"},
{Address: "0x72B6aefe8aC9B8873Ab854e6f4fD4801A3F4B2f0", BlsPriKey: "9b9f85208903cf0913e2e75122970de7040e705ce7894820ecf5e5d12cd74956"},
{Address: "0x76f8d12F6624f713B2D8894A749ad926F7812350", BlsPriKey: "418f1c60d037440a24d746dcf66038e3307ba1fb729b4f6fbe5fee073fd6000a"},
{Address: "0x78A8D29D81dD02c13a2a6077d887CF661B67E2c0", BlsPriKey: "ae7d770f8ac1201bfa1023bdba4fe76ac4970a8a24a1f2c51a67ecf04d59b948"},
{Address: "0x79f8E1B732bA63987873d5eB86C81364C2cF5021", BlsPriKey: "0a0f7e214dd04b4963970aeefe6e59ab9678acfd101cb2486a0addd81a891137"},
// 40 - 49
{Address: "0x7A4306d4D0A4f15A5fA54486cE4e6403E313805A", BlsPriKey: "f0c85ec2f9bce31731b0a0d936b1974890411e9b3ffe892652aa66a738d47251"},
{Address: "0x7ACDCB2BAcA2911BdcE98e308515A289ac60b7d2", BlsPriKey: "69b6a1ac0b665d11b6c5acefbd92c3aee3b79225295dd7d07d3a40c812cf6973"},
{Address: "0x7f42f7a4d66f0387AE77A219d0742E8a706231CA", BlsPriKey: "f336a59595fbd8f0a81e8ece411f60983adcfb7dc7581cc7ed067fa525db7c3d"},
{Address: "0x802bEcc3615Fb8b751ADebA452A30C57F351e8D1", BlsPriKey: "831e13190c4e1b46e87fb825ee3a364fa7502f044a52e2f61c86a29d8bdc7c02"},
{Address: "0x82301962Afa7328FDC34e3610B48D899F031e15F", BlsPriKey: "cb26ea4242d59183f0fb6dbf546e4c8c96f3a65b49a246b077fd3818ca81ad05"},
{Address: "0x86b4b2dEEE393eBb9633e6F0FEd74F39638A7B4e", BlsPriKey: "32af10834aa6c8216b99eff59314df1699055018c54002938b62420448721d3c"},
{Address: "0x87a157db95dc3517Eb578d4cedee92a5ab275BD5", BlsPriKey: "09dac13c3e140f036b6ba82915b9ce207b99d74ec4a862627be3fd3804180538"},
{Address: "0x880D5c6aD4117D26126543Af48f2f9bCDd4DaA0A", BlsPriKey: "0c93bcb39c821c8c83415f9147c4b7ff006c8f89d527c355b52aca900054e04f"},
{Address: "0x8cF87bB4BE77d8Dbf16fF61273e02E046a18D716", BlsPriKey: "ecb310216ffa14d546c8c820dcb3def75a491e5e3289bf063f084564802a0a07"},
{Address: "0x8dc63cCA875eAd38d9554bB97171a4f18AbE92E7", BlsPriKey: "bf9d280162fb51198d13eb4a2d77b99ea9ebf851cf4ef936cefdf643b0323961"},
// 50 - 59
{Address: "0x93570Dcb1Bf1a0bD1d476a542309754a6dbCE632", BlsPriKey: "6c02a5c98f5701bb1509b17baedf20671acfff38006d02d740412d157e82824f"},
{Address: "0x9668c58b282f954EA8B732e0D72045bdF19df8B3", BlsPriKey: "82a090f4a3fd113ea14ec46c46fc40e7d70afc46d8fef84100859520f171a115"},
{Address: "0x97b834277538e4517f43f9E11fa0BbebaD7c0d3e", BlsPriKey: "3c87e18e45b4f659cc5801e5bf4d82574614cbd742200ba989a04bb3fe90170f"},
{Address: "0x9c23fE8cdcA1a8E529deeE8eD8492575cc3F9129", BlsPriKey: "15f9a467aaf80abe0471c317b490902d174c9b498c456d67bdcfba22f593be60"},
{Address: "0xA28e6f8D23cc3Fe77D531c7D60bd73F8fD71C5c7", BlsPriKey: "f0fb598b4becc13127c060302b5938915777b2b9c96028ae4bace6fed312923b"},
{Address: "0xA41F4dDd1b11A6107f1973037D070869495e71E4", BlsPriKey: "973641a9a2f31572f38f789d772e698833da413d4234ca10fd82976b2ff68d6f"},
{Address: "0xA721ad85fFfAb28115e1b4B8347A5B42AEA26aA1", BlsPriKey: "78c2d7215e63bfe22fb3f8052bf2607dc2b01815dbc7ae30fcc540a75aeaf01b"},
{Address: "0xB18e698BE8698346f7929F4E019D8B1aFE3D04b7", BlsPriKey: "788b18e4b3480e4e22a7612a5bba18a07c1ce2ca63d98473c50c8ef0bcfe2b22"},
{Address: "0xB1Fa8F1CEa1A78d8887609CebEA592313dD659C1", BlsPriKey: "0fb470757299aa687196bb09d7bdb3d65b991cff679aeeac282d02b01ec9b22b"},
{Address: "0xB4018FF5B888e902bD952D6e55A5cDbd8C73Ac1A", BlsPriKey: "356fe79d613c2cb90d8f4617d803153e3f4c30727afec45ddaadd790a87a5d14"},
// 60 - 69
{Address: "0xB68751A436f287CE3DA347277259af5c7bA84e38", BlsPriKey: "c143e92cef9db63f81d6b9d79cb8da5c9ecba5cfebf4b832b3f156d62d1ba22a"},
{Address: "0xB88AB7A6678c87aeBE7b753459258012eb2Cc76c", BlsPriKey: "bc0936a0f0f7ff841381dd184cae4096698316aacef5e8dd8f3e65095c924a1e"},
{Address: "0xB99Ad8B391eDD1F15c51f773F4bc23Bba7dF45F3", BlsPriKey: "72ad8fd13e5c6a0a06f1f94fe362518f06f3849b9fb68bad53b14809d8e6e03c"},
{Address: "0xC3FBdE6a171aCc0466614D09b58E013058e7c0d2", BlsPriKey: "c75d17225c65c42c2e569698d3ad3cb91a4d93472f639ef59bd2866d704d4a4c"},
{Address: "0xC6b6a71d6f0C5b98E25FCf14b5378c807B0d475a", BlsPriKey: "e7928dcef4f288bccae4fbc57300f80bf170a72ed707fcb9dc16e167c8c8e238"},
{Address: "0xC6fDB78B643E8eBaC472dB61c1e84B6Fe0Abe185", BlsPriKey: "4630be86ee6858c573202468c722d63e864383893315ac9f28d2f731b256fe5c"},
{Address: "0xD0F9AD2b60792fAff02f8Bd0F2D9cE2790722706", BlsPriKey: "e4159dec12820b44d0e1118c2bc3a2260eba2755855a54f05af74604a92cd232"},
{Address: "0xD28B4bC96020De252A0ee817767B6Cdb26A47d73", BlsPriKey: "afc343c1cad50194dbb4dbc5c010daf3fb50b0c3ef3b3279c08be7b3243ce924"},
{Address: "0xD31095BE15D4b0b16657EEB72e0cc81e24EAc101", BlsPriKey: "c15dfd4eaffa5f7174747b6887a05b5ecdca62847ea54cca8d5f19188c414f08"},
{Address: "0xD499fAC5afa17b5705B91838753Bfbf2e20138e4", BlsPriKey: "d54f56fd7bbef9b3e73de868a9414884c2617da2bc5f314ea0c36fc821848312"},
// 70 - 79
{Address: "0xDfC0B00B629dDD5704a156A0D932F78692fc842F", BlsPriKey: "2b1830345d134ea5d1b9cdf9d93af3abca5d90a86dbfc4beed98a749a9254332"},
{Address: "0xE2ab78ecf325084485957B2599d53Bcf944Cbca8", BlsPriKey: "080fde81e06a194228eadcb573edeb0e3c445295435d32401c404934ea58cb09"},
{Address: "0xEC7C495866689d6b7E335D810645F440f16F86d0", BlsPriKey: "1ec4cac69876c5339c16c5c48c31ac32164574007dc4d674f8f6fee6735b6f4d"},
{Address: "0xEd677E021df3542998e407970E1127d334Be0285", BlsPriKey: "ad0cc9631a98e5f527cee84f7daa2d24faa8d3714fd28c5d73c4e21c6ba3c13f"},
{Address: "0xF262609617c202087B31aCf364C00967f5Cd85De", BlsPriKey: "672ccacc49f216aec996eceb74f63ff8beb1e53361146963452859b0dcafb728"},
{Address: "0xF7E33ef7132bcc716C2242385d9862c3c43baB7E", BlsPriKey: "b393c776a159098e0acdf67ba63f1d1a26760b9bcfe9f656da5aa85cd02fc43a"},
{Address: "0xa3B34f4E21C6c44A603E3c53abbF8b10C7BdaF59", BlsPriKey: "fbc7a2efb93e3fdd87136aa9a87e59040e2af25ae176e1519af92aff35d6570f"},
{Address: "0xa4BF67e67910225aA1C3Cd65595d8a1b1227F42E", BlsPriKey: "51a79e8fdce95c39fc33a8ec890783746f56e3700a8b2cc3f98e94248d07103a"},
{Address: "0xa61CA9f1EB26787EEd89dAEE4A326C4e1cb5eCdB", BlsPriKey: "a514163c7b2778321ec8499799408ea438bb03d9a315919b8d280ee88ba4bf16"},
{Address: "0xa714cd269A0ca23131C8cD5aeFC49F450578C4B4", BlsPriKey: "469d183b6f7caf5960a013d3a3b08c46c245fedf4ab2d835192a09b4c6d37231"},
// 80 - 89
{Address: "0xb108BF4945Bd7975cF974f47476e689ACd542F23", BlsPriKey: "25f293cfd3139282db8438047f28b886d12ab2602ba87323b7fd2a975d66671a"},
{Address: "0xb69509BFf7Ac53eA998e16FBC247f24F88eE8572", BlsPriKey: "00723137f8118612feca54cdc558dddad18aefb05f6dbb05a50eba172a77f33f"},
{Address: "0xc55c56F661eD185103839FdFeFd80DC38938913b", BlsPriKey: "432dd6844c07c4745b34d65c6c2aebc5b8b69597a9ad7e668f248d2f22ab5070"},
{Address: "0xd021c9a6A8816FE57a3A4CBd02fA824e0e92421B", BlsPriKey: "00a3cb66218c2cd3efa31bcbe783ff920fb356ad31f14683ca8ceb131d774d0b"},
{Address: "0xdA1DF648bC047546326D05dF370ec0ee3D84642A", BlsPriKey: "e4db03641de29ccbc3531705d7702db8e77684d097d6cdb4b29ee754ad9c913b"},
{Address: "0xeaD1fAa7E5Fdb6136057d4BfCa1f05D220D1441f", BlsPriKey: "85ae5067e08574799143cca66da055f4a2db065c3d451235acfaec90c2965f4e"},
{Address: "0xf10f63f5Bd46c58d2e9530E7F8cb6b4336D05d4E", BlsPriKey: "46bb0a5c47db2c94a456fd07690543db3f50710513814655d5eef13443a3b122"},
{Address: "0xfB81EFd254Fe117047872146806153539F89669E", BlsPriKey: "107062c37224ef8123653a1f3c92e3ceb76e9f6c346808c71bdb165848c47f28"},
{Address: "0xfdc963E875Ea99E434e4B815b7d8Bf506dAA9222", BlsPriKey: "4a75d92d2b0ec874bd3c8fdf8fd46ecc0ab18aa31581c013acc6a25b610f2c68"},
{Address: "0x35D29200aFC9A4cDC05166096059a042078CB53e", BlsPriKey: "af96cd1118284a8a5916359b7fa566346f2017eadc0d3efcaf67cffe374bf724"},
// 90 - 99
{Address: "0xe4a69826534aD3f6ec6E432474B0380E7F9a9C3d", BlsPriKey: "77da1ed33a8b00b2a227902f53045ed15aa2af735cb17ddbe5d42bcb29cda363"},
{Address: "0x74e0014c9899c82f05F6AC110583F9f7dCC36508", BlsPriKey: "49decb0f0d35ab8882b253a130f987a6d8dc8ee63b1df340c5ac953d68362790"},
{Address: "0x5a22c7ec1579C0d87760F4C8ec32fBE24d40E1Dc", BlsPriKey: "4fc4c886c8c5ae820848c6be9c9eafe1012f69cefc17aa790f4ce9daaf0cfae0"},
{Address: "0xcb0A6c1914d2AD10855cC8cD70B040b7Dc6573a8", BlsPriKey: "51b5dce64da6a543fd171f2a1309347792767e1258c4cb4a9594311a162b9fb6"},
{Address: "0xfF86Ff1FF457c3eBc18D71ffA30cfedd0860559c", BlsPriKey: "4b0d338b30a055bee3e2f070adc93d341b9316a315b4b4efe1639f0be2c1c10b"},
{Address: "0xff1bE0eAC9B6053CD656947F0CcE7d277FF720Ec", BlsPriKey: "d94e179e77a8bf71206b2232eb826a9b5f8a64c55d919411263511e3a2ce7407"},
//100-103
{Address: "one1zjjul68lhv8hef7angwvakmc37evv8gppraft0", BlsPriKey: "d8c85b478bc2bb60f333a3b509bc858b275dcfad6975341f9d0d71f9b0bede3e"},
{Address: "one1srnk0ekhuljsvsqykg6f9s067xfg6gaytle3rn", BlsPriKey: "b402c15e0f7d89d0616d842d17e231b47898933bf271167f214faf3cff0d8e3e"},
{Address: "one1rfaajrvn5zdfxydf5wkvrwsyylza6205xap9x0", BlsPriKey: "d1ed792efcc3424660fe17aaf3168e17e5b3b8e92c728e3fa9e0f498903c6c54"},
{Address: "one10746sav20n8h4gm3sevj3vfydtpv6vpksv2065", BlsPriKey: "7434392536c8620c6efcb81aa1a829f8b1d2fa4e5275a7d24dbc8378466dd639"},
{Index: "0", Address: "one1y0xcf40fg65n2ehm8fx5vda4thrkymhpg45ecj", BlsPriKey: "6e4c9bb993e6eb1c59947960f866047e002ab513fe80f303f2f6253ac00cf960", BlsPublicKey: "9e70e8d76851f6e8dc648255acdd57bb5c49cdae7571aed43f86e9f140a6343caed2ffa860919d03e0912411fee4850a", Updated: "copied from sheet"},
{Index: "1", Address: "one1q563tnpv4tnh7l30p2wy3gnu3akhd6va97w7ku", BlsPriKey: "df29ffd990d798f08afcc2e7a8225f3a7e44d62ef3a4c17dc7fd1586d17ed627", BlsPublicKey: "4cb81c627f179a67085ed9fc80f851ea357debad60ebaaca7e8e091a54efd1ca5849094524aa55527b0c173530b1c392", Updated: "was in code and updated from sheet"},
{Index: "2", Address: "one18lp2w7ghhuajdpzl8zqeddza97u92wtkfcwpjk", BlsPriKey: "6205462fb43e2d6514fee923a0afb18b41d7345b70e6dbd7955061681d2e560f", BlsPublicKey: "fce3097d9fc234d34d6eaef3eecd0365d435d1118f69f2da1ed2a69ba725270771572e40347c222aca784cb973307b11", Updated: "copied from sheet"},
{Index: "3", Address: "one1pz4c0uagav9kn2pn2adkgqr8pulnxqcz4nmvax", BlsPriKey: "2ded27f361ae35e745e2144fcdd349b82d6791f10ad017b9ca588a8f28177218", BlsPublicKey: "emptyemptyemptyemptyemptyemptyemptyemptyemptyemptyemptyemptyemptyemptyemptyemptyemptyemptyemptye", Updated: "was in code and updated from sheet"},
{Index: "4", Address: "one1ldthk5zyrea6w60rptcfyzlftd8fsn9fhkeps7", BlsPriKey: "11f7fa746112d7a2485d29b572f115a0d3f20e9b4117c927a73d2e5347246f1c", BlsPublicKey: "emptyemptyemptyemptyemptyemptyemptyemptyemptyemptyemptyemptyemptyemptyemptyemptyemptyemptyemptye", Updated: "was in code and updated from sheet"},
{Index: "5", Address: "one1z39jl5tgz3e3ra6fkru4wdnyvakrx0323zyr8v", BlsPriKey: "0e6ea9aec01fa4d78433797a0162b8134b1f16435e7233799c3319a49a623a1e", BlsPublicKey: "0e8ce22d33fd39b74e6ebe72f037dd575d82d779a339557369fc65eec6db2dd14c1989ba786f5e6fbd13b9aa5eaea903", Updated: "was in code and updated from sheet"},
{Index: "6", Address: "one19y2r8ykaztka3z8ndea0a2afd5kgswyfeahsmf", BlsPriKey: "732747c5ab1552bcbb4cfdbe87e72719496f7a0c581f08dfc0af5760c695c35b", BlsPublicKey: "475b5c3bbbda60cd92951e44bbea2aac63f1b774652d6bbec86aaed0dabd10a46717e98763d559b63bc4f1bfbde66908", Updated: "copied from sheet"},
{Index: "7", Address: "one1zvaqqafg0nvmxtsvzkqalc3lz378qw5j6ysz5l", BlsPriKey: "527cf719d7ee215e0b22ea8778d86b01701ba2378db916dd8cf50bdfe1294d38", BlsPublicKey: "829246b61310fc6d48de362ba51c85764b0e4e594f38fb21fa14df203dbabcbc1c45e2c53d5d06677a1d6dce3cdcb282", Updated: "was in code and updated from sheet"},
{Index: "8", Address: "one1y5686zfh8vnygxglrhztahh7hcn2tvk33vsgrt", BlsPriKey: "0c7d3eb1276f19a443fdac60dded4791a4a55ce49b6019dcf58c704a2222b65e", BlsPublicKey: "ed59468d36e33f0e2cd21951c55e41420a6736d23ef013eb3a39f6b4a9290c6353c0a3ea996bc5ae65bd4a5776f76c96", Updated: "was in code and updated from sheet"},
{Index: "9", Address: "one1nvu626slwt6hwq2cup846nepcl2apuhk38gl3j", BlsPriKey: "0ad522a8f261ff061ed9b26c21e00b5d6df890589b51234cda265d99f5f1965a", BlsPublicKey: "663f82d48ff61d09bb215836f853e838df7da62aa90344dcf7950c18378dae909895c0c179c2dd71ea77fa747af53106", Updated: "copied from sheet"},
{Index: "10", Address: "one1y7fs65ul4zc33d2502ql6nxs7r7jj4grs5x3y9", BlsPriKey: "1aaa0e30b6f746f048df8f67ac0c7a89995aeb93de83ab76946b61c6a6792619", BlsPublicKey: "847ba7e5422187c2c0e594efa31840d117641d9a156ffc076d9194ab71f7ce95b59f2c00a822312da60f39f2d6437583", Updated: "was in code and updated from sheet"},
{Index: "11", Address: "one19qy96szsrhuyjfrqgr4gzhaaw8cgct7ym83wy3", BlsPriKey: "f201abb3a8291bf493be41e90deed45daefb6a819af5f00c37d2a1d4da49ed3e", BlsPublicKey: "emptyemptyemptyemptyemptyemptyemptyemptyemptyemptyemptyemptyemptyemptyemptyemptyemptyemptyemptye", Updated: "was in code and updated from sheet"},
{Index: "12", Address: "one16y3pzva57c65wwfpwr7ve63q67aztedsphv069", BlsPriKey: "7127c7cf52ecd156ffe247134c0820f6b9e33a4349c52b21600b6d8a25702345", BlsPublicKey: "1e9f5f68845634efca8a64e8ffcf90d63ec196f28fb64f688fb88b868728ab562b702af8414f48c5d045e94433ec5a87", Updated: "copied from sheet"},
{Index: "13", Address: "one12zelq8ax3k48tfzl5zz37ndknremq6um62dwxa", BlsPriKey: "454196dfa2954d7bb84f2d5f44661708f418b1bd321818e976bda406f58e9f1c", BlsPublicKey: "0171f68b35f45281222ff9008d40301d20fb5c328fd8126cf24f50f15b879b818c14b4f98b58ad7864cb75509993190b", Updated: "was in code and updated from sheet"},
{Index: "14", Address: "one19verfm5jyu9ys6s4nrzm6a8888kzdlvmqpenh4", BlsPriKey: "c432402edfc55ca7ec91adf91d830481e329513500303ca4a49a98c8b5cf9504", BlsPublicKey: "7fb7ccadd6fa57a04fa49e6128063fc003dfc543688a1dcb15546ffe9e180467f85f0b3aa0382472f27a2e0db050ed09", Updated: "was in code and updated from sheet"},
{Index: "15", Address: "one14uzsrvucmxx5wwkx46r9a6mpqgtjlrchelw5pp", BlsPriKey: "6787e0bb328a2f29e58037ada6b2f2324b2cf39ab04f865dcb43526f1b155819", BlsPublicKey: "43b1376eff41dfdccaeb601edc09b4353e5abd343a90740ecb3f9aac882321361e01267ffd2a0e2115755b5148b1f115", Updated: "copied from sheet"},
{Index: "16", Address: "one1pmcysk3kctszln8n89hzcrgmncnqcdxg6nl2gg", BlsPriKey: "4380ec6b1d4a5ce55d405600c97168b3ac77c996bee12c118b1c8f8260cf582b", BlsPublicKey: "43f5ed2b60cb88c64dc16c4c3527943eb92a15f75967cf37ef3a9a8171da5a59685c198c981a9fd471ffc299fe699887", Updated: "copied from sheet"},
{Index: "17", Address: "one1xsf70cu7uuu5k6f0kpxp9at8r4dmg0sttzx40t", BlsPriKey: "a9d6f055a98302703a303010a102d2a3133e35a60ff48fe98b95deb6234f462e", BlsPublicKey: "577bac828dacca2acf29f8d38365a5af015b88298482c38f09ccde44f3c1a2d7011f710c4a7fe450d8b5d4e7a6950a05", Updated: "was in code and updated from sheet"},
{Index: "18", Address: "one14tdlgysvnqcdgwnduttd0y5pp2y7m8cpss30j4", BlsPriKey: "543f6f3718404155529a35a0291a6bb8f9d70ad887d3f5b3703e3c5a00f1410e", BlsPublicKey: "4ce4d4c2f2a4e115d5c2253a4d5d17c8fb4a585280eda890983309595b2bbb596ec71284105c67618f1fb2e7f7cb6f84", Updated: "was in code and updated from sheet"},
{Index: "19", Address: "one180mfv4dneefp9g74duxhspjvkmcjffstd0sj6q", BlsPriKey: "f6464c7429f588e2a5d2aeeab832c1b23799f65aac80e847557da2a77fd5cc28", BlsPublicKey: "714fb47f27b4d300320e06e37e973e0a9cfa647f7bdb915262d7fe500252a777f37d8d358dc07b27c7eef88a7521ad06", Updated: "was in code and updated from sheet"},
{Index: "20", Address: "one18ky073zdrrmme3fs7h63wyzguuj6a3uukuc3gk", BlsPriKey: "143c8b169a677ae032190d96d1ed7a0b17bf0ab9bd92d9505baa0f7f78c02309", BlsPublicKey: "457e99a40be9356c4acc53f02de4480927e0c6c0733087a46f53b59744affb2776700625370c09bf4e778e715a5f6e8a", Updated: "was in code and updated from sheet"},
{Index: "21", Address: "one1grt0frrmy7a8239sg3tygh83nd5q74yymq2ljh", BlsPriKey: "9862b47ef50f2ae9751a743f9c4428294c31bf02d4a5184251f7626ff6087a67", BlsPublicKey: "7e86af118409e2677ab7c3043cd383e98a8ae27bf711eaa57782f7e8e9df5499085dc5ae3e7acc0c4cb362dc6005ab81", Updated: "was in code and updated from sheet"},
{Index: "22", Address: "one17nfgz8rtgpl3nlws5q9tdk9y3puyqf847az6ne", BlsPriKey: "36df31f96a73bc544e77047c5e8b44fad88536c2c1ab115b090ca08baf47e967", BlsPublicKey: "a32c1ba4c89ce5efe3d5756952489f7050bb1123fe38776168b349c01d15813520f87741a24bdba4372caa71096fb308", Updated: "copied from sheet"},
{Index: "23", Address: "one12tthayx2u7g262afmcfca29ktnx9aajjd8uj5j", BlsPriKey: "e25738909ac68cf0d24939b916d887336ebb51d717cc52fc91728e53c086f722", BlsPublicKey: "bf1899cd9eab89216cbaed1d126f8b2f6b482132787f0d34020cfe8fdf0af8aff2c38b9848c3726745bbdeebd7d6bf96", Updated: "was in code and updated from sheet"},
{Index: "24", Address: "one1tqa46jj9ut8zu20jm3kqv3f5fwkeq964t496mx", BlsPriKey: "aabea27114663edf6d9c9858335a006fd4062aedff850609d95eb4b8a20a782c", BlsPublicKey: "edb61007e99af30191098f2cd6f787e2f53fb595bf63fcb4d31a386e7070f7a4fdcefd3e896080a665dc19fecbafc306", Updated: "was in code and updated from sheet"},
{Index: "25", Address: "one16f3f9y4sqtrk3eq7gnagr4ac8p25rf08u0pxxp", BlsPriKey: "76608b9c7ddf8cfef53e3dcd825c099e473b854a1b7a378e5a685ba96c3f5f3c", BlsPublicKey: "bde72966189e7377a4f08fff82058fcc508ce1f7778e89c3dab42064bc489e0966c6371f4b1a1857cfea19667346b010", Updated: "copied from sheet"},
{Index: "26", Address: "one1zgmd5s6fyv9rm2vuf3augqf3ucnp9a2j0h09u3", BlsPriKey: "bd00de690c82e5a3cb27133cf1b083cab279487a96679bf8ed93b1e5cab13300", BlsPublicKey: "15efd5a3af35b9fca2b0e7264b585b47b0f08d9658ac11df3ee5237be634d2fbfa610bf9bd8eef5fecb38828e250340d", Updated: "copied from sheet"},
{Index: "27", Address: "one1teymhzlyuxv73hw78gy7vlfuyv3e4stvsmer5l", BlsPriKey: "7ba0adcdf7b715aa71f09bee0a90fc20318341760c4d8c271c0d7b9d0b3fcd12", BlsPublicKey: "6b3469bfd08d2a690f731f97d679e15ff565d4f2911f5875f058062239109ba1e3c5a73bfb21b034db9b28ae3f564001", Updated: "was in code and updated from sheet"},
{Index: "28", Address: "one1thzdvxjya045z4ysyy6z52gt6unxyw3c2wzjrr", BlsPriKey: "133dd59cdcee03f41094311d99cffa984297be8b915c7a12860b4076087bb527", BlsPublicKey: "emptyemptyemptyemptyemptyemptyemptyemptyemptyemptyemptyemptyemptyemptyemptyemptyemptyemptyemptye", Updated: "was in code and updated from sheet"},
{Index: "29", Address: "one12saruhnv9f63dqhuadjq3vhqm3nwyw2ac40uyz", BlsPriKey: "39f8b1764f22cda0d355f82e6282572519c8e158b97cf903ac8c64b7433ca26b", BlsPublicKey: "b443ad07d019e1ab4c1cf8d18d493f34003a6e22d28b79218ed77d072925deb852bf74488bff67ca0126738aaf58e08e", Updated: "was in code and updated from sheet"},
{Index: "30", Address: "one10dw0xnkm6qvpmsmeszw5wn29et9jmek9sc6dmw", BlsPriKey: "9aa34ef10f2da52a7d3418e56f56d4b38cd1fe8b6562df16196fcb4497d0af6b", BlsPublicKey: "3f9c6d55095433092416ed39bcac4fb1c7aee67f7b658c09266201a094708f7101ae8dfdddca13ed3021ca798f731992", Updated: "copied from sheet"},
{Index: "31", Address: "one17nacqwrnwgq7pk8eehn7j6jphxt0draqpkztpf", BlsPriKey: "849ccd91efc2f08069aaa14da598625b98da9781d82795eb454645e76e7f3c36", BlsPublicKey: "emptyemptyemptyemptyemptyemptyemptyemptyemptyemptyemptyemptyemptyemptyemptyemptyemptyemptyemptye", Updated: "copied from sheet"},
{Index: "32", Address: "one1mk6g87mtgcyy95xp0v87q0srggmusp950gpn3w", BlsPriKey: "0c4935f170ed7485249d2b64cd02d4128b4b582baf8107b208f94c6dc7bc5024", BlsPublicKey: "325c13b66bb05cbd7ec95d78e754cde2afdfef83490253ba96a64b3be73fb862bab57dadd42816462a0aafa48fa08d06", Updated: "copied from sheet"},
{Index: "33", Address: "one1df49l0afjgltkaheussp8e7y708ac9zuyfpfle", BlsPriKey: "6d1075344744fe303f27baf4d4bf05b5d2237c1ee70b461fef4bfa9d8bd98f27", BlsPublicKey: "e1febbaf5af29b651662f1f2ff2af2ef9e3d9ca324c9c8526f3486a148293fd5d4b591b63f1912422a4ea162758eed12", Updated: "was in code and updated from sheet"},
{Index: "34", Address: "one10hzlc82dhc35nz75srutrhqkk7vvvyjnewclt7", BlsPriKey: "7d27cd0139e748b6eeb2f66f2225b63ddf9760a7e7c38a8cb61d8420cef76039", BlsPublicKey: "d4dd2fd73bf050cced2b8c92255e0a907abec0b1e1470d558f50a7729e14b6fe46cccfb8d2b696c23b1419d7b49aec85", Updated: "was in code and updated from sheet"},
{Index: "35", Address: "one1dsgmswzkspx3at5gywltd97sj45lapaqmk0hzw", BlsPriKey: "69a0fae29bb2073ad59182c31690baa7a8a459179858c8c75c206762b77d5031", BlsPublicKey: "934fe59ff2fd6cb296885e35d7e722a8c4da27a65a8b81bc73d82fca822f3a2c35ad6b7b5f70f6992f1f92d5d6bbad8f", Updated: "was in code and updated from sheet"},
{Index: "36", Address: "one1w2m2al52exugww4c2nn0fl2gqx3lfvhsq3x4k3", BlsPriKey: "c317068d813f0c28aeb2dca676cd079176cbc960054161086d592b868ab64b2c", BlsPublicKey: "6558c3beb184401ba26e00cb10d09a01ead04581c86074a596d0c80cc2ef05c9fbfbb6068ea1f556345e6cb39e2cbb8e", Updated: "was in code and updated from sheet"},
{Index: "37", Address: "one1zzhwus03x3j3fgtust0v07k7rf583rrp84zdet", BlsPriKey: "27b8df104400b9542a6690f41efdc05cc81973d59378da15d27f6890e1934563", BlsPublicKey: "7f01b62e63b020c1406558153393f346230e7a87d4921bc756bc08e49b88f749b45bb624dbe79e4d95bd83bfbdac6605", Updated: "copied from sheet"},
{Index: "38", Address: "one10z5d98vpm5pvzw32vpma3p70vcdk0ckq0znapk", BlsPriKey: "0c56f4f9ea21f3af7148662f9188e686aecaa91e9d780a0083c77bb3700cb11e", BlsPublicKey: "8fcd36c080db9b9168d5f3e6b6854546544f62fd0b224c79c1e12e3b93674bec513cd5fc1e9748690e0e5d14a9066c86", Updated: "was in code and updated from sheet"},
{Index: "39", Address: "one108uwrdejhf3es7rn6h4cdjqnvnpv75pp7t5ne9", BlsPriKey: "5ffe9146398f7e2d45ac7a162fa4e209696d44d54565c3ebc8c3ef6bff680322", BlsPublicKey: "c541fa6d4d97bcae0e502d5dbe64ba9d2b6b28fc8cf498728ab249d9c9efaa5148eb91b0d9827d7effeb36720f0ab813", Updated: "was in code and updated from sheet"},
{Index: "40", Address: "one1sp687xe0kk93ngp8kaxa2qd8yjm56wjmup8mf5", BlsPriKey: "041a40e16c3ddd45c0277237f19cab5d4d7798f55be1afb6c71fb74ab2abc66c", BlsPublicKey: "c48e26ce1e845cfbb032fc08b91cbcb7caa8cfae8f28db54e71271cd53423a37eed40e75884c21cf1b47636fdf77058b", Updated: "copied from sheet"},
{Index: "41", Address: "one1ctd33zz6zh9p5nh8w6qzeldq5agpn5gxmq2lsq", BlsPriKey: "d61d338a1339330b7601916e4b0dc738015098017fc32e769a303755d25ea431", BlsPublicKey: "a0ab990e83bb3fa72158b776b7146a7c603d878c4b24b426a70b2cc60d81fb3d6f59b1221043804893a474e1cedc578e", Updated: "copied from sheet"},
{Index: "42", Address: "one10ap00fxkdupc0tnh5gvaqapw3fcxyvw2d22tlx", BlsPriKey: "04471a89250fd9bb85682cadcd5738a1695c3b20a4ee27a768f90cd13ff9d207", BlsPublicKey: "bfa025fd7799315e528be8a985d1ab4a90506fca94db7e1f88d29d0f8e8221af742a0f8e9f7f9fbe71c1beca2a6c9690", Updated: "was in code and updated from sheet"},
{Index: "43", Address: "one1sq34zq9xnxans2cj5hd43qvfhcjwtxlkc3u2a2", BlsPriKey: "7e5bffebf251c46c8b5183ea44cc0a72b3787be0b66cddcef0d8e915503f9d25", BlsPublicKey: "c8e219cbe0a03c6d97365584e8c239eb55605e61b5f3a4810f75e655b08d6b9dc7816af45e21c72021824011d4d67809", Updated: "copied from sheet"},
{Index: "44", Address: "one1sgcpjc405ueglhp5udsskjxcn8crrc2lmuf35c", BlsPriKey: "4781312de913e9320bd558af66e67ae47864752d0c1fe3a0e1b65915fd63244a", BlsPublicKey: "dc9e4e6c9e4782012ccf628e3d3e7c1763ba2f78de99b98b89fac63b1f4375e288d5e155e9ee64fe126f78ce0088db10", Updated: "was in code and updated from sheet"},
{Index: "45", Address: "one1n9ecmpqfnf4aztcq245nqqmnjn7pxamwmmuvg3", BlsPriKey: "51d0b5b2324b69601ae4b4bdabc3130c7afdf5219ec867654f2d87675c8ae970", BlsPublicKey: "d468f29d36b05b647412d8fd975e0625ca959d5f04ad9a91513e153a2a249158df2b421d29730287848b6a7a674b3492", Updated: "copied from sheet"},
{Index: "46", Address: "one1s7s40ku4ms63066h34xwmm5j5k4jwk74gml5nx", BlsPriKey: "65ff7b77d6b7e2cedaa9f787a94c4ee4c776b0c8f7e4ac8460659541c70b9d6b", BlsPublicKey: "9b58fac96afe10ad8832c1752ef35c7169826aeb05505e25002320e63e6200a9c9bc10233a9a258797084122d4b2a411", Updated: "was in code and updated from sheet"},
{Index: "47", Address: "one1s3typcymaa5dgvfu68jw0hufl7vyu0hd3hscku", BlsPriKey: "7ee0890d586752d8883f28e6602c29a660b8f189524dc2f7120da9a1d57ffd38", BlsPublicKey: "d8bcb7ef85977e33f429374b68ac7e8b1d9296b82a074aec212ba570cfa0a5489df9c020f941039ad48497adc7833a96", Updated: "copied from sheet"},
{Index: "48", Address: "one1qcecvkv9w77rfz75t0s7x8xpgtw0nwve2vk2sv", BlsPriKey: "a60338bcbc1b33493683435b8133b0f17d9d8303a7b00b6507bb097fadb1c82c", BlsPublicKey: "d12e2b82d430ff6ce19651363bc29e438169ed1cd481adccdc0a82b74e789e18f330b7be9c1e399cce30506ec726c80f", Updated: "copied from sheet"},
{Index: "49", Address: "one13hrrej58t6kn3k24fwuhzudy7x9tayh8p73cq9", BlsPriKey: "694db80220180cbb64614fc6545ba2ca9ba70b75e89bdcd99b1f1cbc52c5cf4d", BlsPublicKey: "23ab4b6415a53e3ac398b53e9df5376f28c024e3d300fa9a6ed8c3c867929c43e81f978f8ba02bacd5f956dc2d3a6399", Updated: "was in code and updated from sheet"},
{Index: "50", Address: "one12vyznqd6lz6wwr9gkvd6q5zy9sswx792dh2eyv", BlsPriKey: "8767c541772043e0b4da32500f8e0443db2fb41c794411d8b3b4e5020d885504", BlsPublicKey: "90afed6000f27a5c47f04bf072efc3a7e75a6f75993c91a56a29d3c367f0952d97620fecd06c879c13d1068d62128506", Updated: "copied from sheet"},
{Index: "51", Address: "one1fdtcrkpkhm2ppnu05zmddgqvledqh7g6r2tgdy", BlsPriKey: "603e23f327d4afc4d347939c0bcfd56896f9850ceb38ff33906c0bd6bb361837", BlsPublicKey: "493fb42bd1fa4c0e01e88002d2a0a1f443cbc9e7ea17536e8a83ae5c911530b2534d00b1d681e253318be7e1fab1f193", Updated: "copied from sheet"},
{Index: "52", Address: "one1j7urgfm48rj9zl6rl8s3lg9mawkhcrf78mqdsz", BlsPriKey: "62b9c51b728314acec770c067d1aa47e7635ecbb1f2b90e3be2c34fdbe03fc3e", BlsPublicKey: "0a8599d805dfdf109de0fb849e73c12d4738dbe5de3f01093626947207f1611756382e8e743dae22b3b4e5fe67ce6d16", Updated: "was in code and updated from sheet"},
{Index: "53", Address: "one1s4rypls26kmzg03dxkklmpwhmv8u4nlh6vqkdv", BlsPriKey: "a4eb5c77e47a86d78420b526ff4ae973205d47f954adf8fc667b4c141ef3da5f", BlsPublicKey: "0d42e7e1c9ef4c1425bbc767b172154ea3e3d630b23b7a92d5cbceeaed3652e9c3ff2779bdce5bb85f1d328458b80117", Updated: "copied from sheet"},
{Index: "54", Address: "one1uhqaf9jgeczmuxs7ydzfeevwnt63ftps752cnr", BlsPriKey: "ab924789a57655b1df82a80138e3ff81c82a37b561bd17d5ba3f8e1df9cfe624", BlsPublicKey: "9c99088bf4e3d367183036041a32e534c2e045d9af2d4d9591252a74ab38b878d89f2863a1f5934501a8e9cb82b08b07", Updated: "copied from sheet"},
{Index: "55", Address: "one1khuc8sclm8lr09e0r64kf3jjt684leggzp22h4", BlsPriKey: "ae9495935096d4a403e056d46732b80cb8053ea5e3edab5b947f19bc2058f35a", BlsPublicKey: "3af05ef78a3e2b4ef4f2726284705300b88066f350506027ed853dd96a270671b46cd4b0ec675f8c9ebcacac7f99b984", Updated: "copied from sheet"},
{Index: "56", Address: "one1ee39d33k3ns8wpjae6kdm46620m0v2djhacas0", BlsPriKey: "6055a4efb40f25b0e800ecf79b99e364db2d92594530d944b29fd9e718f8b751", BlsPublicKey: "514b80600fd2b70fa83dd0a49b526289acee59d95ebcc50e87e05acb690821da064e43c9664683b519352861852de401", Updated: "copied from sheet"},
{Index: "57", Address: "one16jvl43d059a4wpderqu82wlm7t3qzw8yta3wgn", BlsPriKey: "5363d581399692d5eacde5c42bd5c4d177c02451e49ad0baa7535377013e665c", BlsPublicKey: "f7af1b02f35cdfb3ef2ac7cdccb87cf20f5411922170e4e191d57d6d1f52901a7c6e363d266a1c86bb1aef651bd1ae96", Updated: "was in code and updated from sheet"},
{Index: "58", Address: "one1xhwspfzgv3vh5fp9hxwngv8tvdj2qr338lmavw", BlsPriKey: "00bf369ebee045f0b6042d7a704d75aae2dd15b516e66a0d576ce7b32dceb70e", BlsPublicKey: "014d802636d36a50a687512b4f81f4d93324518c8099884b90e5467fa3d7f7fd52ed2e65892db70edf6df4a30530a78e", Updated: "copied from sheet"},
{Index: "59", Address: "one1ksqcladc3r5s90v494h9tfwdhkx88tq6j549f6", BlsPriKey: "7daa79d0aa2f62343c8a4bab592bf444ea141ee9ccc8f9515434bdfce72d3f24", BlsPublicKey: "286c00f71145c770f2c791492b3f26f7150ff2362780755530539c02c9115de76503ad367ab981065d3c7aa658140b18", Updated: "was in code and updated from sheet"},
{Index: "60", Address: "one1780wg58e86rs38we6ze2ts930s0qmmu40vmzya", BlsPriKey: "ecbf09caf2c9dcc4688f98d43a198a16da25162b249f31995a9ae3b4fa17b82c", BlsPublicKey: "109c9d8364b1634802b53be754a5faea7c6f5655f0990de979038462ada5cbef325c36032e6673d30c3349936b0bce18", Updated: "copied from sheet"},
{Index: "61", Address: "one1a4nhuqsa7d2znx8yq7tsuyf86v6tuq597y925l", BlsPriKey: "b55ece450a0ade36f98ca73906cecc543ddf96858fa6577aa86b3967889f6673", BlsPublicKey: "7f24f0c9af2239090e6ae593d665589651f4d8c4f5bf8ad40537ea8d3e912da82588ea3b505991b2aa96057015d1458d", Updated: "was in code and updated from sheet"},
{Index: "62", Address: "one1r9hjnk6zmnkageyvvsypcw2p675x7qrurjeaan", BlsPriKey: "57b9b2a48fe3d24e80d9e616a45a53d517e222fb90559bd0fe470bce027b3b29", BlsPublicKey: "3f74037361a915ad7718d96e225e4803c9b8a31bc287f246d6eb84328c5bb63ccf32975644d6a74b3820d3dc7811e592", Updated: "copied from sheet"},
{Index: "63", Address: "one1c0aau6shrtxqgenpf5ymtrspxpvw0sxj0c7hrq", BlsPriKey: "c6582e9c3477926891fe76ccf6eecc024c5249eafccb6c63702c5c8884e6ae20", BlsPublicKey: "ec2fa7a80bb5643958765cc4285eafced0c7be0b7b5543454554f764e187d63ff7952be490428974b8c81cc90db44899", Updated: "was in code and updated from sheet"},
{Index: "64", Address: "one1c6m2w8t0p3de3cjleu2t2duvspas6366jtf8da", BlsPriKey: "21b550fbae41803181de9625f5b5e5bab1ce8b20f2a2bb09f712ba4718346516", BlsPublicKey: "47ab7b7cbbc5b95ddab000c5d2643aaf9f916d776bd4adb05e509add43d54579f69e3e5898df5dd15a4332112c1b3d87", Updated: "was in code and updated from sheet"},
{Index: "65", Address: "one1kq0xzzzlrpkzslwfesrgmp5e7umuxl3m3dgk27", BlsPriKey: "a04f434680a86af6bda04f3ddf5ed7d420510890e3966a1f53a6ab7e7286a92c", BlsPublicKey: "7df3e402538cd967ac002d9140167fe2c70f591b487235e5b1929ef128cf93174545d663b1d73923acefc6c629368484", Updated: "copied from sheet"},
{Index: "66", Address: "one16ru662mq0yh6lup030g09kwwy7g8yfcxc5fcfp", BlsPriKey: "33b7d152eb29324e05d2d2a8f6822901310455fb0a1a47e226e8d09b4a0d5733", BlsPublicKey: "d35d26c704c0094abf6c1b19e1d6ea6021eb20bf347e9c20ff5a710bde93e9d41977ba6eb5191809758cceff59132508", Updated: "was in code and updated from sheet"},
{Index: "67", Address: "one16295hjtqyr0z22swaqthv7mvmvn2gltnj5gera", BlsPriKey: "1692432c25673c8f5026b0e366142bd4130b9c2ef86647280576fd6d51eaad62", BlsPublicKey: "fca5bb8c78055a4927bb3b8e60917e87dffd00d5f4a818111113c6ddff4e4af69f0d878a49c8f39c0842c15b40d0d603", Updated: "was in code and updated from sheet"},
{Index: "68", Address: "one16m5r7awa4y2z2cyage4cns4uejxx8rn0gw77ug", BlsPriKey: "5ad6f65e17f463fabb0d30d16956373e017a09c374ad5a180d9c2f6f9b9eee58", BlsPublicKey: "056f7e81e119f343ff72223955f7c007ffeff58dbb6e67bdb99d8c187068eda288b7dfec63dd7dae5546d9da3b89af84", Updated: "copied from sheet"},
{Index: "69", Address: "one1ha85rtgc4u96v4v9nwam5qhchswx8d579dw0sl", BlsPriKey: "633b087412f23e3ae86590f790c20da7ca481528b9a5266629a84ed71ec9101f", BlsPublicKey: "5655e508219092659e9440a642f58f3476a09539b552dd7d5d5fa4f1fbae006347ad7a3ff3ba59d3996a724822ca0e87", Updated: "copied from sheet"},
{Index: "70", Address: "one1mr3mt2ra8mwpr55uv3ymv0lmdy2s0w4m5nt0jh", BlsPriKey: "882457d412de8260589d1a64ee4163fa9d47b40905dd03b7004d705cd087be58", BlsPublicKey: "9bffcf238da1966163905e83b8b9b4193fc0a0408091347f3618d652f67ce5d40991381f96e85782ad94c705177c3082", Updated: "copied from sheet"},
{Index: "71", Address: "one1u24h3m8ny5yyfpv40vjen4fme72ye09gn5mr9q", BlsPriKey: "e1f32d06cf1d98689713adf15e0bbb3f74b9db423ffd0e805c2bdd3787579507", BlsPublicKey: "emptyemptyemptyemptyemptyemptyemptyemptyemptyemptyemptyemptyemptyemptyemptyemptyemptyemptyemptye", Updated: "was in code and updated from sheet"},
{Index: "72", Address: "one1a37yjkrxdzwkkl3ntkqsv305grcklpksxkwsrq", BlsPriKey: "7589d11122b7216c6d43a5775d0e831e1a6326199059fa74c1de739826df8013", BlsPublicKey: "afe3e92e45d8e49b8b90957cd8cd6f312d0588d823d761ea2ef0248c9baebdcede4565054a56483edca065c0e72b5d16", Updated: "was in code and updated from sheet"},
{Index: "73", Address: "one1528xlrfresl7wl2nr37kp0tnlr7hr3w8u5y4dp", BlsPriKey: "4b0f6878f44d2d21eb77d42206cc63da035e01d97b2108a0afc24b7340ac9122", BlsPublicKey: "91058b91d14936926f279a407dcb679f8756a51b3ca68cfed10c2c67aad13d1dc4bce417cd8a6553d7343bc0aed5ef02", Updated: "harmony"},
{Index: "74", Address: "one17y8k8adagmzc6t54xrnl3jmtgvmdqh2wzexn3x", BlsPriKey: "78d4ff9d2c003615ac143e7719b9043c2575eca6819ea334e3cac16a05253545", BlsPublicKey: "31c2be76384a46b596943d5071300d18f1e3ca3cc4418557cbe7645f141d163a448e750f876ace5663ac5cc8dca2e78e", Updated: "was in code and updated from sheet"},
{Index: "75", Address: "one1284fqe06amt67j6cwrj6c2yrcjudeq0uygjyq3", BlsPriKey: "2a54d6f2dd36d81cbd34af9f0448ed4a60f9f1743b81f20559a46e658551d321", BlsPublicKey: "2eb142677d24082e1435ac54dee102c9fc9d897c2f87ad9f99a88cac93445be8cc295c6b2ac34c196cd9b6f1b376d711", Updated: "harmony"},
{Index: "76", Address: "one149aw0kne2qwyxkxhz9v0msgf00lndvvdjne4rq", BlsPriKey: "6f9521c771f6d8eba15e5a611c181d80617590ae6249a159aa664d44b043220c", BlsPublicKey: "00508bf582665b3c75442231397f061ac3b9fedc5edc3343a465d9153ea7eca5ed97c33c097ac7a75533a420149dc492", Updated: "harmony"},
{Index: "77", Address: "one1lhyk86r4a2v7gd8yhq2m0k9l2pk64y3z75zx8r", BlsPriKey: "d1378a5060854c0fecafd6afc634485e94d72763a5240af6da0f8722c703ba5c", BlsPublicKey: "6bf1696e1fb4c52710a42ced76e0deb458a92d1539efc4632f88f51aa882d9685ea154d126fdaa375add29a90ebc4c87", Updated: "was in code and updated from sheet"},
{Index: "78", Address: "one1flv4r3udp08az7axdcz9me50kr2r4z65c8s39m", BlsPriKey: "27e8e932adaf0d464767a27f8e3cd18ca0bd144fac435a254ff598c2ee0e0870", BlsPublicKey: "306a3077bc5dc0914a1a08451e6d68072e5ac25cb9be3f4a272f9870614d36f5e96a02e6e571248abb2f174a144f3989", Updated: "harmony"},
{Index: "79", Address: "one15u2v6f56pj3rzvwge4dwl3ylg5zh3395nzj57y", BlsPriKey: "69f67cb5cbb540362d70f1304df641bd66d120c02f8d74b66a0b148f8d16cf1d", BlsPublicKey: "43b6dd212b5ec9aa1c8055653813f7d0edbeb4ac8e1b679246efcfd709965df0ab6537c791423ec14a5f05a47cbd110d", Updated: "was in code and updated from sheet"},
{Index: "80", Address: "one1kyyt7j29h4uhtnuhfar5wmngntx4gterrkd8q9", BlsPriKey: "f3f2f59ff197adfcc865b89346280c23078f85181de9af836146a4089945574c", BlsPublicKey: "f400d1caa1f40a14d870640c50d895205014f5b54c3aa9661579b937ea5bcc2f159b9bbb8075b516628f545af822180f", Updated: "was in code and updated from sheet"},
{Index: "81", Address: "one1mgwlvj9uq365vvndqh0nwrkqac7cgep2pcn6zl", BlsPriKey: "ff9d4e39dbaacfa2b8aacc9819ab369e99b78758c890f44b09511449d7f15e58", BlsPublicKey: "ca5b587ecbc68c1f9af60dc6452f98705073029c27422a37898dacc3451594dcd2da7b75d62a387e3520240ae46e130e", Updated: "was in code and updated from sheet"},
{Index: "82", Address: "one1c4w9danpa5v9zqurnl07lkqdcwyn3yfm86anqu", BlsPriKey: "c65c08f7d6aba9dc11a4bf2ea16552cb55890d4435f6eeb9950da25f37223f4f", BlsPublicKey: "817d92d1141cf3dee3dd9b522752f4e515fa3d487dd4627951ba3e47a2a2704d1499912b1783cd544cfcdef3abd41b13", Updated: "was in code and updated from sheet"},
{Index: "83", Address: "one1kss4a906z654ujdswn4r7uwq5pqd8m3mvar9ng", BlsPriKey: "f35d6cff226839b0fcec20a2dbb73f5be3a438476400c3d6a375b3c01859ca3b", BlsPublicKey: "1ec7cce211181f0f942b5ef76c921b88600614dafd42ca06cb1a7b74f69e56f2e6eb9376aafa52519abce095b761068b", Updated: "was in code and updated from sheet"},
{Index: "84", Address: "one1l7m0e50v0fus6e4wp29fprppj9dyxekhr9qaak", BlsPriKey: "5c44b45f890d8f7e0dfaad51ac48e2c1f887c95636be252413d9a62669559a33", BlsPublicKey: "6fa5da80c6d7c6e22bb98a590b5c380694e2128ee2a5b11379b0f648395fd0af70e8edf834de7523b4388affa329c68c", Updated: "harmony"},
{Index: "85", Address: "one10vy4gdzga08vhenqke36x67fjqukyzk6d4hrqw", BlsPriKey: "d9d7b89c882727d92f232be10cf0a3d118422e9512b0531548e8072cb9354806", BlsPublicKey: "445ef889e5f294f1a5d231ff0de6fc25f228145c36d813084c9aa5e33bbae0b73cc71efa16b88f0490a80660564d2293", Updated: "harmony"},
{Index: "86", Address: "one1mtvr4rtt7zwp5xwz65razvy54vzxn57y8wd9um", BlsPriKey: "35631f61bb4225e1185454802e2611538b931e4493071923ee8e7da6dda7f33c", BlsPublicKey: "af4cbb5b185473e667b1004a59aaf265430cd6fc1d2578bf32e88e9c639cd839790f12bf4e58b9f685daf3b9ab3d7001", Updated: "harmony"},
{Index: "87", Address: "one1ahw70lq9sqqygs8f7zdrvw7zd796w5n48hc5xh", BlsPriKey: "0933aab0cf0a15d213c7f5fb2a56336921060b6fcb90ac2ec61cf2d13d185226", BlsPublicKey: "f0d6a1d78c4817e451fb242b7501b23a9e9b5214e6ae8695a00e344a2f6662dad96baeb4f983d5613404795fae71e80d", Updated: "harmony"},
{Index: "88", Address: "one129s9f828f538jrjca2wwlwphsl5k8rlzjdeacq", BlsPriKey: "c56b16437455c67eb884d82a945be089d1c3f8b355b64258aaaaaa58dcb2a834", BlsPublicKey: "eb4d1c141fc6319f32710212b78b88a045ce95437025bfca56ec399cdcd469d1c49081025f859e09b35249cf2cc6bf06", Updated: "was in code and updated from sheet"},
{Index: "89", Address: "one1zjjul68lhv8hef7angwvakmc37evv8gppraft0", BlsPriKey: "9b528e658b80066eb1785b4cfc2218c103741aba52ae1ccb0dbb88b270d8c41a", BlsPublicKey: "7bc9bc157947a0ce4b8ed57161b0e873947098f25f3d82dacae3e53fdd0a845638c797b12bea1929f1bfe9088fbe7c07", Updated: "harmony"},
{Index: "90", Address: "one10746sav20n8h4gm3sevj3vfydtpv6vpksv2065", BlsPriKey: "0c9cfdafc47b0aebcfc94fb6cf6d40ef8c1a12fe1c4250e949a4bebc821a623f", BlsPublicKey: "ca95dc563fc804a9ec409894d03a4e7613edee62d4cf07e0c4b444d563e38fcd84b8a0ecffc76f46c6c0025b1f45948c", Updated: "harmony"},
{Index: "91", Address: "one13gu3wvxga2jkpg72k5m4lye6nktxzu7a5vsnec", BlsPriKey: "078d029f3101cabfadfcb8aed4bdb0827cd495e829ebeed78548625f3cc8d466", BlsPublicKey: "8fb9de02c7f9b8baad2905994c6d9f559b99a72fdd6aa20eab692bb1fcc25c712ba7410d4dae8dad182d714e80d7d787", Updated: "harmony"},
{Index: "92", Address: "one18683c2vyr4xdv4wd3ley8wd250pnmxn346s4qq", BlsPriKey: "7faca2722bc9a7d578e6ee053d9eb57796a91ee937b1184543a00c9587577526", BlsPublicKey: "63413f65e2955e98ef71f517a5d21c5c30c1182b9e6e669205df74fbeeba88e058fb239ada9d29603bcb2df613ca2d8e", Updated: "harmony"},
{Index: "93", Address: "one10ha8a07jpxlla89gcmlu7k9j3ra3sqdyq2c620", BlsPriKey: "e1d8c272972f6a52fa9fb868f99ed60669f6f9f89e235ff0d82bef022f29b31c", BlsPublicKey: "03ed4996a4808aa1c9672dcbde4262311fcddd9d291e7f0b96d5fa4968831454479584d0ce0c2471557f506f189cd388", Updated: "harmony"},
{Index: "94", Address: "one1hrdt5e5lepygmj2vfthjzauuc9085lpnfjhha4", BlsPriKey: "457b34ae2c6a04e2299712cbe1a53d7c17d6a9c3474d0d2cedd77680a8180623", BlsPublicKey: "c6404146b9655332ff5e2ad4877c2689658bb037e7da9a4114806a2ba8b1c9bd0af8062e4cba22e68466336f3dba6a0e", Updated: "harmony"},
{Index: "95", Address: "one1hrg76d5743k5x8jmyu4zyn232fzdexf06w32s3", BlsPriKey: "9e46c88259e4082297e824c76779b9856cbbd5f94b54acab2656b96a878bb00f", BlsPublicKey: "930590243131160f8007ddf0a8107c01c5600c57b8b107ae21a9c0a7e71ebdbcf820230f7cd2a00eeb2777f9f62fed03", Updated: "harmony"},
{Index: "96", Address: "one149aw0kne2qwyxkxhz9v0msgf00lndvvdjne4rq", BlsPriKey: "518f9b3674a0807b84a3f8bebf0585a4204552162d1013486d22b1215b348961", BlsPublicKey: "00508bf582665b3c75442231397f061ac3b9fedc5edc3343a465d9153ea7eca5ed97c33c097ac7a75533a420149dc492", Updated: "was in code and updated from sheet"},
{Index: "97", Address: "one1df4tldae3amrkyrf96tg9pqccjvkjetattl4w8", BlsPriKey: "a96bea1010cec516dd489d18d490507a41223099789bf6fd068cb17d2f66eb4d", BlsPublicKey: "3fc212e1bb7594018c0882d2aa1818e9401209f8e41cdee613fd6bec096872d55c01ea02e091063f6ce49dbca49b3f14", Updated: "was in code and updated from sheet"},
{Index: "98", Address: "one19jtrujyvqdvdn9wm9tne5d4vrwvy36y69msczs", BlsPriKey: "7c088b58aaabab8a16b5996db32ef8a0dba8b99202b6271f4322f3f4b23bd009", BlsPublicKey: "bbd0b173ace9f35c22eb80fe4673497f55c7039f089a3444a329f760f0d4a335927bb7d94a70b817c405351570f3d411", Updated: "was in code and updated from sheet"},
{Index: "99", Address: "one1f40kwnze67gepxl2m5tpljr93exrhpehcfjs6k", BlsPriKey: "454f45068b784632b15db9c212a49b9d3b642f6b5ca53d09b86fcb2c84a11738", BlsPublicKey: "92f967adc41fa54735dfee2087bf0743ec9b4793174f8cd515c366daa20a3dfd71a62f7658f9ebcbf2013d3fa22f8f96", Updated: "harmony"},
}

@ -7,6 +7,7 @@ import (
"strings"
"github.com/ethereum/go-ethereum/crypto"
"github.com/harmony-one/harmony/internal/common"
"github.com/harmony-one/harmony/internal/utils"
)
@ -14,9 +15,12 @@ const genesisString = "https://harmony.one 'Open Consensus for 10B' 2019.06.01 $
// DeployAccount is the account used in genesis
type DeployAccount struct {
Address string // account address
BlsPriKey string // account private BLS key (To be removed)
ShardID uint32 // shardID of the account
Index string // index
Address string // account address
BlsPriKey string // account private BLS key (To be removed)
BlsPublicKey string // account public BLS key
ShardID uint32 // shardID of the account
Updated string
}
func (d DeployAccount) String() string {
@ -37,13 +41,14 @@ func BeaconAccountPriKey() *ecdsa.PrivateKey {
// the account address could be from GenesisAccounts or from GenesisFNAccounts
// the account index can be used to determin the shard of the account
func FindAccount(address string) (int, *DeployAccount) {
addr := common.ParseAddr(address)
for i, acc := range GenesisAccounts {
if address == acc.Address {
if addr == common.ParseAddr(acc.Address) {
return i, &acc
}
}
for i, acc := range GenesisFNAccounts {
if address == acc.Address {
if addr == common.ParseAddr(acc.Address) {
return i + 8, &acc
}
}
@ -61,489 +66,408 @@ var DeployedContractAddress = crypto.CreateAddress(crypto.PubkeyToAddress(Genesi
// GenesisAccounts are the accounts for the initial genesis nodes hosted by Harmony.
var GenesisAccounts = [...]DeployAccount{
// 0 - 9
{Address: "0x007579ED2Fe889C5255C36d4978Ac94d25811771", BlsPriKey: "744df5c4bdc246c6fcc414a72d0311c8b3d2a1aafd2de90414f499067a6d8828"},
{Address: "0x00F98965458a35f3788C45A095582AB18A5ae79c", BlsPriKey: "1af3d58cc5f52a81daaafdffcd0a249b66f563afddee282f0d9440e1f54c8d01"},
{Address: "0x0102B41674C3ac2634f404d8c25C25Bb959fE952", BlsPriKey: "3ca50987ca2406ca7990cc3946f0e0cd9041fd3caae7601a63e90315f7335e2b"},
{Address: "0x0178A7bE4399c1968156edE4f52ae91953ab9B63", BlsPriKey: "8bfa48f3c35023a7a80aa11b55ecad4a22bb90f193b7586cd095028dff0d8e3c"},
{Address: "0x0215c51A3d67Eb1e949bD1Df8b74D3aef097e92d", BlsPriKey: "a42c05cfb5552baae0100e5887664088ed29c2a43c449e2ebc7ebc57dfd75a6e"},
{Address: "0x021983eA41fbeeB39F82a9CAf1A83476F0cFeEDC", BlsPriKey: "cb2f6f4afd3746b90ce6d6c47475dec4a3b7ac8eabdae1eff577cb0f7e025b3c"},
{Address: "0x03d1a55eA1246efB257D49D9286f7D370bd09c97", BlsPriKey: "983fc83da2c1ecfea6dd7c782b46c1206bb85fc27a8f53c4936d6efec47cc214"},
{Address: "0x055b95d5205B5711099C32626Ea61481779a2233", BlsPriKey: "540e6fa35dbdbd519844fe1f1ed8b9ffbee1706c6a9436b6ce90190495939d09"},
{Address: "0x0566729A6FCDda16287777baB5D4425AA93bB0Fc", BlsPriKey: "3b89483eee51b4fa343986e79aac7f6dadbca933cbd38afaa76c4d9f631b440c"},
{Address: "0x05bA7FcC4c1d7286f7A3d5552DdF305677338c22", BlsPriKey: "65d7c37bbddf3b25d754ab4cbf62bf28da338c2e84535fb39519fc50a8451a69"},
// 10 - 19
{Address: "0x063893E8EfA148E29B914702AD6A9930d41C8F13", BlsPriKey: "022d1b5600de11ee0b0a8e48627d31aa368164617fe556bb9178251a66164d01"},
{Address: "0x06693dEE3d72a30075E7447b18c6f3ed8AE62174", BlsPriKey: "0e0f6d48b29cb273a667121338f6d7f8e50033a1b08b791f69910695f641194e"},
{Address: "0x066B40c45D06eEFE8Bb8677fdaFdaC5C8dF9d09C", BlsPriKey: "1bb48fedf4dd6011757f3925f686e20485a876badde9c48cc3ee4bbf4b6f1d5e"},
{Address: "0x079C1FFEaa70Ebdd2F3235b2F82BeE0b1101f092", BlsPriKey: "0c705c116f081fb8b7c0cde45e2027f17f9f7ccc2ec31bb15449db6978365022"},
{Address: "0x07Fe4B973008c53528142b719BdfaC428F81905b", BlsPriKey: "71fd4af428fe1751286882e48777df17726d84c308f66de1575b2ca5705a3825"},
{Address: "0x09531Cea52595bCe55329Be07f11Ad033B9814Ee", BlsPriKey: "0a596f0eb4330ef8d97929bea498d9a5f10597717616284ba043a55223658e0a"},
{Address: "0x0B4B626c913a46138feD9d7201E187A751DFF485", BlsPriKey: "eac96664440eca19ebf1cd5c2e83aa2c1b033ab94cfeaac43d5b28f36f858627"},
{Address: "0x0CCa9111F4588EDB3c9a282faE233B830dE21A0D", BlsPriKey: "0e8fd28fea928ea0c064d7499f1c905b8be069200f963387d5d97ef98e602311"},
{Address: "0x0F595ed534b6464eB2C80A037FFba02D23AfdfD2", BlsPriKey: "93a86c3211c02a5f4e1ffdd77dd319a673007ac93c38abd1e97d3d04f690e23d"},
{Address: "0x0a0b8c48e42c540078fD99004915Be265f380dB7", BlsPriKey: "617b9b811ab0479458119af16c143b5bb2296176ba61561a9f91e6b1f5fd0a3f"},
// 20 - 29
{Address: "0x0e59b767D5E74cf7B29Ef9bEc3dA4c402d357C6C", BlsPriKey: "cad2833502ccc3c4e044079c0154a4014b4f769c199f275b227a322aa9a41d39"},
{Address: "0x0fAAda81c203C74CAc786786f7D428477a04bF9c", BlsPriKey: "bd83f3cd53ebb15ff3a4a320ccaa4223839990c9cf846bb9014025c8ebcf060f"},
{Address: "0x0fd228bdFbe9ad0c898e9A0Fee2E6FB01f596F0d", BlsPriKey: "b71c9bd6a700afa659bab71ac1121ad86cc843d1c3c6722beb3ac6683d92c866"},
{Address: "0x123FF831333e2662D00c60A2C46f7196204506e9", BlsPriKey: "bf119ca69fa1802ac2e60b2c2cbf9d83109608d5a0d19fe286d6d8dbbc64104d"},
{Address: "0x1240775288d0EE975583A2A7022006539dADb354", BlsPriKey: "122ab3a111343a15a7111c1d7255f436c3cc81d1893d51e89a47edf0c6c4d929"},
{Address: "0x127b8Cb71Fb78338d9EFFe47bB51c2EAd3995378", BlsPriKey: "4d105d4d5e1bbe49d29a87e9454b89e4324f4a6971b70833d70fe4d731970145"},
{Address: "0x141B0e0f05739B7B784654E973e9b9146473aAb9", BlsPriKey: "29b13696228a5ff6fe4f6bf941cd18310caf72fdfec62f291cd68478054c313b"},
{Address: "0x1492ebD0EcfD54B4c211b37C8891bA3493c52100", BlsPriKey: "952a0ccf2fbe1ae29e562bc52c9c40fb381f04cebf9186b683db3822705f0b63"},
{Address: "0x1530A04592F9C3bF06aC6044525f08937ED38edB", BlsPriKey: "9fe110563f98e64bf742a0c54e5c5857738c03ed63ff66580d47215dfc9a3f6b"},
{Address: "0x159f58a41F13ffC831690D81F308244A3b238523", BlsPriKey: "3f49e1df6b46674bf0179f820f6a6d60303f7b70544bf3316ef48ad7e082d962"},
// 30 - 39
{Address: "0x16451cE5a762038eeA700A6aCd5F796DF3D6bE45", BlsPriKey: "a151fb462571d0eb58e1d0ac1fca6dcecc2ce097cbaff30423fb53e4b150e762"},
{Address: "0x17f68b4C9e1eeE6eD5bBa0326c50515c7816FF78", BlsPriKey: "843ee44e00259ff2df171edc9f55216100c7946cccd3e46d4d109a6a7ee90d5b"},
{Address: "0x19373b0E0428cc0f3F25169Cd079d27856b9f6d6", BlsPriKey: "be2507d4b1d01c3fd1af277edbff2863fa4edf78040e83050f3ef463879d991c"},
{Address: "0x1B77597d6664f1fB4894c735Ea80cf250866d265", BlsPriKey: "8299644a589e27f51371917ac08dca99eae455a5bb8a1d5a534a33623cb7ca3f"},
{Address: "0x1Db6cf99e231e42CEB0389E7828b16Be9b6a385f", BlsPriKey: "3c8b0a47ac82d7fecec8fcbc3f9ce69605ec4b74d667d6a8ca0844168a0fe739"},
{Address: "0x1F4B579f85E585039C56989DEB56377c529981Be", BlsPriKey: "ec3628e08bda9127f3a5a553438094e662d9306137a357b603d9ad55d11d9c31"},
{Address: "0x1e9fCd9B1BDC53921d6a97D305f8a829Fd1299fE", BlsPriKey: "92a606d44bbcd5ef3d6ed9b33b546b09078c205a37043c0ee8e06ffafb5b6d72"},
{Address: "0x1eEbE25D248BD31B9A166326F2DF4bA9874Bae2E", BlsPriKey: "4a709cb38e8867ea75f29a7f14ca22cd9e116306cad8b70f01cf7fb2da87de01"},
{Address: "0x1ed0498dec7bEb1C06738Cb8DAA54DD03D689F99", BlsPriKey: "a2a90405a2a8c070ae951e7918f8dd1b85ebbb3463ea6fe510db80a8d10eae2d"},
{Address: "0x1f6CafAb4e651bF17dCb09188496A3d55D1A7828", BlsPriKey: "721fd7d88a13d50652eafb8f469e724916921235a8a50cf43c1e2ffa4b51fb3c"},
// 40 - 49
{Address: "0x1fF28Fe254B0c42E5de111BFFC70D6e661619F6F", BlsPriKey: "bec3262486fae949ce5f743fbd18cf8263a90f319faeb0e11b09c2f170bc6926"},
{Address: "0x2195Ae95468B5128a89150139AA52b792a6418f5", BlsPriKey: "5297d23411e9ca53ec317b78d60e8311472715c9f2ae61a43c7b545db8d15c07"},
{Address: "0x21d02A81c2286e02D1CCdA4D36D4DcD27182bBe9", BlsPriKey: "8ebdd01e7c894ff3b4fae5c4d4f7df0e80ee08b484c01788c9dab8fa5fd16f06"},
{Address: "0x225268acc5e8Be5f1B69063EA6eaDFfE676Aaa6a", BlsPriKey: "6b0f74d270d4e337a95f46c4d39f1cf946bcc827ee9bedac8323437598caf63e"},
{Address: "0x242CBC66F0bd429ED47bD0b5c8164026A7994c4A", BlsPriKey: "036e784d4011c1c633da43d7ef8fc6d43e717151d333d74af1d953af1c8d7a2c"},
{Address: "0x2464c234faA87689B21058B52de677E726d15972", BlsPriKey: "78383d03589441c4d3729b76d21c34b59da25e32d4ca605bdc5d1b3b878cc448"},
{Address: "0x247d239dEc14b34A3fD6635F14A10058e1b433Ab", BlsPriKey: "0155b109411fb272dc5abc9d9a53a01cc346b24c76d77d7ebf785464f805d843"},
{Address: "0x25ba1a086a4038307d34e8c085278b291db485CF", BlsPriKey: "7f92cbe43a42e6aacbba4b6403d54a262239c686863d2275464aa4c04daac312"},
{Address: "0x262401b4532963Ac25A742a9A7277d98E4E0ea63", BlsPriKey: "a5ad07baadb3e3af000cbdeae7e50ec53a9aca6d33158776a7cab38427011743"},
{Address: "0x265CA0F26A8D899F0c25313164FBBb5344F973cf", BlsPriKey: "1e017f62210957e1d528224ac0d0fb73e47d17f90b0204ad377f396e44173971"},
// 50 - 59
{Address: "0x26Bb09E04a264AdB89B73389CBdcb48819CB2401", BlsPriKey: "f3889e2c2f2fab05a1135c3a2bd7a74b127458616e067a18ece0d8e8d002971a"},
{Address: "0x26a2F4BfbED55F9760E426cc0eeC91AE0Fe661e1", BlsPriKey: "cc8b2c27531215a9388415cde2380437b383bf9a059a27a90f31e9f571f3c83d"},
{Address: "0x27E556aA773505Fb57F07Aa32c1697D5FEc60C30", BlsPriKey: "43b19105bb960c5c872ba3892b2eafa2730e5eb5fcf05c249bef561eb7e2543c"},
{Address: "0x28347C4F7f56898D30e0e4e2b96d3be8C25Eb5E0", BlsPriKey: "f1c039b7795e5cd1068966e314e76ccd7515e9098bf4436dab7ec5b26206f903"},
{Address: "0x2861caed9c29f8b9800394fD2AC47e1bAD1B68b7", BlsPriKey: "be60daa759d8cc98ab812515720dd0a47432fa8f7386200acff9fe43e1481823"},
{Address: "0x28909d8Ac0bf925aA6f41f2cde4A4cD9f31B197a", BlsPriKey: "80e38bcd003a9a12990fa2d23766b299bcaa4a7cc5d108a71b71e139646fd731"},
{Address: "0x299A24672cB79C61fE045e0aF9eBba4ce0A135ce", BlsPriKey: "775f4d0f3ebd22efa3f69b0a495d4e3b87e963b9165620e001dc00935f45dd21"},
{Address: "0x29fb0115A02F8F85d6fE0768f12e0F14Bcc9fB36", BlsPriKey: "5cc64dc633db8a761d8b0bac72392445f2536d22fdf2078b688e4e0f11b6fc36"},
{Address: "0x2C2cBe9D862bf836ad96eB5074225d1a6f52ecD0", BlsPriKey: "cdd7a320620892dbe640c50f79e7f4f7e88ec7d404b77ddb414dba79ec522c38"},
{Address: "0x2DBaa0deCbaF557f8681bbDC23D6383FbC359B42", BlsPriKey: "ecad42e8558019d8cdcc5c268dae43ea73f096ae6a07b6f0f91fbe30e4547e08"},
// 60 - 69
{Address: "0x2E258FeeC9Fad9d243B946FDB490c19434E78a26", BlsPriKey: "c79d77feafe263ed104c8a3dd3a78f4c24cb15f23bf378d78536b0fed2f81d11"},
{Address: "0x2EA2a868EcD440C13da3e23ceD0b6654fF34dB89", BlsPriKey: "1542777b7786dbd7f7b3e183c6fd9c46c229149ebdd1cd92e770eb9e87ff2a08"},
{Address: "0x2F1a7882EF1c8634f46cb156DAE2bC2A35157Faa", BlsPriKey: "c3fbf51eeb25eeb0b04f4f2c8f33bb345065da277671a1a512107ccd3615af6e"},
{Address: "0x2a58E5ca4C6525d4F28Bf0A3AD34d8c1B6a99c09", BlsPriKey: "2410ba0deb3c06e2e5747d1ca39c1081b0dbe205a885f3e8278afd2a8641623a"},
{Address: "0x2b8C69Ba116ADaC2e2C40B5e8E6B05e39aE0Db50", BlsPriKey: "b80f5810a82b44678231abea9d0a7bd73839af5a6ebc17659b55e779d0bc3861"},
{Address: "0x2c2a172192a84aF1d37F8793c596b9b91b517ede", BlsPriKey: "0b1a993328a0a418ad16cc9573e365b674fcf0aed41f22050f4eb0a3f67fa90a"},
{Address: "0x2e9e70D46290A33F3F01251587AB09C84FCE7cb7", BlsPriKey: "e39fecadc883112bfdeddffbb9fbf4a611525951f0b3da348b8ce564a127c66d"},
{Address: "0x2eE12a8225e5e811e11264D123c4E180F0797be7", BlsPriKey: "26ef3e9aa6318bedcc8e93eb7c3974334743defbb6bb003bc2a797028de71e0b"},
{Address: "0x3076E2D79053c964966204Fd1A0aF770ef2538D8", BlsPriKey: "06a94be38e03945e068741277da7b58c61a9d2a58df5f6076852dacef3b76207"},
{Address: "0x31335ed908287cdF7f9416cF748d145eE7913B34", BlsPriKey: "a580c831c2bcdca3306eb66d5cd20426f11d32bd1ce623b5236f3aa57c53b56b"},
// 70 - 79
{Address: "0x319201A71220F5Da76B716A398D2398b6ed6a534", BlsPriKey: "7e9dccc87fa4d54a918bcd2a78be0a9fdc48fa56010758c500e31d4b15f6d54e"},
{Address: "0x32E8D97857240CeA72f543460dbd17E5C648D738", BlsPriKey: "360abec0172e46ccdf42bc14101ac9a08502d6eb6095f55d5a7f0e17c3191634"},
{Address: "0x3309c38aC38b8Ab3B0917b75b4434c95879b60CB", BlsPriKey: "19e8982b559fcb011d5ea76d5f778fdff8dd5e9f41990faacdeabeb1c369d633"},
{Address: "0x33F8248328601d0A13DE54f580b5fC1D92bf0a09", BlsPriKey: "a8ff62a867711ea4de0785b5a2cc2759b35d6866883a963f2d5cb7cde1240f4a"},
{Address: "0x340Eb83bAA2B555A97E8E705aa857D13CAe0C574", BlsPriKey: "e60669bf7362a0f9f0078479b50e387a7d8f29a9329f3b7cbd31636156fc4350"},
{Address: "0x34788e58AB673D69b523c8CE62341a49d7AB0dd4", BlsPriKey: "a9d25aff30f4fe30af2cba36af64cb05983203fbfa0c1bbb9af175524a03a75f"},
{Address: "0x347be45F656bB0240f54A78210623A7fc64C347E", BlsPriKey: "b2529f4bf082b5961e8f92e5e8ea5d601985e780beff1d80bfb646367b294b2b"},
{Address: "0x34dad558F746FB3ac3cE2f52D78A4299EE8B5cc1", BlsPriKey: "7d5c691e785de7a39cb66112cf08c7328d108d485d459ad18e6a03722e85cf05"},
{Address: "0x358f5cAd732462f4336c2fd1d1C2D2ef8a993a48", BlsPriKey: "95389b135940d578bc22673f965435ad511eeaddbc83ce0756c46137e1ea5632"},
{Address: "0x360C6d41Bbb26C2008365871dB41F7f4F038aed5", BlsPriKey: "b8da8b8201f1b7aec7471a9cbf2df123a37acd145d1f40df4ee1eb1ee3c6002b"},
// 80 - 89
{Address: "0x363A67Ed8D83b74f132364c07D95058cfBba4068", BlsPriKey: "89baaea9eea71b06259156fa7da7539331539c42c1bd0aa8cc22144dbbb94e3a"},
{Address: "0x3712a9599454A3510C4Bf0927DB91333D7fe72bf", BlsPriKey: "171de1881cdb39926ecde2b6b0bbc652656904be1186963b8c0618aec5e8aa06"},
{Address: "0x374beF68Fb58142Ca63b3Ed86C3132E008eC9957", BlsPriKey: "3a4cc149c8b757dfceb0fbef00b616843ad68d5b24ff59f95ff4cf2c959e8037"},
{Address: "0x37731F1Ec1826b278CA47EF87a4177cc5931Db67", BlsPriKey: "62ded039ad53de22a275e2da572064b160c105c111e47d677dd8bfd42c6d9b3a"},
{Address: "0x377dc894E403D4e099851038c4Aa40D67fdd64Ca", BlsPriKey: "fdf1a21336b30807e0e52ed2862cd398e7f131332557f7d22b37724f6f700b63"},
{Address: "0x379c7e2c06932A064D25dd2B938974a31AFFAe4D", BlsPriKey: "e8dae2866983d99869b4765a6b2e9a8f9d2476885917f46fd70469ccb803af07"},
{Address: "0x39248D6c63c76BC3C8dD4f8C910C9cb1098A0019", BlsPriKey: "98f4db326c0b619651a9130880fc7bccee293901cbb8fc7637df98090b0aaf68"},
{Address: "0x39d1F7820013fE09056b2187359Ad03891C7DB78", BlsPriKey: "32dd83bb20b27c66182035d4cce1bae1902ca145d47ab24128441b0288f6c605"},
{Address: "0x3D053cDBf1B9A8D5AeDDB2F5fA1E414E2E1b3996", BlsPriKey: "d58e62628ca9952698791ec711a1a30e25f5ea4a6c3a5285de441807892a2914"},
{Address: "0x3FebCCaB09ECe4ef6f6a2bEA73A898B324976E74", BlsPriKey: "ce78925f42db2550e6cbd9d802ba842a296f04fcad53a7f5f2ba0966e0ae532f"},
// 90 - 99
{Address: "0x3c8FC1035Dcb6e6106C15a901C4775035b3dA784", BlsPriKey: "16a56d0c45353f64c387c6357b9c84bec598cc07fb8e3f315734db8bb1de234e"},
{Address: "0x3d1f908D73dDd221E06Ed234B65C482CA45a4DF0", BlsPriKey: "3773287ac6e5d8d9d137f00f4a1809341d35c25839e0d1769d1f5912c332612d"},
{Address: "0x3d693307B4Fb93A8f18eB7407Ba667fAA3071acC", BlsPriKey: "8695759a8cb61c6fa17663032412c26f8c9445aee9f374fe1b9713117ade7865"},
{Address: "0x3dEd77a2008C1a37A4A8dBa95A3f271fA9FE612A", BlsPriKey: "2933d5643378ef0ba8aee94f976ae76cc08cf182738888ee1c489f4fdc8e5a04"},
{Address: "0x4028C0fEE197D2e0d2Cd2C69860498a712cbB8E2", BlsPriKey: "34e47d12f438ba91e41666c8e4aa227817c79d17060a740f8224847b9948a34a"},
{Address: "0x41D5410D1ac8Ed178c2494BEdD696E759052A428", BlsPriKey: "fbd218940c6d62926c488bb4a6e389ac735b3386b7fb4c0c36e5672abfeadb73"},
{Address: "0x41EbA30f94338B69F7dCdCC51C2e5557fe8Fb2e8", BlsPriKey: "d552aa321337894cb21dd0a4679f08c9dc2c28ae8968bd75d8f7e6f097baf85b"},
{Address: "0x4204324E99c2D24DEFb4Ec92c04F91f9Ab1a4b3D", BlsPriKey: "2b76e3c16a2e5ac28059a97bdc0038be74b7e31d62cd750e167ff8dbf4910625"},
{Address: "0x421F5E2b63530911aeB2e0C047E970f92cA5BFFe", BlsPriKey: "aa701b6ff07c196c5f95ddef8c49f578365822a240b78f1b5901c355d1dd3e6e"},
{Address: "0x4229a06ca14dECaCc667ea3752Ec9F6cf6883E5D", BlsPriKey: "4ff55d2607bbab7f0b7c7b926b41a64a704b287ee87d2eee0138eb576b53e95e"},
// 100 - 109
{Address: "0x4325bC92bA7e8D83dFCD3748998835deA565a619", BlsPriKey: "485799c51877d6545748afd681abc097dd6ffbfdefa5ca69e284127acfc8953d"},
{Address: "0x44456966A18d5aD69b6E7a088289751a49bf40AB", BlsPriKey: "2111f88712ce8ea23e724a09cc394968cfaf8c2416cf93cd1a638bae2c2c070d"},
{Address: "0x446B633889513A21a1d27063ADcd1B062c277D76", BlsPriKey: "370b986079a75fdef94d5a95e12cc2773af467b47b50febbd4ed0b070ff84b58"},
{Address: "0x4478E05FdBB69b90fd5D2da08182e62356FdF7D4", BlsPriKey: "504ad61535bdba92590da64d4e7ab6ae78df225547926e407070c1b2277bb036"},
{Address: "0x4499471831Bb521c02ccbf144882ED910D0BfF12", BlsPriKey: "ef95ea3be04cea4f6e34a253df5fd3e5978cc24e22c25686ddd2fa3e0c4e625e"},
{Address: "0x44D7732cE7f12Df848E0B21d111f74a618f8a43e", BlsPriKey: "d7ff7def8e785136aedd7950542b87eeabf2a5307b5489159c86a9704a78c82f"},
{Address: "0x453aa59A3227bf616a95b1E373A02b6a52Fb375b", BlsPriKey: "51a98d91590f1aa48302972e2a443330fd58c42f3afef8c0a1d108bd12de9b34"},
{Address: "0x45FdDE03B486e2c0C4bBb89F398241A3755D5D11", BlsPriKey: "02f6ba3f90b9133fdd42dead23fc4623dd401717a1f105f94717ed9fc5215f5c"},
{Address: "0x45aee6EFF98397835640638bA345E0EB31827AD0", BlsPriKey: "9655f209face791015d54bcd1862481fef92e3d43878d6cdd6d5c2293ef79f44"},
{Address: "0x46ccCF8882c4703350A9aD72cA0Ae08730d148b8", BlsPriKey: "15a9c70dead44df5fa6edd81ee0a5f1377cfde77a1f2c54d73cec8e9c7cb693c"},
// 110 - 119
{Address: "0x4762F1BDcD9B3B4b14293ee97d29A68F328Ef4EC", BlsPriKey: "a044fcbd1b7a7b7bba6699457305494a5bba0567e97d95a69c85b294eaba646c"},
{Address: "0x477c8504Eed8fa3914e53285150CE0A87c87C696", BlsPriKey: "507349bb3f44e9a20dd6555b8d7bc7f95c26b372641fce31502850005d7eb202"},
{Address: "0x4851E31eB74c400d906d98da8aD8BAC2A9dB3328", BlsPriKey: "e0984f407e32fa7d060dbd7ea2b9baf8a494ab435f797f08f4892a2bf5b34a0f"},
{Address: "0x49047Cd6Bb970E711a198DF1186aeb1E6E645EB5", BlsPriKey: "4cf7b3d6f3c516061e8e17b6290f4b8fe58e822d4077f9f5d718a5c3e8bab526"},
{Address: "0x4B4f226886dD72d30B27197593bC6313d228e115", BlsPriKey: "1685239934f53fb3aa8585493b03525af5e1083927f59e86a649ae383d02191b"},
{Address: "0x4B8C78E300D5d8DBc80Aadc03d2a899521fc4418", BlsPriKey: "941481e67ca7c764d2c077eaaa014b457ae247757f5d863b121e884701e10e30"},
{Address: "0x4D30F9107a8dF1a89E040C693A7d63F65aA6D289", BlsPriKey: "169b52af471949aa81f53b43bbf4e9d84268f248a92c2eb7760437fb0e36e956"},
{Address: "0x4D9EAF51339cC05a8D01f19B3D960b6A67db62BB", BlsPriKey: "2e4eccd13f0d703e02cbde24e6b347a565ad4ac3f9ac7a9a293e1560687c0d45"},
{Address: "0x4Da55B8bf9c484155ff90F18CD858B9b4Ba9F456", BlsPriKey: "ad973f8c1436d1a9f603f24e551e84609f55ab89391ee74fcf564707ee8ec33e"},
{Address: "0x4F39740C7479d45E9D89bAf57A0773FdC03b5773", BlsPriKey: "7ae27163e7d27eaac107fdbc509fef756130eb559ba60528d23986f97d824630"},
// 120 - 129
{Address: "0x4af845890077f56e154A1D725CF76A707a4C325a", BlsPriKey: "1834fa58057fa8dd15403876d95b9e28436513751ffa4851917bc14ef168d158"},
{Address: "0x4ff4cA3C6725e57fEEb23c5B8a05e71bdFfd7c67", BlsPriKey: "389e563834fb16d6db37774eccd4eb9a1ac744271dc0ddfac49f17919fee763c"},
{Address: "0x503C240fC52b4556Fd990beBC2ee07f17a1D9fb6", BlsPriKey: "4c7457c1fa08df5bbb1a0cf3025579b1f77c641a4f791fb63dd6e606275f7355"},
{Address: "0x5042aa9eBb9701942391f975A57B5DAcbB8b3678", BlsPriKey: "0dc74058a27dd6a931db1bb1ac69d9f788905cb671dbfb7846a992ff82fd5841"},
{Address: "0x509E55f51e887A42A38a2C43A373B84779d9C408", BlsPriKey: "d4e0fe3c557ce18db485d8a404e32bcfe0a762e0c3712c80a932ab8012545e21"},
{Address: "0x50eB59e5D69F0151d45aF7De42eb06A566D00922", BlsPriKey: "b1c66b01bbf41faa688e998903df494fe2db0bca5e00fb64f97ecf8b48da7e35"},
{Address: "0x513B35302F1DC54A194E58a5e5D1F4fF73b1240D", BlsPriKey: "b54ed87e8e6044ba683fc4c19ce1c05af7d49fdab2e9990b1f1d0827adc69519"},
{Address: "0x51Cef58fb50f46baddC6c9b712c1B0dBA2835296", BlsPriKey: "15dce77a2bfb9ad3122318e123c4fc4b3bac83744b742bbf8882c7c2d77d0770"},
{Address: "0x51f82DFC182b1c08a11bDC159EDE6e8219Ff8D7d", BlsPriKey: "d33767dd3802b9754b8044caa067ae88d1742d519fdf91ffbf68a1378f41a369"},
{Address: "0x5325ADa44428d5b2Dedf7aE41E5Abe129B8433BA", BlsPriKey: "3145a3ca648dae41009201cd367c5e107ac2518c7edcd431812362ad30c82e21"},
// 130 - 139
{Address: "0x53e8B34C45193abf3eb290973eAB78f9f0af64dC", BlsPriKey: "95edcf0e651283bf480850545f7faa1cf0adf3deabff3a5b9918630f6e60823d"},
{Address: "0x54030397F9EEe4e9294c5E6E161510109C3727d9", BlsPriKey: "9ad3d658e6252aa3b5d44edfc9fae6d8e03ac69f5a2ea1355e17e012201be533"},
{Address: "0x545F361048B1EEA955Af00Bd86618F91FFA04CeD", BlsPriKey: "34ad1e8521283bff6f9e0360bf3f9f625779351fd68b9a2c4cf80eeb67739517"},
{Address: "0x557dD1c2C39e8Ebd7d46af5dDf8e3F450108C44A", BlsPriKey: "5cfce0c36c23eb91d4d955d823f35e913e18704fc5851022269e28192957b125"},
{Address: "0x5672f21553783d16AE7A7901A4461adBf6C09c56", BlsPriKey: "ed62774abedc682a04d166fece7cc22c87bfd68615fd45bdd66aa14e598bd41d"},
{Address: "0x596907B8b2E11e2EBC6f6c8011Ad379e1b83F669", BlsPriKey: "13f8426d081c3c8f988bb57c302d1f3cb6bd14cb2260516ba65b84adbd027327"},
{Address: "0x5A9B1A7b7c889C359e8D52c08e1566C10Fa8B5a9", BlsPriKey: "e99d589dc065f51402683dd8c4abd40fbd7d15bc5e3732c77bd6723901d2204a"},
{Address: "0x5B266C47A82c4a849a70a1F96760fC1025784E7D", BlsPriKey: "4d617b6f8c01e714cf98fbec540de10eaf4acf99f55ad7a784bea63fe2f8af4f"},
{Address: "0x5Cb5E2Bb095d2DD25C9b2887851f8D9E7b733e75", BlsPriKey: "f2d82f2f202aded3aac05660621f76c038afb1b561e27103fc9965ece6b01f58"},
{Address: "0x5Cc69576F059260426e29bDccaf22711ee9F2730", BlsPriKey: "1451fd7e7af3e367b1965851a3fac8ecc269297b97b651eeda64eaa2a1f26726"},
// 140 - 149
{Address: "0x5F8a55259e904D8bECa6b19C728Bc933c6ab692C", BlsPriKey: "9440c692b92dbc511f910e49897d3f94c523c2579acca2ef4239c68c01c36420"},
{Address: "0x5aE8A1e341D5aBF60F639E6ed878f234Ccdf03D9", BlsPriKey: "210f1827ebf42d2b691827c6fbf2bee5b1781f29543870f55e5a8d306332f837"},
{Address: "0x5b28EFBa128480AEF7c07536Cd5719eF32346ec3", BlsPriKey: "d3b765460eb90acedb4c091cad218f386276d4082fa86454be97e63de6b24530"},
{Address: "0x5b780aA2EB82a7D3a2643360e69060ea12aE8d40", BlsPriKey: "eb476961cd8d7c883db6ddb23f7f6c2871d05d36c48d2115da9c7dd051948106"},
{Address: "0x5d64C1e6389f4D15fA1cc02e43F8Cd2AeCE89DD7", BlsPriKey: "b3fd13f17e12868b2a2f92fccd5979b63e167df0776899c74bfb0411878e4c44"},
{Address: "0x5fbB8cF80Fb9C582Cf77d8a307378Edaf3855fD5", BlsPriKey: "994111f63f0afa38877fb19f8ab203b5348fa3268e4687e73973b07000627920"},
{Address: "0x617AA0d05af99A91D7263D92F35e32909322E5EE", BlsPriKey: "b54adb8d48a0b167ca70bd935519abcfaebc1e6b51393f073c6477c0f7929a2c"},
{Address: "0x621bdbD1089b4297D857aA1289EeF311baF3f2B7", BlsPriKey: "c157e1d888cb12b51b1419b0d7bf5e0e97ffa9f6ffb77b191a884b5683d1e148"},
{Address: "0x631eF9cA4Cd625e0610e9808674284028Ad30662", BlsPriKey: "4773adb16b85053be1ab8eccd32576538f64f5cbf13bf9d0bc9f4ce36e841a35"},
{Address: "0x65324a6539e78e476AA1e08396bcA1a141C93938", BlsPriKey: "94da2fd1612b945f7ce01955085d6f7038bb0de0353aec1cba21e4cc62240936"},
// 150 - 159
{Address: "0x6574854fEB55F3c04D24d34EB9AB6fda880EBA77", BlsPriKey: "fc2e56018889f4cb13112af31a60b5d1f04a1699a7200b3b6e8048bcd047aa56"},
{Address: "0x6746713E1E01F22809453a9A74669eC3f9B888fe", BlsPriKey: "68470f60e743a11e6bf6f6126376d3d649ae3285ec5078c64f3caeb45284633d"},
{Address: "0x695F372E04A79CCed0857cCB0364CC229b944C8C", BlsPriKey: "45d56d646bd37a955704e085b5e5b8346822a49486212d9499709eac8cff1b20"},
{Address: "0x69Ccd21Fe984E812Eb22023beA809E93707C940f", BlsPriKey: "7173aef583a4a18a96b69f5b875b6079493e591790df15deffb499bb8b902b3a"},
{Address: "0x6BBa4A8e29dD2C491b493dB83F648ec822B2a73d", BlsPriKey: "d0a56572b6e5780470dc20cff364502d84c26d5414d267e9d8eb6b82d8ac6436"},
{Address: "0x6D24Ac5F7702c552dE9F2d72d4e0F6F01f786f5f", BlsPriKey: "13317e3d7d40d51370a516e171afbe0bafe6e646a748d6ac6f799f61f2c16b42"},
{Address: "0x6E1401fe11502f367C5f789a8379e33Db3a934F8", BlsPriKey: "78c2e039f14a60fe400a1be33362302463aca4094f2dbc6b10181a3e507bc55e"},
{Address: "0x6EeB2b78CF742745ddf3Ddc88C3519665ed1b4Ef", BlsPriKey: "648627a389be8a784f9fcda2b4991cd88e08428d77a49a67368dcf0e9bf6da65"},
{Address: "0x6F3E52d859Cc49c095ea1336D55098670a3a6b3E", BlsPriKey: "f08e2d684d763a9391d7b24c84d15d213fc1b85091aa707728c80ccd8baeb155"},
{Address: "0x6FcEA1b902493E2dd94D9EA490700E6B81b098c1", BlsPriKey: "d7174a56999e52219787382395dbbd44151299fe79987b26e1cacfb9eb674710"},
// 160 - 169
{Address: "0x6bC118200f6D273950F957aA2156157cF751E681", BlsPriKey: "17418cfb5a52994e3cdd2b47eadf3b16c941dd8459e2441bbd0c206f04567617"},
{Address: "0x6d3Fb5f10ae1347b5225BA61dabFb2F7A5F96D0D", BlsPriKey: "f9a1311d8a8a14a7992a69137e02a5e6279e5d8ef62a50c71ec4e527e5a4a672"},
{Address: "0x6e923376145EE43671B1F5f6B259eE08EF330Ec5", BlsPriKey: "e48af4aa31adcfdeb815efe9589a101bef8e7328427652854cd1fcda3d74f926"},
{Address: "0x6f0832Ecd5361288Ed0E0897191AeB80fef3E918", BlsPriKey: "6b41103234f515f1889308a6f0404757bfea3b9fff74a2c7157cd37ef199ee3b"},
{Address: "0x6fE418ed174CBbc500DB471ee49179e9A8DF248F", BlsPriKey: "d2d75e87b164e79baf820fe5ca043a395de41792d3a31556792f3268876d2270"},
{Address: "0x70302fa02bC4b603be3F475531163f8bC83EA7D2", BlsPriKey: "466820150b55cd7c90e76ec8d0b2bf860177dfb3cb451cf42669b6ced2aeaa45"},
{Address: "0x7057dFC56072BCd80150fE810b2c5AA4Af96c549", BlsPriKey: "87ed77b27a7b356a360b9e85138613c878273eb02664be13c1c4c39b72fef752"},
{Address: "0x7087194e46d6766635261ECfc8ecb8aee43b8cA1", BlsPriKey: "6705f38afa72e22e60f88a894e58b46b5442b949af0197b29c09523420880410"},
{Address: "0x708d570a7b0E974cc3D4A4bf363674454c90c84B", BlsPriKey: "a24651aee88ae6ab40e9bca429d774058ff7ad2c294a5d4bfae1e097dc3f1171"},
{Address: "0x7200724064D7a2db5AF9260E6A14F14fFE9eCC9F", BlsPriKey: "85242d0d5833ca94d17c5a90b9ff65a2e2fffff03d31180e7ef86fe81ffd002a"},
// 170 - 179
{Address: "0x7234E8dFF697f93cC5945b31953303bDB997418e", BlsPriKey: "6ec5aba7a62ed3aa6d8465cf1ed4c8d50295464f661aa7e90618df215f38582d"},
{Address: "0x73BD0193121a53bbDC768eBa6AF393Ae86483b31", BlsPriKey: "b573b86f453945ff4ac93e78080ce9a6db46775b4843b2be9c08b76465f2f11b"},
{Address: "0x74798b01776702994aA567E4cfdA313057360744", BlsPriKey: "82fd8ae28eda22f2b38a29303c6aa4fb6b1c40d47a434422351bf4f1343df323"},
{Address: "0x74B368c634AC7c4a78D35AdaD4D631d31697bfF7", BlsPriKey: "63f9b91b632c938f5a8d5d7081bb4784b4107a7c190d5f6404017d9dcd078936"},
{Address: "0x75d7ae6361ebB756201e044aFf34c91AB6b8771e", BlsPriKey: "02fff33c0a613ab804ba7e2d6cfc64272f1db6491d60f122d4383f0a285f0127"},
{Address: "0x7612Fda7865d441BCE510509f4ce29191C112B86", BlsPriKey: "979777b2645e0a9d27f9df4342b3d47297bfad289d846320d927ae07c7f0cb23"},
{Address: "0x766B51338c6C4F7De2d4f15357bdbA4B877C0835", BlsPriKey: "940a8d926af02e8d420b5db62c77232f59c035f7f39d4166135af5f2c24c2608"},
{Address: "0x76e2A98706F1d4d01e2FF1FE6D8e4609A0622Fb4", BlsPriKey: "be5e882e012ee26dfd026d1fe68bcae4561f493136e46972e869f253b7a8e335"},
{Address: "0x770b8e3A35Bff512F173cE152BD1220d82bB9de0", BlsPriKey: "ae8e83c2dda35683bcb52ddba3aca7efae0bc5719d6aef296c47ba6107f02e3b"},
{Address: "0x77229fA6198791D333F286fa8360946042c65337", BlsPriKey: "dce6b6551dd63046fef127d18204dcabd9c0a2efff5024cae86f0d5e954e381c"},
// 180 - 189
{Address: "0x78404079f5081A5Dc38902b47257c0D1D4e2E028", BlsPriKey: "cdf0bc45533e55377572b1393eabe3eb270b6b495e9f64741d7271a10a7ffc47"},
{Address: "0x79BE4EF66f3cc7B5b379F85353873115aeDbD242", BlsPriKey: "1d91ae936dfd994ae3d733cf660d83c220951f02c49f2966596432a110c67b4f"},
{Address: "0x7Dc053eAc8613229a6c316Fc436f100477571EE2", BlsPriKey: "1af64c8a54ef654f423654b21fcf6c93608d744bfbfb066878fccca3c3260408"},
{Address: "0x7F58C0cD5c255020Ec94425873F666F1D68FBaA6", BlsPriKey: "4057a43ebe920b4e77edf917cbda115aefe8879c818a14b850238d17e3d57963"},
{Address: "0x7F686454f91A68cC3248a642F59aDb2970e84D8e", BlsPriKey: "4e377543f022c94e5add8379b7a6483ae57182ec33aa594ec92e03cef6900b3d"},
{Address: "0x7FB5fF6e7aE8279F21B843Bc297b24bFbC45733E", BlsPriKey: "a9fae4d7179af52e732f34acecebb3a57d4c19dcca587200115fa1c46203d716"},
{Address: "0x7a22ff5B8483CE859757Bc0Ef7Ec64d11421B680", BlsPriKey: "3cf1a581ba45cf4a54f45f50e170e777c6d89a49d3886c4306b6201188bc8345"},
{Address: "0x7bBf40bD603B2434A964CdF979020B1E0E68E13D", BlsPriKey: "6498dcb3ebbdf3a76676aa1a20aec00137ec82341690f95d71892d3527320e01"},
{Address: "0x7c14C7f6dE1f39579F7ab8DE24c168737E3FF53f", BlsPriKey: "e15aed53ed7c7044da20e89f84275ef59d9b52af17a45da13fd935380ddfc96c"},
{Address: "0x7cc507b9345a58B5232e16B49b02F365bEB7d91e", BlsPriKey: "041b40b44e3da920e90db1018e587bbdba76b059a9ba6f1b077bb1a7690a8a42"},
// 190 - 199
{Address: "0x7fC313531F4355CA2C0439f39b3Af2D419A93897", BlsPriKey: "f826915c1c14c7537e88716de6acf9b28740ed91f40d276d3f0eb8d94ea99b65"},
{Address: "0x8044Dc039C1AF68a580210379B8562A46938c449", BlsPriKey: "83e0d32d607ef145129133fa125e82f34c94138b5d79a744a9332ff7abe5696d"},
{Address: "0x804a1CE2387874E311e966c63A02C67dB15f2A87", BlsPriKey: "4203a4b0f485f943d35b5c9312eea79cbc29afda41abcf7faee02c3beb4f0b35"},
{Address: "0x8080ca14e1b3466b3b13441cDfd0f413E0BEb67a", BlsPriKey: "bb0832c2e4051e5b75acbee816680c777b453f41569d8b62ed447e2846c69918"},
{Address: "0x80FBE7a01D593aC28CA1fE12E9CE62d6E2a08e5C", BlsPriKey: "8a1afe54881195db769e19aff8ac8620f565bf536332a452ad21e6865c6bf86e"},
{Address: "0x81237F5d14F5db4d6370D353e3F5952e7aaae0cd", BlsPriKey: "d03a76a9aaeaf099f166717a5c42f96776294971ae75cf62d3c33fd1c61d215b"},
{Address: "0x822D6E108e434A3C2B27E0890C5DC3936D009560", BlsPriKey: "b8a4f97f396bd209d4fee1a30b1ffee79d9c83739e9bdf3227bc08030fb3231f"},
{Address: "0x82375BA85Dc7F301f6609a39E2C3FFccB1433d5e", BlsPriKey: "1070ded9f817d8b50f18b736ba3d6c4e7e20d65e2156195946779972bbee9536"},
{Address: "0x8244c534557d3d40caD3771EdeA45d394bbc3f60", BlsPriKey: "adf4021802fab7756e9e17cc3232ac55489e82de3a435c0c5f04f30c49c2d92b"},
{Address: "0x8265cb4Bab2c82390776e17ACCfa0D5EaA785e05", BlsPriKey: "f0060b110bf83cd581662e3e8bf416619ea4342e6c9a7020be7fa38e5d23f925"},
// 200 - 209
{Address: "0x843836cd5F7FA674a8394bA7029E5FB6C1Ac445d", BlsPriKey: "6ecf1c1fc0c633d02183fe0e4f3c14413c0c411690538564931ef9c2bd19cd3e"},
{Address: "0x8472C1E3482439e8ab74707A37AfBc1450744487", BlsPriKey: "458d298a9c1b9e4caacde66da69fb7142f08b1fc8a520b32e5bdb84415b4db22"},
{Address: "0x8523F06c816275Bf969935d81c3F8a567BF5C4ee", BlsPriKey: "c40522909275638c55cfdf6881ddc725bc2cd3c866659f34efb2e9061a701634"},
{Address: "0x8596ddC36ab3AdF720519D872446D93E3dD56b9B", BlsPriKey: "6f97fc6608b231ab51718289350fe50e4832ee3250eb7e9a53d327d7c54f2705"},
{Address: "0x85E1bADF991A19013282C956f1a64CD468832465", BlsPriKey: "93a878a165b5917648a832bd67332259ecc4cc6d48286b2341a8182b680a981f"},
{Address: "0x8A61A375d192c324348a590387fF9385137e3516", BlsPriKey: "8d0121ecfdbf14ac2e61d69010d1789d073d78da75d0fc8c345351aada89320a"},
{Address: "0x8A74D5F8Cdb657DA50BA3670876b0928F2639375", BlsPriKey: "42468dfd0b42f7fdd2c37d44683528b5ad2f007bcaa13643f4d5af32ac49fb4d"},
{Address: "0x8Ab219d5F9FFEB2E05631852be69F9Ee16192b53", BlsPriKey: "a12547fc0358dab7ad43e94a8a95aed2efe26df3c139ad7281511d25dd4c091c"},
{Address: "0x8AdcE99aABDc8e149807A4ee3Df76a85D726C76A", BlsPriKey: "288cd70f39f3f0f17b1e69323080096ac8dc4b77e168217a684480ce85c50307"},
{Address: "0x8B98C8f1aCf11b58f30aaac600b8E72102E9393C", BlsPriKey: "bb7888370ae6a76bd8b31ae0dd214a7a03a571a63269aa83bfca362007e24f61"},
// 210 - 219
{Address: "0x8C0090401130aAAdab6D1bF68E42d66cbbd05492", BlsPriKey: "0131f23a6fbf21bffaef33bca666b7168ad0592366c1bb56f41ec250c191bd69"},
{Address: "0x8CcFA7D08aa57BfBaDf3F9c2398618FeBC6242C9", BlsPriKey: "6f8f97dfa9ff60b86c87db5790f6f5a461387d672573e9c3c3d1aab987064570"},
{Address: "0x8Cd0FdaAeAB633dE1156167c4cFFAFBfd1115262", BlsPriKey: "9aa7a8b03925514edd349511341225d2be3d21c4fb982ff2055ace9d8ef6cb15"},
{Address: "0x8D83762E8aaE86c89C7BAa5a7d9Fb3eCB0520c11", BlsPriKey: "4b46ffe08f03918aade956d3172e6cfcbfb7a091e72adce028daf83e4dbd1a3c"},
{Address: "0x8E6727f22F99a544DE88829547be11bFD15d2e74", BlsPriKey: "cc467316a160bf7f32b49e75c03556c7c534bf6d7568ce2d21e7f99020c12e35"},
{Address: "0x8F70bae25fFB3b4769ba03f7F25D41011299ce2F", BlsPriKey: "6569207f4e9649ef70f252f9893f9ef88352ece774e387dcae55f4d676a5d112"},
{Address: "0x8b870d5E5D1c7F8A883d033f2B191B9A753b7505", BlsPriKey: "09c58267d1c39aa48f19b51e9370b676bfff9570b1c1b649549f996b8fd4be38"},
{Address: "0x8f16F6397D1FE318c2C99f7393Cd0AF18c6e9400", BlsPriKey: "4429974752c0da574b7b58653a781d3d94e27a25f07e363245d651b39ab5a94f"},
{Address: "0x8f1ACE0ae44D9fdCF5E6f5499fA8622e8EcD782D", BlsPriKey: "30d5665a55ae4279d657d27d517739a7855a6ed313c29986f3cbbc7580db871c"},
{Address: "0x91136E3d84a594A375A40dAb2BF0499aBE4af875", BlsPriKey: "c89a9767d149bb89c71997dc161ad34189e0527ec51a69a2108b5e457a200550"},
// 220 - 229
{Address: "0x918c7E1f1CEdD25415439786A53c3C35030beE0B", BlsPriKey: "e4a87d8519a350c96e81a63bd55a825fc2c511d3e0e723b7af03600123d8db15"},
{Address: "0x91bD0CC6c2016DA1B1AA798eE7fC30f6a3327d15", BlsPriKey: "10ea1e6185177f7165bca70da9312c31cf5f2f736043185f0bcee5b0aeeb2c54"},
{Address: "0x929Fe1f0Bb4E21704c2D63c12fd563553c77E912", BlsPriKey: "dbd9899991ed3cfdc6dde112c0578fe0a4d1987b594140ed236d77608ccb9873"},
{Address: "0x92d4dBCb8809De9980aB8F95C573DCc1041a346a", BlsPriKey: "a41fd599bbff81fbaa3aa6d0ea1ced98fb57fa3ff505d89fc812a9ec33441136"},
{Address: "0x9423bD42443Ef279DC3b73f20E1c4223C398A12B", BlsPriKey: "84be0d4beefcce4d93af2ac3a013efe34bec43df7c0bde6ea0f3e2681c26dc2b"},
{Address: "0x94257dE2c456265883152Ec7a425f054631bC39A", BlsPriKey: "ac5c5efadf235fdb0398e47a782d84763f85f9384bc3dd9b07c046d0ec85c733"},
{Address: "0x945D919f1035F6D5fD480800500F8fC524eDda56", BlsPriKey: "7022992ce52c7e74219b2f4033beb47fa84cce4f0b7302127a40dc131f26fc0e"},
{Address: "0x949C42889D7A48641D84E104E60A2ed56a1aCD7c", BlsPriKey: "125ff8af7b7445e4c0ca031e197dbcbd94721e24138a11ca50cd0aaad9cc340b"},
{Address: "0x94cA2706dc707449E56cC72702a6D9C2a1aD2E5E", BlsPriKey: "5e20c22f2f1d5e3a8b81a5975a59f7eb69845655ab6223ef6972efd96af5275b"},
{Address: "0x956545e1eA3C5Eb90E71E33941307A5498F0897F", BlsPriKey: "b0bab1d57ab9839272bbc43bd2076506ed8c646cc5e4ca186df990f04c844423"},
// 230 - 239
{Address: "0x956c3d59b33e1B794Ec0Db0825E4bFcC0b68C7A2", BlsPriKey: "1348b13acf8c43af78485fd066618bbf43c60165357c7f8918f98dad6a1cb853"},
{Address: "0x95D04aF9290982333d2A647Ff994E5ECDc9A6d5C", BlsPriKey: "8842213e1f3838928087567546c0a88e0a74ba114bdfcbb7badd530f4be7631f"},
{Address: "0x95E0D358E5FdDF85f4266f1AF31C08D269A1Bd0C", BlsPriKey: "bc75b17d0c241b3f8a461e591dcd86f0dc39e9bb53e13d0938430cae105da066"},
{Address: "0x9637B9690f424212eC563D27faDfb5405d87ECbc", BlsPriKey: "b4c4b1395b0c947dfd96dd93f8b85378df2c6c08b64fd4bf95eda9f23add9f3f"},
{Address: "0x9699B184547c8A72E2720798cc844483829AE364", BlsPriKey: "e5e0954b126950bb3dc26406adde3182724949b0fe3f8f0c5c47d7cf00560339"},
{Address: "0x96bEBCB6c547e24071360fE52c8DFD1EceAe1159", BlsPriKey: "d2bc924451707c627097a82ab750d0755e871cb316564ffd95fa883fe2465f20"},
{Address: "0x9747CC556515c00E2966fC83A81659D6C3977Ff6", BlsPriKey: "c40eaec35a42d801a879786e4d7d42842da52799d5d6a28acbe44ef0897c8c6b"},
{Address: "0x9862aDb98793D1a25Fe75EF315DFa1f3a2133652", BlsPriKey: "d7206827ff45ac69dde683de4eb6493eac17acb4aa855c216a8b212b8598ab1a"},
{Address: "0x99F5bb9F80643569A4AA8AFfEB64FeB06bba29Cc", BlsPriKey: "4760740bca6328e00b7c4dade8305f46fc92b1b775ca25a416c4acb3e12e8737"},
{Address: "0x99d2ef179790030eD3aEBDC0E471BBDcFA6eCc70", BlsPriKey: "666cc194602ad0a76cfaac150d23f78811c4f73c6666dee3d9ccc75465785b08"},
// 240 - 249
{Address: "0x9B844e64A50a1495e1ff67587b9AB44d47129F90", BlsPriKey: "f0e59ea1b0650f4f4650ced8195b97926615090871e4af6b8858cbdaaca23765"},
{Address: "0x9DCd46C76f46e0C813523b8E1f180A2D5F37831A", BlsPriKey: "fcd230958a8e189243c3f1a5315949f3e0e6776727786099c54c61469ea51e4c"},
{Address: "0x9E715388FA18e42F05373396dc4333199BFD6309", BlsPriKey: "334c4b148a5e284eb654aeabbf1764a4edf20ca08d066c9a2df58e39194ac609"},
{Address: "0x9F59275941150FC43215B66cf0Ff8e806CD13F85", BlsPriKey: "69cfd538f35a969c1d64483312a03fc93b5efb7e03f4c49f23c971aceb851834"},
{Address: "0x9b353a54E0bd19EB7849252df0d48053b0B40fa1", BlsPriKey: "9c07eb4035c55abd529160c3ac54a7961b17a02014723b97989edfbcccc3bb44"},
{Address: "0x9e6BEc699cF0BF5ba303C230711CF18172CC65f0", BlsPriKey: "b5da74e24502d5c6731d5a1b3aa49c1fc551d2193aa66a8f83add44ab02e8a51"},
{Address: "0x9eBD19bcEB9e8503055d504de006B69eC724e6E7", BlsPriKey: "a5662f394a9f57511fe5e21b49286f75ce5f5735616a2a72341f87d4ced1fa71"},
{Address: "0xA123a6AA1Ea595D1561a7D65d14b538fa3378fa9", BlsPriKey: "70572e4630b0826e96f77bfcdcf5e32dcb7a6e847977126cadd40fea2f66f220"},
{Address: "0xA3F7ec53f39415aa1A1907F95FfAcDf46dFb9fa8", BlsPriKey: "32bdaeb1690fffe08cb800c6d36a03b11ceb7d0c0de3426f0f24330a5053b168"},
{Address: "0xA40d92133594d20a13FFbD396853476373B85E61", BlsPriKey: "651ea5ba7d5f51b80b62c8f4f1a854d9032ce6de797962fba2957999c0d0d60d"},
// 250 - 259
{Address: "0xA53a112afcE812F55A22EbdE2214FD1ef555B9Cc", BlsPriKey: "ebe4807162b2c7a2198c887cc789e73e0789b7c3805e6b67a961b74a90434b63"},
{Address: "0xA57471E20BDe6a199a6967c113545b7031551eA3", BlsPriKey: "4b8c2963de75a99c2005a7925eb14a7d974f9d7ddea87032cc144fa40013252a"},
{Address: "0xA652360e89E08CdE3A99be1b22C60077c96bf85e", BlsPriKey: "cf91e21e94f95991a254764ad758cc91d81ee5b33d93401d0094a2982300c25d"},
{Address: "0xA8AF447E19ba3673263d1d9223138C726D4A69F2", BlsPriKey: "57414c7967d36a091d6802d272ce9e210243f75b5c6547188b211f5710457036"},
{Address: "0xA9FF4Fe2b64BF6341d2016488CBedF0F660Cb35e", BlsPriKey: "5acb6075441be1bf656ce5519d58c455a0ffa7d7f66ee3040fb9179250bc733b"},
{Address: "0xA9dd45caf7963Ec0Cf71067111AB74AFAd84B53C", BlsPriKey: "bb359f545fed79a73f4489d7fd09ec10161ba4ae6f678c51844f6176b20e6e10"},
{Address: "0xAC8E1689872748d074B123dbd8D535fF82d4FD7F", BlsPriKey: "1e7687e85d8e0a35c0c19ca352e64e165b7cdd5b4988c9887dd271944bd2d035"},
{Address: "0xAE71c8067bf12C0027fd5ADcda9fd006D5e02a21", BlsPriKey: "1c43673f0ad132a7acdf0bcaaca35ffd5e46d1daabd1adf9e542182e47089112"},
{Address: "0xB32EC947bD777294924746Fb9A2f1d870c7D7b77", BlsPriKey: "14670346951dca5d6a2460b2fa7c7e9289aa08db22fd294f09a9436fb87b683b"},
{Address: "0xB340E34F8f9C73E7F1321102912E5A1A888AeB8B", BlsPriKey: "19527897174b39d594eec02a395fd17badf45bdbfa29c516d4cc6795c4de391d"},
// 260 - 269
{Address: "0xB37A17A8aaB2c51297f2207D9325450Aa9FCbB3d", BlsPriKey: "d110ca4e7234abcc7b04f65e0e81c4d0114cc00b604a5d1518cf91e3c9ca9538"},
{Address: "0xB3B065fFB5F081170A1b3a7497711A4f0AA8405a", BlsPriKey: "d46a7ad5decae8b633a9547f1803c626bd4d21a72f8b96e06112c3a0d9860f4f"},
{Address: "0xB48856c51a2beb57df0fdb9D53463F36bD42cded", BlsPriKey: "818f0affb25f0fa502d3075ddf55cc1dfc8576225b7b3908981e69d1511b9026"},
{Address: "0xB5562E105957e2F9fCc4e0De836032FCc4Dd2689", BlsPriKey: "f1cf5a46c65a2d4540282936f10afc9d23fd9451f3985d48a28ab5c6b254be36"},
{Address: "0xB6370063dC8d761B3655398129F55eAfc80F35FB", BlsPriKey: "5cb9981470e6ccc8663e33cd8bf992e9f387ebe2027652dd60a4af94fb140d01"},
{Address: "0xB79D19d38bcd7385a133EEb882130fc904c8440e", BlsPriKey: "5296b7141619c3c66f97affcb07ac1a6695e17c27c61bad43a18b31ea59ad726"},
{Address: "0xB91b5bfc5B127D2eD459AA630E89cf22fa2F97FB", BlsPriKey: "023eeb9332ddfcfc87be3d7eb940c2a83be61f9e7e58123bbd6f93fc33418763"},
{Address: "0xB9E454ad521658387D8466211A2EfBa67D5b5E1c", BlsPriKey: "2d980ec857c508a84a5b316b7b71f8998dc8386d972cc147c0c37e559d3d7c0a"},
{Address: "0xBA18CcF3De40887863Ec531Ba26601800118d895", BlsPriKey: "d91a7dcf94a36b8563ecea8cd12f4875b1f784f17da57e5a3a3e59677ef14d4c"},
{Address: "0xBAD8736500D4A532C58AdBD0371C104fa2963742", BlsPriKey: "490a4c0e45445193bd5819378499ae80ff9b828b28233da3e10247864904842a"},
// 270 - 279
{Address: "0xBCadE9E4936F8B04dDFf820357F1C2C069E34F1E", BlsPriKey: "201414017504d5b54f806a358226b2611274dc0dd95cfba1aa9739881884b814"},
{Address: "0xBD63c16C80f5526c1EBA246A3465671584B2934a", BlsPriKey: "3f9255f7270fa2da4656df7b91e7bb5877457be1168a7dc145e13fc4eda9722d"},
{Address: "0xBaf1a0819EfAF0979b86A06FD3082Ee039e260A0", BlsPriKey: "d895ffa711fac6056ae4c0e363231500f3f366a11642917b0847dbe45dfa4829"},
{Address: "0xBbA4B237fe8C33064b4bB51a236385Ff874445c8", BlsPriKey: "0f79dafd2eda099a9bf1d604fcdee31d29d5f058bcb8f4acfdc5fc407f69dc47"},
{Address: "0xBe6e4235E7dC80835bf6326607f6701B046BE1B2", BlsPriKey: "ef4885681e5df6bfd4179aa7dca435d61f16094b4f7e7f361bd00efb976ffa63"},
{Address: "0xC046ab6829bA4A7cf695F1CE39Aa121fe2d2650a", BlsPriKey: "863b4fc442c34e4296e0d510bb5a6b80738ab7a95c26551478a5c598ecabe368"},
{Address: "0xC0cDc35768Fe19eF60D287435c625f315f70eA51", BlsPriKey: "f3ceb0cda3517bafd1764a28efa897c0d888b8bebaf89da6a320ceccc0680506"},
{Address: "0xC132eb0bD93De571397A26d3e30Eb77875fA7d97", BlsPriKey: "b7d088cee9374d1d12c6ffea2cf7c36e0ff85e32f98bb4a683212ff995228b1c"},
{Address: "0xC36b3c49190Bbc027d08C6757Eee6F81A8B8d0dF", BlsPriKey: "951539769615afb103a4da021a6de2fcd0835ce70f989ef65598b6dc45a2a11c"},
{Address: "0xC49034EBDB90ffD6c7767FF85ae3B30e03C29CB0", BlsPriKey: "dc1179ab707f8b01e417f69d736e686ad94f2d634805fcaec0078facfa222938"},
// 280 - 289
{Address: "0xC6D0B4180A25d1A7EdA9Be2D8eE9dd0D41d2D75D", BlsPriKey: "ff7067ff7e2b3ef52275c5187a252ba5b95bf04d9ce33c4fd723c11af8ce304f"},
{Address: "0xC7D97FE4962F3990f93421a26a8020EB0898c5e6", BlsPriKey: "a92bbb938ef4d0de6ff8f7da5d0b2a88ff812ad67c7cd574235130f8380f2343"},
{Address: "0xCAcd563284f44dAb78CeE1E1BC74C07042b414Ec", BlsPriKey: "3136e40ee1d841c52ee28979d3bc84376f68e026ddfc2cf07e00b581e95c9b12"},
{Address: "0xCB4c0864bBD5921E0Eb7951Fdf16E7Bb2607542C", BlsPriKey: "1052993a58b6189cac6290f5a14521b6508100f1f3e37918403bb3857f15ad35"},
{Address: "0xCC332c845b6Bd7d28a5C54a51D5ea32C08cC2369", BlsPriKey: "b052b85b2998977978e6f217ab9a17dfa78c1644297cf8e33b9f0e17a5a4e244"},
{Address: "0xCC831ce78Ee204C124a7Cc1A5d55bfeBE58E924B", BlsPriKey: "275be409a230e99a4e69b128a4c5db7c3ba966a3cf7da65df5a9ab095939771a"},
{Address: "0xCC98Fe686F3Be69566F64F550E581Ee97647D8c0", BlsPriKey: "5e3c04dda0ebf2dbb75a0ccab9ca1487d543a6fecdf12ab909450e4ffd1a093c"},
{Address: "0xCCe50309EF9Ad3EBA4fcb822Cc3878c5485964ef", BlsPriKey: "26e607a18e886992872ecbb9fd5b287991dcaca845c376cf9f507cf1885f1013"},
{Address: "0xCD929182222226982c3CB45D98Edee24927F70A8", BlsPriKey: "5c613bdcd9db8a6bcb3b2195e9af3b9f60ab1280876c8885af60d851f50ca85f"},
{Address: "0xCa6Cf168c91bb6Fd5C7fB224b567Fa390DB0FFD1", BlsPriKey: "ce5c3a5f6b37c9f70489fcb43697866a54792f0996f6b69290a342ac138b876f"},
// 290 - 299
{Address: "0xCb1A498eFe2eA5Ff136Db7D826b1429a2702B9AB", BlsPriKey: "c60a5e08ea12388f365f4338ec2ea26b85eeb289b152c00d4b7f7ccc5f350157"},
{Address: "0xCc4f14C63AA7BaD2BFB612186127C10793eC1F58", BlsPriKey: "c1901760563059ba9c7c541f2e4ff0f31d161dfee9e471c004620cc8eff2352e"},
{Address: "0xCd5B0539b872914bDB4d83BF4A49131CbC984Cc7", BlsPriKey: "7972f3e1996d7d24142ee65995e289f2b067846d2b39fe549d0d39faa6958f6e"},
{Address: "0xD13C3b87cABc9bc3E1C33d59780c415ffF0F6454", BlsPriKey: "96cfe59ecc3853dc22e0c0e956bb325c7d0320b2fba6e81ce02b87b19023861e"},
{Address: "0xD1A3bBB32805bdAcEA7509BE202972be13e12E33", BlsPriKey: "376b3ebd744e6eb06edad9682c61df02cf38ca3ae5b0e6fefb40dd4ba3db4f50"},
{Address: "0xD351CF869089ec9b903d7e9Dd13d9E1fA98Cd9CA", BlsPriKey: "20f5901795c4183ec720e98c6051dd766e756a6492ab41d8abd92a680f5b8c3f"},
{Address: "0xD36077cD3160A5345F1a9A65BAE04fFf811B987A", BlsPriKey: "029777244961fe254ed4d3088b05870ceefba3afd92956a71caad19785665800"},
{Address: "0xD420759A7B75F797B026d5eCd945611f2d1075Ca", BlsPriKey: "de6542932cc07389348517a662b99f8383405cce72afe874c37799e77ec94541"},
{Address: "0xD716df51d645aD7E3a59539d45Dc632ec6513aD3", BlsPriKey: "90ba889861d1bec1bedddbb691b233da0e46808a9571bf744adb9e1b4e65d45d"},
{Address: "0xD905Fed0e733CADB51496C1CC0A139e20fEFD37C", BlsPriKey: "302aafcf433a46ecee87d466ef61af8371d9c466d779a33b6cf48c4557c38837"},
// 300 - 309
{Address: "0xDDd3e231d0CD737E82d080DAE41c3A4B087E7b8b", BlsPriKey: "6f7c7ff0fb3c474abf835b4303fe2d557893846d7d7addc4be3bc7cfb5a03205"},
{Address: "0xDa4CE4A006A2b5EE7c1F48B2780fedb39a509593", BlsPriKey: "fa46f9ad6245c8d9fcbbafeedd7c7fba79ccdbd1151a234ed4ccc270b6e2ec5e"},
{Address: "0xDb04208A0f67A3C1CbB900baeC864369c27B182F", BlsPriKey: "28165dd35613e3289795130eedac62f6e67baad6e9c16ae7d953854251cc4e69"},
{Address: "0xDcB67CB0CAC26bA013C7d6cABCB10920e61eCF70", BlsPriKey: "ab2ee4887e4570cb8b97ed97d8d8de09883ebfc93b22fe0302d9f893e58b9117"},
{Address: "0xDdBe700758a452F2Ab02BDe237ff6Cb1fd39DC91", BlsPriKey: "2ea589aa0fdfe43627807757c2b9fe2a6eeb64d92660fe891afeba49b0f3d873"},
{Address: "0xDe6eD0AbBcfF62fa956A39215EC452352f71FEf5", BlsPriKey: "f101570484436da7f79e24bbb51566be154657f11fb05e3b3c0e476d6ed50624"},
{Address: "0xE0Bc6F5cf7Dd5795998D46d1Fc85eB9EaC873eEe", BlsPriKey: "f1e43f7dfeb8bbdf00d57c08a134724019566caf7c3c8b176d03f4198e52643c"},
{Address: "0xE0d9D74036D37684E36cBb76Aef8563D58D229c9", BlsPriKey: "f946b7537a57f19e67ef3c2d5346efeedee7a19f556b7076423050b1c496ed50"},
{Address: "0xE190B5677915fcFEDD1d075E28C1dC9AF3F4aF9B", BlsPriKey: "b1644210d93b61fdf5e0f48b6e67daa5d81fa683e0db7ac9d39dfea344c5156d"},
{Address: "0xE31f391363F2f09B4c7BFc2b8F797Ab5119033b1", BlsPriKey: "a8aedec4d58a40a39b0b49700974ec346306a86e681732b841836859bbe8f323"},
// 310 - 319
{Address: "0xE3B7e3163Cb5646C3aB72233e899ebeC1a677f9E", BlsPriKey: "c79f209402322d85a6cd333648f8788a9d50e97c91ad9e3fc579a08d3c3e6601"},
{Address: "0xE62185a7fEad984F071A7C4bC88fF5548b8a703c", BlsPriKey: "3ff68d6ddd04a75dd69215ac8d900025e75c1c0b68c794232f6030aa754cda5d"},
{Address: "0xE64dE8594090cf41a7c63353faa3A6fc19e24134", BlsPriKey: "4dfa080b507704e15be43e9c40dcef78058a5a78050620c13a49efd087fadb3c"},
{Address: "0xE6F0E07c91F3f36e469b6bbbBEd5aAAFE36d8Da0", BlsPriKey: "296bb9d85b733084c568b546f73fe759e3a3da106c98ab22fbd343ee356b6750"},
{Address: "0xE85ae0aD9d135AdF59f578e167e83C9024139cc8", BlsPriKey: "3f7d6935cfcbec66a13ce714f6d3c2aa27a3f76f4b157b465b90e564f6d4b953"},
{Address: "0xE9c5E4E5356C43c0Acb6315B99EE06b9a2444671", BlsPriKey: "b09f3973172e3aee0b9defdd7f244532b0587662c7154c515f4873db778b5937"},
{Address: "0xEA7C41f1BbA4376A39ce5c01A51F3a4a3e5A8ebD", BlsPriKey: "ebf10e118df6ed2ad394c980fcf9ef2957feef6e56ab13f6d1a6ecf34257be14"},
{Address: "0xEFa188A4765422f95938de1e3FBDB7dc6FaDDC78", BlsPriKey: "443bde844316931cc6b2f1df2b095251ca1d7465d6dae6cef4767b064efdbe3f"},
{Address: "0xEc616773962E7094295F0F31D416748747535E37", BlsPriKey: "f3f8ecabd4c68b5a6502fe769f6cdad030ac8dd0cb2be5970d566bfbc182e847"},
{Address: "0xEe406e757d1CC84dEAF3696A5C9f4507aEAD4794", BlsPriKey: "e72e7353c26b8687dd821614a3e60a7a4e9a180557868a0fa377df6d29db6a07"},
// 320 - 329
{Address: "0xEf6F999b96f939597EfDa9e19Ad02A7Fa2b1aA20", BlsPriKey: "0534cc111c7cec80a6ee6d35fd851bd1cccaba71bef561d1820faff0d70d3336"},
{Address: "0xF3c55A45c03e17efB0A50163e0aabcB70648848d", BlsPriKey: "c335745a75902f1e2e6652645852ee1de5ae55a815f39742e6538325a693063a"},
{Address: "0xF6C5363A8E2C792697B01da8c0bC8cCa6668bdE0", BlsPriKey: "077415b86ee60804707ee3d1c82e1cd60cfa0540f2824874e10d8c5371b7bf17"},
{Address: "0xF97C989cc1D31aBdeE222cCe7ED8A3a3e4D45A2e", BlsPriKey: "03fe1e82055c75dd923856de914b0e84a905731b05fdd9db5d3241c15339e330"},
{Address: "0xF9cc6BdB428b23e1f8485aC95b22f8D93FC5a425", BlsPriKey: "786efb123c35c56150bdd4dcd5dc0299e0f02fe3c2c156b26728b37680166337"},
{Address: "0xFB48d5809AcBbF5C350a12b955c76CE5bCd1c27C", BlsPriKey: "10ed56caa7d51a0cbbf51e3a82c660aa9f286a976ad35ec2f3977a54cba83864"},
{Address: "0xFBd3b6Aeb408FC2a99d82786565a9C981d63Ef0E", BlsPriKey: "d5da84ab77b48dcd4b1c403b5b7f710a4f589bdc2a645b44765509fe6a9e271f"},
{Address: "0xFC5d56e8f45F7D918b429ef9eCAEF439031A9638", BlsPriKey: "dd4e51fd7eddba81d8cffd255b227ee726edad2b17f6b2a77e6a3ce5b01bce2f"},
{Address: "0xFc0cC772Cd483ba94030F7Add507B5Bca80E9a03", BlsPriKey: "eb3b5c7972dd1037619d0508c61989c4aab6fce120a668e7a1820e853caa3762"},
{Address: "0xFfa7dE5ef5774B1211328e7C40A8030af69872A2", BlsPriKey: "755120269b1c7924321acded089552ad4e777949bef3a62c6c107b54dbaf203c"},
// 330 - 339
{Address: "0xa1aB772E82de47DBa2Df2A597729716e055f13e4", BlsPriKey: "ca18679cb890e66df88607bfb521fb7352697dab15d2c43fa679aa24f3850e31"},
{Address: "0xa525D0E0408B22Ac4C88ff5B1b18F6a04F455A9d", BlsPriKey: "a02fdb8690290a625949b83ed3af73a446fd08859dc1db4105ac6fd0cecc1f43"},
{Address: "0xa579b6d75Ec067A3281348319F16E8cd23f9e6eE", BlsPriKey: "1c13529c3cd5027209544fddfe97c5d833ee84980384b974c549ea11ac7c7336"},
{Address: "0xa756b3920807ef8F5b356dc87204FE326675fC3e", BlsPriKey: "fea117010c95ef67ee1002f1fad8b993fae49385f2e75a6d961cd7b3a0c55f61"},
{Address: "0xa816F63F1375d3d14Ab3CCdEF7856E29c18Ab574", BlsPriKey: "11cd72b5692fc7053447940b5d372d4eb422677f445f9c9e5f6f17e0bf2ffb72"},
{Address: "0xaB31963011e61F6c9c98f8332fB6788C6843d284", BlsPriKey: "c7a57abf43b873cef811cd8164164275688b0b02aa67d223f5b5999382d8c96c"},
{Address: "0xaB9c949A9296172b6AE2b87fE5a87FE20758A59c", BlsPriKey: "0ae12b18e7a5026316411f38d4cf2c827f50a40f0cc37e49d333658e9b388857"},
{Address: "0xaE030b5785357a5686Ed9b89EF2C0D82a5AA4650", BlsPriKey: "f85e74c71688698d49242c048d58eb28a1809b84f37703a05114d1583295086e"},
{Address: "0xaEBc085A0AF631a81486b680F2334369DB2c7bB3", BlsPriKey: "19d94d05202e91bff432c2fe16badc5756241f60a53ca13950f7dc90d5780827"},
{Address: "0xaF4a7499aD01ef627a9985152711ca45d0E86B7A", BlsPriKey: "31e1779c8a253b98fcb8273e2aa24ff2f6f5900b172065554676519bb434676a"},
// 340 - 349
{Address: "0xb09490021A24F17509AdeD7A59141E9f2B15Eb68", BlsPriKey: "d46313491f0607c9bf2605fe0af4c64e2e01d50e88327f33733d88262788f426"},
{Address: "0xb25D4f96f06513C851D65f6bED3D9ac0Ce4699B2", BlsPriKey: "c6b3bf419c80eb970e5dca990ef54d1ee552d97a128e83e80e4c3bdc9bbe0521"},
{Address: "0xb25F57695D6541f712856aEE545aa8c583E153b8", BlsPriKey: "8a663d5cea54ffe3939147b411b8683da36b16e52a975afa0cddc196297ef93f"},
{Address: "0xb4453086a8b623905743c083A49F60821a1C3a97", BlsPriKey: "17d985fcbb28ec4b48c3e01ddf6160db7dbaf283826715f3327537dd982f8b19"},
{Address: "0xb69FD1866215B8d6a6A1f99a71ce565b654F0156", BlsPriKey: "1934fdaf900e201a005a78d8b4580fb1955c6349b472554ebbdddca3e1adb51f"},
{Address: "0xb88c75b52BE0Db22B1EaBaCc161a73E465b50F00", BlsPriKey: "f6180b90bef1d8781eb06e82d586e4cf1430d2a7e5671bc2dfc654701a3dce72"},
{Address: "0xb8adDC78d695F532DDC2c8891842741bF6b627C4", BlsPriKey: "380dbcdaf8949878094eda6e7c89da8a3ca61cb78ed9a108caba223b4eb84738"},
{Address: "0xb99C7D8F3D2D542025D8f45E21FE83a5319422EC", BlsPriKey: "e8a67ef331e2e65d756020bc8e6642a1c7d16619cc71ead0244d2170dfd7cb6c"},
{Address: "0xbA30b84b8d0F106d936Af77D93C6653116EF54b9", BlsPriKey: "24f125b743f65fee238f66874c59e1bbe55bee5cedd8608547028a3241ec3f56"},
{Address: "0xbB61Aa32EAab4f5C0b1D66B3649aD97D9836576C", BlsPriKey: "cc15df81b05c0f5d06b291eb8ca99bf0b579a0c0917805f4a6ad2c3a69574463"},
// 350 - 359
{Address: "0xba155CD47eF9cF07bf9140721af95ffB76D4EE8B", BlsPriKey: "81f0d207c76b2b3a1e2966959bab28ef967003920da3ccb91bad2d0057e2c118"},
{Address: "0xba98270b18E72A885370567138951af6CFc06d5c", BlsPriKey: "710bb91c90c9a53dc6d2aa457e99a09751721d4d511316dabb5232751767883d"},
{Address: "0xbd1Afa5FB3B24c50A50f7a99A252517e1EDb6E14", BlsPriKey: "7e5c4196b26f497b1a91fda76eb24e4d7d2bf16742182201f2cb762de79f0a34"},
{Address: "0xbd9711147b5d809B38650626be865F017B91eA63", BlsPriKey: "b5f5a775aec2f18445277980e2a5e97c5826f2ffe463f9e6fc2be13f3a6aaa29"},
{Address: "0xc0BB4aA4F2C15c0fD86e84CA8e7aFFC9d6a1BA8c", BlsPriKey: "dc2eae2c8d25b09396ba6dbd3eba7796b761274548e362a06c152b9bcb48782b"},
{Address: "0xc12953820Eaaf808c0181de242b59a72e3E55606", BlsPriKey: "5ff684b09775a9207ef31faa4dc2eb31d6e4541ee637668ea8ae33213890656e"},
{Address: "0xc129b78786Abd0Fe6307048A95D38D5C22e03732", BlsPriKey: "5f0473fe9d8a65bbbedc02695c8c74ae6a94abe9bbdb76aa03aa5c381b999641"},
{Address: "0xc24693350F83C446A1A65FD29b12D144600c8A56", BlsPriKey: "845bd6b32b88ba9b37a01a810e7ff155fcaf457475f323d4fe64b8afd2d29769"},
{Address: "0xc2b1dA16bbe3F9106e5bf535Fc7458419c98D102", BlsPriKey: "40453675a9ef8b39893be1053b2e6a019bb57259f5af6300a20944cc14007806"},
{Address: "0xc7B8417d78cA2d0833b0016e8E12f8E5679a44Eb", BlsPriKey: "c7e577f1b5fd322450d04176a4d8faf183c6ab16c6736eb31716044ce07f5434"},
// 360 - 369
{Address: "0xc7be7908Be33a58c08FBc5FD3f06b1d4B7781641", BlsPriKey: "0c41279009ff436c25660669b0d4a341c39f81c281b73e7fee6278e6b9f4931f"},
{Address: "0xc82204e189EDF63807270d91c6bAf1d54ABB62B8", BlsPriKey: "621495b05112ddd89e6c7622f7126e1abee9cd6574d9f5ccd2615ad77e60fd32"},
{Address: "0xc84a3D4461f5a2f216D488Eb4F4852f523Aee385", BlsPriKey: "3a9dfede3c1257a04e0ad24d49f5c3bc369c200cc443bd4922448af21e176145"},
{Address: "0xc9dCBE9CB27eA03fC1c57d1B4b0204a3E9bC8Cb3", BlsPriKey: "eeaa0f8ec12f30350ebad93c657f7e477a1d3a9bbc05a465d0f0dfcbd73d8818"},
{Address: "0xcAd114c0d8B87367cc598A4F13eEBa55a86C5F06", BlsPriKey: "ffbd4893603e52cb0a3f79befe8d77d073f8f2fc3c7f7ea9dcdb7490026c3f3a"},
{Address: "0xcB8196eC986DF4DF027fF7406efDe74D3549f192", BlsPriKey: "63f6b639e4f88a614b73078ce1a2c0d9bff3803e05f1fce20ca03e5d5c069d2a"},
{Address: "0xcB8Fe1D1ae31c09B3EA6D18A3680E00004E54De9", BlsPriKey: "e1137db2b6ccd06d60efead17b5f6511918f11121312fd231a8bd7a64d50f03c"},
{Address: "0xcE1f3C5f4Ee8759fF451286E90c156976BEe3742", BlsPriKey: "26c9d1456c2e8831b036e7064d453ab927491bc2b6050b3128ade03b7a465541"},
{Address: "0xcE319c2f6c4745b0D41530b55b1Efb09392Fb357", BlsPriKey: "cecd4d19f71fced3e7f1c111865bd932c1f207676b5055445ec8003fe40b340d"},
{Address: "0xd16fb86Ad95B25baDb44092129cb6aA4FcD0190b", BlsPriKey: "f0a8a5aa85e83f0788ae32fb4a0a695bad7e624d4e958ef0dfd7aedd51e77961"},
// 370 - 379
{Address: "0xd20331D75CF373ee16547Bc00b3b71a283187A31", BlsPriKey: "977ea3be3b10801c2b89a3d7f45f950c3d0edb4d01bba2f777dfd485e898c047"},
{Address: "0xd24640d8fDE68cBFDF25C41613e4B593dF1F7845", BlsPriKey: "7eac3dae78aaea403c89e3c8b1630f597cae73488b9f3c32b260758733738b33"},
{Address: "0xd2ab9e42DbFd509dfd9Ab937Ac875c3953Ea6B63", BlsPriKey: "076726a23ccb51988c4654b72a63c86ee24cc123849752432cdfa80001834d34"},
{Address: "0xd41160791b8886F8e45ac1cc9ebb5FB9c7118fbE", BlsPriKey: "dad7d3fde948299c0dc8b1fe1776aefed32b1438f0ea5c94db51d051bb61e94d"},
{Address: "0xd892C406dCB97B544cba6354fD42C18c9175d8DF", BlsPriKey: "03e42e814506c82ab0179ccdcfb7b1e30950c1be0c6e8062b4cf0bdfc7d26d09"},
{Address: "0xdE0205b06C6517048769B673014E771f2F978bd7", BlsPriKey: "d9cd084e08eb167fe5b3206032f3f99087eefafd5c4d8129b19cae058f0c364d"},
{Address: "0xdF73134FB98c299DAA522Ceb54E87C8Da6a116c1", BlsPriKey: "c91385e235286f9faa0af2e10aea36fb287330efeb74cbcefc55248f3422ef59"},
{Address: "0xda1BcF114a3f717D179eeB789D1d9248A8a1631c", BlsPriKey: "3ff6d7744346eb9a1359de4cf2a71b05a20f3e680b30ccaffb17fd4b32beaf13"},
{Address: "0xddBb08c3385d8c9b7eD70507761bb6ae86601b36", BlsPriKey: "708edeec192b763d2be631ee4bbbf482deef0975d27136008cc6e518e657251a"},
{Address: "0xe089cbD31bab882923c5c8D3C5432eAfA680E4f6", BlsPriKey: "ee3680cfaed342a14198d65ace8e8d07eb8613c96c4421c92356d4b60b3d3711"},
// 380 - 389
{Address: "0xe201AE926cb423D61C67364FF3C736359b8f52C3", BlsPriKey: "b1d2dabac0c57ce92581239e0662f358f2a3217603c75a72785c51b6730e1e0c"},
{Address: "0xe21383C4dFeA14C3124e86C5F987045Ef2cF3F42", BlsPriKey: "00855f94388a2f59be2eeb8e8388b3288b3e301315ce124e787eb4a2a9206c53"},
{Address: "0xe36FCA53f5BC3FBa611E7CA51525755A6b3227E2", BlsPriKey: "f714c52565a3c9a499a1193272041963baed808e6c1a50f0040f58f7a902b635"},
{Address: "0xe38bFD8B5bB44D9ec008ce94607a4d8485471B08", BlsPriKey: "7dd3a66fba839c3636495cced7fac0aa1dcb534571906da068edd9601430d53f"},
{Address: "0xe67ce5A7d9BB454cfa022F47e1fC13Fc1D7bAA2d", BlsPriKey: "b7906806762b3ab12797630c711e75fcf40b0a4b8338c7a4bf30093096b2e95b"},
{Address: "0xe6A45a867f4d8a12E66ba38012327df10Ac4E5AD", BlsPriKey: "c2a5eb1fd99b341d0d12475a451f74b0934959e465c63986125956e8e9f84c6e"},
{Address: "0xe6d861421a4D252d4DC5D9D34B3EdC2891473456", BlsPriKey: "ecff4ab879de121933f992be57aa8fe04010cd2ecaf30412d7ed16e2c9662116"},
{Address: "0xe7f43Af7D0879F904D9a81C469142e88F562de4E", BlsPriKey: "d0be4da9e7f85112cf65262d88155d68b8ec8b25b48b6edec45a616e9cb07f0f"},
{Address: "0xe809bF710657bD64A238af34085156D571037BeF", BlsPriKey: "e075d8648c623297346e0e918f2bc33a73e079e27742d4cceea98e8bf15fdf4c"},
{Address: "0xe9bD1cA4896533cD6648ea43b1A7D68827aCc2b2", BlsPriKey: "223991e909cddb866090c92919368caa80227af6d21e90bac150622c9dd98c68"},
// 390 - 399
{Address: "0xeCF73C626B228664471d3884D54d2bd9541AD4bc", BlsPriKey: "04bbb9126561b95f7a84078724823c5c69314e77dc0294e3a8cfe3a94a9cb570"},
{Address: "0xeE584723c953C4DD049edd39738f5247740a9594", BlsPriKey: "53303280087708076f10729fc311f76e1ad59cd095f3121229fca6efc0958225"},
{Address: "0xf105C333253a16C1Ae24c23191E133E06C9ba501", BlsPriKey: "8e033b0eab9d37e62b54fa7336ae2311c64e9316b8c7c7f0231ef9d61ef3c042"},
{Address: "0xf216D7d113ee2AF079DEF5056CFAbEA5dE2Ea853", BlsPriKey: "3b419f6fb6ac60ee821d5ddc5f5a7ecefc530d727182d59f1263808f8a867d55"},
{Address: "0xf2441A675f12977C719ADe3e2879eCf5c1a91f1B", BlsPriKey: "0acda5b8e2d62f777a1cfa8e94f6f0d115929ed5c4079fa1681c066ab8f95c48"},
{Address: "0xf63217cC7a99b7ca4c0B234BFbffC62e6c1C62bE", BlsPriKey: "3289d509194fc75ec1be86278748d45efec86d95c290d770649bdcf3dfbadf28"},
{Address: "0xf6642b7CA43d333fE8CD943A5423C6A28d5a8F28", BlsPriKey: "347c0bdaeaf83c28f0cd901f85af1165cdd1c647b981e092cb49572745aa1504"},
{Address: "0xf66508CFa2a6a52ebC708cF048334d1C6871Fa0F", BlsPriKey: "7dd193b1e19c2792315d7bc0181f527b4a46aeb1fa74998434bfcf68f49c1237"},
{Address: "0xf7D06869051f6470b3a40C6A733571d135641D3b", BlsPriKey: "1e17f7b960f6867b0f37cc5a18b30697cd6b69b99bfcb323043cbb3827fb174d"},
{Address: "0xfA41EDfFf9325c748140ed8Df677B4358568A529", BlsPriKey: "349dbdf228cbb0730c9754a0a188544a1799189050ccdc83c22ac0e0fa37153b"},
// 400 - 409
{Address: "0xfD87f1fb4720cD7f89914D42BB42cEA7c23fcccd", BlsPriKey: "f21843dfd11ef1f2b1fa5930b56024287944ff75c441deb26cc40deb09b5ec01"},
{Address: "0xfEa557d30651C3F0AeeCA12d33936eeFA0fc4f93", BlsPriKey: "0f946314c071958e26d626fcfcd0ce93fd156b42de77b9c62e4fd9fe69cdf539"},
{Address: "0xfF86Ff1FF457c3eBc18D71ffA30cfedd0860559c", BlsPriKey: "4b0d338b30a055bee3e2f070adc93d341b9316a315b4b4efe1639f0be2c1c10b"},
{Address: "0xff1bE0eAC9B6053CD656947F0CcE7d277FF720Ec", BlsPriKey: "d94e179e77a8bf71206b2232eb826a9b5f8a64c55d919411263511e3a2ce7407"},
{Index: " 0 ", Address: "0x007579ED2Fe889C5255C36d4978Ac94d25811771", BlsPriKey: "744df5c4bdc246c6fcc414a72d0311c8b3d2a1aafd2de90414f499067a6d8828", BlsPublicKey: "2b061c104d64a47959acdcdd963dc5259754df23f28ce81c9567da6f9cb26cf0be92fc1cedcaf0fac42ae7bc60438617"},
{Index: " 1 ", Address: "0x00F98965458a35f3788C45A095582AB18A5ae79c", BlsPriKey: "1af3d58cc5f52a81daaafdffcd0a249b66f563afddee282f0d9440e1f54c8d01", BlsPublicKey: "98c1fa568f6ab820e2aa2a6da02bdf3324301ff07d0cc5bdf49fc01799b191fe7427b6803191e5e69478add42931b002"},
{Index: " 2 ", Address: "0x0102B41674C3ac2634f404d8c25C25Bb959fE952", BlsPriKey: "3ca50987ca2406ca7990cc3946f0e0cd9041fd3caae7601a63e90315f7335e2b", BlsPublicKey: "45ace9bdde2190b2019a6e6410b8459f3de7c6d7d616341cc0b99c4b592bb07407367b018c79543dd9b2122ae0a0b78a"},
{Index: " 3 ", Address: "0x0178A7bE4399c1968156edE4f52ae91953ab9B63", BlsPriKey: "8bfa48f3c35023a7a80aa11b55ecad4a22bb90f193b7586cd095028dff0d8e3c", BlsPublicKey: "ece9ab64cbcac9f980e657d2561eca5fabffc1aff165adc923baab131e409d51e949b69d65a23e652fd0fcec3a118881"},
{Index: " 4 ", Address: "0x0215c51A3d67Eb1e949bD1Df8b74D3aef097e92d", BlsPriKey: "a42c05cfb5552baae0100e5887664088ed29c2a43c449e2ebc7ebc57dfd75a6e", BlsPublicKey: "6b78c27b1ee69e3951f57e36b96df4c464bfc22416e5772569367abc122bb71eac0bcabc01c94c79e84de792652bcf8f"},
{Index: " 5 ", Address: "0x021983eA41fbeeB39F82a9CAf1A83476F0cFeEDC", BlsPriKey: "cb2f6f4afd3746b90ce6d6c47475dec4a3b7ac8eabdae1eff577cb0f7e025b3c", BlsPublicKey: "b55c42e584aebf11f4b559b705dee9c28d40fd409009e54e80563e4de9b495f0d5365c8d0c11b264f0b5338528eece14"},
{Index: " 6 ", Address: "0x03d1a55eA1246efB257D49D9286f7D370bd09c97", BlsPriKey: "983fc83da2c1ecfea6dd7c782b46c1206bb85fc27a8f53c4936d6efec47cc214", BlsPublicKey: "8e9eb3dcfd1b698bc962feac9725b7107bdee10fe4ab4f2c2bd8a686bb84adca2c78dca092f5b31a014dc06e9faad707"},
{Index: " 7 ", Address: "0x055b95d5205B5711099C32626Ea61481779a2233", BlsPriKey: "540e6fa35dbdbd519844fe1f1ed8b9ffbee1706c6a9436b6ce90190495939d09", BlsPublicKey: "cddff5678c61a361d06a8b984936a02f943a15806eece17ef0a1d44b9638b4ac3a3c81d6f46569a8e8aed6ef8f8f9f81"},
{Index: " 8 ", Address: "0x0566729A6FCDda16287777baB5D4425AA93bB0Fc", BlsPriKey: "3b89483eee51b4fa343986e79aac7f6dadbca933cbd38afaa76c4d9f631b440c", BlsPublicKey: "01c7419d00f2e86aa9606963f9dbf40c3aa843da8013a1bc5c321f5c1427a67de2b78fe2d716720ecd35a3bbf8a1048a"},
{Index: " 9 ", Address: "0x05bA7FcC4c1d7286f7A3d5552DdF305677338c22", BlsPriKey: "65d7c37bbddf3b25d754ab4cbf62bf28da338c2e84535fb39519fc50a8451a69", BlsPublicKey: "45aa3699b2acacb576aadcac60f29394cd5e2a88dd793024793f28eeeab13ed6f271737a672b8ccc1fc7e523361db984"},
{Index: " 10 ", Address: "0x063893E8EfA148E29B914702AD6A9930d41C8F13", BlsPriKey: "022d1b5600de11ee0b0a8e48627d31aa368164617fe556bb9178251a66164d01", BlsPublicKey: "2ac86b44c828a16c85a8f68c0dcba07f8d3bef1af5e98ff21fd7983dc884436ab6d307269b0881998c745aa38f59a58f"},
{Index: " 11 ", Address: "0x06693dEE3d72a30075E7447b18c6f3ed8AE62174", BlsPriKey: "0e0f6d48b29cb273a667121338f6d7f8e50033a1b08b791f69910695f641194e", BlsPublicKey: "51b5464ce4c433ea5f838f59f13fa5fa37bcf2e28352fdc961aa0225ac60338a378fc7478a6f3bafcbafa50a1db15396"},
{Index: " 12 ", Address: "0x066B40c45D06eEFE8Bb8677fdaFdaC5C8dF9d09C", BlsPriKey: "1bb48fedf4dd6011757f3925f686e20485a876badde9c48cc3ee4bbf4b6f1d5e", BlsPublicKey: "2c33e78e325d386ed7645cc46edea923a0a601b51919fab492032a58a3ae63ed3b958646ef1f3ab7d66209ab5a014704"},
{Index: " 13 ", Address: "0x079C1FFEaa70Ebdd2F3235b2F82BeE0b1101f092", BlsPriKey: "0c705c116f081fb8b7c0cde45e2027f17f9f7ccc2ec31bb15449db6978365022", BlsPublicKey: "f1aa3268fad40fc81722c3c1659ee467a81f60f6062cf53a5b0a90958970d7376898b5106502d39f566f5f56c0b46582"},
{Index: " 14 ", Address: "0x07Fe4B973008c53528142b719BdfaC428F81905b", BlsPriKey: "71fd4af428fe1751286882e48777df17726d84c308f66de1575b2ca5705a3825", BlsPublicKey: "21225288b41b95809265f98322760e08dd02b374d2978bcb6860eb20858ef61ccd32f5e3ba5a18d4d7c5f6a3e9ba6c81"},
{Index: " 15 ", Address: "0x09531Cea52595bCe55329Be07f11Ad033B9814Ee", BlsPriKey: "0a596f0eb4330ef8d97929bea498d9a5f10597717616284ba043a55223658e0a", BlsPublicKey: "1109e93e7d28f2673a56f6dc9efb7ac9d49e4e737441ad516ed71cb93be575ca5cec4a0d83ab598315ed57152f5af503"},
{Index: " 16 ", Address: "0x0B4B626c913a46138feD9d7201E187A751DFF485", BlsPriKey: "eac96664440eca19ebf1cd5c2e83aa2c1b033ab94cfeaac43d5b28f36f858627", BlsPublicKey: "751e321f573b1604f3ef0a78ddba27aeb800fad6f4132183456d98a1bb1b5f6b533f976c2480b98cf060ed86ad202694"},
{Index: " 17 ", Address: "0x0CCa9111F4588EDB3c9a282faE233B830dE21A0D", BlsPriKey: "0e8fd28fea928ea0c064d7499f1c905b8be069200f963387d5d97ef98e602311", BlsPublicKey: "ef804dce974f444c263343e9536fd38d50279f7bca43ea77b755e1389dc029ac562ad9c0e8fba88d3c63600828c67c13"},
{Index: " 18 ", Address: "0x0F595ed534b6464eB2C80A037FFba02D23AfdfD2", BlsPriKey: "93a86c3211c02a5f4e1ffdd77dd319a673007ac93c38abd1e97d3d04f690e23d", BlsPublicKey: "208a5d9a1a29fa3c3533c26c36983a49b7a644dc283ed6f75b8ef6c4f30a4bd6dcaab70fb040720e0ba7fc5a72de1816"},
{Index: " 19 ", Address: "0x0a0b8c48e42c540078fD99004915Be265f380dB7", BlsPriKey: "617b9b811ab0479458119af16c143b5bb2296176ba61561a9f91e6b1f5fd0a3f", BlsPublicKey: "9db803fe34f1bfab9b64d9ccd7784b16e6d9aaefc972b31c483f8281bd5f2a4a29cb9e8e1d55084fd955e2982d16cd0f"},
{Index: " 20 ", Address: "0x0e59b767D5E74cf7B29Ef9bEc3dA4c402d357C6C", BlsPriKey: "cad2833502ccc3c4e044079c0154a4014b4f769c199f275b227a322aa9a41d39", BlsPublicKey: "c93f081152df08421bc98134dce769d9a1a30bb74b3047ab25d6a45bcb299e616055ef6cd4265ff8b506ff6b9ab0ad8c"},
{Index: " 21 ", Address: "0x0fAAda81c203C74CAc786786f7D428477a04bF9c", BlsPriKey: "bd83f3cd53ebb15ff3a4a320ccaa4223839990c9cf846bb9014025c8ebcf060f", BlsPublicKey: "a1e1cd7b903d56c5914ea0a6315c199940c8b6cc06487e12e8a0cd02ab2e20def5cbaff1b7698f677d808ed3ff1ee494"},
{Index: " 22 ", Address: "0x0fd228bdFbe9ad0c898e9A0Fee2E6FB01f596F0d", BlsPriKey: "b71c9bd6a700afa659bab71ac1121ad86cc843d1c3c6722beb3ac6683d92c866", BlsPublicKey: "37c04f0e3b4691c1f3c1235a142b4c4d7cb34eebb49bb1856fc87255d0f0a32c6ca61a3e44a63cd9cc5382a08fa04c18"},
{Index: " 23 ", Address: "0x123FF831333e2662D00c60A2C46f7196204506e9", BlsPriKey: "bf119ca69fa1802ac2e60b2c2cbf9d83109608d5a0d19fe286d6d8dbbc64104d", BlsPublicKey: "605759aaf3a91a11d5aa705242da21545e7899d72e7d349ff9b6d9b5790ca5fed73f694e3608346a6b4f32b5d44e8b8d"},
{Index: " 24 ", Address: "0x1240775288d0EE975583A2A7022006539dADb354", BlsPriKey: "122ab3a111343a15a7111c1d7255f436c3cc81d1893d51e89a47edf0c6c4d929", BlsPublicKey: "aaa755635d3b4ede06fe77704a09ba4155eb7355e037ac6d315add74559c4ef7415eb495076d69a246ba6fbb69507b06"},
{Index: " 25 ", Address: "0x127b8Cb71Fb78338d9EFFe47bB51c2EAd3995378", BlsPriKey: "4d105d4d5e1bbe49d29a87e9454b89e4324f4a6971b70833d70fe4d731970145", BlsPublicKey: "60c947e786ca5d13597defe1ec4e37c1dd8458462c95f1d9574da987e28a55d1f8140a9d109ce702c14ed5575f327e03"},
{Index: " 26 ", Address: "0x141B0e0f05739B7B784654E973e9b9146473aAb9", BlsPriKey: "29b13696228a5ff6fe4f6bf941cd18310caf72fdfec62f291cd68478054c313b", BlsPublicKey: "6464a8e6e89503399dd7f8957100df9f99e9825c12dc6f9338ec31e766d794d51101d4089201943a01637aad36152b0a"},
{Index: " 27 ", Address: "0x1492ebD0EcfD54B4c211b37C8891bA3493c52100", BlsPriKey: "952a0ccf2fbe1ae29e562bc52c9c40fb381f04cebf9186b683db3822705f0b63", BlsPublicKey: "c3e19ee9d2c5f722511054ae124e703d1ac877a7bcad71cb856f812d48f7adf5b70687a3cf843c2dc2826647a9226497"},
{Index: " 28 ", Address: "0x1530A04592F9C3bF06aC6044525f08937ED38edB", BlsPriKey: "9fe110563f98e64bf742a0c54e5c5857738c03ed63ff66580d47215dfc9a3f6b", BlsPublicKey: "92de2a783e323c74be6295ac763262e20b0b2a1708fe0807beec369e6019c0e4488aa628a277c57cf70aacce582de705"},
{Index: " 29 ", Address: "0x159f58a41F13ffC831690D81F308244A3b238523", BlsPriKey: "3f49e1df6b46674bf0179f820f6a6d60303f7b70544bf3316ef48ad7e082d962", BlsPublicKey: "397af4337b1ca1fb6bafd5e4428f19cff0b0861ea7fa904ab87d3714d753addd3c2a1ed1f9f2a7daba3366bfd2cd9b98"},
{Index: " 30 ", Address: "0x16451cE5a762038eeA700A6aCd5F796DF3D6bE45", BlsPriKey: "a151fb462571d0eb58e1d0ac1fca6dcecc2ce097cbaff30423fb53e4b150e762", BlsPublicKey: "b2fef22a63896a11122f4332f06cb8b32757f3d9933197b70398cf490a0af9be97f588e649145d8a2da6ff8cb4a5de93"},
{Index: " 31 ", Address: "0x17f68b4C9e1eeE6eD5bBa0326c50515c7816FF78", BlsPriKey: "843ee44e00259ff2df171edc9f55216100c7946cccd3e46d4d109a6a7ee90d5b", BlsPublicKey: "2ff3e426d5d5d049704a5f8ad772232c7a09a0a0c3b1a02c3f4536d4d76bc1ab0abf6220f7fc1a052dc705f254387f93"},
{Index: " 32 ", Address: "0x19373b0E0428cc0f3F25169Cd079d27856b9f6d6", BlsPriKey: "be2507d4b1d01c3fd1af277edbff2863fa4edf78040e83050f3ef463879d991c", BlsPublicKey: "a0c1ac9e8a2693cd8676fce51f1b771026e1411bc0bc0acef26c827e4fdbdca9ac591adfbcc0d168905f99e8ae555601"},
{Index: " 33 ", Address: "0x1B77597d6664f1fB4894c735Ea80cf250866d265", BlsPriKey: "8299644a589e27f51371917ac08dca99eae455a5bb8a1d5a534a33623cb7ca3f", BlsPublicKey: "c11200bcc72d08d970a46b8db00df3d3b6c7c72cafe442c5e65f477e073f67cafabfd657f104d0142fd65464bccf1b04"},
{Index: " 34 ", Address: "0x1Db6cf99e231e42CEB0389E7828b16Be9b6a385f", BlsPriKey: "3c8b0a47ac82d7fecec8fcbc3f9ce69605ec4b74d667d6a8ca0844168a0fe739", BlsPublicKey: "4e9ad63878d51103892007d766f7e7182c230d9f76be3f5a0a7d06b6b7bad5717c311a8cb91d81d4efab34fd4a31fa09"},
{Index: " 35 ", Address: "0x1F4B579f85E585039C56989DEB56377c529981Be", BlsPriKey: "ec3628e08bda9127f3a5a553438094e662d9306137a357b603d9ad55d11d9c31", BlsPublicKey: "0dbb46b8dcb7e0c100b1f0ae1cff95665168d249ad492809a0d160d7f3e525aa33f28b593c54961c5e4e5696cc1f4482"},
{Index: " 36 ", Address: "0x1e9fCd9B1BDC53921d6a97D305f8a829Fd1299fE", BlsPriKey: "92a606d44bbcd5ef3d6ed9b33b546b09078c205a37043c0ee8e06ffafb5b6d72", BlsPublicKey: "84f3f5fbf4222f402ad5e99f752ba7b592e4f9b32bfada1d77f7b9a1fdefe0e05a281c234ed616632d15e2b3027d1416"},
{Index: " 37 ", Address: "0x1eEbE25D248BD31B9A166326F2DF4bA9874Bae2E", BlsPriKey: "4a709cb38e8867ea75f29a7f14ca22cd9e116306cad8b70f01cf7fb2da87de01", BlsPublicKey: "330ec02611eb2f2345bd6c9c8c3958ad1d6079e5246e68ae1ecb616c83a72e4a09365815174419460b34e86145dfbb09"},
{Index: " 38 ", Address: "0x1ed0498dec7bEb1C06738Cb8DAA54DD03D689F99", BlsPriKey: "a2a90405a2a8c070ae951e7918f8dd1b85ebbb3463ea6fe510db80a8d10eae2d", BlsPublicKey: "ed0c5c88c2583265175f06171876aadaaf68a04c0edeca8bcb0102725cdff098c0e4f8af591e4c716a055f8dd066900c"},
{Index: " 39 ", Address: "0x1f6CafAb4e651bF17dCb09188496A3d55D1A7828", BlsPriKey: "721fd7d88a13d50652eafb8f469e724916921235a8a50cf43c1e2ffa4b51fb3c", BlsPublicKey: "dcf05bc1113bb69af973fbc256e14d1d8e9444da39279ff9fb250b21dd37a84ecfb1547d86a05d7b13eb145cba76ac85"},
{Index: " 40 ", Address: "0x1fF28Fe254B0c42E5de111BFFC70D6e661619F6F", BlsPriKey: "bec3262486fae949ce5f743fbd18cf8263a90f319faeb0e11b09c2f170bc6926", BlsPublicKey: "cdd9f54338f03a7f0427e5911f96f5419f4eda5a8ca05c07c6b3254aff41d0a9da4457aeb118788d3a93115f99757389"},
{Index: " 41 ", Address: "0x2195Ae95468B5128a89150139AA52b792a6418f5", BlsPriKey: "5297d23411e9ca53ec317b78d60e8311472715c9f2ae61a43c7b545db8d15c07", BlsPublicKey: "c8adfff56db05c3fd3716aec94b616d2db2fca67d95cc3de2c44f5fcb019c39618db2281daa0058aae83d2513e754b10"},
{Index: " 42 ", Address: "0x21d02A81c2286e02D1CCdA4D36D4DcD27182bBe9", BlsPriKey: "8ebdd01e7c894ff3b4fae5c4d4f7df0e80ee08b484c01788c9dab8fa5fd16f06", BlsPublicKey: "6723e7fb9090e557d4267c75ae4fd259600dcccdaf6c35de0a05d704848140ce234f03167f431e8a07c6b0804c334509"},
{Index: " 43 ", Address: "0x225268acc5e8Be5f1B69063EA6eaDFfE676Aaa6a", BlsPriKey: "6b0f74d270d4e337a95f46c4d39f1cf946bcc827ee9bedac8323437598caf63e", BlsPublicKey: "e25e4c8fc7ff6b1288310abff6a3ca25561ecbb775213e2eeb2ac7b49cc39c03683ab648a9e87e07e1880ee4768b3112"},
{Index: " 44 ", Address: "0x242CBC66F0bd429ED47bD0b5c8164026A7994c4A", BlsPriKey: "036e784d4011c1c633da43d7ef8fc6d43e717151d333d74af1d953af1c8d7a2c", BlsPublicKey: "43bd09e29feb7d1b3f44436fb7635f380a3a9066642c90d00b3b751440256f6b3ac6a2a6fe7e49bd7371e6292ada5284"},
{Index: " 45 ", Address: "0x2464c234faA87689B21058B52de677E726d15972", BlsPriKey: "78383d03589441c4d3729b76d21c34b59da25e32d4ca605bdc5d1b3b878cc448", BlsPublicKey: "9d09731efd6af85d1fe4865c1b34efa425e77922f58e574b8107053c7e12d8e69a97dbb5384d98260294109ee0b7748d"},
{Index: " 46 ", Address: "0x247d239dEc14b34A3fD6635F14A10058e1b433Ab", BlsPriKey: "0155b109411fb272dc5abc9d9a53a01cc346b24c76d77d7ebf785464f805d843", BlsPublicKey: "69c687d8b5479806ba49e6819b0d76f4347d77dfa2ed7d293af80fce09b23bab9cb4901265a7a03de999aea099a47d11"},
{Index: " 47 ", Address: "0x25ba1a086a4038307d34e8c085278b291db485CF", BlsPriKey: "7f92cbe43a42e6aacbba4b6403d54a262239c686863d2275464aa4c04daac312", BlsPublicKey: "c1f02c03e86a9b4eb3af21860ad4b646d7adcf66c0f7688887100edf4998cfbcdc81be4239e1bb3a07e50ee2ee8a0e99"},
{Index: " 48 ", Address: "0x262401b4532963Ac25A742a9A7277d98E4E0ea63", BlsPriKey: "a5ad07baadb3e3af000cbdeae7e50ec53a9aca6d33158776a7cab38427011743", BlsPublicKey: "d62ed4da2fc8358ccde3ffa240c3a3d4361fbea1a7c32d58562164a5a7636f9198fc6b3c5fd1e1e7f5dfd74283041f07"},
{Index: " 49 ", Address: "0x265CA0F26A8D899F0c25313164FBBb5344F973cf", BlsPriKey: "1e017f62210957e1d528224ac0d0fb73e47d17f90b0204ad377f396e44173971", BlsPublicKey: "358f906655475184762468d5c8adc98f8475588af4a0d90a23bc1903d55563325b8fdb789061e9d82801efc180c23892"},
{Index: " 50 ", Address: "0x26Bb09E04a264AdB89B73389CBdcb48819CB2401", BlsPriKey: "f3889e2c2f2fab05a1135c3a2bd7a74b127458616e067a18ece0d8e8d002971a", BlsPublicKey: "b68d0fa0d67ea29f474b5b54309a294c0a69008c82f5ea2f5635218cd5f097d55421fe711624208cefec506d5b580415"},
{Index: " 51 ", Address: "0x26a2F4BfbED55F9760E426cc0eeC91AE0Fe661e1", BlsPriKey: "cc8b2c27531215a9388415cde2380437b383bf9a059a27a90f31e9f571f3c83d", BlsPublicKey: "6971d780804fbce409b45ada505747cc49de688a9b899c145d28ae6d363cfbc37fbba71098efcab07851bcd1bc4bcd09"},
{Index: " 52 ", Address: "0x27E556aA773505Fb57F07Aa32c1697D5FEc60C30", BlsPriKey: "43b19105bb960c5c872ba3892b2eafa2730e5eb5fcf05c249bef561eb7e2543c", BlsPublicKey: "a8873753c43afefcd3fea076b72032d747690ec20ce2cd252903aa4b01db1e52197a3dc3d197301085db1c6566117804"},
{Index: " 53 ", Address: "0x28347C4F7f56898D30e0e4e2b96d3be8C25Eb5E0", BlsPriKey: "f1c039b7795e5cd1068966e314e76ccd7515e9098bf4436dab7ec5b26206f903", BlsPublicKey: "436b8ecb71d558ca03caf61d5dc402079d8b64767fb5864ac602d21cb0249bae6030664f5237e603a6b3fd0456b96d84"},
{Index: " 54 ", Address: "0x2861caed9c29f8b9800394fD2AC47e1bAD1B68b7", BlsPriKey: "be60daa759d8cc98ab812515720dd0a47432fa8f7386200acff9fe43e1481823", BlsPublicKey: "3cafe67e98d3836a7b22c8ce5d4d8fdb40bf8c1a045c453d2f743995ace660b48ac09fcab35766269db04506a385e981"},
{Index: " 55 ", Address: "0x28909d8Ac0bf925aA6f41f2cde4A4cD9f31B197a", BlsPriKey: "80e38bcd003a9a12990fa2d23766b299bcaa4a7cc5d108a71b71e139646fd731", BlsPublicKey: "f70f49948b5d58d3cb1e0c59e40976e1822d214f4981ca865c2cff0f1939f7d8502c1a6abae5be26b39d84d961796385"},
{Index: " 56 ", Address: "0x299A24672cB79C61fE045e0aF9eBba4ce0A135ce", BlsPriKey: "775f4d0f3ebd22efa3f69b0a495d4e3b87e963b9165620e001dc00935f45dd21", BlsPublicKey: "4d03c65a51d44664a897f0bd1851340731c9186411e4276cc6aa7c9ad6852e3dbd0198d09fa8116fd621ec1b2cd1bc0b"},
{Index: " 57 ", Address: "0x29fb0115A02F8F85d6fE0768f12e0F14Bcc9fB36", BlsPriKey: "5cc64dc633db8a761d8b0bac72392445f2536d22fdf2078b688e4e0f11b6fc36", BlsPublicKey: "dcc2add1b59dd7bc9d44c3d1305628fbccba7c799f56dbac8751082bccd481c1fb25aa77019ef233870efa63c08caf83"},
{Index: " 58 ", Address: "0x2C2cBe9D862bf836ad96eB5074225d1a6f52ecD0", BlsPriKey: "cdd7a320620892dbe640c50f79e7f4f7e88ec7d404b77ddb414dba79ec522c38", BlsPublicKey: "f6969dfad21ee8df99e29f16db617384732d1d0bddf882eedc833b46245f3562287477deeafb3b900e300f0ffed0e513"},
{Index: " 59 ", Address: "0x2DBaa0deCbaF557f8681bbDC23D6383FbC359B42", BlsPriKey: "ecad42e8558019d8cdcc5c268dae43ea73f096ae6a07b6f0f91fbe30e4547e08", BlsPublicKey: "d8ce60f8c062fa5e9efdc2e8d9b0c8cf8b802eade5c874eb5b633168aec5b749deee3e55549919502e771f92f7ed4a83"},
{Index: " 60 ", Address: "0x2E258FeeC9Fad9d243B946FDB490c19434E78a26", BlsPriKey: "c79d77feafe263ed104c8a3dd3a78f4c24cb15f23bf378d78536b0fed2f81d11", BlsPublicKey: "373793fa30f12ac10aa6e0890b8f695e6934d2b8a7156338f11cd2811e5435bb6fe763dd9d329cebde9d995e124b960e"},
{Index: " 61 ", Address: "0x2EA2a868EcD440C13da3e23ceD0b6654fF34dB89", BlsPriKey: "1542777b7786dbd7f7b3e183c6fd9c46c229149ebdd1cd92e770eb9e87ff2a08", BlsPublicKey: "b5c7bea09caa69e3ce3a3718518e3f50b0d2c32e740c69a321eda165d6854f6051c5c974196fc3485ff5f50827915880"},
{Index: " 62 ", Address: "0x2F1a7882EF1c8634f46cb156DAE2bC2A35157Faa", BlsPriKey: "c3fbf51eeb25eeb0b04f4f2c8f33bb345065da277671a1a512107ccd3615af6e", BlsPublicKey: "03d86b178e72f8edeb81303036ff951f858cfff59eeb112d12835ad422065ab26bed25480102875cdc2825648a8d7887"},
{Index: " 63 ", Address: "0x2a58E5ca4C6525d4F28Bf0A3AD34d8c1B6a99c09", BlsPriKey: "2410ba0deb3c06e2e5747d1ca39c1081b0dbe205a885f3e8278afd2a8641623a", BlsPublicKey: "a3a5716f45821011a90709490a4f2c9c80c1113b0b994c82bc7d91b90471ccaa776b5ed7203d3dcd328adaa75d0e3f19"},
{Index: " 64 ", Address: "0x2b8C69Ba116ADaC2e2C40B5e8E6B05e39aE0Db50", BlsPriKey: "b80f5810a82b44678231abea9d0a7bd73839af5a6ebc17659b55e779d0bc3861", BlsPublicKey: "90c72ec8181bde35c9abaf69bd3f32da23a9100c6c9639d5276b93960d396f67be4561580ef165c374fe1958da3e5197"},
{Index: " 65 ", Address: "0x2c2a172192a84aF1d37F8793c596b9b91b517ede", BlsPriKey: "0b1a993328a0a418ad16cc9573e365b674fcf0aed41f22050f4eb0a3f67fa90a", BlsPublicKey: "b2fa090ca6e41263c0d381b0b73636eb1d6ecb5972e7b0121503136f79ae85b3d82a4bf31dc03feedc44b32425382399"},
{Index: " 66 ", Address: "0x2e9e70D46290A33F3F01251587AB09C84FCE7cb7", BlsPriKey: "e39fecadc883112bfdeddffbb9fbf4a611525951f0b3da348b8ce564a127c66d", BlsPublicKey: "00460f329a4d4c01b3daa0ce4f39c50487254cc414c96871f18fb804ba9baa72ee59ed82713b5b60ffde8ab6d7ae6f16"},
{Index: " 67 ", Address: "0x2eE12a8225e5e811e11264D123c4E180F0797be7", BlsPriKey: "26ef3e9aa6318bedcc8e93eb7c3974334743defbb6bb003bc2a797028de71e0b", BlsPublicKey: "87106a52ab53f962dd35b3c60543475457c1faf002a1e3f610eb175f0d7c5d1b543402d55a23ad90a5f16aeefc010389"},
{Index: " 68 ", Address: "0x3076E2D79053c964966204Fd1A0aF770ef2538D8", BlsPriKey: "06a94be38e03945e068741277da7b58c61a9d2a58df5f6076852dacef3b76207", BlsPublicKey: "ff438aca4ba83e86278469a42e1199f9ee62fa0d40a28093d2deea25cd8d77d2eb574834c0369a5d6f03408fb8cfb08b"},
{Index: " 69 ", Address: "0x31335ed908287cdF7f9416cF748d145eE7913B34", BlsPriKey: "a580c831c2bcdca3306eb66d5cd20426f11d32bd1ce623b5236f3aa57c53b56b", BlsPublicKey: "fabcda8b7f1efac514365e4a66fa1b94968de3f7a322e548da53c2eb310eccfb3a7dea2286c44ab2852bd901a2550491"},
{Index: " 70 ", Address: "0x319201A71220F5Da76B716A398D2398b6ed6a534", BlsPriKey: "7e9dccc87fa4d54a918bcd2a78be0a9fdc48fa56010758c500e31d4b15f6d54e", BlsPublicKey: "fe6f59c173f2dbd67dac8a18579df2e6d5cfb664ccd377cc40d28fcd36e2f6097551831b27d7bfaefb93df059ec71d8c"},
{Index: " 71 ", Address: "0x32E8D97857240CeA72f543460dbd17E5C648D738", BlsPriKey: "360abec0172e46ccdf42bc14101ac9a08502d6eb6095f55d5a7f0e17c3191634", BlsPublicKey: "7e65e8558affa22fb744d6c18149dd009d3a022ac96ece3bfe829b97566cbafc650451c29bcaa739ca2e2cc8e9e30492"},
{Index: " 72 ", Address: "0x3309c38aC38b8Ab3B0917b75b4434c95879b60CB", BlsPriKey: "19e8982b559fcb011d5ea76d5f778fdff8dd5e9f41990faacdeabeb1c369d633", BlsPublicKey: "ce8243acbe5c16a6ff9db1b6fbd1ccc136c1c27661307b877bf66642998d68cafea2678869d568934ddaad20e1bd1c82"},
{Index: " 73 ", Address: "0x33F8248328601d0A13DE54f580b5fC1D92bf0a09", BlsPriKey: "a8ff62a867711ea4de0785b5a2cc2759b35d6866883a963f2d5cb7cde1240f4a", BlsPublicKey: "397e17f6db409785a7eda2c76d67a78f7f33f4844a8654234babfe5847547991f04d20a8786bef5d9113131a497dd088"},
{Index: " 74 ", Address: "0x340Eb83bAA2B555A97E8E705aa857D13CAe0C574", BlsPriKey: "e60669bf7362a0f9f0078479b50e387a7d8f29a9329f3b7cbd31636156fc4350", BlsPublicKey: "35464342850134c750cdf7818f8518a1d79ee29a32a95f1dd30868eef523bb1ccd24205c4e23575d6203a44310f9b78e"},
{Index: " 75 ", Address: "0x34788e58AB673D69b523c8CE62341a49d7AB0dd4", BlsPriKey: "a9d25aff30f4fe30af2cba36af64cb05983203fbfa0c1bbb9af175524a03a75f", BlsPublicKey: "a5cc6dc84d97e6c7ece059cfca8fae08c588ada5f2756e28bcef836dd86763630fe93d42c11c84aaf73bd5f78d68a519"},
{Index: " 76 ", Address: "0x347be45F656bB0240f54A78210623A7fc64C347E", BlsPriKey: "b2529f4bf082b5961e8f92e5e8ea5d601985e780beff1d80bfb646367b294b2b", BlsPublicKey: "83fc4e27318c80cd9d6156e1a248ea3c4b101dc99282077501fa3f0248bac1c6e63e75e005641cff3ea0299da093678e"},
{Index: " 77 ", Address: "0x34dad558F746FB3ac3cE2f52D78A4299EE8B5cc1", BlsPriKey: "7d5c691e785de7a39cb66112cf08c7328d108d485d459ad18e6a03722e85cf05", BlsPublicKey: "3f743a133be4ac6009e33131439d7ed4db8906dd2a73e570b34d138df5ad35121922c9ace8ea934ab773023e44123116"},
{Index: " 78 ", Address: "0x358f5cAd732462f4336c2fd1d1C2D2ef8a993a48", BlsPriKey: "95389b135940d578bc22673f965435ad511eeaddbc83ce0756c46137e1ea5632", BlsPublicKey: "62030d4c967ec54c02846f3eb2d0bf9315045e829bda7f1dcd8f641aea766de7836c51024714ff0143775f147e005e04"},
{Index: " 79 ", Address: "0x360C6d41Bbb26C2008365871dB41F7f4F038aed5", BlsPriKey: "b8da8b8201f1b7aec7471a9cbf2df123a37acd145d1f40df4ee1eb1ee3c6002b", BlsPublicKey: "a34ffd81f3e666276c08bd6a2a0a241cea3e028c120651159e0a7476e8d3f632ca99cc17b314f508ea24626084a9a606"},
{Index: " 80 ", Address: "0x363A67Ed8D83b74f132364c07D95058cfBba4068", BlsPriKey: "89baaea9eea71b06259156fa7da7539331539c42c1bd0aa8cc22144dbbb94e3a", BlsPublicKey: "f2b32ea947b3da8276b61df3ba7379aff7a1c88271cd9ea9ee5144e70b519ef9ab58a5aecf6eddcd4d6dd419bc046f98"},
{Index: " 81 ", Address: "0x3712a9599454A3510C4Bf0927DB91333D7fe72bf", BlsPriKey: "171de1881cdb39926ecde2b6b0bbc652656904be1186963b8c0618aec5e8aa06", BlsPublicKey: "28d32ff81b2b2f7d16be0740839c085a79bf73be2e229321158bc7d3af1b94dfc4c14d767957c499e5d9ec218d404319"},
{Index: " 82 ", Address: "0x374beF68Fb58142Ca63b3Ed86C3132E008eC9957", BlsPriKey: "3a4cc149c8b757dfceb0fbef00b616843ad68d5b24ff59f95ff4cf2c959e8037", BlsPublicKey: "7f10f377233f1e88f7c4a02d67e741865e14fc33d4267520afca7b4c459abf1477579ae815a05ecef80a63f7436d5f8f"},
{Index: " 83 ", Address: "0x37731F1Ec1826b278CA47EF87a4177cc5931Db67", BlsPriKey: "62ded039ad53de22a275e2da572064b160c105c111e47d677dd8bfd42c6d9b3a", BlsPublicKey: "4f92bd2d17d65426f1058345982bc3082f70e2b3775e7f7bf9d53e807966fdcd0090ca63a0a8924535eae62a9e18ae0b"},
{Index: " 84 ", Address: "0x377dc894E403D4e099851038c4Aa40D67fdd64Ca", BlsPriKey: "fdf1a21336b30807e0e52ed2862cd398e7f131332557f7d22b37724f6f700b63", BlsPublicKey: "93365127458a5aa1c99d0f82e61f4e9248bf6ba82bbc9222f0f0fb7a240c43ee1f4aa17b1509639df411ef0b7510d38a"},
{Index: " 85 ", Address: "0x379c7e2c06932A064D25dd2B938974a31AFFAe4D", BlsPriKey: "e8dae2866983d99869b4765a6b2e9a8f9d2476885917f46fd70469ccb803af07", BlsPublicKey: "e9ce5bd521d955f431a42d8de146336ccc4c725011dda7c39fbb62f48863d179e2a8f83e1d0b96fc224d2c77fd83a50e"},
{Index: " 86 ", Address: "0x39248D6c63c76BC3C8dD4f8C910C9cb1098A0019", BlsPriKey: "98f4db326c0b619651a9130880fc7bccee293901cbb8fc7637df98090b0aaf68", BlsPublicKey: "ea4126573bd4de5859bdf03331034b71a8bfb83bf97afebe8f7bab1039d53541ef0c35150eb9770d39a564fe79fc0b87"},
{Index: " 87 ", Address: "0x39d1F7820013fE09056b2187359Ad03891C7DB78", BlsPriKey: "32dd83bb20b27c66182035d4cce1bae1902ca145d47ab24128441b0288f6c605", BlsPublicKey: "877ca8e32b68398f0ba33951eaa17994dc90fb0bda0b5b4ead0822d1165c220850a4fd9eb8d6daacf84cdbac8cc3148d"},
{Index: " 88 ", Address: "0x3D053cDBf1B9A8D5AeDDB2F5fA1E414E2E1b3996", BlsPriKey: "d58e62628ca9952698791ec711a1a30e25f5ea4a6c3a5285de441807892a2914", BlsPublicKey: "4f4a9edfdbb629c16f4c1fa75d6187b29ad29af94526c7894c8f8632ebc550bdac1522258adfedaf0702de3e75381e15"},
{Index: " 89 ", Address: "0x3FebCCaB09ECe4ef6f6a2bEA73A898B324976E74", BlsPriKey: "ce78925f42db2550e6cbd9d802ba842a296f04fcad53a7f5f2ba0966e0ae532f", BlsPublicKey: "6e48cb4c103ee76405afbc28d5a87e2bf77f8c257f823a7c022d49b0504caa519a8165d3896153c5f65b17e2391c0204"},
{Index: " 90 ", Address: "0x3c8FC1035Dcb6e6106C15a901C4775035b3dA784", BlsPriKey: "16a56d0c45353f64c387c6357b9c84bec598cc07fb8e3f315734db8bb1de234e", BlsPublicKey: "9a488cbabeb06163aace993648fc7cfd638eef0e34738fb27b0a0096b5e0d6d545a16542acdfbd9bcc7e6c91d7ce1d98"},
{Index: " 91 ", Address: "0x3d1f908D73dDd221E06Ed234B65C482CA45a4DF0", BlsPriKey: "3773287ac6e5d8d9d137f00f4a1809341d35c25839e0d1769d1f5912c332612d", BlsPublicKey: "10562d410be6dfe7f844c582923c103d8a03c8525fed1bda3f641d448a0df932ef8d0645c8e66b0894e21c42b95cf400"},
{Index: " 92 ", Address: "0x3d693307B4Fb93A8f18eB7407Ba667fAA3071acC", BlsPriKey: "8695759a8cb61c6fa17663032412c26f8c9445aee9f374fe1b9713117ade7865", BlsPublicKey: "45f06816843dcf49a9dc19f99f6b3393093bd386dd205e3b01edcd4b2e87f5a81e309a1cb03564bbfed645458c5bcd04"},
{Index: " 93 ", Address: "0x3dEd77a2008C1a37A4A8dBa95A3f271fA9FE612A", BlsPriKey: "2933d5643378ef0ba8aee94f976ae76cc08cf182738888ee1c489f4fdc8e5a04", BlsPublicKey: "78376f203187ac443629eb6f754c29fd1684cd347ec9545c7917ff5612a8e665ddd68214483a64c27eecc14e3e7e2d96"},
{Index: " 94 ", Address: "0x4028C0fEE197D2e0d2Cd2C69860498a712cbB8E2", BlsPriKey: "34e47d12f438ba91e41666c8e4aa227817c79d17060a740f8224847b9948a34a", BlsPublicKey: "ef0eed013d65a789f35bf13a463f2927d457d1ece317b70591a58f73f17f67b86e2262a1ab5ba2899e200c4f09e91704"},
{Index: " 95 ", Address: "0x41D5410D1ac8Ed178c2494BEdD696E759052A428", BlsPriKey: "fbd218940c6d62926c488bb4a6e389ac735b3386b7fb4c0c36e5672abfeadb73", BlsPublicKey: "d0d26883c8ee9919b6ee49f4fa602c17e8b8ca07e89a93cc9eca8d9135a893aaf38250fdf56df218caea770c2748f80e"},
{Index: " 96 ", Address: "0x41EbA30f94338B69F7dCdCC51C2e5557fe8Fb2e8", BlsPriKey: "d552aa321337894cb21dd0a4679f08c9dc2c28ae8968bd75d8f7e6f097baf85b", BlsPublicKey: "8cd7e05b8a1dbd8b49763deebd4f090c206a7136b85f737047e7e5fc92d3f0c46dbf4c759d08cdcdfb4d4608553c5e0f"},
{Index: " 97 ", Address: "0x4204324E99c2D24DEFb4Ec92c04F91f9Ab1a4b3D", BlsPriKey: "2b76e3c16a2e5ac28059a97bdc0038be74b7e31d62cd750e167ff8dbf4910625", BlsPublicKey: "b857b0f1410c239a5651ce14ca5c82a5c525a72c4741a4c9ab95ecd0e31d50c2fa82b3288999304d1c362add08118005"},
{Index: " 98 ", Address: "0x421F5E2b63530911aeB2e0C047E970f92cA5BFFe", BlsPriKey: "aa701b6ff07c196c5f95ddef8c49f578365822a240b78f1b5901c355d1dd3e6e", BlsPublicKey: "2ac24ef025f183a1a4654c691eb847777fe6138e771609a258bf5f93ab9e56ef7851173aa8a4d4a193b06fd3f483ce18"},
{Index: " 99 ", Address: "0x4229a06ca14dECaCc667ea3752Ec9F6cf6883E5D", BlsPriKey: "4ff55d2607bbab7f0b7c7b926b41a64a704b287ee87d2eee0138eb576b53e95e", BlsPublicKey: "db2a4ad787839776ac4439d8e001e1bd50f2662a2dc93d4bbf423ae90a6ab8a83ff091950a83d2a4d7aea70a482fd312"},
{Index: " 100 ", Address: "0x4325bC92bA7e8D83dFCD3748998835deA565a619", BlsPriKey: "485799c51877d6545748afd681abc097dd6ffbfdefa5ca69e284127acfc8953d", BlsPublicKey: "54599f487546cb30db2290b9ef5ed17a7b65c91cd391f1df5ad38d3493a3b494cb5f3af232489c3d419f496ddb48cb86"},
{Index: " 101 ", Address: "0x44456966A18d5aD69b6E7a088289751a49bf40AB", BlsPriKey: "2111f88712ce8ea23e724a09cc394968cfaf8c2416cf93cd1a638bae2c2c070d", BlsPublicKey: "b4331e5c0e9f75781255b4e11894ae8f8c38031d5e4c8def72c9b0ac21a33facf1c117676819a50a5889da51eec68f84"},
{Index: " 102 ", Address: "0x446B633889513A21a1d27063ADcd1B062c277D76", BlsPriKey: "370b986079a75fdef94d5a95e12cc2773af467b47b50febbd4ed0b070ff84b58", BlsPublicKey: "cc515092931c5a110e898d837841fd3bc6748b098daef25aa29bfa1767cd33e48eedcc7bd4bb8293e844e92005be668f"},
{Index: " 103 ", Address: "0x4478E05FdBB69b90fd5D2da08182e62356FdF7D4", BlsPriKey: "504ad61535bdba92590da64d4e7ab6ae78df225547926e407070c1b2277bb036", BlsPublicKey: "7d397055a28e259e09eeea630cb82385aabfac852aad66fdc8cca0c1f4bace61c68624d49d67357671f03b67b1cd7b11"},
{Index: " 104 ", Address: "0x4499471831Bb521c02ccbf144882ED910D0BfF12", BlsPriKey: "ef95ea3be04cea4f6e34a253df5fd3e5978cc24e22c25686ddd2fa3e0c4e625e", BlsPublicKey: "bbf9e7a3a092d4482cdd533af5a9e54fbaf6efd91b1870d679e658a1256e082a8fc27ba6981e2592abc38a13cc47f181"},
{Index: " 105 ", Address: "0x44D7732cE7f12Df848E0B21d111f74a618f8a43e", BlsPriKey: "d7ff7def8e785136aedd7950542b87eeabf2a5307b5489159c86a9704a78c82f", BlsPublicKey: "5d584ad0e8d0c4152d049f7504f71535be625c6189a48c5b45084c508e0c4996ebd6d887ab3b391924f817c93d5e3e95"},
{Index: " 106 ", Address: "0x453aa59A3227bf616a95b1E373A02b6a52Fb375b", BlsPriKey: "51a98d91590f1aa48302972e2a443330fd58c42f3afef8c0a1d108bd12de9b34", BlsPublicKey: "c3a963dd70b98684a29af8bc14747a7653fe8ca96146c9f3a083e29de693b838879225a4138125e3caf7f0de061baa10"},
{Index: " 107 ", Address: "0x45FdDE03B486e2c0C4bBb89F398241A3755D5D11", BlsPriKey: "02f6ba3f90b9133fdd42dead23fc4623dd401717a1f105f94717ed9fc5215f5c", BlsPublicKey: "734b5bea5f43877496ea0ef75d348f773f18225e253124dd163983f07f53d19bd019c756cb9d594fceee6135c59f3c94"},
{Index: " 108 ", Address: "0x45aee6EFF98397835640638bA345E0EB31827AD0", BlsPriKey: "9655f209face791015d54bcd1862481fef92e3d43878d6cdd6d5c2293ef79f44", BlsPublicKey: "83b805b0e0db1fed96f6e19f89104e3d30c6a2472c58ff04f61c586a37d958ba78c39fde0aa92fd901e396c14d0d8b11"},
{Index: " 109 ", Address: "0x46ccCF8882c4703350A9aD72cA0Ae08730d148b8", BlsPriKey: "15a9c70dead44df5fa6edd81ee0a5f1377cfde77a1f2c54d73cec8e9c7cb693c", BlsPublicKey: "a0f50efc6a28bdb3f00192597dd6da6f839e1c5301135fbb24d08c3e8329f8e3d72d344f4cbcc1215d6f36bf26ca9e86"},
{Index: " 110 ", Address: "0x4762F1BDcD9B3B4b14293ee97d29A68F328Ef4EC", BlsPriKey: "a044fcbd1b7a7b7bba6699457305494a5bba0567e97d95a69c85b294eaba646c", BlsPublicKey: "4f9d738581dff682893bf7dd0845ef3b2215c19eedfdc85bfae08ccfddf8078a2e3d1d8e987fcd53d2f7d53d52e1cd14"},
{Index: " 111 ", Address: "0x477c8504Eed8fa3914e53285150CE0A87c87C696", BlsPriKey: "507349bb3f44e9a20dd6555b8d7bc7f95c26b372641fce31502850005d7eb202", BlsPublicKey: "ef0ab1e660e947d5cfd133d91d763a98db745c40e715c94f376652b95f3bebe3216db66274dd9b088e319ddbd6fb6201"},
{Index: " 112 ", Address: "0x4851E31eB74c400d906d98da8aD8BAC2A9dB3328", BlsPriKey: "e0984f407e32fa7d060dbd7ea2b9baf8a494ab435f797f08f4892a2bf5b34a0f", BlsPublicKey: "2d374da53e46991444c94887aa162a547cc4fa58cfebdcff44ffa4c1c940dc78ca4bb8e041104b054412231d49121c14"},
{Index: " 113 ", Address: "0x49047Cd6Bb970E711a198DF1186aeb1E6E645EB5", BlsPriKey: "4cf7b3d6f3c516061e8e17b6290f4b8fe58e822d4077f9f5d718a5c3e8bab526", BlsPublicKey: "af9fdf599be8337a88d3c96dc91f33a8856e30bf7a88a04bd49eea8c0ade4582a4e6e845caf60b51b6431a3e11dd470b"},
{Index: " 114 ", Address: "0x4B4f226886dD72d30B27197593bC6313d228e115", BlsPriKey: "1685239934f53fb3aa8585493b03525af5e1083927f59e86a649ae383d02191b", BlsPublicKey: "3a5d19459a1f5f46d6904d639ec511bd4974aa6540fa86922a3c5ab045e62bc70072d3a23e43881db5f1c6ed2256ff05"},
{Index: " 115 ", Address: "0x4B8C78E300D5d8DBc80Aadc03d2a899521fc4418", BlsPriKey: "941481e67ca7c764d2c077eaaa014b457ae247757f5d863b121e884701e10e30", BlsPublicKey: "260a73445d98456ff82c1e1baa8173cb666b0f1465ecf1616decaa61e15450823ecb115b53f88cfbc27da697478d9916"},
{Index: " 116 ", Address: "0x4D30F9107a8dF1a89E040C693A7d63F65aA6D289", BlsPriKey: "169b52af471949aa81f53b43bbf4e9d84268f248a92c2eb7760437fb0e36e956", BlsPublicKey: "62f8ad555ea722cd4015d8f7f6ab395626881d22bcc15a62bb89b08a8997326d29f56684fbffc8161d06e989f0a93590"},
{Index: " 117 ", Address: "0x4D9EAF51339cC05a8D01f19B3D960b6A67db62BB", BlsPriKey: "2e4eccd13f0d703e02cbde24e6b347a565ad4ac3f9ac7a9a293e1560687c0d45", BlsPublicKey: "a76117c2facb84bac71b36d0fc0f2c83a9e8bcc4ad8d3721170834edaee12f1d5da1b0ab26b4dc92f440a7f4478df691"},
{Index: " 118 ", Address: "0x4Da55B8bf9c484155ff90F18CD858B9b4Ba9F456", BlsPriKey: "ad973f8c1436d1a9f603f24e551e84609f55ab89391ee74fcf564707ee8ec33e", BlsPublicKey: "a23f996eab538c65c3995e0337cdc27c2e9754adf95caa28e2f71ae0a583ef4034e389ea7eb0d11289553bfa9fbf5d85"},
{Index: " 119 ", Address: "0x4F39740C7479d45E9D89bAf57A0773FdC03b5773", BlsPriKey: "7ae27163e7d27eaac107fdbc509fef756130eb559ba60528d23986f97d824630", BlsPublicKey: "376055d100391cd770cf9c96b65abbafd27d41182086afa3ecbd14fe8a7d70c16839b99673645930ca452658b85ffc8c"},
{Index: " 120 ", Address: "0x4af845890077f56e154A1D725CF76A707a4C325a", BlsPriKey: "1834fa58057fa8dd15403876d95b9e28436513751ffa4851917bc14ef168d158", BlsPublicKey: "55d43e9bc2713b4af28d68ad611d98691b6fdb9d15c8aab80c61bfc333c24b9cdd33d57421381a24b9550aa7d30a1888"},
{Index: " 121 ", Address: "0x4ff4cA3C6725e57fEEb23c5B8a05e71bdFfd7c67", BlsPriKey: "389e563834fb16d6db37774eccd4eb9a1ac744271dc0ddfac49f17919fee763c", BlsPublicKey: "abbe9f6b1fd1fba3cd9ee4383061d01275ac57978ab23b0449110fcdbe99f3625572bf1533cc855be968adc41462f100"},
{Index: " 122 ", Address: "0x503C240fC52b4556Fd990beBC2ee07f17a1D9fb6", BlsPriKey: "4c7457c1fa08df5bbb1a0cf3025579b1f77c641a4f791fb63dd6e606275f7355", BlsPublicKey: "1d9e86cad9e6e8f3219ad2c5d10d56df52a0dda304fc4072d72364741a89de46424d521f49ce563f1892fb46f65e3880"},
{Index: " 123 ", Address: "0x5042aa9eBb9701942391f975A57B5DAcbB8b3678", BlsPriKey: "0dc74058a27dd6a931db1bb1ac69d9f788905cb671dbfb7846a992ff82fd5841", BlsPublicKey: "fb7f37a560a758c893b04fc0bf048b4dd0b3e4a1887393728fc6251f459a48633e3d7b49835423d98603e13c2dcc1102"},
{Index: " 124 ", Address: "0x509E55f51e887A42A38a2C43A373B84779d9C408", BlsPriKey: "d4e0fe3c557ce18db485d8a404e32bcfe0a762e0c3712c80a932ab8012545e21", BlsPublicKey: "deee74e806a7970a19db1ed650ca1ac798564a222622957b0baf9b12c9a003fbd6b4708329c93c21c33d2612e1838600"},
{Index: " 125 ", Address: "0x50eB59e5D69F0151d45aF7De42eb06A566D00922", BlsPriKey: "b1c66b01bbf41faa688e998903df494fe2db0bca5e00fb64f97ecf8b48da7e35", BlsPublicKey: "5dddaab41f3e0a93da03e6758b8eab7e2440ea84555889c32e31e5a10c116b70218203a158dd8988bbe95672b435c101"},
{Index: " 126 ", Address: "0x513B35302F1DC54A194E58a5e5D1F4fF73b1240D", BlsPriKey: "b54ed87e8e6044ba683fc4c19ce1c05af7d49fdab2e9990b1f1d0827adc69519", BlsPublicKey: "e919e4385e3fcb9ca692940b6a242763edaae8a212518ac8b266868f00dbabe04c463c56f15cfe5a68185c2f1df94f98"},
{Index: " 127 ", Address: "0x51Cef58fb50f46baddC6c9b712c1B0dBA2835296", BlsPriKey: "15dce77a2bfb9ad3122318e123c4fc4b3bac83744b742bbf8882c7c2d77d0770", BlsPublicKey: "49db5f7a5e46d500511345e372c6f4fcd3cb484083e3bbb2670b6a7f33f765a98606ae7e470f57039a0d2c7119db6a98"},
{Index: " 128 ", Address: "0x51f82DFC182b1c08a11bDC159EDE6e8219Ff8D7d", BlsPriKey: "d33767dd3802b9754b8044caa067ae88d1742d519fdf91ffbf68a1378f41a369", BlsPublicKey: "69073a348c80cfe70d6d163c126b2d6206522aad6ea00da0ffc72084471da5d11fea737868a2a02d9d40d705096b240b"},
{Index: " 129 ", Address: "0x5325ADa44428d5b2Dedf7aE41E5Abe129B8433BA", BlsPriKey: "3145a3ca648dae41009201cd367c5e107ac2518c7edcd431812362ad30c82e21", BlsPublicKey: "0710b93a4dbfd011c8e5c0d3a3a01e996e89d4142836fb012f20b03e8a95e28431a0a7f71bf8029a480fb9a060b45897"},
{Index: " 130 ", Address: "0x53e8B34C45193abf3eb290973eAB78f9f0af64dC", BlsPriKey: "95edcf0e651283bf480850545f7faa1cf0adf3deabff3a5b9918630f6e60823d", BlsPublicKey: "c4ffbbeafdc1b0e2de2abff826dee820028d198fbdf74661532ac4816d530167d33c7e2c47d87e6d8b014563e6fb640d"},
{Index: " 131 ", Address: "0x54030397F9EEe4e9294c5E6E161510109C3727d9", BlsPriKey: "9ad3d658e6252aa3b5d44edfc9fae6d8e03ac69f5a2ea1355e17e012201be533", BlsPublicKey: "72a35b184c3f20504cb11ff0f18d7805d882c5669851d38f1c74a2ae4f872cd221700225ebdb91ba123d3efa4c8eb794"},
{Index: " 132 ", Address: "0x545F361048B1EEA955Af00Bd86618F91FFA04CeD", BlsPriKey: "34ad1e8521283bff6f9e0360bf3f9f625779351fd68b9a2c4cf80eeb67739517", BlsPublicKey: "08c098f0c14c3a6b3e6a72e20f03b90a3c8e5072ae23e90d3a8f960a2f8b053c2c8763cdf343a1a4c42b60cea1580388"},
{Index: " 133 ", Address: "0x557dD1c2C39e8Ebd7d46af5dDf8e3F450108C44A", BlsPriKey: "5cfce0c36c23eb91d4d955d823f35e913e18704fc5851022269e28192957b125", BlsPublicKey: "fe07e332ae97f22917e2d2dfed36a3f6ef45d3d3c80e7313e4a0e112158c6fb0195821477cc3649ba951b3d9daa4900c"},
{Index: " 134 ", Address: "0x5672f21553783d16AE7A7901A4461adBf6C09c56", BlsPriKey: "ed62774abedc682a04d166fece7cc22c87bfd68615fd45bdd66aa14e598bd41d", BlsPublicKey: "c0ea3402826658dd193389312f50eabb81f2ee4f11cdbcb8889c4b9cc4676bab9f9bdcb9c6e740ea74c474ff05267282"},
{Index: " 135 ", Address: "0x596907B8b2E11e2EBC6f6c8011Ad379e1b83F669", BlsPriKey: "13f8426d081c3c8f988bb57c302d1f3cb6bd14cb2260516ba65b84adbd027327", BlsPublicKey: "6b0f99ea5748f4bded677207871bb18c0a3f31137ab4a4f11b11455d1f8c6e681698772271fc8558e9a6894a88213819"},
{Index: " 136 ", Address: "0x5A9B1A7b7c889C359e8D52c08e1566C10Fa8B5a9", BlsPriKey: "e99d589dc065f51402683dd8c4abd40fbd7d15bc5e3732c77bd6723901d2204a", BlsPublicKey: "3be9dcefa857fff82e36b681050ea68aa4b5b8434278cc7784192f80c4cd0848e2e6a79963db99d297794618f890c095"},
{Index: " 137 ", Address: "0x5B266C47A82c4a849a70a1F96760fC1025784E7D", BlsPriKey: "4d617b6f8c01e714cf98fbec540de10eaf4acf99f55ad7a784bea63fe2f8af4f", BlsPublicKey: "7457ec126327353abd0319cd2b5229b3c316718f21d597c4c2c4ae7946941312ced5ca53a459099171119c154c136613"},
{Index: " 138 ", Address: "0x5Cb5E2Bb095d2DD25C9b2887851f8D9E7b733e75", BlsPriKey: "f2d82f2f202aded3aac05660621f76c038afb1b561e27103fc9965ece6b01f58", BlsPublicKey: "108c6daf0b186f086aa9545d2fd0b463c048627d0da347f1776dc134bd2b4aab6c73f68a0ea69a864b3454fad596ca92"},
{Index: " 139 ", Address: "0x5Cc69576F059260426e29bDccaf22711ee9F2730", BlsPriKey: "1451fd7e7af3e367b1965851a3fac8ecc269297b97b651eeda64eaa2a1f26726", BlsPublicKey: "eb2925d08a11ca706c8aa76da6d4985495623a677c866821821329f3cde724e032953042a7de5b0fc57106798e97690d"},
{Index: " 140 ", Address: "0x5F8a55259e904D8bECa6b19C728Bc933c6ab692C", BlsPriKey: "9440c692b92dbc511f910e49897d3f94c523c2579acca2ef4239c68c01c36420", BlsPublicKey: "13a7b78131fb06153b158111cf16549facad6a8a36208d9cbc809d4db22d40b4bccb1231395a5a0090b386ddfcc94795"},
{Index: " 141 ", Address: "0x5aE8A1e341D5aBF60F639E6ed878f234Ccdf03D9", BlsPriKey: "210f1827ebf42d2b691827c6fbf2bee5b1781f29543870f55e5a8d306332f837", BlsPublicKey: "299d56f61103e2f8891ad6edb6a3754e371917562b81bd1149258590ddf14b65fc63d01f736ed3225025187788d8d392"},
{Index: " 142 ", Address: "0x5b28EFBa128480AEF7c07536Cd5719eF32346ec3", BlsPriKey: "d3b765460eb90acedb4c091cad218f386276d4082fa86454be97e63de6b24530", BlsPublicKey: "3d303e0d4a14b5bc9bdb7cec22f6e374d93f128ebae129617ca5786b9f8bf6dea98b0cc6452b61e2721163a03dc22e15"},
{Index: " 143 ", Address: "0x5b780aA2EB82a7D3a2643360e69060ea12aE8d40", BlsPriKey: "eb476961cd8d7c883db6ddb23f7f6c2871d05d36c48d2115da9c7dd051948106", BlsPublicKey: "40f10d3759d07d6c07ae135e385ce9227b8987b9df6d1367ce3e5ad7253c3a21ee624568bd4a8d767fb8b7eec17c5082"},
{Index: " 144 ", Address: "0x5d64C1e6389f4D15fA1cc02e43F8Cd2AeCE89DD7", BlsPriKey: "b3fd13f17e12868b2a2f92fccd5979b63e167df0776899c74bfb0411878e4c44", BlsPublicKey: "1c9ff74ac079b208aee770e01027f68247225042ca7fddfab6a2593029a717642d34df4bbfd52388a25a1aba94b0b513"},
{Index: " 145 ", Address: "0x5fbB8cF80Fb9C582Cf77d8a307378Edaf3855fD5", BlsPriKey: "994111f63f0afa38877fb19f8ab203b5348fa3268e4687e73973b07000627920", BlsPublicKey: "e58049e5201a7341cf962250aef6e0521dfb26bad33c75f9d0785c87a86fd48c277658481dcae803754e5a37cba14f11"},
{Index: " 146 ", Address: "0x617AA0d05af99A91D7263D92F35e32909322E5EE", BlsPriKey: "b54adb8d48a0b167ca70bd935519abcfaebc1e6b51393f073c6477c0f7929a2c", BlsPublicKey: "730e961642da0a58622a3448d32f5641dddf533cb6dfeb95d9dd424935dba491f08117575d740437732ca9412952ca01"},
{Index: " 147 ", Address: "0x621bdbD1089b4297D857aA1289EeF311baF3f2B7", BlsPriKey: "c157e1d888cb12b51b1419b0d7bf5e0e97ffa9f6ffb77b191a884b5683d1e148", BlsPublicKey: "ccfbcd22a1edf4d18048e89efb6939459a386b9891d753f1673b335a342c236bbb1331526254aa64ab4ee8ee25069e91"},
{Index: " 148 ", Address: "0x631eF9cA4Cd625e0610e9808674284028Ad30662", BlsPriKey: "4773adb16b85053be1ab8eccd32576538f64f5cbf13bf9d0bc9f4ce36e841a35", BlsPublicKey: "f33f4a94808bdf880c4f6d086f0a5e36b781f7d9ad52b23749686cad16f877d94b3b91f7f12bb3e8f4f05778681a0a0d"},
{Index: " 149 ", Address: "0x65324a6539e78e476AA1e08396bcA1a141C93938", BlsPriKey: "94da2fd1612b945f7ce01955085d6f7038bb0de0353aec1cba21e4cc62240936", BlsPublicKey: "c013e4eb4be9b2571401726e9494bbb9ab0859154270604ff3b40c5fae5146c2fe08f4b54b8dba9eb93f65c140d5698d"},
{Index: " 150 ", Address: "0x6574854fEB55F3c04D24d34EB9AB6fda880EBA77", BlsPriKey: "fc2e56018889f4cb13112af31a60b5d1f04a1699a7200b3b6e8048bcd047aa56", BlsPublicKey: "76704bdfdfcece5b2021811d7926edc6b8dda2bd2dac8d336cd4153809d4e903b6fc1aa48749e368af59e7c641c49d0f"},
{Index: " 151 ", Address: "0x6746713E1E01F22809453a9A74669eC3f9B888fe", BlsPriKey: "68470f60e743a11e6bf6f6126376d3d649ae3285ec5078c64f3caeb45284633d", BlsPublicKey: "c371349637686e852409c76c00d14dccf40cfa2779c136006f1ac90bd5202c16928def55326362a125c6a9c6a7ed2005"},
{Index: " 152 ", Address: "0x695F372E04A79CCed0857cCB0364CC229b944C8C", BlsPriKey: "45d56d646bd37a955704e085b5e5b8346822a49486212d9499709eac8cff1b20", BlsPublicKey: "39ee9dc51357ec0d284e28e620b2fae04a810cf097e5d0dd5696a2590f4fe37a94027695bb9e544322e3aad4042f738e"},
{Index: " 153 ", Address: "0x69Ccd21Fe984E812Eb22023beA809E93707C940f", BlsPriKey: "7173aef583a4a18a96b69f5b875b6079493e591790df15deffb499bb8b902b3a", BlsPublicKey: "44fdbdfb94d0e89f9b0ec0c89438378fa3f6fc4ce005535a8561d9eb2ad7a45fe9d3ecbf8a2fb23e90cdbe309b896b0b"},
{Index: " 154 ", Address: "0x6BBa4A8e29dD2C491b493dB83F648ec822B2a73d", BlsPriKey: "d0a56572b6e5780470dc20cff364502d84c26d5414d267e9d8eb6b82d8ac6436", BlsPublicKey: "7c883b5e6399cb72470825707b8b46064abe9213121a4e719824c504d190f83d52127f8dcff9a5e077c6ae95a1be520e"},
{Index: " 155 ", Address: "0x6D24Ac5F7702c552dE9F2d72d4e0F6F01f786f5f", BlsPriKey: "13317e3d7d40d51370a516e171afbe0bafe6e646a748d6ac6f799f61f2c16b42", BlsPublicKey: "65e0b1acf0eb0be04c6602470a69998cbf3a8b1b2a82ce708bd88bc726e13e703139147911a2bcb2c8c9edee67734697"},
{Index: " 156 ", Address: "0x6E1401fe11502f367C5f789a8379e33Db3a934F8", BlsPriKey: "78c2e039f14a60fe400a1be33362302463aca4094f2dbc6b10181a3e507bc55e", BlsPublicKey: "00af6f1d1f1e907505065e00360f8ba34262fcf690c7a06408cb8e5d6458ea7d5c4373a4385a348388a6c67777b6a58c"},
{Index: " 157 ", Address: "0x6EeB2b78CF742745ddf3Ddc88C3519665ed1b4Ef", BlsPriKey: "648627a389be8a784f9fcda2b4991cd88e08428d77a49a67368dcf0e9bf6da65", BlsPublicKey: "327d6f4c190b381fefbf5addc6c4225bd207140eb9445b3709764eeb236f719d8f407a6b8923fb082667ad27af919a86"},
{Index: " 158 ", Address: "0x6F3E52d859Cc49c095ea1336D55098670a3a6b3E", BlsPriKey: "f08e2d684d763a9391d7b24c84d15d213fc1b85091aa707728c80ccd8baeb155", BlsPublicKey: "848e6c6fbbcdd737c73cbc09490baa23d88f7565487bb5db538ae6660a68e40793a3d86489e7fd493e72e80e028b7413"},
{Index: " 159 ", Address: "0x6FcEA1b902493E2dd94D9EA490700E6B81b098c1", BlsPriKey: "d7174a56999e52219787382395dbbd44151299fe79987b26e1cacfb9eb674710", BlsPublicKey: "d0bc7dc74624aa6fbde7e91f4072cada254407b8bdc11dcba015ee2a7ee37a1277b45e56df551562ef76c1cc49d9658d"},
{Index: " 160 ", Address: "0x6bC118200f6D273950F957aA2156157cF751E681", BlsPriKey: "17418cfb5a52994e3cdd2b47eadf3b16c941dd8459e2441bbd0c206f04567617", BlsPublicKey: "414ad4605c9760599f0fb716ffeda7cf1716695d359cec934aad22a355409d1f422941fa3be492f8c0d276ce3e82fb87"},
{Index: " 161 ", Address: "0x6d3Fb5f10ae1347b5225BA61dabFb2F7A5F96D0D", BlsPriKey: "f9a1311d8a8a14a7992a69137e02a5e6279e5d8ef62a50c71ec4e527e5a4a672", BlsPublicKey: "aa15db689d44ff62d2bc98106f81b7c51624f45eddcd0415a12a63a8aa28fab2fd0f9776a504eade3077dbd26740ed17"},
{Index: " 162 ", Address: "0x6e923376145EE43671B1F5f6B259eE08EF330Ec5", BlsPriKey: "e48af4aa31adcfdeb815efe9589a101bef8e7328427652854cd1fcda3d74f926", BlsPublicKey: "7683444c50199ed104f7d36065c684ac07ecd7b06982c4b1d3ed38007334481167cb5a8af2934ffe16c33c7746cf1e97"},
{Index: " 163 ", Address: "0x6f0832Ecd5361288Ed0E0897191AeB80fef3E918", BlsPriKey: "6b41103234f515f1889308a6f0404757bfea3b9fff74a2c7157cd37ef199ee3b", BlsPublicKey: "4681d4676f0b48b55aa771bcc1e1ea77b5bf865c27586979f329d40e220baab013371c8eb4a2f37d1b44555030650f02"},
{Index: " 164 ", Address: "0x6fE418ed174CBbc500DB471ee49179e9A8DF248F", BlsPriKey: "d2d75e87b164e79baf820fe5ca043a395de41792d3a31556792f3268876d2270", BlsPublicKey: "9781ba32f635832fcb49ef23ade67494a4a73043e90ac9f1e142d62e96917c8479c3f907f5725f61d97594a406c76108"},
{Index: " 165 ", Address: "0x70302fa02bC4b603be3F475531163f8bC83EA7D2", BlsPriKey: "466820150b55cd7c90e76ec8d0b2bf860177dfb3cb451cf42669b6ced2aeaa45", BlsPublicKey: "edab7b27c7fe0c81df0a1dbcbd874d0246b09add438559d0e2b94b5ff86339e0edf515f329177905da6525ac52346e8a"},
{Index: " 166 ", Address: "0x7057dFC56072BCd80150fE810b2c5AA4Af96c549", BlsPriKey: "87ed77b27a7b356a360b9e85138613c878273eb02664be13c1c4c39b72fef752", BlsPublicKey: "bb6641d1e0f770ce456f30729e91683afe087765e8a2f55de47521087d5cc91a1a5d3601f7efdc7f15c6ddc35d132607"},
{Index: " 167 ", Address: "0x7087194e46d6766635261ECfc8ecb8aee43b8cA1", BlsPriKey: "6705f38afa72e22e60f88a894e58b46b5442b949af0197b29c09523420880410", BlsPublicKey: "b232ed31fe981bd9d1288cf33567343c1e7fb90a52ec73c2418903d9c81122f6bf174bef2de0f156cbdbec8a37e23a84"},
{Index: " 168 ", Address: "0x708d570a7b0E974cc3D4A4bf363674454c90c84B", BlsPriKey: "a24651aee88ae6ab40e9bca429d774058ff7ad2c294a5d4bfae1e097dc3f1171", BlsPublicKey: "07de0c18c63ffffa4c149d04085a7d8c80e4958c9938ebecb210f510a90cce595231f71edb99d74499a1429453194d81"},
{Index: " 169 ", Address: "0x7200724064D7a2db5AF9260E6A14F14fFE9eCC9F", BlsPriKey: "85242d0d5833ca94d17c5a90b9ff65a2e2fffff03d31180e7ef86fe81ffd002a", BlsPublicKey: "adc9219611932358a6533f07f77b1a08f3034cf896f05369efea67af1157045af34287ef14d2cd80b297684734981404"},
{Index: " 170 ", Address: "0x7234E8dFF697f93cC5945b31953303bDB997418e", BlsPriKey: "6ec5aba7a62ed3aa6d8465cf1ed4c8d50295464f661aa7e90618df215f38582d", BlsPublicKey: "1c73fcb1436928002b134b7dbfe9abc84a774a4bcd693a3339692e3d59373e940a7874e2294b19e99fe28d436f1b8289"},
{Index: " 171 ", Address: "0x73BD0193121a53bbDC768eBa6AF393Ae86483b31", BlsPriKey: "b573b86f453945ff4ac93e78080ce9a6db46775b4843b2be9c08b76465f2f11b", BlsPublicKey: "61165a6f21db83ab68c6a1552e6d6f6d455a91c8766b3c47f928e208a262655f64f74b8ce4860e5cff4e340e9e2ba001"},
{Index: " 172 ", Address: "0x74798b01776702994aA567E4cfdA313057360744", BlsPriKey: "82fd8ae28eda22f2b38a29303c6aa4fb6b1c40d47a434422351bf4f1343df323", BlsPublicKey: "4ff4df013921690cd2300dadcc6b7beef7f06849d2c21c9dba97d834036587296e0a88acf28d26d3152abde0c7b2f78b"},
{Index: " 173 ", Address: "0x74B368c634AC7c4a78D35AdaD4D631d31697bfF7", BlsPriKey: "63f9b91b632c938f5a8d5d7081bb4784b4107a7c190d5f6404017d9dcd078936", BlsPublicKey: "753e35aafac02edbaa16c2d688420181aad7f0999b81104ce3d11610ccab18dd5f61a9aefc7b71b4ecc6b8fa75333391"},
{Index: " 174 ", Address: "0x75d7ae6361ebB756201e044aFf34c91AB6b8771e", BlsPriKey: "02fff33c0a613ab804ba7e2d6cfc64272f1db6491d60f122d4383f0a285f0127", BlsPublicKey: "9b4208bd20092b897cac76f1f18c6635a6b81e20f5d5e7febb3285b154c3ea21722f2e6cf4fec876321878522a86c016"},
{Index: " 175 ", Address: "0x7612Fda7865d441BCE510509f4ce29191C112B86", BlsPriKey: "979777b2645e0a9d27f9df4342b3d47297bfad289d846320d927ae07c7f0cb23", BlsPublicKey: "b6753e5d3d04ed4afe17f6af63f1e212d5855f2fca3b4e6eb80fc9985aa2406bea9fdd971cec36b9956c908991b90500"},
{Index: " 176 ", Address: "0x766B51338c6C4F7De2d4f15357bdbA4B877C0835", BlsPriKey: "940a8d926af02e8d420b5db62c77232f59c035f7f39d4166135af5f2c24c2608", BlsPublicKey: "559db20449052e52ae36f25d9256f47a1bfb5b79f2c581d47bd0eb0c7160d8d0cff07f40fa6a1871d56218cbb949fd95"},
{Index: " 177 ", Address: "0x76e2A98706F1d4d01e2FF1FE6D8e4609A0622Fb4", BlsPriKey: "be5e882e012ee26dfd026d1fe68bcae4561f493136e46972e869f253b7a8e335", BlsPublicKey: "9e1b51139a43369fb04221bfebe2bd4b32eafc9629bf572e9af2865669d818165895cbca958d6237253d649db1f95309"},
{Index: " 178 ", Address: "0x770b8e3A35Bff512F173cE152BD1220d82bB9de0", BlsPriKey: "ae8e83c2dda35683bcb52ddba3aca7efae0bc5719d6aef296c47ba6107f02e3b", BlsPublicKey: "49a534b5b6be48890ae4e363b204434127f31396e7a452b6611000833de9445fbd314f40d417fb3ecba2f7fd31843b86"},
{Index: " 179 ", Address: "0x77229fA6198791D333F286fa8360946042c65337", BlsPriKey: "dce6b6551dd63046fef127d18204dcabd9c0a2efff5024cae86f0d5e954e381c", BlsPublicKey: "8251c0223199854be1cb3b9e0aad9eeeb80317076123c4132e5339e8f0d7d1a777c5c37984652d483358194c31a48a90"},
{Index: " 180 ", Address: "0x78404079f5081A5Dc38902b47257c0D1D4e2E028", BlsPriKey: "cdf0bc45533e55377572b1393eabe3eb270b6b495e9f64741d7271a10a7ffc47", BlsPublicKey: "fb759519c0c8a91a8de02d71ba1cf10500cadd8f59371a5d9bea6b02a22b79d16e75beae55a637319dc268178bf4b998"},
{Index: " 181 ", Address: "0x79BE4EF66f3cc7B5b379F85353873115aeDbD242", BlsPriKey: "1d91ae936dfd994ae3d733cf660d83c220951f02c49f2966596432a110c67b4f", BlsPublicKey: "961ec5a0047c585a93e8117872e5b5e37b3450cc7e2e4aae9e06d50f6f003aa5d2a298d04828fff25aafc823a100f219"},
{Index: " 182 ", Address: "0x7Dc053eAc8613229a6c316Fc436f100477571EE2", BlsPriKey: "1af64c8a54ef654f423654b21fcf6c93608d744bfbfb066878fccca3c3260408", BlsPublicKey: "8cee0faa3bc284ff2a19ce7124dc0092b006b1786994ed9bef1ab01ea7f2aa64fb1d230975ea9f2e590af55c10fc6f96"},
{Index: " 183 ", Address: "0x7F58C0cD5c255020Ec94425873F666F1D68FBaA6", BlsPriKey: "4057a43ebe920b4e77edf917cbda115aefe8879c818a14b850238d17e3d57963", BlsPublicKey: "121cb2da7ab0b5ad30739b8d94686579944a283f7bb92721a2c785f2d9c4fc1f3a3027a3a6888f7da6ecf92f9d5ced12"},
{Index: " 184 ", Address: "0x7F686454f91A68cC3248a642F59aDb2970e84D8e", BlsPriKey: "4e377543f022c94e5add8379b7a6483ae57182ec33aa594ec92e03cef6900b3d", BlsPublicKey: "4d89b55a7fd7add8c1a90e9c88995d2cb10118ecba52a91c9a2be2eb8014ff792319b6ac7ec55ec919852191ca2f7a87"},
{Index: " 185 ", Address: "0x7FB5fF6e7aE8279F21B843Bc297b24bFbC45733E", BlsPriKey: "a9fae4d7179af52e732f34acecebb3a57d4c19dcca587200115fa1c46203d716", BlsPublicKey: "a2b1cca005227c81ab0039f8d311f54c87408b8d800b5e2f5f7361a0abafb130a9adaff0fa9071f8161d1ecb7c406e13"},
{Index: " 186 ", Address: "0x7a22ff5B8483CE859757Bc0Ef7Ec64d11421B680", BlsPriKey: "3cf1a581ba45cf4a54f45f50e170e777c6d89a49d3886c4306b6201188bc8345", BlsPublicKey: "caa9e05610a65a360e0230e91918a668092344bfb5bfb53c2101b8fb08b4791b94aca091ddf73cad30f851224c677617"},
{Index: " 187 ", Address: "0x7bBf40bD603B2434A964CdF979020B1E0E68E13D", BlsPriKey: "6498dcb3ebbdf3a76676aa1a20aec00137ec82341690f95d71892d3527320e01", BlsPublicKey: "778dc6f437d03d114cb4a1fc027bc8a451f5d56a36d499baf9aa1394697e5185f0ff01491e89a5e15ec652664057c90e"},
{Index: " 188 ", Address: "0x7c14C7f6dE1f39579F7ab8DE24c168737E3FF53f", BlsPriKey: "e15aed53ed7c7044da20e89f84275ef59d9b52af17a45da13fd935380ddfc96c", BlsPublicKey: "11217c023c884bb055893ad92a7256ddb3f6ab0337322399e09e0717cd7f02ce844314f9fe65003e03925f68552e5992"},
{Index: " 189 ", Address: "0x7cc507b9345a58B5232e16B49b02F365bEB7d91e", BlsPriKey: "041b40b44e3da920e90db1018e587bbdba76b059a9ba6f1b077bb1a7690a8a42", BlsPublicKey: "4a7f4170efd7b5f07a157e1423a74ec3c03dcc8ecc0f15640191655b18dd3f0f5b01bd9551b8651b623f8e6bc7ffd010"},
{Index: " 190 ", Address: "0x7fC313531F4355CA2C0439f39b3Af2D419A93897", BlsPriKey: "f826915c1c14c7537e88716de6acf9b28740ed91f40d276d3f0eb8d94ea99b65", BlsPublicKey: "5f4802d47c4a384b29df685e155cc45a45bb18c397037af9e1c2f336aa778beed34b5c05bb06b395031fef952205a485"},
{Index: " 191 ", Address: "0x8044Dc039C1AF68a580210379B8562A46938c449", BlsPriKey: "83e0d32d607ef145129133fa125e82f34c94138b5d79a744a9332ff7abe5696d", BlsPublicKey: "48eb5d101cd9165f06a1a50c21e0d7e18422aa838134fbda99fb628d13ba57a4d342715fa145a247c80a7b6ed1e73298"},
{Index: " 192 ", Address: "0x804a1CE2387874E311e966c63A02C67dB15f2A87", BlsPriKey: "4203a4b0f485f943d35b5c9312eea79cbc29afda41abcf7faee02c3beb4f0b35", BlsPublicKey: "106763ef767f063b7380fb6973eff61d797c8156fd5d2c552628fef3139639bbb6995c7784c3e6af78e69d0d35da158f"},
{Index: " 193 ", Address: "0x8080ca14e1b3466b3b13441cDfd0f413E0BEb67a", BlsPriKey: "bb0832c2e4051e5b75acbee816680c777b453f41569d8b62ed447e2846c69918", BlsPublicKey: "7d7c0d9c28682f9678441a12692b372b6a49b8967e99c6df13969aec8d3fdec49fd23f23ffe1fa48e14f738909c20208"},
{Index: " 194 ", Address: "0x80FBE7a01D593aC28CA1fE12E9CE62d6E2a08e5C", BlsPriKey: "8a1afe54881195db769e19aff8ac8620f565bf536332a452ad21e6865c6bf86e", BlsPublicKey: "120ea3fb602639a0f74aaa4d844efbd9119dca87070f1aba788c3a5fcaf2151db22d54af5c352b186963a38049356c04"},
{Index: " 195 ", Address: "0x81237F5d14F5db4d6370D353e3F5952e7aaae0cd", BlsPriKey: "d03a76a9aaeaf099f166717a5c42f96776294971ae75cf62d3c33fd1c61d215b", BlsPublicKey: "a23751100836271788c7713f81181fbbce6c9ddbfe0e2ef313b82118e625fbbb7e192d92f90a5103ac4f5e70f8371801"},
{Index: " 196 ", Address: "0x822D6E108e434A3C2B27E0890C5DC3936D009560", BlsPriKey: "b8a4f97f396bd209d4fee1a30b1ffee79d9c83739e9bdf3227bc08030fb3231f", BlsPublicKey: "b602d406e9bb28bbe2f2e539c517576d8965e7922c7d3bf5541313b8721f4eecfdbe8a522cb0810edc963e295dc71094"},
{Index: " 197 ", Address: "0x82375BA85Dc7F301f6609a39E2C3FFccB1433d5e", BlsPriKey: "1070ded9f817d8b50f18b736ba3d6c4e7e20d65e2156195946779972bbee9536", BlsPublicKey: "3eae3f9f5ffc91b7a5d137f6be988e2917209ae93f6bd8cc47742788d5f4128e5961fa328861fb6ca16416ecaf514087"},
{Index: " 198 ", Address: "0x8244c534557d3d40caD3771EdeA45d394bbc3f60", BlsPriKey: "adf4021802fab7756e9e17cc3232ac55489e82de3a435c0c5f04f30c49c2d92b", BlsPublicKey: "01965c19bd84c226faeec5e0f43ff8c5525050e45c183d59fee76467e2fd59e1128cc9f112b80894d3fb56464e53a499"},
{Index: " 199 ", Address: "0x8265cb4Bab2c82390776e17ACCfa0D5EaA785e05", BlsPriKey: "f0060b110bf83cd581662e3e8bf416619ea4342e6c9a7020be7fa38e5d23f925", BlsPublicKey: "1da80dff575337aa739f16bc34576ffea8ea6c7419ad8ddf135ad92f57edd69eb35c1d7663e52f13a6758f615e0a7882"},
{Index: " 200 ", Address: "0x843836cd5F7FA674a8394bA7029E5FB6C1Ac445d", BlsPriKey: "6ecf1c1fc0c633d02183fe0e4f3c14413c0c411690538564931ef9c2bd19cd3e", BlsPublicKey: "9c0bf2f64a06cfbbbd624c21ae54e4dc49f74d90580c51febeff8fa326982a93514673bbb50b7c9130640b22eddcdb16"},
{Index: " 201 ", Address: "0x8472C1E3482439e8ab74707A37AfBc1450744487", BlsPriKey: "458d298a9c1b9e4caacde66da69fb7142f08b1fc8a520b32e5bdb84415b4db22", BlsPublicKey: "72810a2ff48e0f4ce040d8d68f1eb3a5aa3d82dc39b21403b39aaadfe42856c953df635db3126e4169d62eaaaad1e693"},
{Index: " 202 ", Address: "0x8523F06c816275Bf969935d81c3F8a567BF5C4ee", BlsPriKey: "c40522909275638c55cfdf6881ddc725bc2cd3c866659f34efb2e9061a701634", BlsPublicKey: "6b072a7e62ecf7ff9bc0f635dd42931ae49c8f09a8641989e154dc8a37548711e3f797e9530798842d3a5bacf218a201"},
{Index: " 203 ", Address: "0x8596ddC36ab3AdF720519D872446D93E3dD56b9B", BlsPriKey: "6f97fc6608b231ab51718289350fe50e4832ee3250eb7e9a53d327d7c54f2705", BlsPublicKey: "d768b53113b5cc963bfa288a8356ce0f3c286cfcce61894e15becb8cda5a54fe786793a98ed32443d9098e0bc496bd8c"},
{Index: " 204 ", Address: "0x85E1bADF991A19013282C956f1a64CD468832465", BlsPriKey: "93a878a165b5917648a832bd67332259ecc4cc6d48286b2341a8182b680a981f", BlsPublicKey: "57cf328e603cfdadaab33c88c85f97edaa98cbc9fe7321f2e4312bc00b62ad3405dee927595a48e135d756e9e590020f"},
{Index: " 205 ", Address: "0x8A61A375d192c324348a590387fF9385137e3516", BlsPriKey: "8d0121ecfdbf14ac2e61d69010d1789d073d78da75d0fc8c345351aada89320a", BlsPublicKey: "5c8938ea179660455c01b362ac4a1319862fafce14911a3f9f02b70cde3680c2744bcedee67dcca09a4198a1833bc897"},
{Index: " 206 ", Address: "0x8A74D5F8Cdb657DA50BA3670876b0928F2639375", BlsPriKey: "42468dfd0b42f7fdd2c37d44683528b5ad2f007bcaa13643f4d5af32ac49fb4d", BlsPublicKey: "fc0aaf0964c7ba1d4cdcb3c01625c74200fad58e780ddba1e80f790c41b6f0efd366abee5ce725ee5abcbe173762fe85"},
{Index: " 207 ", Address: "0x8Ab219d5F9FFEB2E05631852be69F9Ee16192b53", BlsPriKey: "a12547fc0358dab7ad43e94a8a95aed2efe26df3c139ad7281511d25dd4c091c", BlsPublicKey: "d9ab011a4cfa46108ed32dadeadb0c778e1ae1d56f47f5fc3d0e1cc5aa7e5ca50737d816f578c54330f92c2117731d88"},
{Index: " 208 ", Address: "0x8AdcE99aABDc8e149807A4ee3Df76a85D726C76A", BlsPriKey: "288cd70f39f3f0f17b1e69323080096ac8dc4b77e168217a684480ce85c50307", BlsPublicKey: "7afbcc3601b6bc28afab6ecaa8fbb37c54649c1d34e810fd521fc887f5ebf1188b593fed7b0f01a1aa0cb4a96d880b06"},
{Index: " 209 ", Address: "0x8B98C8f1aCf11b58f30aaac600b8E72102E9393C", BlsPriKey: "bb7888370ae6a76bd8b31ae0dd214a7a03a571a63269aa83bfca362007e24f61", BlsPublicKey: "650dcc52f189fe758a6ecaa8ac36dba0a649febde1b3da56ce2b715ba1f9af1b42f171683f2e9a55b1ae6a262773fd19"},
{Index: " 210 ", Address: "0x8C0090401130aAAdab6D1bF68E42d66cbbd05492", BlsPriKey: "0131f23a6fbf21bffaef33bca666b7168ad0592366c1bb56f41ec250c191bd69", BlsPublicKey: "17bed8edd6d5b33f05329b6272a54313996f4a04457a5913889db017723c94cfbde075ec4958fa135383f082d2f1e48b"},
{Index: " 211 ", Address: "0x8CcFA7D08aa57BfBaDf3F9c2398618FeBC6242C9", BlsPriKey: "6f8f97dfa9ff60b86c87db5790f6f5a461387d672573e9c3c3d1aab987064570", BlsPublicKey: "7275ab2d16bfe128361dec9a8c93109ebf0d34bca4df4679968d6762f6f590541ab92184bb9eccaa856fe4560235620e"},
{Index: " 212 ", Address: "0x8Cd0FdaAeAB633dE1156167c4cFFAFBfd1115262", BlsPriKey: "9aa7a8b03925514edd349511341225d2be3d21c4fb982ff2055ace9d8ef6cb15", BlsPublicKey: "f69ffda0ee8cd9cce33e298a05baed3be68f65b5d7f4d7968b098c6db0d06ecab862f4bd573961b972d0945008b85811"},
{Index: " 213 ", Address: "0x8D83762E8aaE86c89C7BAa5a7d9Fb3eCB0520c11", BlsPriKey: "4b46ffe08f03918aade956d3172e6cfcbfb7a091e72adce028daf83e4dbd1a3c", BlsPublicKey: "7aa4937ea49b492852dd9b9e2f4f27bbc001b1989ccb8f7c69ff6f4100e3357f736247487e4a0a21679580dfabc86e15"},
{Index: " 214 ", Address: "0x8E6727f22F99a544DE88829547be11bFD15d2e74", BlsPriKey: "cc467316a160bf7f32b49e75c03556c7c534bf6d7568ce2d21e7f99020c12e35", BlsPublicKey: "e3020d8e76d59201fc31d79d2368b90da9406fb31e348f79491044f62103f898fd177e7326585768bc180f26e1a1148a"},
{Index: " 215 ", Address: "0x8F70bae25fFB3b4769ba03f7F25D41011299ce2F", BlsPriKey: "6569207f4e9649ef70f252f9893f9ef88352ece774e387dcae55f4d676a5d112", BlsPublicKey: "9b96ad80137dd82821661f5048420052e4c8a997054b8717171ebb5a04fcfdbb47b8d61b13a407f04bc02698227ebc87"},
{Index: " 216 ", Address: "0x8b870d5E5D1c7F8A883d033f2B191B9A753b7505", BlsPriKey: "09c58267d1c39aa48f19b51e9370b676bfff9570b1c1b649549f996b8fd4be38", BlsPublicKey: "e13a9d979f261bab616e41dc133a84d08d04d30a5e46811c740b99632d98601125579f4f867626d3d343e5efa0e4b688"},
{Index: " 217 ", Address: "0x8f16F6397D1FE318c2C99f7393Cd0AF18c6e9400", BlsPriKey: "4429974752c0da574b7b58653a781d3d94e27a25f07e363245d651b39ab5a94f", BlsPublicKey: "b5286b617b1b68bc372f727c3a8326e3788e0b775e76371cb3c6f5c5607a7ca7f099eba80eca265b8083bb169237ac0b"},
{Index: " 218 ", Address: "0x8f1ACE0ae44D9fdCF5E6f5499fA8622e8EcD782D", BlsPriKey: "30d5665a55ae4279d657d27d517739a7855a6ed313c29986f3cbbc7580db871c", BlsPublicKey: "c5162b2b9c700cb1d882b92cb60a170ed7c73038b1326a73c42685635701708bbf2800d0d10d05b8b99208ea6ae6d98a"},
{Index: " 219 ", Address: "0x91136E3d84a594A375A40dAb2BF0499aBE4af875", BlsPriKey: "c89a9767d149bb89c71997dc161ad34189e0527ec51a69a2108b5e457a200550", BlsPublicKey: "98d008b5250332f00e3e2e66097129bd0e8924d0baefdde24ac199e3bcbb87fe9574f55a258705e1fbb0df38c75ed712"},
{Index: " 220 ", Address: "0x918c7E1f1CEdD25415439786A53c3C35030beE0B", BlsPriKey: "e4a87d8519a350c96e81a63bd55a825fc2c511d3e0e723b7af03600123d8db15", BlsPublicKey: "c44e376b40049abde7a6dcb6f93b3b6f8c5002172a2a09b9a365a854c7c7615dfe787b27a1a68900796b49bf46dc8793"},
{Index: " 221 ", Address: "0x91bD0CC6c2016DA1B1AA798eE7fC30f6a3327d15", BlsPriKey: "10ea1e6185177f7165bca70da9312c31cf5f2f736043185f0bcee5b0aeeb2c54", BlsPublicKey: "64fcd07c71aa7f3641cd4c3007f44a22771dd3457952aff4078b4fec5dfca3fef385d774258908262dbe3872c13ce189"},
{Index: " 222 ", Address: "0x929Fe1f0Bb4E21704c2D63c12fd563553c77E912", BlsPriKey: "dbd9899991ed3cfdc6dde112c0578fe0a4d1987b594140ed236d77608ccb9873", BlsPublicKey: "f1d6b9829548987e64f3868c85ccabbe431a129e3e9741c8e6523bdd2a919830ee0fedccec44095bacfdc1c4df5a4508"},
{Index: " 223 ", Address: "0x92d4dBCb8809De9980aB8F95C573DCc1041a346a", BlsPriKey: "a41fd599bbff81fbaa3aa6d0ea1ced98fb57fa3ff505d89fc812a9ec33441136", BlsPublicKey: "7b427511768e792d0699bc5d42169bb35e5bba5b99cd5803134a7241c7aede41641a8260523fd31ebd72a0b4ab92b409"},
{Index: " 224 ", Address: "0x9423bD42443Ef279DC3b73f20E1c4223C398A12B", BlsPriKey: "84be0d4beefcce4d93af2ac3a013efe34bec43df7c0bde6ea0f3e2681c26dc2b", BlsPublicKey: "ae5fa07d8fd26641c09b8fd2e041ae411d0d6c05a3948add71df9d1f3db2766d7896fb7cae779829011b9697bad75f8e"},
{Index: " 225 ", Address: "0x94257dE2c456265883152Ec7a425f054631bC39A", BlsPriKey: "ac5c5efadf235fdb0398e47a782d84763f85f9384bc3dd9b07c046d0ec85c733", BlsPublicKey: "ccdb6517ea68deb3411a416a87f51d4cb28de468e34179cc6fa6bc840d998f78e1f65e8516144fd4436fa9a82b4f060f"},
{Index: " 226 ", Address: "0x945D919f1035F6D5fD480800500F8fC524eDda56", BlsPriKey: "7022992ce52c7e74219b2f4033beb47fa84cce4f0b7302127a40dc131f26fc0e", BlsPublicKey: "257e9d1d01902e5cf4938a2d058d2d1f0ad039f517298064c87d02046a37663ef8fba075fa652911d248dfef43050608"},
{Index: " 227 ", Address: "0x949C42889D7A48641D84E104E60A2ed56a1aCD7c", BlsPriKey: "125ff8af7b7445e4c0ca031e197dbcbd94721e24138a11ca50cd0aaad9cc340b", BlsPublicKey: "5d196430fbe751e4f33b04ae45951c87e55b85cc9f819580223f06d0136e7bc266efddcd8827c6e909ec0b490b40fc97"},
{Index: " 228 ", Address: "0x94cA2706dc707449E56cC72702a6D9C2a1aD2E5E", BlsPriKey: "5e20c22f2f1d5e3a8b81a5975a59f7eb69845655ab6223ef6972efd96af5275b", BlsPublicKey: "6832e83e5d6cda09c239a5a1b841e6997b98390926d0ec8b5ad4e72cfeabb8fa453c525dfc9d5384fbd630e6ee9bce8e"},
{Index: " 229 ", Address: "0x956545e1eA3C5Eb90E71E33941307A5498F0897F", BlsPriKey: "b0bab1d57ab9839272bbc43bd2076506ed8c646cc5e4ca186df990f04c844423", BlsPublicKey: "847f3c7ef61bb890cc6eb774ea4f730d0efc8949c4bb15fcc3231b4762727fc16bd651411efb1c1e35e02eb90ad4d710"},
{Index: " 230 ", Address: "0x956c3d59b33e1B794Ec0Db0825E4bFcC0b68C7A2", BlsPriKey: "1348b13acf8c43af78485fd066618bbf43c60165357c7f8918f98dad6a1cb853", BlsPublicKey: "10f4c90b1d18e63f332d6c94e8bee37ab787c36a3356c2146250ebff3994f511065b68940de27d91bec1563f86b4c282"},
{Index: " 231 ", Address: "0x95D04aF9290982333d2A647Ff994E5ECDc9A6d5C", BlsPriKey: "8842213e1f3838928087567546c0a88e0a74ba114bdfcbb7badd530f4be7631f", BlsPublicKey: "0d4dc0b70339c906e85ac82068526561dfe646b2687f52ed39b0fea5cf1cb1f4e91ce29e4eba5016dcc14e0fcced2788"},
{Index: " 232 ", Address: "0x95E0D358E5FdDF85f4266f1AF31C08D269A1Bd0C", BlsPriKey: "bc75b17d0c241b3f8a461e591dcd86f0dc39e9bb53e13d0938430cae105da066", BlsPublicKey: "62c70cd18cc5249b3ebb00836d3c109237b7596f77979851315767a58f04062e5fccfa94a89bbabbd76d8c4dec36b518"},
{Index: " 233 ", Address: "0x9637B9690f424212eC563D27faDfb5405d87ECbc", BlsPriKey: "b4c4b1395b0c947dfd96dd93f8b85378df2c6c08b64fd4bf95eda9f23add9f3f", BlsPublicKey: "372aade4eb8fa5b179ebf907a7eb41e15188e33fa33819c057e51eccdc1073740f119c964b197e46de152ba4a853d811"},
{Index: " 234 ", Address: "0x9699B184547c8A72E2720798cc844483829AE364", BlsPriKey: "e5e0954b126950bb3dc26406adde3182724949b0fe3f8f0c5c47d7cf00560339", BlsPublicKey: "7dd9cbf48953951ca7db76d63dcf9a19e5f8aa712519fd8ca4666b5f5c58a33a5192d7567441f53cc54e0879aee67880"},
{Index: " 235 ", Address: "0x96bEBCB6c547e24071360fE52c8DFD1EceAe1159", BlsPriKey: "d2bc924451707c627097a82ab750d0755e871cb316564ffd95fa883fe2465f20", BlsPublicKey: "ca3d3efd16a5731edf1568cbc3f4b28cb4db5a6a3d0f7a7a85a63f69e09dcc31bf876782902036192d332035a8aefb81"},
{Index: " 236 ", Address: "0x9747CC556515c00E2966fC83A81659D6C3977Ff6", BlsPriKey: "c40eaec35a42d801a879786e4d7d42842da52799d5d6a28acbe44ef0897c8c6b", BlsPublicKey: "289b95fb8933ff6be6791555b9b56f841caa5226c9783e1457d223348da01fbb3cd9b4a082737698bed38a852631500a"},
{Index: " 237 ", Address: "0x9862aDb98793D1a25Fe75EF315DFa1f3a2133652", BlsPriKey: "d7206827ff45ac69dde683de4eb6493eac17acb4aa855c216a8b212b8598ab1a", BlsPublicKey: "7d63e5d2b158efb015f6a42230d3f4b340aa0cdb299761a5d1b4d158ffe8176f79369d27294310b967a4937bb4762d0e"},
{Index: " 238 ", Address: "0x99F5bb9F80643569A4AA8AFfEB64FeB06bba29Cc", BlsPriKey: "4760740bca6328e00b7c4dade8305f46fc92b1b775ca25a416c4acb3e12e8737", BlsPublicKey: "0289f1278dca0032c930d7260575e22d14fa79d0c188c79d07612406513adb019f436c4af5fd104c3f3ecc029711aa85"},
{Index: " 239 ", Address: "0x99d2ef179790030eD3aEBDC0E471BBDcFA6eCc70", BlsPriKey: "666cc194602ad0a76cfaac150d23f78811c4f73c6666dee3d9ccc75465785b08", BlsPublicKey: "9351d639df7a2bd07a3e8c5fe8112e3d3e958f62bddd3956757f735d0bced7cc350c5a6898c1393cc5846f38327dd089"},
{Index: " 240 ", Address: "0x9B844e64A50a1495e1ff67587b9AB44d47129F90", BlsPriKey: "f0e59ea1b0650f4f4650ced8195b97926615090871e4af6b8858cbdaaca23765", BlsPublicKey: "ed26434e12862d92b0e68a96ed06f232e61b0f35a9ebab69fcaf55f2816469f4e262bf1c8711149f473de6ea4c075302"},
{Index: " 241 ", Address: "0x9DCd46C76f46e0C813523b8E1f180A2D5F37831A", BlsPriKey: "fcd230958a8e189243c3f1a5315949f3e0e6776727786099c54c61469ea51e4c", BlsPublicKey: "c261bee7d17b63a9ba98104da148af939869bfd43f51b9c3486b46ee3be5a95e8906da4036b77ab0e6ec186a2716fa09"},
{Index: " 242 ", Address: "0x9E715388FA18e42F05373396dc4333199BFD6309", BlsPriKey: "334c4b148a5e284eb654aeabbf1764a4edf20ca08d066c9a2df58e39194ac609", BlsPublicKey: "7017bc51ff420c2cb7e1128792d6e4bed0e9d0a67cf891f72bfba049c24616e1797935904bb9e19e6441215f9665388a"},
{Index: " 243 ", Address: "0x9F59275941150FC43215B66cf0Ff8e806CD13F85", BlsPriKey: "69cfd538f35a969c1d64483312a03fc93b5efb7e03f4c49f23c971aceb851834", BlsPublicKey: "528ac7648a48e9a6650b43a01d778b2274f19378190920c74be9eba88bba99d1f5df6a795494c35c1eb886d09b57db8b"},
{Index: " 244 ", Address: "0x9b353a54E0bd19EB7849252df0d48053b0B40fa1", BlsPriKey: "9c07eb4035c55abd529160c3ac54a7961b17a02014723b97989edfbcccc3bb44", BlsPublicKey: "ecb5ccaf58abc85f3c6f1cda935aeee03a4883d19a338e082491b2865ffd7328399a8607041223d642c28d37f52f7309"},
{Index: " 245 ", Address: "0x9e6BEc699cF0BF5ba303C230711CF18172CC65f0", BlsPriKey: "b5da74e24502d5c6731d5a1b3aa49c1fc551d2193aa66a8f83add44ab02e8a51", BlsPublicKey: "7ecbfd63de1f32e8104041dc521de1d67cb4f8472faafe3758379493926a3e6e4f27b90e094d2e32642efd329a061396"},
{Index: " 246 ", Address: "0x9eBD19bcEB9e8503055d504de006B69eC724e6E7", BlsPriKey: "a5662f394a9f57511fe5e21b49286f75ce5f5735616a2a72341f87d4ced1fa71", BlsPublicKey: "4455b2db4d1635a26cd13f82bf302cbf9a7dfe0e78289568be702560bd4799844b7cc75476d6caaf22ff6f4916d8f10b"},
{Index: " 247 ", Address: "0xA123a6AA1Ea595D1561a7D65d14b538fa3378fa9", BlsPriKey: "70572e4630b0826e96f77bfcdcf5e32dcb7a6e847977126cadd40fea2f66f220", BlsPublicKey: "1b0e3ddd08f2f829cbb36056ef09eeaab3c2a1f4e4da0f3d833df44b5b85f821eb0fd5d864e458967b112377e3322316"},
{Index: " 248 ", Address: "0xA3F7ec53f39415aa1A1907F95FfAcDf46dFb9fa8", BlsPriKey: "32bdaeb1690fffe08cb800c6d36a03b11ceb7d0c0de3426f0f24330a5053b168", BlsPublicKey: "a5efc6d7fe947c4a97d4a2980bc6e1bde9dca20b88bc96c558d5934b70f33e86a69d02a0f1c4de4b50ecfc134a914216"},
{Index: " 249 ", Address: "0xA40d92133594d20a13FFbD396853476373B85E61", BlsPriKey: "651ea5ba7d5f51b80b62c8f4f1a854d9032ce6de797962fba2957999c0d0d60d", BlsPublicKey: "64d8eda11c72ff5da438103a0ca216db6b36a4246b24e532e3024ce4313071075eda4625cc525373a28b96e38d7bf104"},
{Index: " 250 ", Address: "0xA53a112afcE812F55A22EbdE2214FD1ef555B9Cc", BlsPriKey: "ebe4807162b2c7a2198c887cc789e73e0789b7c3805e6b67a961b74a90434b63", BlsPublicKey: "47e4c3b7d00d1a5e9dc05671488ea006c000aa12a1775197d2dfe93f013d52b8eb52ce93e44378326755388c038d7792"},
{Index: " 251 ", Address: "0xA57471E20BDe6a199a6967c113545b7031551eA3", BlsPriKey: "4b8c2963de75a99c2005a7925eb14a7d974f9d7ddea87032cc144fa40013252a", BlsPublicKey: "f87292abdd7f1289515d6f765d812475b190ebdf8eb012a46566379798101ed33b6329232ae89bcd03193c4933170294"},
{Index: " 252 ", Address: "0xA652360e89E08CdE3A99be1b22C60077c96bf85e", BlsPriKey: "cf91e21e94f95991a254764ad758cc91d81ee5b33d93401d0094a2982300c25d", BlsPublicKey: "3d44911746893157c1ddfe83f32a6c01fd664d28876950112e913ff9bea735e8338f1f91ee027cdbdea1b1b5a99b9d85"},
{Index: " 253 ", Address: "0xA8AF447E19ba3673263d1d9223138C726D4A69F2", BlsPriKey: "57414c7967d36a091d6802d272ce9e210243f75b5c6547188b211f5710457036", BlsPublicKey: "c9ce6fd4edf978c64b30161fdb0dd8f3b688245aafe721af9dfd76d5d89ef209a4a9c9041fb35ae768a45a6802b7548a"},
{Index: " 254 ", Address: "0xA9FF4Fe2b64BF6341d2016488CBedF0F660Cb35e", BlsPriKey: "5acb6075441be1bf656ce5519d58c455a0ffa7d7f66ee3040fb9179250bc733b", BlsPublicKey: "09348d406ece177dd96b1d5dfc2560ba614cd990e962ac3fd51d2522c917753fafca61aaddee17dce73b78a435a6e613"},
{Index: " 255 ", Address: "0xA9dd45caf7963Ec0Cf71067111AB74AFAd84B53C", BlsPriKey: "bb359f545fed79a73f4489d7fd09ec10161ba4ae6f678c51844f6176b20e6e10", BlsPublicKey: "7173a0a431e309fb39c42483e3c629ba038b4f51e2206ecccb22a0737ea67e87ae4ea8f03ea4a9622e49b1c6628be00b"},
{Index: " 256 ", Address: "0xAC8E1689872748d074B123dbd8D535fF82d4FD7F", BlsPriKey: "1e7687e85d8e0a35c0c19ca352e64e165b7cdd5b4988c9887dd271944bd2d035", BlsPublicKey: "c27547cea4e92bb6c441b718c837fb1894448564d03e18ee5ea7532e8e45edeb3d3de8183dceff9d7a42d038a6398180"},
{Index: " 257 ", Address: "0xAE71c8067bf12C0027fd5ADcda9fd006D5e02a21", BlsPriKey: "1c43673f0ad132a7acdf0bcaaca35ffd5e46d1daabd1adf9e542182e47089112", BlsPublicKey: "05040f922c5c1e2e2f8cc71498341ac5cbef1dd05627bdc69df1b3d8dad85da7fc1c699f4e362fd3ac0da3d745131b08"},
{Index: " 258 ", Address: "0xB32EC947bD777294924746Fb9A2f1d870c7D7b77", BlsPriKey: "14670346951dca5d6a2460b2fa7c7e9289aa08db22fd294f09a9436fb87b683b", BlsPublicKey: "6e3b1dd19d716650fbb80723408bac5a272491f4a3fd857150e9ddb550f5999950abed358165a81403ada1904fc9620a"},
{Index: " 259 ", Address: "0xB340E34F8f9C73E7F1321102912E5A1A888AeB8B", BlsPriKey: "19527897174b39d594eec02a395fd17badf45bdbfa29c516d4cc6795c4de391d", BlsPublicKey: "95c9ed4d32296aaf1ca6c64d1158770f4416fead4891c0d59a23660fe356b39941b3de17fbd86e7d3534f57604dde281"},
{Index: " 260 ", Address: "0xB37A17A8aaB2c51297f2207D9325450Aa9FCbB3d", BlsPriKey: "d110ca4e7234abcc7b04f65e0e81c4d0114cc00b604a5d1518cf91e3c9ca9538", BlsPublicKey: "7c75994aaf296a47c25ceea00aae49f89e090756bcdb69878494ba0907011575b787f4e8499c872345abe5e915e80291"},
{Index: " 261 ", Address: "0xB3B065fFB5F081170A1b3a7497711A4f0AA8405a", BlsPriKey: "d46a7ad5decae8b633a9547f1803c626bd4d21a72f8b96e06112c3a0d9860f4f", BlsPublicKey: "1b13cdc5a54cb97eb92dad6ba9be8abce51cb299b741034d0d1e45c043d67e8e9d1ed59cb2c00d13a7af93b34dfa7e0d"},
{Index: " 262 ", Address: "0xB48856c51a2beb57df0fdb9D53463F36bD42cded", BlsPriKey: "818f0affb25f0fa502d3075ddf55cc1dfc8576225b7b3908981e69d1511b9026", BlsPublicKey: "01494df30ccf741bd1f780b2b4d32395f81474cf6872d361df5380c740656cb3e674a038fa25d98fb5544dc5a40abd03"},
{Index: " 263 ", Address: "0xB5562E105957e2F9fCc4e0De836032FCc4Dd2689", BlsPriKey: "f1cf5a46c65a2d4540282936f10afc9d23fd9451f3985d48a28ab5c6b254be36", BlsPublicKey: "a0c94655053f2c6b3f44ee775596c342c25358adf819eeefb1a2e51acb3323d0642f99562b6449746b67f19dd1f66388"},
{Index: " 264 ", Address: "0xB6370063dC8d761B3655398129F55eAfc80F35FB", BlsPriKey: "5cb9981470e6ccc8663e33cd8bf992e9f387ebe2027652dd60a4af94fb140d01", BlsPublicKey: "d70ac1a3ed6e7e482e6465faec989069e8c54c208d13daebfe4712967bed92e8eb8f54e86abf3f9ebcd83505224ad486"},
{Index: " 265 ", Address: "0xB79D19d38bcd7385a133EEb882130fc904c8440e", BlsPriKey: "5296b7141619c3c66f97affcb07ac1a6695e17c27c61bad43a18b31ea59ad726", BlsPublicKey: "688ba1738efe75175de1c2683379d44de9e87a2e06be2713c63621994929cb0535c3bd25b0908c2b9d5f004e5974f481"},
{Index: " 266 ", Address: "0xB91b5bfc5B127D2eD459AA630E89cf22fa2F97FB", BlsPriKey: "023eeb9332ddfcfc87be3d7eb940c2a83be61f9e7e58123bbd6f93fc33418763", BlsPublicKey: "643c6e9759544ecd961d9658bd61a422c721defc01440df02b7a9a9d15a68d5ebde631d21bacdee3f3c2c4536019a684"},
{Index: " 267 ", Address: "0xB9E454ad521658387D8466211A2EfBa67D5b5E1c", BlsPriKey: "2d980ec857c508a84a5b316b7b71f8998dc8386d972cc147c0c37e559d3d7c0a", BlsPublicKey: "99f905c7aa04f43c551233e70d0186b9d7c28348cdd371437885d1bbb746add7a13837c3be14535db0b40c3524f5a005"},
{Index: " 268 ", Address: "0xBA18CcF3De40887863Ec531Ba26601800118d895", BlsPriKey: "d91a7dcf94a36b8563ecea8cd12f4875b1f784f17da57e5a3a3e59677ef14d4c", BlsPublicKey: "86775bedee4b8c4644d08bd30694c834cc04a30a26660fef8aba595881735a5bfb3ffc3945c52d9ea713726b0eb7718a"},
{Index: " 269 ", Address: "0xBAD8736500D4A532C58AdBD0371C104fa2963742", BlsPriKey: "490a4c0e45445193bd5819378499ae80ff9b828b28233da3e10247864904842a", BlsPublicKey: "2e436d9cec5c89e31e275ef4cac924c6bab5496e7c2b5b157a8e9a7b0be75534be423274f29a17b527c91bf6aea19093"},
{Index: " 270 ", Address: "0xBCadE9E4936F8B04dDFf820357F1C2C069E34F1E", BlsPriKey: "201414017504d5b54f806a358226b2611274dc0dd95cfba1aa9739881884b814", BlsPublicKey: "598323e9bcadc5dbf57acdcafff0b32f45a21c6d4c7a18305bfdfbea0e8a308fcd9c816958f2b8386ea371f0194bf702"},
{Index: " 271 ", Address: "0xBD63c16C80f5526c1EBA246A3465671584B2934a", BlsPriKey: "3f9255f7270fa2da4656df7b91e7bb5877457be1168a7dc145e13fc4eda9722d", BlsPublicKey: "17bb3fa64779312f26d69de826941aca43840368249887c0ddbb41a08e77299471c7d17c04aea4354bcc6a23ad4d8018"},
{Index: " 272 ", Address: "0xBaf1a0819EfAF0979b86A06FD3082Ee039e260A0", BlsPriKey: "d895ffa711fac6056ae4c0e363231500f3f366a11642917b0847dbe45dfa4829", BlsPublicKey: "4673074dc24142591eb4ce34833119f4e350fd3e3d325aeed66e0bd082929a27efe7f0d72f8fa6c618912c8b5ace7105"},
{Index: " 273 ", Address: "0xBbA4B237fe8C33064b4bB51a236385Ff874445c8", BlsPriKey: "0f79dafd2eda099a9bf1d604fcdee31d29d5f058bcb8f4acfdc5fc407f69dc47", BlsPublicKey: "f99bef03cdf82854f1cb88f09d535a732e1faeef43d095a7783633238b63cd561d1fa192b61cb9deb8601d807cb2ab00"},
{Index: " 274 ", Address: "0xBe6e4235E7dC80835bf6326607f6701B046BE1B2", BlsPriKey: "ef4885681e5df6bfd4179aa7dca435d61f16094b4f7e7f361bd00efb976ffa63", BlsPublicKey: "7d365669ab0613a789b25fa5926b6c3010838b870a9e38ade8ea18f2a74a2f8698471f17fd6a67b729ac155964263c01"},
{Index: " 275 ", Address: "0xC046ab6829bA4A7cf695F1CE39Aa121fe2d2650a", BlsPriKey: "863b4fc442c34e4296e0d510bb5a6b80738ab7a95c26551478a5c598ecabe368", BlsPublicKey: "13b2497c20e1e7debc4404f26c4d136aa00a2128ab04763680325045c5164f9254f625aaa49820f1e8ac1a21c7c1fe8d"},
{Index: " 276 ", Address: "0xC0cDc35768Fe19eF60D287435c625f315f70eA51", BlsPriKey: "f3ceb0cda3517bafd1764a28efa897c0d888b8bebaf89da6a320ceccc0680506", BlsPublicKey: "dc547dee1de79b2e0c2e7f03ebfced8cb2dca5adb433a66e5346d2c7597c1d8e943bebc3ac947dfb1e7dfd59a1799784"},
{Index: " 277 ", Address: "0xC132eb0bD93De571397A26d3e30Eb77875fA7d97", BlsPriKey: "b7d088cee9374d1d12c6ffea2cf7c36e0ff85e32f98bb4a683212ff995228b1c", BlsPublicKey: "c5547652f43696a26d16844a72a26b2706b2b5a268c419254c7f704bc2c9ca255ef4d35e73247f2000efe9f3a86ab80a"},
{Index: " 278 ", Address: "0xC36b3c49190Bbc027d08C6757Eee6F81A8B8d0dF", BlsPriKey: "951539769615afb103a4da021a6de2fcd0835ce70f989ef65598b6dc45a2a11c", BlsPublicKey: "36ceb77c35e0ff433da52d1d2684c36d48d3fd6481ec19491c4efe81424977f33aca1ccfa1df122a1c0f0f6419accf86"},
{Index: " 279 ", Address: "0xC49034EBDB90ffD6c7767FF85ae3B30e03C29CB0", BlsPriKey: "dc1179ab707f8b01e417f69d736e686ad94f2d634805fcaec0078facfa222938", BlsPublicKey: "ebeac291a8d337ffbde4ffaf1294513aa8217ef575b34ae9070c6b4980cef3e3132d3a7508728fee2ffebdefa88fb780"},
{Index: " 280 ", Address: "0xC6D0B4180A25d1A7EdA9Be2D8eE9dd0D41d2D75D", BlsPriKey: "ff7067ff7e2b3ef52275c5187a252ba5b95bf04d9ce33c4fd723c11af8ce304f", BlsPublicKey: "590d8a37e888dccdd0458f3ad8e7e4b8400646f19423c867117a23a5acf48928b5c6e6590ce198fc876dac37cdedea8a"},
{Index: " 281 ", Address: "0xC7D97FE4962F3990f93421a26a8020EB0898c5e6", BlsPriKey: "a92bbb938ef4d0de6ff8f7da5d0b2a88ff812ad67c7cd574235130f8380f2343", BlsPublicKey: "3a031bed7fd76c6b086befbf017c9439ba905817506f0a761c5b522cdbaa3397107ae06ea16b9f8a7130233b53c88509"},
{Index: " 282 ", Address: "0xCAcd563284f44dAb78CeE1E1BC74C07042b414Ec", BlsPriKey: "3136e40ee1d841c52ee28979d3bc84376f68e026ddfc2cf07e00b581e95c9b12", BlsPublicKey: "b815b606b1be77f9144db7e9d252ced9858c0c47617e9c0bc7dec96f567406e8220a944008d1c2cf8745ec782494ed82"},
{Index: " 283 ", Address: "0xCB4c0864bBD5921E0Eb7951Fdf16E7Bb2607542C", BlsPriKey: "1052993a58b6189cac6290f5a14521b6508100f1f3e37918403bb3857f15ad35", BlsPublicKey: "5eb095bbc7642d753ce155289bb291226956aafe4d20629d6afa794c4d2e1cbd131b4d7f9b11b70db433c4ed335afb93"},
{Index: " 284 ", Address: "0xCC332c845b6Bd7d28a5C54a51D5ea32C08cC2369", BlsPriKey: "b052b85b2998977978e6f217ab9a17dfa78c1644297cf8e33b9f0e17a5a4e244", BlsPublicKey: "18dbbfb5e66a4d3dd9e418064d8e1129ba09088f595799d0cdacd4fbe19b566628ff1f1381f8b3a14391d7e5ad87958b"},
{Index: " 285 ", Address: "0xCC831ce78Ee204C124a7Cc1A5d55bfeBE58E924B", BlsPriKey: "275be409a230e99a4e69b128a4c5db7c3ba966a3cf7da65df5a9ab095939771a", BlsPublicKey: "883a82c7feef7c7822f57d3f14c2f5520fa749ba017d01fc82acee448ed8629d6315f9d00f3620252b0a1a469fe58501"},
{Index: " 286 ", Address: "0xCC98Fe686F3Be69566F64F550E581Ee97647D8c0", BlsPriKey: "5e3c04dda0ebf2dbb75a0ccab9ca1487d543a6fecdf12ab909450e4ffd1a093c", BlsPublicKey: "65983d7bdf52e8140a62c64f3bd96d009cc8716883923eb25af0e1d22ff77dbd0ce42e1c915e5acd5c5def5b486e7b8b"},
{Index: " 287 ", Address: "0xCCe50309EF9Ad3EBA4fcb822Cc3878c5485964ef", BlsPriKey: "26e607a18e886992872ecbb9fd5b287991dcaca845c376cf9f507cf1885f1013", BlsPublicKey: "2c7fe5b18fa03f928fde78041d60c3d354675be0fd7fc61191e61795287ad9ed3352bb6af4574689a1351f5189c50589"},
{Index: " 288 ", Address: "0xCD929182222226982c3CB45D98Edee24927F70A8", BlsPriKey: "5c613bdcd9db8a6bcb3b2195e9af3b9f60ab1280876c8885af60d851f50ca85f", BlsPublicKey: "d7a859538b16667144037da390ddadadf4c663b5955a4b03bb3db16a86d1be26fa221d79a6d97c9340abf098fe1a3b89"},
{Index: " 289 ", Address: "0xCa6Cf168c91bb6Fd5C7fB224b567Fa390DB0FFD1", BlsPriKey: "ce5c3a5f6b37c9f70489fcb43697866a54792f0996f6b69290a342ac138b876f", BlsPublicKey: "4ec1467074e35ce3e4bd44beda122a1a57f912cc4a1bc8659b41a637c4fad63558a8ea6a0880d6cddb7d414351241589"},
{Index: " 290 ", Address: "0xCb1A498eFe2eA5Ff136Db7D826b1429a2702B9AB", BlsPriKey: "c60a5e08ea12388f365f4338ec2ea26b85eeb289b152c00d4b7f7ccc5f350157", BlsPublicKey: "13ae6058644ee2c959cdb489d8f8c04f9c593cc202033b2ef4e4c18bf327ef563244af72329196196248d5150a3b6c8e"},
{Index: " 291 ", Address: "0xCc4f14C63AA7BaD2BFB612186127C10793eC1F58", BlsPriKey: "c1901760563059ba9c7c541f2e4ff0f31d161dfee9e471c004620cc8eff2352e", BlsPublicKey: "116351a190934c36ab0bbef7fedde763ccec6b8dd2888d0c5a4613f6674d732b72d8c88e8db6979563603a04cbd1bc17"},
{Index: " 292 ", Address: "0xCd5B0539b872914bDB4d83BF4A49131CbC984Cc7", BlsPriKey: "7972f3e1996d7d24142ee65995e289f2b067846d2b39fe549d0d39faa6958f6e", BlsPublicKey: "d6c6a630e5a6224bfbe287c00cb63486f2d420eddac02b0d3650c127b4145760148a38ea4eefb18eae465235ff3e8192"},
{Index: " 293 ", Address: "0xD13C3b87cABc9bc3E1C33d59780c415ffF0F6454", BlsPriKey: "96cfe59ecc3853dc22e0c0e956bb325c7d0320b2fba6e81ce02b87b19023861e", BlsPublicKey: "647fede0d5d657929811726c302c2a83bd765c24c614dd52f95d2c4e5ef654ec190fe21d761fd9ae30476babbcc6e308"},
{Index: " 294 ", Address: "0xD1A3bBB32805bdAcEA7509BE202972be13e12E33", BlsPriKey: "376b3ebd744e6eb06edad9682c61df02cf38ca3ae5b0e6fefb40dd4ba3db4f50", BlsPublicKey: "246c029566077a991b3f7594f9a846289d48d2734ec7e1b951ba117853eedc7d72992a1a5944563f68980120cfe1f993"},
{Index: " 295 ", Address: "0xD351CF869089ec9b903d7e9Dd13d9E1fA98Cd9CA", BlsPriKey: "20f5901795c4183ec720e98c6051dd766e756a6492ab41d8abd92a680f5b8c3f", BlsPublicKey: "08d4190a22bb17e2979f44570eea36de54af4f6572ffe4bf53ef5b1731b85c78d26bb5c99b9570abbb96e7ce15ed368d"},
{Index: " 296 ", Address: "0xD36077cD3160A5345F1a9A65BAE04fFf811B987A", BlsPriKey: "029777244961fe254ed4d3088b05870ceefba3afd92956a71caad19785665800", BlsPublicKey: "087ccc905809c6c88f6662af02b45c199f26b129fdcc3be3e04f331f9a60fe62a5f6f40856ad18059d677f4bafbe0c18"},
{Index: " 297 ", Address: "0xD420759A7B75F797B026d5eCd945611f2d1075Ca", BlsPriKey: "de6542932cc07389348517a662b99f8383405cce72afe874c37799e77ec94541", BlsPublicKey: "07df94984a9ea2a7a185b56f4173a433326e57ddfaddecb9af906e90f41c908427d7e17f759fda68996a6f01a344bc14"},
{Index: " 298 ", Address: "0xD716df51d645aD7E3a59539d45Dc632ec6513aD3", BlsPriKey: "90ba889861d1bec1bedddbb691b233da0e46808a9571bf744adb9e1b4e65d45d", BlsPublicKey: "ff991461a7dccc1d4a7f4cf698d498dd5db9dd229a43136492a25939a4f971b8c387f5cf88a5f5031843c0bbf9f5da98"},
{Index: " 299 ", Address: "0xD905Fed0e733CADB51496C1CC0A139e20fEFD37C", BlsPriKey: "302aafcf433a46ecee87d466ef61af8371d9c466d779a33b6cf48c4557c38837", BlsPublicKey: "6eddc54839fddf964abd9c310b82f7faee6fd0b2155196253a4dda99ee8ed804afa6eee7f5ac8531e6b2651eab9b0e03"},
{Index: " 300 ", Address: "0xDDd3e231d0CD737E82d080DAE41c3A4B087E7b8b", BlsPriKey: "6f7c7ff0fb3c474abf835b4303fe2d557893846d7d7addc4be3bc7cfb5a03205", BlsPublicKey: "78e9992561a1a2fe8d742cbd65178bcf9eb0af80e811eed3504e394bc6b98c20ff7cca6d2aee9235e636cfd07af7d78c"},
{Index: " 301 ", Address: "0xDa4CE4A006A2b5EE7c1F48B2780fedb39a509593", BlsPriKey: "fa46f9ad6245c8d9fcbbafeedd7c7fba79ccdbd1151a234ed4ccc270b6e2ec5e", BlsPublicKey: "21a5f508bf3a4ed5a5b24c34c7f3b1252c1d25ba3e39ae7cab820436f47caf80683d95ccb4141830fbc9d55a84376380"},
{Index: " 302 ", Address: "0xDb04208A0f67A3C1CbB900baeC864369c27B182F", BlsPriKey: "28165dd35613e3289795130eedac62f6e67baad6e9c16ae7d953854251cc4e69", BlsPublicKey: "982e9ef927326375d81517a1a682eb2fcf2b85247ee518b258c7aca687b318e42268c17bfef242a47b3da13229bf950e"},
{Index: " 303 ", Address: "0xDcB67CB0CAC26bA013C7d6cABCB10920e61eCF70", BlsPriKey: "ab2ee4887e4570cb8b97ed97d8d8de09883ebfc93b22fe0302d9f893e58b9117", BlsPublicKey: "cc48f30a49b47ebc0c31e273b3896216a943dd2764ca1f10d8f260375789b223659f7ada07a039cbd6ff81e471809008"},
{Index: " 304 ", Address: "0xDdBe700758a452F2Ab02BDe237ff6Cb1fd39DC91", BlsPriKey: "2ea589aa0fdfe43627807757c2b9fe2a6eeb64d92660fe891afeba49b0f3d873", BlsPublicKey: "6d93c7655ad39cdecda286cfe320cb60ff3448c224905fb53a56941c3538148ad964654d01c6d37d7e5fde60b746368c"},
{Index: " 305 ", Address: "0xDe6eD0AbBcfF62fa956A39215EC452352f71FEf5", BlsPriKey: "f101570484436da7f79e24bbb51566be154657f11fb05e3b3c0e476d6ed50624", BlsPublicKey: "1daacc1e4092535fa7af7b01ec3fca3ee94b234582c418ee6c323471bf5482fc848c026df7b5f31f03288a4e2b8a5904"},
{Index: " 306 ", Address: "0xE0Bc6F5cf7Dd5795998D46d1Fc85eB9EaC873eEe", BlsPriKey: "f1e43f7dfeb8bbdf00d57c08a134724019566caf7c3c8b176d03f4198e52643c", BlsPublicKey: "970d79e43bf01e75afb020da3ae2160c69f84368044e66a92fc846d671598c2a9a028a57bce2b234f9610567b1d7050e"},
{Index: " 307 ", Address: "0xE0d9D74036D37684E36cBb76Aef8563D58D229c9", BlsPriKey: "f946b7537a57f19e67ef3c2d5346efeedee7a19f556b7076423050b1c496ed50", BlsPublicKey: "bf73b5113537feea4a6018db7c70e43b2d305a66d8494816e1a4992e71a3ba54a3c0ca3b6fd56dd98ef6155a165d5b8e"},
{Index: " 308 ", Address: "0xE190B5677915fcFEDD1d075E28C1dC9AF3F4aF9B", BlsPriKey: "b1644210d93b61fdf5e0f48b6e67daa5d81fa683e0db7ac9d39dfea344c5156d", BlsPublicKey: "34efeb60117712b247284985dd99ddbafc02fb2aa9e96d432a96e3685b96f9086622136aa2eb71f35e045dca482aca00"},
{Index: " 309 ", Address: "0xE31f391363F2f09B4c7BFc2b8F797Ab5119033b1", BlsPriKey: "a8aedec4d58a40a39b0b49700974ec346306a86e681732b841836859bbe8f323", BlsPublicKey: "5bc1c17df004e4131201098544eae25b59e2bbab8190322ebfa30eaceab04a2bbe5701b26782f945fc3d02d6a2651106"},
{Index: " 310 ", Address: "0xE3B7e3163Cb5646C3aB72233e899ebeC1a677f9E", BlsPriKey: "c79f209402322d85a6cd333648f8788a9d50e97c91ad9e3fc579a08d3c3e6601", BlsPublicKey: "a5221d9b260d2ebf552b071577fd581b3f89046fa9afaa5af5f68d3c801ea4949d9db4d88afc5eb393902e70f85f1616"},
{Index: " 311 ", Address: "0xE62185a7fEad984F071A7C4bC88fF5548b8a703c", BlsPriKey: "3ff68d6ddd04a75dd69215ac8d900025e75c1c0b68c794232f6030aa754cda5d", BlsPublicKey: "8902535022aebd76d3c2172d084076d9ff385aa111d50f7b354a68af529c42fa0298c35b725ad34ea81647139828b205"},
{Index: " 312 ", Address: "0xE64dE8594090cf41a7c63353faa3A6fc19e24134", BlsPriKey: "4dfa080b507704e15be43e9c40dcef78058a5a78050620c13a49efd087fadb3c", BlsPublicKey: "9fd2c7323d3d4573008fbb63e29992bdd462635da9d90cc6691b08f887fd036ca2a9bc9b25eaa9176e52923935186503"},
{Index: " 313 ", Address: "0xE6F0E07c91F3f36e469b6bbbBEd5aAAFE36d8Da0", BlsPriKey: "296bb9d85b733084c568b546f73fe759e3a3da106c98ab22fbd343ee356b6750", BlsPublicKey: "be4553f8771291fcc3759c89e680d709542cad234bbbc28cbb43803f1c6503d38c606534edeca63c6765005527cbfd96"},
{Index: " 314 ", Address: "0xE85ae0aD9d135AdF59f578e167e83C9024139cc8", BlsPriKey: "3f7d6935cfcbec66a13ce714f6d3c2aa27a3f76f4b157b465b90e564f6d4b953", BlsPublicKey: "2c0a8271e191fc640fd24bcef0da7eb1fd2cede98faaff2c8f922a8927b13a7692223ea0d6a119ff70b2c56fa803968d"},
{Index: " 315 ", Address: "0xE9c5E4E5356C43c0Acb6315B99EE06b9a2444671", BlsPriKey: "b09f3973172e3aee0b9defdd7f244532b0587662c7154c515f4873db778b5937", BlsPublicKey: "f49ea2e90a02594b3527aa18c79d77feccdf63b9f78b57b642afd008c112830db3533dafda24a60b2106f9dffe97a508"},
{Index: " 316 ", Address: "0xEA7C41f1BbA4376A39ce5c01A51F3a4a3e5A8ebD", BlsPriKey: "ebf10e118df6ed2ad394c980fcf9ef2957feef6e56ab13f6d1a6ecf34257be14", BlsPublicKey: "9ba1d08469ff284b33ec24161c74dcdfa0a6e1c754dc1498eaab9b4ba7a110071c2740d406b050353fddb6e032b6ab18"},
{Index: " 317 ", Address: "0xEFa188A4765422f95938de1e3FBDB7dc6FaDDC78", BlsPriKey: "443bde844316931cc6b2f1df2b095251ca1d7465d6dae6cef4767b064efdbe3f", BlsPublicKey: "4593227df9440f94f53fc2f1321d9682fc7577f7c85c349fca3bc1242cc04f0cf1ce5c55e067eaf7a95aed6b0599db99"},
{Index: " 318 ", Address: "0xEc616773962E7094295F0F31D416748747535E37", BlsPriKey: "f3f8ecabd4c68b5a6502fe769f6cdad030ac8dd0cb2be5970d566bfbc182e847", BlsPublicKey: "3e79bbfdb5c896cfde4e1425a36368703980fe67a5e377eaed09c1dc2a768cb51d8957d8bcf2c16e4b6bf6297c34ac89"},
{Index: " 319 ", Address: "0xEe406e757d1CC84dEAF3696A5C9f4507aEAD4794", BlsPriKey: "e72e7353c26b8687dd821614a3e60a7a4e9a180557868a0fa377df6d29db6a07", BlsPublicKey: "26f62028e1787b6e953529ab3aa96fe0de3954b080303d82b58e38319c99f146fabcff94cbdc25703cd04f7e20618f0e"},
{Index: " 320 ", Address: "0xEf6F999b96f939597EfDa9e19Ad02A7Fa2b1aA20", BlsPriKey: "0534cc111c7cec80a6ee6d35fd851bd1cccaba71bef561d1820faff0d70d3336", BlsPublicKey: "51557de64a45cf23c01a01c98ea59921adc3ea291f7c33febc3a7271489c29ffd2979d937c2a546823e4dd38a935ca08"},
{Index: " 321 ", Address: "0xF3c55A45c03e17efB0A50163e0aabcB70648848d", BlsPriKey: "c335745a75902f1e2e6652645852ee1de5ae55a815f39742e6538325a693063a", BlsPublicKey: "a651e937499826502ed45c8a93b920c0068d2b0e6d7f4d5d0bebcb7277aa41b80540ac0de42e2f28a29977970ce5b206"},
{Index: " 322 ", Address: "0xF6C5363A8E2C792697B01da8c0bC8cCa6668bdE0", BlsPriKey: "077415b86ee60804707ee3d1c82e1cd60cfa0540f2824874e10d8c5371b7bf17", BlsPublicKey: "a9ef0cbac43c7996f4498e6c37262aeca86e817912e5ef71617ac183a5193b9e2d25e5824f1a51c1b5ee0d3512355a07"},
{Index: " 323 ", Address: "0xF97C989cc1D31aBdeE222cCe7ED8A3a3e4D45A2e", BlsPriKey: "03fe1e82055c75dd923856de914b0e84a905731b05fdd9db5d3241c15339e330", BlsPublicKey: "65ea54a424c1ceb628944e7b82fc2a9592bbedd99d5514da756e64beb23e611b10298de21b5a3d1e3de9b318ad43cb89"},
{Index: " 324 ", Address: "0xF9cc6BdB428b23e1f8485aC95b22f8D93FC5a425", BlsPriKey: "786efb123c35c56150bdd4dcd5dc0299e0f02fe3c2c156b26728b37680166337", BlsPublicKey: "33e5978f59ab019c2dca5745f2078779500663408858187473d585a129ba107de671e576930ae79c4296a44e034e5b0b"},
{Index: " 325 ", Address: "0xFB48d5809AcBbF5C350a12b955c76CE5bCd1c27C", BlsPriKey: "10ed56caa7d51a0cbbf51e3a82c660aa9f286a976ad35ec2f3977a54cba83864", BlsPublicKey: "29459f870aea2abe2e8d0b8f4ba9bce83d7ea725c1f051a55450ed35ca28491b51719c0d9587d423d1f637e7e55f9712"},
{Index: " 326 ", Address: "0xFBd3b6Aeb408FC2a99d82786565a9C981d63Ef0E", BlsPriKey: "d5da84ab77b48dcd4b1c403b5b7f710a4f589bdc2a645b44765509fe6a9e271f", BlsPublicKey: "e8fe7f669e7052ea5afea00962bfbea3dac0a853358378cd99ab51803a58eaecc17d2892b65b27616dc3e568300cf387"},
{Index: " 327 ", Address: "0xFC5d56e8f45F7D918b429ef9eCAEF439031A9638", BlsPriKey: "dd4e51fd7eddba81d8cffd255b227ee726edad2b17f6b2a77e6a3ce5b01bce2f", BlsPublicKey: "d29ad09c2dcc56d590f6c302ab833854ca614e39e2c07dca03d23d6382a10cf902ffa358c78fb0a7afe658b544a9cb87"},
{Index: " 328 ", Address: "0xFc0cC772Cd483ba94030F7Add507B5Bca80E9a03", BlsPriKey: "eb3b5c7972dd1037619d0508c61989c4aab6fce120a668e7a1820e853caa3762", BlsPublicKey: "48421571125903ba2e011af5e9e1ffe421bd50368acecc08545e2f5bb7d75eac03cc5685fccb9e52bb7919f620b40188"},
{Index: " 329 ", Address: "0xFfa7dE5ef5774B1211328e7C40A8030af69872A2", BlsPriKey: "755120269b1c7924321acded089552ad4e777949bef3a62c6c107b54dbaf203c", BlsPublicKey: "16600d15a26a23746b13b304cc221dc80e221757114b6f635c67ada7e531326de001c3b511256592d82548410b71cd81"},
{Index: " 330 ", Address: "0xa1aB772E82de47DBa2Df2A597729716e055f13e4", BlsPriKey: "ca18679cb890e66df88607bfb521fb7352697dab15d2c43fa679aa24f3850e31", BlsPublicKey: "b55757c27e90fa1f8a92f4ea7cb842789673a7a54fe335bda5812128295f0572dd4ad5ff9164e33cbc79f762ddfbb98f"},
{Index: " 331 ", Address: "0xa525D0E0408B22Ac4C88ff5B1b18F6a04F455A9d", BlsPriKey: "a02fdb8690290a625949b83ed3af73a446fd08859dc1db4105ac6fd0cecc1f43", BlsPublicKey: "2914b1290dc499f1e4c2006018557b22135009305b7d7992c7a986b7d37480c84c03e3442fe824d96e0690c3338d9d98"},
{Index: " 332 ", Address: "0xa579b6d75Ec067A3281348319F16E8cd23f9e6eE", BlsPriKey: "1c13529c3cd5027209544fddfe97c5d833ee84980384b974c549ea11ac7c7336", BlsPublicKey: "18453b0f82efb8270281afa12852d96d5d88d35715c7a09c8eba2450b071da36aaf2a2524712cf9da456dd491491cb83"},
{Index: " 333 ", Address: "0xa756b3920807ef8F5b356dc87204FE326675fC3e", BlsPriKey: "fea117010c95ef67ee1002f1fad8b993fae49385f2e75a6d961cd7b3a0c55f61", BlsPublicKey: "9e3faaee477ef7f5942f0abf148669025fa06b47158aa74287f872df84fdffea13ecbe55e00e6d63b2cbecc8c1d2d88c"},
{Index: " 334 ", Address: "0xa816F63F1375d3d14Ab3CCdEF7856E29c18Ab574", BlsPriKey: "11cd72b5692fc7053447940b5d372d4eb422677f445f9c9e5f6f17e0bf2ffb72", BlsPublicKey: "6380e4fc35512c7e9c5ac3d00566a3632fc78fdb96e600b18f1ed48a4db7f68ec0396222e33380c1dc51252abd9eff82"},
{Index: " 335 ", Address: "0xaB31963011e61F6c9c98f8332fB6788C6843d284", BlsPriKey: "c7a57abf43b873cef811cd8164164275688b0b02aa67d223f5b5999382d8c96c", BlsPublicKey: "e2306a06ff0578eb8e29c8ae554def1414946a620fca99f5964113fe89374174c9d47610006f08bc4ffd785706df2286"},
{Index: " 336 ", Address: "0xaB9c949A9296172b6AE2b87fE5a87FE20758A59c", BlsPriKey: "0ae12b18e7a5026316411f38d4cf2c827f50a40f0cc37e49d333658e9b388857", BlsPublicKey: "56282dea5cad7a76a70b35e3112017d1305b27ce731645dd2298c3cea145b7e8286a4bffb11ea3d35ef44361d9950199"},
{Index: " 337 ", Address: "0xaE030b5785357a5686Ed9b89EF2C0D82a5AA4650", BlsPriKey: "f85e74c71688698d49242c048d58eb28a1809b84f37703a05114d1583295086e", BlsPublicKey: "196b807466b953d44f6c3e97385751f77c9a41efee26ad1e3b3cb2f6cf66326d1d5f682710bbedee386de9d5cb91fc10"},
{Index: " 338 ", Address: "0xaEBc085A0AF631a81486b680F2334369DB2c7bB3", BlsPriKey: "19d94d05202e91bff432c2fe16badc5756241f60a53ca13950f7dc90d5780827", BlsPublicKey: "656c668764c48de2deb79c90bb62f57f093de6b72723122c383846f8c2c7621653a8314a80a4cfaee450c263a7521a80"},
{Index: " 339 ", Address: "0xaF4a7499aD01ef627a9985152711ca45d0E86B7A", BlsPriKey: "31e1779c8a253b98fcb8273e2aa24ff2f6f5900b172065554676519bb434676a", BlsPublicKey: "475cfe574cd5f5d5969cb012a5c5961b2bf052cc5b6eac87b27966602683a5957f99ecfa9c5579ce5fc301f67ebfc114"},
{Index: " 340 ", Address: "0xb09490021A24F17509AdeD7A59141E9f2B15Eb68", BlsPriKey: "d46313491f0607c9bf2605fe0af4c64e2e01d50e88327f33733d88262788f426", BlsPublicKey: "c59484689ecd944a868e1f736e5d0764f9357cb484b675d9f839b23eb159701f2d651dd46196d776b22e98ae3fe09003"},
{Index: " 341 ", Address: "0xb25D4f96f06513C851D65f6bED3D9ac0Ce4699B2", BlsPriKey: "c6b3bf419c80eb970e5dca990ef54d1ee552d97a128e83e80e4c3bdc9bbe0521", BlsPublicKey: "7ce6ef33d0325f50b797aedcbfb24fb964a7e800bad5790707c41780bf300efc06805abb4657e7a012f4e11390f4b50e"},
{Index: " 342 ", Address: "0xb25F57695D6541f712856aEE545aa8c583E153b8", BlsPriKey: "8a663d5cea54ffe3939147b411b8683da36b16e52a975afa0cddc196297ef93f", BlsPublicKey: "c904f79de1977694e3c5cd2a365dadad1842f7362926e9205d556aa314e77746b08db9da194f57dcae7894b068b1f316"},
{Index: " 343 ", Address: "0xb4453086a8b623905743c083A49F60821a1C3a97", BlsPriKey: "17d985fcbb28ec4b48c3e01ddf6160db7dbaf283826715f3327537dd982f8b19", BlsPublicKey: "44e9f3855c87f704293e996656b3d18809ab10950a9d721a510c399322800d528f59d1eb9196470dd81b3fcf80988494"},
{Index: " 344 ", Address: "0xb69FD1866215B8d6a6A1f99a71ce565b654F0156", BlsPriKey: "1934fdaf900e201a005a78d8b4580fb1955c6349b472554ebbdddca3e1adb51f", BlsPublicKey: "8fab0cbec7a63f8b46a3dd43f7371ddd3104b42683535ef75a9a00c75281f01cf0f1ecfd529488d83939a6d2f16fe98f"},
{Index: " 345 ", Address: "0xb88c75b52BE0Db22B1EaBaCc161a73E465b50F00", BlsPriKey: "f6180b90bef1d8781eb06e82d586e4cf1430d2a7e5671bc2dfc654701a3dce72", BlsPublicKey: "58a8362bb7c4a6f2e0c0a8b92b79adfda3d6ecec129b3134b4f8707507c275d540e299b26674803f92cb028f6eaad395"},
{Index: " 346 ", Address: "0xb8adDC78d695F532DDC2c8891842741bF6b627C4", BlsPriKey: "380dbcdaf8949878094eda6e7c89da8a3ca61cb78ed9a108caba223b4eb84738", BlsPublicKey: "8619199f4c6f2dce41a45378d7c072977edc847980cdc19da9668b111beedfe4de0ef8e965dc0f1cbc8ea0dca56e8596"},
{Index: " 347 ", Address: "0xb99C7D8F3D2D542025D8f45E21FE83a5319422EC", BlsPriKey: "e8a67ef331e2e65d756020bc8e6642a1c7d16619cc71ead0244d2170dfd7cb6c", BlsPublicKey: "e223e182e1eef337c5db0a47defb56d51ab202d1c9a8f8bfc5cf10215cfdcec9436d265d597855d8e92b1983b227d601"},
{Index: " 348 ", Address: "0xbA30b84b8d0F106d936Af77D93C6653116EF54b9", BlsPriKey: "24f125b743f65fee238f66874c59e1bbe55bee5cedd8608547028a3241ec3f56", BlsPublicKey: "8bf026848b998d1eab8e26454fafc0490dda1e6ec8452778335963a819581ac76b41af680c628fe4616b01f201d57a91"},
{Index: " 349 ", Address: "0xbB61Aa32EAab4f5C0b1D66B3649aD97D9836576C", BlsPriKey: "cc15df81b05c0f5d06b291eb8ca99bf0b579a0c0917805f4a6ad2c3a69574463", BlsPublicKey: "c29a82131c5fd2cd6237992f3d8c684ecc3ba370ac5fbcfc156657015d008130d526eb7b13b69d9ed467dcedd81e4094"},
{Index: " 350 ", Address: "0xba155CD47eF9cF07bf9140721af95ffB76D4EE8B", BlsPriKey: "81f0d207c76b2b3a1e2966959bab28ef967003920da3ccb91bad2d0057e2c118", BlsPublicKey: "626d7e169af24e3749c99812c3524679fe7d996203dd7c18f5a6619ee4807c5ec5eb4ddf0bd4683b5de82c7540f46095"},
{Index: " 351 ", Address: "0xba98270b18E72A885370567138951af6CFc06d5c", BlsPriKey: "710bb91c90c9a53dc6d2aa457e99a09751721d4d511316dabb5232751767883d", BlsPublicKey: "e381fc365961950741766ea6da1b98197ff8669246a9202353727b385039006588bd6f85e51597225ce6eb7e41630605"},
{Index: " 352 ", Address: "0xbd1Afa5FB3B24c50A50f7a99A252517e1EDb6E14", BlsPriKey: "7e5c4196b26f497b1a91fda76eb24e4d7d2bf16742182201f2cb762de79f0a34", BlsPublicKey: "f25e218cdd1eb040f03b97f1c00e417844b5e92f358162efad4420950f62dbb5dfe75fe589c5217352122616ac330b8a"},
{Index: " 353 ", Address: "0xbd9711147b5d809B38650626be865F017B91eA63", BlsPriKey: "b5f5a775aec2f18445277980e2a5e97c5826f2ffe463f9e6fc2be13f3a6aaa29", BlsPublicKey: "5b8e90e5031b160506cd15a9674986439421b0e3b430288d700b3c6e5c9ca709e9e856b3738b196b5ae3400098ea1c01"},
{Index: " 354 ", Address: "0xc0BB4aA4F2C15c0fD86e84CA8e7aFFC9d6a1BA8c", BlsPriKey: "dc2eae2c8d25b09396ba6dbd3eba7796b761274548e362a06c152b9bcb48782b", BlsPublicKey: "b74dcfd3c22e274a033883cd2fd9ae801de7d5411ad83d2083b4037afb8a6c0ad5126099913febfefa576197cf4f4306"},
{Index: " 355 ", Address: "0xc12953820Eaaf808c0181de242b59a72e3E55606", BlsPriKey: "5ff684b09775a9207ef31faa4dc2eb31d6e4541ee637668ea8ae33213890656e", BlsPublicKey: "643916b23954cbe2f55afc08062cfc3535acf33d82d19207ef1033c320cb43fd28c83fcb51c83eb55d3428457ec68717"},
{Index: " 356 ", Address: "0xc129b78786Abd0Fe6307048A95D38D5C22e03732", BlsPriKey: "5f0473fe9d8a65bbbedc02695c8c74ae6a94abe9bbdb76aa03aa5c381b999641", BlsPublicKey: "118092f584f55f33d00fe122d0bc349b81bd1fb0261744a25cab47bf73e931d2e721ec3babbc1c790252897283491003"},
{Index: " 357 ", Address: "0xc24693350F83C446A1A65FD29b12D144600c8A56", BlsPriKey: "845bd6b32b88ba9b37a01a810e7ff155fcaf457475f323d4fe64b8afd2d29769", BlsPublicKey: "d7c90fc4a7b0494b16e01cbd3b50489f19756c2d4288c0d66b7c85f95c2460611a3454a3c460720c1296b53b542b8b0b"},
{Index: " 358 ", Address: "0xc2b1dA16bbe3F9106e5bf535Fc7458419c98D102", BlsPriKey: "40453675a9ef8b39893be1053b2e6a019bb57259f5af6300a20944cc14007806", BlsPublicKey: "0fc8726b836fd0162c768e751620d1822ff6ebbb88897e87adaab4fa0ef116ae0be26c026d88190bb50ed768bfc55b00"},
{Index: " 359 ", Address: "0xc7B8417d78cA2d0833b0016e8E12f8E5679a44Eb", BlsPriKey: "c7e577f1b5fd322450d04176a4d8faf183c6ab16c6736eb31716044ce07f5434", BlsPublicKey: "125cad7abda26990cc1bfb1a49f2cfdfdd3e6aade89f25d6b2af306dd60564e67f7d99eff358744e857bc980872ce817"},
{Index: " 360 ", Address: "0xc7be7908Be33a58c08FBc5FD3f06b1d4B7781641", BlsPriKey: "0c41279009ff436c25660669b0d4a341c39f81c281b73e7fee6278e6b9f4931f", BlsPublicKey: "588515815920868307cf90ca3332f4a05a1b67629f35ac0cb765b48dc239c4dde73bb4530f0d30379d83d4534e200a08"},
{Index: " 361 ", Address: "0xc82204e189EDF63807270d91c6bAf1d54ABB62B8", BlsPriKey: "621495b05112ddd89e6c7622f7126e1abee9cd6574d9f5ccd2615ad77e60fd32", BlsPublicKey: "e1e8f34b3e7493b9dbe07fa90258db7dd8272ae9c90a31376def21d367cdf679fd6220520b8270387b00e49c80d79082"},
{Index: " 362 ", Address: "0xc84a3D4461f5a2f216D488Eb4F4852f523Aee385", BlsPriKey: "3a9dfede3c1257a04e0ad24d49f5c3bc369c200cc443bd4922448af21e176145", BlsPublicKey: "af8b247f0eff1c9f10217455071bc49a9e9eab8907f93c15acbfd95fda4cf6bee85b7b62f1a1785145581ffcf4bbec85"},
{Index: " 363 ", Address: "0xc9dCBE9CB27eA03fC1c57d1B4b0204a3E9bC8Cb3", BlsPriKey: "eeaa0f8ec12f30350ebad93c657f7e477a1d3a9bbc05a465d0f0dfcbd73d8818", BlsPublicKey: "99637d73b2f551741e009314264c0c8e2686bfced1c5b12ffd925c2b78512a6250bbef062dee1d93d4d503b5adb43983"},
{Index: " 364 ", Address: "0xcAd114c0d8B87367cc598A4F13eEBa55a86C5F06", BlsPriKey: "ffbd4893603e52cb0a3f79befe8d77d073f8f2fc3c7f7ea9dcdb7490026c3f3a", BlsPublicKey: "a5f4826154c1b28468505d6e17037b7e25bf55d54dfe85c750bc076c6f5e3b7b1e469d7f4e962665a39f1e31442fa019"},
{Index: " 365 ", Address: "0xcB8196eC986DF4DF027fF7406efDe74D3549f192", BlsPriKey: "63f6b639e4f88a614b73078ce1a2c0d9bff3803e05f1fce20ca03e5d5c069d2a", BlsPublicKey: "92dffba72428437a7bfe1431d2564b8543759181b6e6b64422e2413b7a5b3beb943e61bef7d1daaccf6e5a766d6cc20e"},
{Index: " 366 ", Address: "0xcB8Fe1D1ae31c09B3EA6D18A3680E00004E54De9", BlsPriKey: "e1137db2b6ccd06d60efead17b5f6511918f11121312fd231a8bd7a64d50f03c", BlsPublicKey: "f2da480dd908c5342e7a9771591abc5c338034954c89528fc40fa11de1591c7101d977c7b132111bd6f47efa226c2594"},
{Index: " 367 ", Address: "0xcE1f3C5f4Ee8759fF451286E90c156976BEe3742", BlsPriKey: "26c9d1456c2e8831b036e7064d453ab927491bc2b6050b3128ade03b7a465541", BlsPublicKey: "44de20d72360ad6c858910d9398155a106e19786a9a375906c3cfa0b29cd62998d84653caf5349161520d85e94b53491"},
{Index: " 368 ", Address: "0xcE319c2f6c4745b0D41530b55b1Efb09392Fb357", BlsPriKey: "cecd4d19f71fced3e7f1c111865bd932c1f207676b5055445ec8003fe40b340d", BlsPublicKey: "3c58a5c8b87f2b066167a81e2fa1dfa1c2098f4c9de6d982ad8754638918d38371e2c9c1df5a1ee4bbbb27a22de85692"},
{Index: " 369 ", Address: "0xd16fb86Ad95B25baDb44092129cb6aA4FcD0190b", BlsPriKey: "f0a8a5aa85e83f0788ae32fb4a0a695bad7e624d4e958ef0dfd7aedd51e77961", BlsPublicKey: "4c6fa76c43718a1c2151925e9fe5b9bcb25c50126ddf963b1f84358bcd855e0542f7c8ec4a45511804484f0a1e736a88"},
{Index: " 370 ", Address: "0xd20331D75CF373ee16547Bc00b3b71a283187A31", BlsPriKey: "977ea3be3b10801c2b89a3d7f45f950c3d0edb4d01bba2f777dfd485e898c047", BlsPublicKey: "c191fc214bbefcea06cd32f67bb7fb98d752d45add37715f7461efc66428aaa57091a47a91fbc29a33ef0d2fe661ff8e"},
{Index: " 371 ", Address: "0xd24640d8fDE68cBFDF25C41613e4B593dF1F7845", BlsPriKey: "7eac3dae78aaea403c89e3c8b1630f597cae73488b9f3c32b260758733738b33", BlsPublicKey: "85eeb31b3746973f42c77985ca88faa129a153e1d0e31d4dee764e6ed86c8ac2097656a28d1a3c5eb14f3350d5a8a195"},
{Index: " 372 ", Address: "0xd2ab9e42DbFd509dfd9Ab937Ac875c3953Ea6B63", BlsPriKey: "076726a23ccb51988c4654b72a63c86ee24cc123849752432cdfa80001834d34", BlsPublicKey: "e2b285011586d8ac571e3040b655b72732bddeaa5ba8133c04500d39ce0b0616f311b6d9dd870c659b1e6e462d54538e"},
{Index: " 373 ", Address: "0xd41160791b8886F8e45ac1cc9ebb5FB9c7118fbE", BlsPriKey: "dad7d3fde948299c0dc8b1fe1776aefed32b1438f0ea5c94db51d051bb61e94d", BlsPublicKey: "f831af8d1d4a60cb96126ee2433206ac6f4a147eff9f01df5bd1c1cb333447268952667a70271c98da8879b13fe53f0a"},
{Index: " 374 ", Address: "0xd892C406dCB97B544cba6354fD42C18c9175d8DF", BlsPriKey: "03e42e814506c82ab0179ccdcfb7b1e30950c1be0c6e8062b4cf0bdfc7d26d09", BlsPublicKey: "8fa6eeb962c4d6e6ff7f62ad9d51f1c0472b0b95548606788e6c2eec440adc3a993bdbf5654adfde8e1cf21194d1bd06"},
{Index: " 375 ", Address: "0xdE0205b06C6517048769B673014E771f2F978bd7", BlsPriKey: "d9cd084e08eb167fe5b3206032f3f99087eefafd5c4d8129b19cae058f0c364d", BlsPublicKey: "8267f5f6643b842225ea7a85236e4e3790d1c4d1d2cacc65b0d2916b86156c1b372927fdca73a6897d5425265f6ed88e"},
{Index: " 376 ", Address: "0xdF73134FB98c299DAA522Ceb54E87C8Da6a116c1", BlsPriKey: "c91385e235286f9faa0af2e10aea36fb287330efeb74cbcefc55248f3422ef59", BlsPublicKey: "016f713ef9dff2036bb79ad934c4cd32d0f98a82f73e1f9e5119215106d8b8e1525b3131b112bf8b78721bb000480595"},
{Index: " 377 ", Address: "0xda1BcF114a3f717D179eeB789D1d9248A8a1631c", BlsPriKey: "3ff6d7744346eb9a1359de4cf2a71b05a20f3e680b30ccaffb17fd4b32beaf13", BlsPublicKey: "6cfe2dc9edb092185f4ee17a86ab64d3dd6cc56e787b555b0fc6948201a2543c6b9dae567d7313277c99e058c0532711"},
{Index: " 378 ", Address: "0xddBb08c3385d8c9b7eD70507761bb6ae86601b36", BlsPriKey: "708edeec192b763d2be631ee4bbbf482deef0975d27136008cc6e518e657251a", BlsPublicKey: "dab743b3df6983a6238e591b0b10b792bd265f86edcc74b4fb6eb6be1c4991d75b3f9be5d8552400620989dd7236b58d"},
{Index: " 379 ", Address: "0xe089cbD31bab882923c5c8D3C5432eAfA680E4f6", BlsPriKey: "ee3680cfaed342a14198d65ace8e8d07eb8613c96c4421c92356d4b60b3d3711", BlsPublicKey: "85e8979df7af07a275bd55eb452fa8a0e8443cc8fe5f1ef38fa88ea1cccaf40f215c38c7a4539457aac5c1338a907a86"},
{Index: " 380 ", Address: "0xe201AE926cb423D61C67364FF3C736359b8f52C3", BlsPriKey: "b1d2dabac0c57ce92581239e0662f358f2a3217603c75a72785c51b6730e1e0c", BlsPublicKey: "2df479b42a72bb49556495723a9eecef9670aaf42abb81bb4b078ecafc66fce597b0bfb9a928e8621511cf94da5fd90a"},
{Index: " 381 ", Address: "0xe21383C4dFeA14C3124e86C5F987045Ef2cF3F42", BlsPriKey: "00855f94388a2f59be2eeb8e8388b3288b3e301315ce124e787eb4a2a9206c53", BlsPublicKey: "4a85be01e58b4b63f982d79178d821d7ea2ff7c095add5a4cfb0559be2d0cc58ef26fef55738a7f5b3c373a22096ed19"},
{Index: " 382 ", Address: "0xe36FCA53f5BC3FBa611E7CA51525755A6b3227E2", BlsPriKey: "f714c52565a3c9a499a1193272041963baed808e6c1a50f0040f58f7a902b635", BlsPublicKey: "2afdf5423edbd5a419cf24ff2c84a2d23827ea4e5bbe1888df89d40fbb97275d971da6bd535df9dea08cbe310b59a100"},
{Index: " 383 ", Address: "0xe38bFD8B5bB44D9ec008ce94607a4d8485471B08", BlsPriKey: "7dd3a66fba839c3636495cced7fac0aa1dcb534571906da068edd9601430d53f", BlsPublicKey: "69b4ec1659dea3b26cecf224d2a828b038b74766a347c5619ffcbab80b1ca67c91f2f34f14777211dc7638f58e4e1994"},
{Index: " 384 ", Address: "0xe67ce5A7d9BB454cfa022F47e1fC13Fc1D7bAA2d", BlsPriKey: "b7906806762b3ab12797630c711e75fcf40b0a4b8338c7a4bf30093096b2e95b", BlsPublicKey: "40dc3f05bdaf8aef129429ad0844ab8c1c1cd3c42ba182b305fda0540dcd6813e27a00fa60abe3dae8a8563701b17d00"},
{Index: " 385 ", Address: "0xe6A45a867f4d8a12E66ba38012327df10Ac4E5AD", BlsPriKey: "c2a5eb1fd99b341d0d12475a451f74b0934959e465c63986125956e8e9f84c6e", BlsPublicKey: "8ac0901ab1f08f59500930560039b9b339f6176a3a45b93b3f497bc43c1f7302075274c2e1099b71d53763c88e2cec84"},
{Index: " 386 ", Address: "0xe6d861421a4D252d4DC5D9D34B3EdC2891473456", BlsPriKey: "ecff4ab879de121933f992be57aa8fe04010cd2ecaf30412d7ed16e2c9662116", BlsPublicKey: "ed8b91e87a759b1d352c9539fdc033fc493ae40459b6557b200455265fdeaef87bcb0bd693bb0e3327fe54ec2608938a"},
{Index: " 387 ", Address: "0xe7f43Af7D0879F904D9a81C469142e88F562de4E", BlsPriKey: "d0be4da9e7f85112cf65262d88155d68b8ec8b25b48b6edec45a616e9cb07f0f", BlsPublicKey: "26cf5afbad7b61544173a3e934de3c2d226ab6d8625e6b83064ad557dba1e0717a620965f4bc074aa62c15a1c6402e09"},
{Index: " 388 ", Address: "0xe809bF710657bD64A238af34085156D571037BeF", BlsPriKey: "e075d8648c623297346e0e918f2bc33a73e079e27742d4cceea98e8bf15fdf4c", BlsPublicKey: "32e52db06d1dde90323e9cc469270cb34be643385fd8969bb2e7612e1ca8c664452b86ea84f1ddac9a9811062f8b2083"},
{Index: " 389 ", Address: "0xe9bD1cA4896533cD6648ea43b1A7D68827aCc2b2", BlsPriKey: "223991e909cddb866090c92919368caa80227af6d21e90bac150622c9dd98c68", BlsPublicKey: "25338ec4f9319f1b57ede2c9b79261a97c3c2dc2ff900938454d35583626d35887ed1b8f31da59b7d6409b3674c40e15"},
{Index: " 390 ", Address: "0xeCF73C626B228664471d3884D54d2bd9541AD4bc", BlsPriKey: "04bbb9126561b95f7a84078724823c5c69314e77dc0294e3a8cfe3a94a9cb570", BlsPublicKey: "27a05c10f1f34b01a9ca26aede07cb6b3caf4a52836900e1fa320386a5bce25b296fc2a509b569e3deb3884c7a75b819"},
{Index: " 391 ", Address: "0xeE584723c953C4DD049edd39738f5247740a9594", BlsPriKey: "53303280087708076f10729fc311f76e1ad59cd095f3121229fca6efc0958225", BlsPublicKey: "57ce55414a3fc997ba8831098bdf033d819e10610008c438561f9a2f89238c8d0119f7136d58fe927ff2873f1e758d02"},
{Index: " 392 ", Address: "0xf105C333253a16C1Ae24c23191E133E06C9ba501", BlsPriKey: "8e033b0eab9d37e62b54fa7336ae2311c64e9316b8c7c7f0231ef9d61ef3c042", BlsPublicKey: "4c1d8901e95469de6f9e6bd56ea5658ca0c77ae91ea9ab56eb990aec29dc85b932bf23230c3f3974e52e2367d94fca0b"},
{Index: " 393 ", Address: "0xf216D7d113ee2AF079DEF5056CFAbEA5dE2Ea853", BlsPriKey: "3b419f6fb6ac60ee821d5ddc5f5a7ecefc530d727182d59f1263808f8a867d55", BlsPublicKey: "75472891216e686e176c2eef33c7d352f2882619f2740fae3dd5aeec7507fe20c2dfb95941a28193493db3075b45b911"},
{Index: " 394 ", Address: "0xf2441A675f12977C719ADe3e2879eCf5c1a91f1B", BlsPriKey: "0acda5b8e2d62f777a1cfa8e94f6f0d115929ed5c4079fa1681c066ab8f95c48", BlsPublicKey: "f429b0cb118c3fc092ecaa2fc4266ccbdc830e506feea50fb66b7abedd14e275070c435d0d7ca5b8abf59a77095f1c0e"},
{Index: " 395 ", Address: "0xf63217cC7a99b7ca4c0B234BFbffC62e6c1C62bE", BlsPriKey: "3289d509194fc75ec1be86278748d45efec86d95c290d770649bdcf3dfbadf28", BlsPublicKey: "e8997b61c30706127b131b54369aff0d39b2bb3544d0d2be4f066489f85ab698b8df36d53cbdf2b1de3de3d8efbed699"},
{Index: " 396 ", Address: "0xf6642b7CA43d333fE8CD943A5423C6A28d5a8F28", BlsPriKey: "347c0bdaeaf83c28f0cd901f85af1165cdd1c647b981e092cb49572745aa1504", BlsPublicKey: "fa91cae281bc8ce5a697a1d37f4675282ccfcd5469ee4626df7f3279257127e1edb44860e64d3716da8bc66526ba9387"},
{Index: " 397 ", Address: "0xf66508CFa2a6a52ebC708cF048334d1C6871Fa0F", BlsPriKey: "7dd193b1e19c2792315d7bc0181f527b4a46aeb1fa74998434bfcf68f49c1237", BlsPublicKey: "c1a0289c4fba53bad277f4f0948f04ca544753c051499d91954d912b81f22f6260336b86f5c09232220b1b270971fd09"},
{Index: " 398 ", Address: "0xf7D06869051f6470b3a40C6A733571d135641D3b", BlsPriKey: "1e17f7b960f6867b0f37cc5a18b30697cd6b69b99bfcb323043cbb3827fb174d", BlsPublicKey: "60cab2be17047c025f4a92ad6c024bf18f0b5bc8744de453e6f781d3a8158647c2fad673eca23c5609e517a7933f3b8d"},
{Index: " 399 ", Address: "0xfA41EDfFf9325c748140ed8Df677B4358568A529", BlsPriKey: "349dbdf228cbb0730c9754a0a188544a1799189050ccdc83c22ac0e0fa37153b", BlsPublicKey: "25721bbcbfe548daaf582b33b1777bcc652b4b3653dd4e262f6d11eace67b0dba1710c440123833a9d6db2c009a48392"},
{Index: " 400 ", Address: "0xfD87f1fb4720cD7f89914D42BB42cEA7c23fcccd", BlsPriKey: "f21843dfd11ef1f2b1fa5930b56024287944ff75c441deb26cc40deb09b5ec01", BlsPublicKey: "4f804a9e7d6bfbc4f5296531b929e507d8c33dfd27fed63689e714ed7e0ecaa15545ca515675860698678f7dc0d53217"},
{Index: " 401 ", Address: "0xfEa557d30651C3F0AeeCA12d33936eeFA0fc4f93", BlsPriKey: "0f946314c071958e26d626fcfcd0ce93fd156b42de77b9c62e4fd9fe69cdf539", BlsPublicKey: "c1cf96cd42de4f4ede8da531e73e57934b0dc5ebcd4df79c251a23d16d70d930441dbb2c6bd4ebebcf605a1fa444ee8f"},
{Index: " 402 ", Address: "0xfF86Ff1FF457c3eBc18D71ffA30cfedd0860559c", BlsPriKey: "4b0d338b30a055bee3e2f070adc93d341b9316a315b4b4efe1639f0be2c1c10b", BlsPublicKey: "c51ad5ab03c3692e299cf335d48ee1dbed6c77c76c6ce3032e7e843f2245fe02379d1b98afcf8b9203c46eb567e6460c"},
{Index: " 403 ", Address: "0xff1bE0eAC9B6053CD656947F0CcE7d277FF720Ec", BlsPriKey: "d94e179e77a8bf71206b2232eb826a9b5f8a64c55d919411263511e3a2ce7407", BlsPublicKey: "e17588fea9a1a1fa00a0e1a53046818e970a444b3e78d8fe4c4cc4de704abfef7a39654521fddf935078f28331c07503"},
}

@ -2,14 +2,14 @@ package genesis
// NewNodeAccounts are the accounts for the new node
var NewNodeAccounts = [...]DeployAccount{
{Address: "0x0e59b767D5E74cf7B29Ef9bEc3dA4c402d357C6C", BlsPriKey: "bb0f9464c1ef92db53cf22953b4eeff4b78dd5af47c65a991ee6cf081b8d9569"},
{Address: "0x0fAAda81c203C74CAc786786f7D428477a04bF9c", BlsPriKey: "eaff001d11db657636b1b62895cfa0f35ac767579d08e5959826a56cf7c43667"},
{Address: "0x0fd228bdFbe9ad0c898e9A0Fee2E6FB01f596F0d", BlsPriKey: "f0818e99182552ab8401471dae9f219fe7232277073ee4b44b744b8c1f34ef47"},
{Address: "0x123FF831333e2662D00c60A2C46f7196204506e9", BlsPriKey: "e2bf6f64c1fa6301a2e5d839f2da986f5fe2f10ef2837c5ef2633571199cda3c"},
{Address: "0x1240775288d0EE975583A2A7022006539dADb354", BlsPriKey: "bc8174046a2b556da8a731aaa2d30cc04f3f401c708b19bf4d9c47bba7dea11c"},
{Address: "0x127b8Cb71Fb78338d9EFFe47bB51c2EAd3995378", BlsPriKey: "ab5cdc9b688af2ee58346b2af9952cc7b84146538fe78d27c3df9fd9f0a88b71"},
{Address: "0x141B0e0f05739B7B784654E973e9b9146473aAb9", BlsPriKey: "06c2aac72636fb74df815688696fe12c4894a50c016e6016a6e51f9452c77b36"},
{Address: "0x1492ebD0EcfD54B4c211b37C8891bA3493c52100", BlsPriKey: "04e762a7c540d2f2f566c0f1729475753914b42e6293a8e6653f29fc6ffba273"},
{Address: "0x1530A04592F9C3bF06aC6044525f08937ED38edB", BlsPriKey: "68bd252b49616db29a5b923c5508374b3ee8184b2d3899a1d71d5ea0f3e68348"},
{Address: "0xE2ab78ecf325084485957B2599d53Bcf944Cbca8", BlsPriKey: "d09a1c5efd391ef432d5be413d062374643f7f6f68fa59e58409d88d985c6d38"},
{Index: "0", Address: "0x0e59b767D5E74cf7B29Ef9bEc3dA4c402d357C6C", BlsPriKey: "bb0f9464c1ef92db53cf22953b4eeff4b78dd5af47c65a991ee6cf081b8d9569", BlsPublicKey: "92fa832056e71ea833e24a7e877e2f371ca645cf338a4cb93c2ced40d8d6676eaf15dac642f22c238d58fed279f34700"},
{Index: "1", Address: "0x0fAAda81c203C74CAc786786f7D428477a04bF9c", BlsPriKey: "eaff001d11db657636b1b62895cfa0f35ac767579d08e5959826a56cf7c43667", BlsPublicKey: "d1ac9bbf790e347cbe5e6fb9145f5ffd93e335452f94829df6376c6924fbceea4b96ac8c29778e7b06a92e25bd06f892"},
{Index: "2", Address: "0x0fd228bdFbe9ad0c898e9A0Fee2E6FB01f596F0d", BlsPriKey: "f0818e99182552ab8401471dae9f219fe7232277073ee4b44b744b8c1f34ef47", BlsPublicKey: "0a4d8c3168072ac82604103b3ca5efd038ae38c6062f303b08a24152b8c58d1ff3b578521f80a386bcfa2ad6c680ba14"},
{Index: "3", Address: "0x123FF831333e2662D00c60A2C46f7196204506e9", BlsPriKey: "e2bf6f64c1fa6301a2e5d839f2da986f5fe2f10ef2837c5ef2633571199cda3c", BlsPublicKey: "a31b122157b1d6d958a184361299396b3b72a3cdcd20eb5e07e18bc03034fa1a8ddbd2e0f9e3ed68cd412b7b673c0094"},
{Index: "4", Address: "0x1240775288d0EE975583A2A7022006539dADb354", BlsPriKey: "bc8174046a2b556da8a731aaa2d30cc04f3f401c708b19bf4d9c47bba7dea11c", BlsPublicKey: "1aeaebce1a8a8aabb64877491a392f63682b3e2a223d1d3c7c5ef8d5b33e5e700543d5c9d8017c8520e6d7193f496f05"},
{Index: "5", Address: "0x127b8Cb71Fb78338d9EFFe47bB51c2EAd3995378", BlsPriKey: "ab5cdc9b688af2ee58346b2af9952cc7b84146538fe78d27c3df9fd9f0a88b71", BlsPublicKey: "3ec3dd79bd1a8e27d0fa927bbf0f425ce564a962389a723924f071fc7802bc5924d848980595cd584e3588a6d3e0a191"},
{Index: "6", Address: "0x141B0e0f05739B7B784654E973e9b9146473aAb9", BlsPriKey: "06c2aac72636fb74df815688696fe12c4894a50c016e6016a6e51f9452c77b36", BlsPublicKey: "f2f085fb9258e47601db4c3b87f9d603b7557b57e1c4e0361f86f42070b45bca09d69276c4717846589b3a99481eed80"},
{Index: "7", Address: "0x1492ebD0EcfD54B4c211b37C8891bA3493c52100", BlsPriKey: "04e762a7c540d2f2f566c0f1729475753914b42e6293a8e6653f29fc6ffba273", BlsPublicKey: "01c91a20ec490e2e6663a3c5ce04e57b991998f8967453535360de66e14dca797aa5fd270cc6d3dbc31d684d2622af05"},
{Index: "8", Address: "0x1530A04592F9C3bF06aC6044525f08937ED38edB", BlsPriKey: "68bd252b49616db29a5b923c5508374b3ee8184b2d3899a1d71d5ea0f3e68348", BlsPublicKey: "fe3f52d068bb83211b3e804a29f27699f9388d2dd0fcbf91353e4dd68da69636046a24fd5912f8dd5e97388577fd388a"},
{Index: "9", Address: "0xE2ab78ecf325084485957B2599d53Bcf944Cbca8", BlsPriKey: "d09a1c5efd391ef432d5be413d062374643f7f6f68fa59e58409d88d985c6d38", BlsPublicKey: "c02e49e1395c6fbbabf0d619d872f74774d34ddec83553cf7f687da593253d072d5d050b3b4a3005304e504781847999"},
}

@ -22,7 +22,7 @@ const (
// Run garbage collector every 30 minutes.
gcTime = 10 * time.Minute
// Print out memstat every memStatTime.
memStatTime = 30 * time.Second
memStatTime = 300 * time.Second
)
// MemProfiling is the struct to watch objects for memprofiling.
@ -100,9 +100,9 @@ func MaybeCallGCPeriodically() {
for {
select {
case <-time.After(gcTime):
PrintMemUsage("mem stats before GC")
PrintMemUsage("Memory stats before GC")
runtime.GC()
PrintMemUsage("mem stats after GC")
PrintMemUsage("Memory stats after GC")
}
}
}()
@ -110,7 +110,7 @@ func MaybeCallGCPeriodically() {
for {
select {
case <-time.After(memStatTime):
PrintMemUsage("mem stats")
PrintMemUsage("Memory stats")
}
}
}()

@ -2,8 +2,14 @@ package utils
import (
"fmt"
"io"
"io/ioutil"
"os"
"strconv"
"strings"
"syscall"
"github.com/pkg/errors"
"golang.org/x/crypto/ssh/terminal"
)
@ -19,3 +25,56 @@ func AskForPassphrase(prompt string) string {
return password
}
// readAllAsString reads the entire file contents as a string.
func readAllAsString(r io.Reader) (data string, err error) {
bytes, err := ioutil.ReadAll(r)
return string(bytes), err
}
// GetPassphraseFromSource reads a passphrase such as a key-encrypting one
// non-interactively from the given source.
//
// The source can be "pass:password", "env:var", "file:pathname", "fd:number",
// or "stdin". See “PASS PHRASE ARGUMENTS” section of openssl(1) for details.
func GetPassphraseFromSource(src string) (pass string, err error) {
switch src {
case "stdin":
return readAllAsString(os.Stdin)
}
methodArg := strings.SplitN(src, ":", 2)
if len(methodArg) < 2 {
return "", errors.Errorf("invalid passphrase reading method %#v", src)
}
method := methodArg[0]
arg := methodArg[1]
switch method {
case "pass":
return arg, nil
case "env":
pass, ok := os.LookupEnv(arg)
if !ok {
return "", errors.Errorf("environment variable %#v undefined", arg)
}
return pass, nil
case "file":
f, err := os.Open(arg)
if err != nil {
return "", errors.Wrapf(err, "cannot open file %#v", arg)
}
defer func() { _ = f.Close() }()
return readAllAsString(f)
case "fd":
fd, err := strconv.ParseUint(arg, 10, 0)
if err != nil {
return "", errors.Wrapf(err, "invalid fd literal %#v", arg)
}
f := os.NewFile(uintptr(fd), "(passphrase-source)")
if f == nil {
return "", errors.Errorf("cannot open fd %#v", fd)
}
defer func() { _ = f.Close() }()
return readAllAsString(f)
}
return "", errors.Errorf("invalid passphrase reading method %#v", method)
}

@ -0,0 +1,44 @@
package utils
import (
"fmt"
"os"
"testing"
"github.com/pkg/errors"
testutils "github.com/harmony-one/harmony/internal/utils/testing"
)
func exerciseGetPassphraseFromSource(t *testing.T, source, expected string) {
if actual, err := GetPassphraseFromSource(source); err != nil {
t.Fatal(errors.Wrap(err, "cannot read passphrase"))
} else if actual != expected {
t.Errorf("expected passphrase %#v; got %#v", expected, actual)
}
}
func TestGetPassphraseFromSource_Pass(t *testing.T) {
exerciseGetPassphraseFromSource(t, "pass:hello world", "hello world")
}
func TestGetPassphraseFromSource_File(t *testing.T) {
expected := "\nhello world\n"
t.Run("stdin", func(t *testing.T) {
f := testutils.NewTempFileWithContents(t, []byte(expected))
savedStdin := os.Stdin
defer func() { os.Stdin = savedStdin }()
os.Stdin = f
exerciseGetPassphraseFromSource(t, "stdin", expected)
})
t.Run("file", func(t *testing.T) {
f := testutils.NewTempFileWithContents(t, []byte(expected))
defer testutils.CloseAndRemoveTempFile(t, f)
exerciseGetPassphraseFromSource(t, "file:"+f.Name(), expected)
})
t.Run("fd", func(t *testing.T) {
f := testutils.NewTempFileWithContents(t, []byte(expected))
defer testutils.CloseAndRemoveTempFile(t, f)
exerciseGetPassphraseFromSource(t, fmt.Sprintf("fd:%d", f.Fd()), expected)
})
}

@ -0,0 +1,46 @@
package testutils
import (
"io"
"io/ioutil"
"os"
"strings"
"testing"
"github.com/pkg/errors"
)
// NewTempFile creates a new, empty temp file for testing. Errors are fatal.
func NewTempFile(t *testing.T) *os.File {
pattern := strings.ReplaceAll(t.Name(), string(os.PathSeparator), "_")
f, err := ioutil.TempFile("", pattern)
if err != nil {
t.Fatal(errors.Wrap(err, "cannot create temp file"))
}
return f
}
// NewTempFileWithContents creates a new, empty temp file for testing,
// with the given contents. The read/write offset is set to the beginning.
// Errors are fatal.
func NewTempFileWithContents(t *testing.T, contents []byte) *os.File {
f := NewTempFile(t)
if _, err := f.Write(contents); err != nil {
t.Fatal(errors.Wrapf(err, "cannot write contents into %s", f.Name()))
}
if _, err := f.Seek(0, io.SeekStart); err != nil {
t.Fatal(errors.Wrapf(err, "cannot rewind test file %s", f.Name()))
}
return f
}
// CloseAndRemoveTempFile closes/removes the temp file. Errors are logged.
func CloseAndRemoveTempFile(t *testing.T, f *os.File) {
fn := f.Name()
if err := f.Close(); err != nil {
t.Log(errors.Wrapf(err, "cannot close test file %s", fn))
}
if err := os.Remove(fn); err != nil {
t.Log(errors.Wrapf(err, "cannot remove test file %s", fn))
}
}

@ -333,7 +333,7 @@ func New(host p2p.Host, consensusObj *consensus.Consensus, chainDBFactory shardc
// TODO (leo): we need to have support of cross-shard tx later so that the token can be transferred from beacon chain shard to other tx shards.
if node.isFirstTime {
// Setup one time smart contracts
node.AddFaucetContractToPendingTransactions()
//node.AddFaucetContractToPendingTransactions()
} else {
node.AddContractKeyAndAddress(scFaucet)
}

@ -90,7 +90,7 @@ func (node *Node) SetupGenesisBlock(db ethdb.Database, shardID uint32) error {
if shardID == 0 {
// Accounts used by validator/nodes to stake and participate in the network.
AddNodeAddressesToGenesisAlloc(genesisAlloc)
// AddNodeAddressesToGenesisAlloc(genesisAlloc)
}
// TODO: add ShardID into chainconfig and change ChainID to NetworkID

@ -490,11 +490,11 @@ func (node *Node) pingMessageHandler(msgPayload []byte, sender string) int {
node.host.ConnectHostPeer(*peer)
if ping.Node.Role == proto_node.ClientRole {
utils.GetLogInstance().Info("Add Client Peer to Node", "Address", node.Consensus.GetSelfAddress(), "Client", peer)
utils.GetLogInstance().Info("Add Client Peer to Node", "PubKey", node.Consensus.PubKey.SerializeToHexStr(), "Client", peer)
node.ClientPeer = peer
} else {
node.AddPeers([]*p2p.Peer{peer})
utils.GetLogInstance().Info("Add Peer to Node", "Address", node.Consensus.GetSelfAddress(), "Peer", peer, "# Peers", len(node.Consensus.PublicKeys))
utils.GetLogInstance().Info("Add Peer to Node", "PubKey", node.Consensus.PubKey.SerializeToHexStr(), "Peer", peer, "# Peers", len(node.Consensus.PublicKeys))
}
return 1
@ -805,10 +805,5 @@ func getBinaryPath() (argv0 string, err error) {
// ConsensusMessageHandler passes received message in node_handler to consensus
func (node *Node) ConsensusMessageHandler(msgPayload []byte) {
select {
case node.Consensus.MsgChan <- msgPayload:
case <-time.After(consensusTimeout):
//utils.GetLogInstance().Debug("[Consensus] ConsensusMessageHandler timeout", "duration", consensusTimeout, "msgPayload", len(msgPayload))
}
return
node.Consensus.MsgChan <- msgPayload
}

@ -17,7 +17,7 @@ import (
const (
DefaultThreshold = 1
FirstTimeThreshold = 2
ConsensusTimeOut = 10
ConsensusTimeOut = 30
PeriodicBlock = 1 * time.Second
BlockPeriod = 10 * time.Second
)
@ -34,13 +34,22 @@ func (node *Node) WaitForConsensusReadyv2(readySignal chan struct{}, stopChan ch
time.Sleep(30 * time.Second) // Wait for other nodes to be ready (test-only)
firstTime := true
timeoutCount := 0
var newBlock *types.Block
for {
// keep waiting for Consensus ready
select {
case <-stopChan:
utils.GetLogInstance().Debug("Consensus propose new block: STOPPED!")
utils.GetLogInstance().Debug("Consensus new block proposal: STOPPED!")
return
case <-time.After(ConsensusTimeOut * time.Second):
node.Consensus.ResetState()
timeoutCount++
if newBlock != nil {
utils.GetLogInstance().Debug("Consensus timeout, retry!", "count", timeoutCount)
// Send the new block to Consensus so it can be confirmed.
node.BlockChannel <- newBlock
}
case <-readySignal:
firstTry := true
deadline := time.Now().Add(BlockPeriod)
@ -62,25 +71,24 @@ func (node *Node) WaitForConsensusReadyv2(readySignal chan struct{}, stopChan ch
deadline = time.Now().Add(BlockPeriod)
// Normal tx block consensus
selectedTxs := node.getTransactionsForNewBlock(MaxNumberOfTransactionsPerBlock)
utils.GetLogInstance().Debug("PROPOSING NEW BLOCK ------------------------------------------------", "blockNum", node.Blockchain().CurrentBlock().NumberU64()+1, "threshold", threshold, "selectedTxs", len(selectedTxs))
utils.GetLogInstance().Info("PROPOSING NEW BLOCK ------------------------------------------------", "blockNum", node.Blockchain().CurrentBlock().NumberU64()+1, "threshold", threshold, "selectedTxs", len(selectedTxs))
if err := node.Worker.CommitTransactions(selectedTxs); err != nil {
ctxerror.Log15(utils.GetLogger().Error,
ctxerror.New("cannot commit transactions").
WithCause(err))
}
block, err := node.Worker.Commit()
newBlock, err := node.Worker.Commit()
if err != nil {
ctxerror.Log15(utils.GetLogger().Error,
ctxerror.New("cannot commit new block").
WithCause(err))
continue
} else if err := node.proposeShardState(block); err != nil {
} else if err := node.proposeShardState(newBlock); err != nil {
ctxerror.Log15(utils.GetLogger().Error,
ctxerror.New("cannot add shard state").
WithCause(err))
} else {
newBlock := block
utils.GetLogInstance().Debug("Successfully proposed new block", "blockNum", block.NumberU64(), "numTxs", block.Transactions().Len())
utils.GetLogInstance().Debug("Successfully proposed new block", "blockNum", newBlock.NumberU64(), "numTxs", newBlock.Transactions().Len())
// Send the new block to Consensus so it can be confirmed.
node.BlockChannel <- newBlock

@ -111,6 +111,7 @@ SyncingLoop:
node.stateMutex.Lock()
node.State = NodeNotInSync
node.stateMutex.Unlock()
node.Consensus.BlocksNotSynchronized()
node.stateSync.SyncLoop(bc, worker, willJoinConsensus, false)
if willJoinConsensus {
node.stateMutex.Lock()
@ -169,8 +170,7 @@ func (node *Node) SendNewBlockToUnsync() {
}
// really need to have a unique id independent of ip/port
selfPeerAddress := node.Consensus.SelfAddress
utils.GetLogInstance().Debug("[SYNC] peerRegistration Record", "selfPeerAddress", selfPeerAddress, "number", len(node.peerRegistrationRecord))
utils.GetLogInstance().Debug("[SYNC] peerRegistration Record", "selfPubKey", node.Consensus.PubKey.SerializeToHexStr(), "number", len(node.peerRegistrationRecord))
for peerID, config := range node.peerRegistrationRecord {
elapseTime := time.Now().UnixNano() - config.timestamp

@ -0,0 +1,72 @@
#!/bin/bash
function usage
{
cat<<EOT
Usage: $0 [option] command
Option:
-h print this help
Monitor Help:
Actions:
1. status - Generates a status report of your node
EOT
exit 0
}
while getopts "h" opt; do
case $opt in
h) usage ;;
*) usage ;;
esac
done
#cd $HOME
#check if you're in snych
heightStatus=$(grep otherHeight ./latest/validator*.log | egrep -o "myHeight(.*)([0-9]+)," | tail -n 1)
# Which Shard
my_shard=$(egrep -o "shard\/[0-9]+" ./latest/validator*.log | tail -n 1)
# Which IP
ip=$(curl http://169.254.169.254/latest/meta-data/public-ipv4)
bingos=$(grep -c "BINGO" ./latest/*log)
# balances=$(./wallet.sh balances)
status=$(tac ./latest/* | egrep -m1 'BINGO|HOORAY' | \
grep ViewID | \
python -c $'import datetime, sys, json;\nfor x in sys.stdin:\n y = json.loads(x); print "%10s %s %s" % (y.get("ViewID", "*" + str(y.get("myViewID", 0))), datetime.datetime.strftime(datetime.datetime.strptime(y["t"][:-4], "%Y-%m-%dT%H:%M:%S.%f") + datetime.timedelta(hours=-7), "%m/%d %H:%M:%S.%f"), y["ip"])')
#sudo /sbin/ldconfig -v
#nodeVersion=$(LD_LIBRARY_PATH=$(pwd) ./harmony -version)
#check if you're in snych
#Reward
#echo "Your Node Version : "
LD_LIBRARY_PATH=$(pwd) ./harmony -version
echo "Your System Status : "$status
echo "Your Sync Status : "$heightStatus
echo "Your Shard : " $my_shard
echo "Your IP: " $ip
echo "Blocks Received : " $bingos
echo "Your Rewards: "
./wallet.sh balances
# display the first block you started receiving
# show the percentage of earned / recieved
#Is your account registered
# ./wallet.sh format --address one1xhffyq90exjvmsz3vcykqkdqggrcedf7zdcvt8
# account address in Bech32: one1xhffyq90exjvmsz3vcykqkdqggrcedf7zdcvt8
# account address in Base16 (deprecated): 0x35D29200aFC9A4cDC05166096059a042078CB53e
# https://raw.githubusercontent.com/harmony-one/harmony/master/internal/genesis/foundational.go

@ -1,14 +1,24 @@
#!/bin/bash
function killnode() {
local port=$1
if [ -n "port" ]; then
pid=$(/bin/ps -fu $USER | grep "harmony" | grep "$port" | awk '{print $2}')
echo "killing node with port: $port"
$DRYRUN kill -9 $pid 2> /dev/null
echo "node with port: $port is killed"
fi
unset -v progname
progname="${0##*/}"
unset -f msg err
msg() {
case $# in
[1-9]*)
echo "${progname}: $*" >&2
;;
esac
}
err() {
local code
code="${1}"
shift 1
msg "$@"
exit "${code}"
}
# https://www.linuxjournal.com/content/validating-ip-address-bash-script
@ -33,10 +43,9 @@ function myip() {
# get ipv4 address only, right now only support ipv4 addresses
PUB_IP=$(dig -4 @resolver1.opendns.com ANY myip.opendns.com +short)
if valid_ip $PUB_IP; then
echo MYIP = $PUB_IP
msg "public IP address autodetected: $PUB_IP"
else
echo NO valid public IP found: $PUB_IP
exit 1
err 1 "NO valid public IP found: $PUB_IP"
fi
}
@ -68,37 +77,65 @@ function setup_env
add_env /etc/pam.d/common-session "session required pam_limits.so"
}
function find_harmony_process
{
unset -v pidfile pid
pidfile="harmony-${PUB_IP}.pid"
pid=$!
echo "${pid}" > "${pidfile}"
ps -f -p "${pid}"
}
######## main #########
if [[ $EUID -ne 0 ]]; then
echo "This script must be run as root"
echo Please use \"sudo $0\"
msg "this script must be run as root"
msg please use \"sudo $0\"
exit 1
fi
if [ -z "$1" ]; then
echo "Usage: $0 account_address"
echo
echo "Please provide account address."
echo "For foundational nodes, please follow the instructions in discord #foundational-nodes channel"
echo "to generate and register your account address with <genesis at harmony dot one>"
echo
exit 1
fi
print_usage() {
cat <<- ENDEND
usage: ${progname} [-1ch] account_address
-c back up database/logs and start clean
(use only when directed by Harmony)
-1 do not loop; run once and exit
-h print this help and exit
ENDEND
}
usage() {
msg "$@"
print_usage >&2
exit 64 # EX_USAGE
}
IDX=$1
unset start_clean loop
start_clean=false
loop=true
killnode
unset OPTIND OPTARG opt
OPTIND=1
while getopts :1ch opt
do
case "${opt}" in
'?') usage "unrecognized option -${OPTARG}";;
':') usage "missing argument for -${OPTARG}";;
c) start_clean=true;;
1) loop=false;;
h) print_usage; exit 0;;
*) err 70 "unhandled option -${OPTARG}";; # EX_SOFTWARE
esac
done
shift $((${OPTIND} - 1))
case $# in
0)
usage "Please provide account address." \
"For foundational nodes, please follow the instructions in Discord #foundational-nodes channel" \
"to generate and register your account address with <genesis at harmony dot one>."
;;
esac
IDX="${1}"
shift 1
case $# in
[1-9]*)
usage "extra arguments at the end ($*)"
;;
esac
mkdir -p latest
BUCKET=pub.harmony.one
OS=$(uname -s)
REL=drum
@ -117,11 +154,18 @@ for bin in "${BIN[@]}"; do
rm -f ${bin}
done
# download all the binaries
for bin in "${BIN[@]}"; do
curl http://${BUCKET}.s3.amazonaws.com/${FOLDER}${bin} -o ${bin}
done
chmod +x harmony
download_binaries() {
local outdir
outdir="${1:-.}"
mkdir -p "${outdir}"
for bin in "${BIN[@]}"; do
curl http://${BUCKET}.s3.amazonaws.com/${FOLDER}${bin} -o "${outdir}/${bin}" || return $?
done
chmod +x "${outdir}/harmony"
(cd "${outdir}" && exec openssl sha256 "${BIN[@]}") > "${outdir}/harmony-checksums.txt"
}
download_binaries || err 69 "initial node software update failed"
NODE_PORT=9000
PUB_IP=
@ -138,22 +182,135 @@ myip
# public boot node multiaddress
BN_MA=/ip4/100.26.90.187/tcp/9874/p2p/Qmdfjtk6hPoyrH1zVD9PEH4zfWLo38dP2mDvvKXfh3tnEv,/ip4/54.213.43.194/tcp/9874/p2p/QmZJJx6AdaoEkGLrYG4JeLCKeCKDjnFz2wfHNHxAqFSGA9
echo "############### Running Harmony Process ###############"
if [ "$OS" == "Linux" ]; then
# Run Harmony Node
LD_LIBRARY_PATH=$(pwd) ./harmony -bootnodes $BN_MA -ip $PUB_IP -port $NODE_PORT -is_genesis -is_archival -accounts $IDX
else
DYLD_FALLBACK_LIBRARY_PATH=$(pwd) ./harmony -bootnodes $BN_MA -ip $PUB_IP -port $NODE_PORT -is_genesis -is_archival -accounts $IDX
if ${start_clean}
then
msg "backing up old database/logs (-c)"
unset -v backup_dir now
now=$(date -u +%Y-%m-%dT%H:%M:%SZ)
mkdir -p backups
backup_dir=$(mktemp -d "backups/${now}.XXXXXX")
mv harmony_db_* latest "${backup_dir}/" || :
rm -rf latest
fi
mkdir -p latest
find_harmony_process
echo
echo
unset -v check_update_pid
cleanup() {
local trap_sig kill_sig
trap_sig="${1:-EXIT}"
kill_sig="${trap_sig}"
case "${kill_sig}" in
0|EXIT|2|INT) kill_sig=TERM;;
esac
case "${check_update_pid+set}" in
set)
msg "terminating update checker (pid ${check_update_pid})"
kill -${kill_sig} "${check_update_pid}"
;;
esac
}
unset -v trap_sigs trap_sig
trap_sigs="EXIT HUP INT TERM"
trap_func() {
local trap_sig="${1-EXIT}"
case "${trap_sig}" in
0|EXIT) msg "exiting";;
*) msg "received SIG${trap_sig}";;
esac
# echo Please run the following command to inspect the log
# echo "tail -f harmony-${PUB_IP}.log"
trap - ${trap_sigs}
cleanup "${trap_sig}"
case "${trap_sig}" in
""|0|EXIT) ;;
*) kill -"${trap_sig}" "$$";;
esac
}
for trap_sig in ${trap_sigs}
do
trap "trap_func ${trap_sig}" ${trap_sig}
done
# Kill the given PID, ensuring that it is a child of this script ($$).
kill_child() {
local pid
pid="${1}"
case $(($(ps -oppid= -p"${pid}" || :) + 0)) in
$$) ;;
*) return 1;;
esac
msg "killing pid ${pid}"
kill "${pid}"
}
# Kill nodes that are direct child of this script (pid $$),
# i.e. run directly from main loop.
kill_node() {
local pids pid delay
msg "finding node processes that are our children"
pids=$(
ps axcwwo "pid=,ppid=,command=" |
awk -v me=$$ '$2 == me && $3 == "harmony" { print $1; }'
)
msg "found node processes: ${pids:-"<none>"}"
for pid in ${pids}
do
delay=0
while kill_child ${pid}
do
sleep ${delay}
delay=1
done
msg "pid ${pid} no longer running"
done
}
{
while :
do
msg "re-downloading binaries in 5m"
sleep 300
while ! download_binaries staging
do
msg "staging download failed; retrying in 30s"
sleep 30
done
if diff staging/harmony-checksums.txt harmony-checksums.txt
then
msg "binaries did not change"
continue
fi
msg "binaries changed; moving from staging into main"
(cd staging; exec mv harmony-checksums.txt "${BIN[@]}" ..) || continue
msg "binaries updated, killing node to restart"
kill_node
done
} > harmony-update.out 2>&1 &
check_update_pid=$!
unset -v passphrase
read -rsp "Enter passphrase for account ${IDX}: " passphrase
echo
echo You may use \"sudo pkill harmony\" to terminate running harmony node program.
trap killnode SIGINT SIGTERM
while :
do
msg "############### Running Harmony Process ###############"
if [ "$OS" == "Linux" ]; then
# Run Harmony Node
echo -n "${passphrase}" | LD_LIBRARY_PATH=$(pwd) ./harmony -bootnodes $BN_MA -ip $PUB_IP -port $NODE_PORT -is_genesis -is_archival -accounts $IDX -pass stdin
else
echo -n "${passphrase}" | DYLD_FALLBACK_LIBRARY_PATH=$(pwd) ./harmony -bootnodes $BN_MA -ip $PUB_IP -port $NODE_PORT -is_genesis -is_archival -accounts $IDX -pass stdin
fi || msg "node process finished with status $?"
${loop} || break
msg "restarting in 10s..."
sleep 10
done

@ -23,6 +23,14 @@ func main() {
for i := 0; i < len(genesis.NewNodeAccounts); i++ {
var sec bls.SecretKey
sec.SetByCSPRNG()
err := sec.DeserializeHexStr(sec.SerializeToHexStr())
if err != nil {
fmt.Println(err)
}
if i%10 == 0 {
fmt.Println()
fmt.Printf("// %d - %d\n", i, i+9)
}
fmt.Printf("{Address: \"%s\", BlsPriKey: \"%s\"},\n", genesis.NewNodeAccounts[i].Address, sec.SerializeToHexStr())
if i == 0 {
aggSig = sec.Sign(m)

@ -1,3 +1,3 @@
./test/kill_node.sh
rm -rf tmp_log*
./test/deploy.sh -D -1 ./test/configs/ten-oneshard.txt
./test/deploy.sh -D -1 ./test/configs/beaconchain20.txt

@ -48,7 +48,7 @@ function usage {
local ME=$(basename $0)
cat<<EOU
USAGE: $ME [OPTIONS] config_file_name
USAGE: $ME [OPTIONS] config_file_name [extra args to node]
-h print this help message
-d enable db support (default: $DB)
@ -97,9 +97,10 @@ done
shift $((OPTIND-1))
config=$1
if [ -z "$config" ]; then
usage
fi
shift 1 || usage
unset -v extra_args
declare -a extra_args
extra_args=("$@")
case "${DURATION-}" in
"")
@ -169,7 +170,7 @@ while IFS='' read -r line || [[ -n "$line" ]]; do
esac
case "${mode}" in
client) ;;
*) $DRYRUN "${ROOT}/bin/harmony" "${args[@]}" 2>&1 | tee -a "${LOG_FILE}" &;;
*) $DRYRUN "${ROOT}/bin/harmony" "${args[@]}" "${extra_args[@]}" 2>&1 | tee -a "${LOG_FILE}" &;;
esac
i=$((i+1))
done < $config

Loading…
Cancel
Save