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. 104
      cmd/client/wallet/main.go
  6. 26
      cmd/harmony/main.go
  7. 58
      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. 898
      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 // Decrypting the key isn't really necessary, but we do
// it anyway to check the password and zero out the key // it anyway to check the password and zero out the key
// immediately afterwards. // immediately afterwards.
a, key, err := ks.getDecryptedKey(a, passphrase) a, key, err := ks.GetDecryptedKey(a, passphrase)
if key != nil { if key != nil {
zeroKey(key.PrivateKey) 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 // can be decrypted with the given passphrase. The produced signature is in the
// [R || S || V] format where V is 0 or 1. // [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) { 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 { if err != nil {
return nil, err 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 // SignTxWithPassphrase signs the transaction if the private key matching the
// given address can be decrypted with the given passphrase. // 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) { 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 { if err != nil {
return nil, err 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 // shortens the active unlock timeout. If the address was previously unlocked
// indefinitely the timeout is not altered. // indefinitely the timeout is not altered.
func (ks *KeyStore) TimedUnlock(a accounts.Account, passphrase string, timeout time.Duration) error { 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 { if err != nil {
return err return err
} }
@ -377,7 +377,8 @@ func (ks *KeyStore) Find(a accounts.Account) (accounts.Account, error) {
return a, err 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) a, err := ks.Find(a)
if err != nil { if err != nil {
return a, nil, err 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. // Export exports as a JSON key, encrypted with newPassphrase.
func (ks *KeyStore) Export(a accounts.Account, passphrase, newPassphrase string) (keyJSON []byte, err error) { 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 { if err != nil {
return nil, err 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. // Update changes the passphrase of an existing account.
func (ks *KeyStore) Update(a accounts.Account, passphrase, newPassphrase string) error { 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 { if err != nil {
return err return err
} }

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

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

@ -476,6 +476,9 @@ func (ss *StateSync) updateBlockAndStatus(block *types.Block, bc *core.BlockChai
_, err := bc.InsertChain([]*types.Block{block}) _, err := bc.InsertChain([]*types.Block{block})
if err != nil { if err != nil {
utils.GetLogInstance().Debug("Error adding new block to blockchain", "Error", err) 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 return false
} }
ss.syncMux.Lock() ss.syncMux.Lock()

@ -2,6 +2,7 @@ package main
import ( import (
"encoding/base64" "encoding/base64"
"encoding/hex"
"flag" "flag"
"fmt" "fmt"
"io/ioutil" "io/ioutil"
@ -70,6 +71,10 @@ var (
exportCommand = flag.NewFlagSet("export", flag.ExitOnError) exportCommand = flag.NewFlagSet("export", flag.ExitOnError)
exportCommandAccountPtr = exportCommand.String("account", "", "The account to be exported") 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 // Account subcommands
accountImportCommand = flag.NewFlagSet("import", flag.ExitOnError) accountImportCommand = flag.NewFlagSet("import", flag.ExitOnError)
accountImportPtr = accountImportCommand.String("privateKey", "", "Specify the private keyfile to import") accountImportPtr = accountImportCommand.String("privateKey", "", "Specify the private keyfile to import")
@ -87,8 +92,11 @@ var (
freeTokenCommand = flag.NewFlagSet("getFreeToken", flag.ExitOnError) freeTokenCommand = flag.NewFlagSet("getFreeToken", flag.ExitOnError)
freeTokenAddressPtr = freeTokenCommand.String("address", "", "Specify the account address to receive the free token") 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") 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 ( var (
@ -138,8 +146,12 @@ func main() {
fmt.Println(" --pass - Passphrase of sender's private key") fmt.Println(" --pass - Passphrase of sender's private key")
fmt.Println(" 8. export - Export account key to a new file") 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(" --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(" --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) os.Exit(1)
} }
@ -183,6 +195,8 @@ ARG:
processListCommand() processListCommand()
case "export": case "export":
processExportCommand() processExportCommand()
case "exportPriKey":
processExportPriKeyCommand()
case "blsgen": case "blsgen":
processBlsgenCommand() processBlsgenCommand()
case "removeAll": case "removeAll":
@ -198,6 +212,8 @@ ARG:
case "transfer": case "transfer":
readProfile(profile) readProfile(profile)
processTransferCommand() processTransferCommand()
case "format":
formatAddressCommand()
default: default:
fmt.Printf("Unknown action: %s\n", os.Args[1]) fmt.Printf("Unknown action: %s\n", os.Args[1])
flag.PrintDefaults() 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() { func processListCommand() {
if err := listCommand.Parse(os.Args[2:]); err != nil { if err := listCommand.Parse(os.Args[2:]); err != nil {
fmt.Println(ctxerror.New("failed to parse flags").WithCause(err)) fmt.Println(ctxerror.New("failed to parse flags").WithCause(err))
@ -334,12 +363,27 @@ func processExportCommand() {
allAccounts := ks.Accounts() allAccounts := ks.Accounts()
for _, account := range allAccounts { for _, account := range allAccounts {
if acc == "" || acc == common2.MustAddressToBech32(account.Address) { if acc == "" || common2.ParseAddr(acc) == account.Address {
_exportAccount(account) _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() { func processBlsgenCommand() {
newCommand.Parse(os.Args[2:]) newCommand.Parse(os.Args[2:])
noPass := *newCommandNoPassPtr noPass := *newCommandNoPassPtr
@ -401,18 +445,42 @@ func processBalancesCommand() {
fmt.Printf("Account %d:\n", i) fmt.Printf("Account %d:\n", i)
fmt.Printf(" Address: %s\n", common2.MustAddressToBech32(account.Address)) fmt.Printf(" Address: %s\n", common2.MustAddressToBech32(account.Address))
for shardID, balanceNonce := range FetchBalance(account.Address) { for shardID, balanceNonce := range FetchBalance(account.Address) {
if balanceNonce != nil {
fmt.Printf(" Balance in Shard %d: %s, nonce: %v \n", shardID, convertBalanceIntoReadableFormat(balanceNonce.balance), balanceNonce.nonce) 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 { } else {
address := common2.ParseAddr(*balanceAddressPtr) address := common2.ParseAddr(*balanceAddressPtr)
fmt.Printf("Account: %s:\n", common2.MustAddressToBech32(address)) fmt.Printf("Account: %s:\n", common2.MustAddressToBech32(address))
for shardID, balanceNonce := range FetchBalance(address) { for shardID, balanceNonce := range FetchBalance(address) {
if balanceNonce != nil {
fmt.Printf(" Balance in Shard %d: %s, nonce: %v \n", shardID, convertBalanceIntoReadableFormat(balanceNonce.balance), balanceNonce.nonce) 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() { func processGetFreeToken() {
if err := freeTokenCommand.Parse(os.Args[2:]); err != nil { if err := freeTokenCommand.Parse(os.Args[2:]); err != nil {
fmt.Println(ctxerror.New("Failed to parse flags").WithCause(err)) fmt.Println(ctxerror.New("Failed to parse flags").WithCause(err))
@ -471,8 +539,8 @@ func processTransferCommand() {
shardIDToAccountState := FetchBalance(senderAddress) shardIDToAccountState := FetchBalance(senderAddress)
state, ok := shardIDToAccountState[uint32(shardID)] state := shardIDToAccountState[shardID]
if !ok { if state != nil {
fmt.Printf("Failed connecting to the shard %d\n", shardID) fmt.Printf("Failed connecting to the shard %d\n", shardID)
return return
} }
@ -563,16 +631,23 @@ func convertBalanceIntoReadableFormat(balance *big.Int) string {
} }
// FetchBalance fetches account balance of specified address from the Harmony network // FetchBalance fetches account balance of specified address from the Harmony network
func FetchBalance(address common.Address) map[uint32]AccountState { func FetchBalance(address common.Address) []*AccountState {
result := make(map[uint32]AccountState) result := []*AccountState{}
for i := 0; i < walletProfile.Shards; i++ { 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) balance := big.NewInt(0)
var nonce uint64 var nonce uint64
result[uint32(i)] = AccountState{balance, 0} result[uint32(shardID)] = &AccountState{balance, 0}
LOOP:
for j := 0; j < len(walletProfile.RPCServer[shardID]); j++ {
for retry := 0; retry < rpcRetry; retry++ { for retry := 0; retry < rpcRetry; retry++ {
server := walletProfile.RPCServer[i][rand.Intn(len(walletProfile.RPCServer[i]))] server := walletProfile.RPCServer[shardID][j]
client, err := clientService.NewClient(server.IP, server.Port) client, err := clientService.NewClient(server.IP, server.Port)
if err != nil { if err != nil {
continue continue
@ -586,11 +661,16 @@ func FetchBalance(address common.Address) map[uint32]AccountState {
continue continue
} }
log.Debug("FetchBalance", "response", response) log.Debug("FetchBalance", "response", response)
respBalance := big.NewInt(0)
respBalance.SetBytes(response.Balance)
if balance.Cmp(respBalance) < 0 {
balance.SetBytes(response.Balance) balance.SetBytes(response.Balance)
nonce = response.Nonce nonce = response.Nonce
break
} }
result[uint32(i)] = AccountState{balance, nonce} break LOOP
}
}
result[shardID] = &AccountState{balance, nonce}
} }
return result return result
} }

@ -13,6 +13,7 @@ import (
"github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/ethdb"
"github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/log"
"github.com/harmony-one/bls/ffi/go/bls" "github.com/harmony-one/bls/ffi/go/bls"
"github.com/harmony-one/harmony/accounts" "github.com/harmony-one/harmony/accounts"
"github.com/harmony-one/harmony/accounts/keystore" "github.com/harmony-one/harmony/accounts/keystore"
"github.com/harmony-one/harmony/consensus" "github.com/harmony-one/harmony/consensus"
@ -23,7 +24,7 @@ import (
"github.com/harmony-one/harmony/internal/ctxerror" "github.com/harmony-one/harmony/internal/ctxerror"
"github.com/harmony-one/harmony/internal/genesis" "github.com/harmony-one/harmony/internal/genesis"
hmykey "github.com/harmony-one/harmony/internal/keystore" 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/profiler"
"github.com/harmony-one/harmony/internal/shardchain" "github.com/harmony-one/harmony/internal/shardchain"
"github.com/harmony-one/harmony/internal/utils" "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") 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 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") 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 indicates this node is a new node
isNewNode = flag.Bool("is_newnode", false, "true means 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") 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. // -nopass is false by default. The keyfile must be encrypted.
hmyNoPass = flag.Bool("nopass", false, "No passphrase for the key (testing only)") 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") stakingAccounts = flag.String("accounts", "", "account addresses of the node")
@ -194,7 +201,14 @@ func initSetup() {
var myPass string var myPass string
if !*hmyNoPass { if !*hmyNoPass {
if *hmyPass == "" {
myPass = utils.AskForPassphrase("Passphrase: ") 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) err := ks.Unlock(myAccount, myPass)
if err != nil { if err != nil {
fmt.Printf("Wrong Passphrase! Unable to unlock account key!\n") fmt.Printf("Wrong Passphrase! Unable to unlock account key!\n")
@ -242,7 +256,7 @@ func createGlobalConfig() *nodeconfig.ConfigType {
if *isGenesis { if *isGenesis {
err := consensusPriKey.DeserializeHexStr(genesisAccount.BlsPriKey) err := consensusPriKey.DeserializeHexStr(genesisAccount.BlsPriKey)
if err != nil { if err != nil {
panic(fmt.Errorf("generate key error")) panic(fmt.Errorf("Failed to parse BLS private key: %s, %s", genesisAccount.BlsPriKey, err))
} }
} else { } else {
// NewNode won't work // NewNode won't work
@ -263,7 +277,7 @@ func createGlobalConfig() *nodeconfig.ConfigType {
// Consensus keys are the BLS12-381 keys used to sign consensus messages // Consensus keys are the BLS12-381 keys used to sign consensus messages
nodeConfig.ConsensusPriKey, nodeConfig.ConsensusPubKey = consensusPriKey, consensusPriKey.GetPublicKey() nodeConfig.ConsensusPriKey, nodeConfig.ConsensusPubKey = consensusPriKey, consensusPriKey.GetPublicKey()
if nodeConfig.ConsensusPriKey == nil || nodeConfig.ConsensusPubKey == nil { 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] // Key Setup ================= [End]
@ -303,6 +317,12 @@ func setUpConsensusAndNode(nodeConfig *nodeconfig.ConfigType) *node.Node {
fmt.Fprintf(os.Stderr, "Error :%v \n", err) fmt.Fprintf(os.Stderr, "Error :%v \n", err)
os.Exit(1) 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 currentConsensus.MinPeers = *minPeers
if *disableViewChange { if *disableViewChange {
currentConsensus.DisableViewChangeForTestingOnly() currentConsensus.DisableViewChangeForTestingOnly()

@ -4,6 +4,7 @@ package consensus // consensus
import ( import (
"math/big" "math/big"
"sync" "sync"
"time"
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/common/hexutil" "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/state"
"github.com/harmony-one/harmony/core/types" "github.com/harmony-one/harmony/core/types"
bls_cosi "github.com/harmony-one/harmony/crypto/bls" 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" nodeconfig "github.com/harmony-one/harmony/internal/configs/node"
"github.com/harmony-one/harmony/internal/ctxerror" "github.com/harmony-one/harmony/internal/ctxerror"
"github.com/harmony-one/harmony/internal/genesis" "github.com/harmony-one/harmony/internal/genesis"
@ -42,21 +42,27 @@ type Consensus struct {
// channel to receive consensus message // channel to receive consensus message
MsgChan chan []byte 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 // 2 types of timeouts: normal and viewchange
consensusTimeout map[TimeoutType]*utils.Timeout consensusTimeout map[TimeoutType]*utils.Timeout
// Commits collected from validators. // Commits collected from validators.
prepareSigs map[common.Address]*bls.Sign // key is the validator's address prepareSigs map[string]*bls.Sign // key is the bls public key
commitSigs map[common.Address]*bls.Sign // key is the validator's address commitSigs map[string]*bls.Sign // key is the bls public key
aggregatedPrepareSig *bls.Sign aggregatedPrepareSig *bls.Sign
aggregatedCommitSig *bls.Sign aggregatedCommitSig *bls.Sign
prepareBitmap *bls_cosi.Mask prepareBitmap *bls_cosi.Mask
commitBitmap *bls_cosi.Mask commitBitmap *bls_cosi.Mask
// Commits collected from view change // Commits collected from view change
bhpSigs map[common.Address]*bls.Sign // bhpSigs: blockHashPreparedSigs is the signature on m1 type message bhpSigs map[string]*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 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[common.Address]*bls.Sign // viewIDSigs: every validator sign on |viewID|blockHash| in view changing message viewIDSigs map[string]*bls.Sign // viewIDSigs: every validator sign on |viewID|blockHash| in view changing message
bhpBitmap *bls_cosi.Mask bhpBitmap *bls_cosi.Mask
nilBitmap *bls_cosi.Mask nilBitmap *bls_cosi.Mask
viewIDBitmap *bls_cosi.Mask viewIDBitmap *bls_cosi.Mask
@ -78,18 +84,18 @@ type Consensus struct {
// Public keys of the committee including leader and validators // Public keys of the committee including leader and validators
PublicKeys []*bls.PublicKey PublicKeys []*bls.PublicKey
// The addresses of my committee CommitteePublicKeys map[string]bool
CommitteeAddresses map[common.Address]bool
pubKeyLock sync.Mutex pubKeyLock sync.Mutex
// private/public keys of current node // private/public keys of current node
priKey *bls.SecretKey priKey *bls.SecretKey
PubKey *bls.PublicKey PubKey *bls.PublicKey
SelfAddress common.Address
// the publickey of leader // the publickey of leader
LeaderPubKey *bls.PublicKey LeaderPubKey *bls.PublicKey
// Leader or validator address in hex
SelfAddress common.Address
// Consensus Id (View Id) - 4 byte // Consensus Id (View Id) - 4 byte
viewID uint32 // TODO(chao): change it to uint64 or add overflow checking mechanism 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. // Used to convey to the consensus main loop that block syncing has finished.
syncReadyChan chan struct{} 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. // If true, this consensus will not propose view change.
disableViewChange bool 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 // StakeInfoFinder returns the stake information finder instance this
// consensus uses, e.g. for block reward distribution. // consensus uses, e.g. for block reward distribution.
func (consensus *Consensus) StakeInfoFinder() StakeInfoFinder { func (consensus *Consensus) StakeInfoFinder() StakeInfoFinder {
@ -170,6 +184,11 @@ func (consensus *Consensus) BlocksSynchronized() {
consensus.syncReadyChan <- struct{}{} 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 // WaitForSyncing informs the node syncing service to start syncing
func (consensus *Consensus) WaitForSyncing() { func (consensus *Consensus) WaitForSyncing() {
<-consensus.blockNumLowChan <-consensus.blockNumLowChan
@ -180,6 +199,12 @@ func (consensus *Consensus) Quorum() int {
return len(consensus.PublicKeys)*2/3 + 1 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. // StakeInfoFinder finds the staking account for the given consensus key.
type StakeInfoFinder interface { type StakeInfoFinder interface {
// FindStakeInfoByNodeKey returns a list of staking information matching // 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) nodeconfig.GetDefaultConfig().SetIsLeader(false)
} }
consensus.prepareSigs = map[common.Address]*bls.Sign{} consensus.prepareSigs = map[string]*bls.Sign{}
consensus.commitSigs = map[common.Address]*bls.Sign{} consensus.commitSigs = map[string]*bls.Sign{}
consensus.CommitteeAddresses = make(map[common.Address]bool)
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) consensus.SelfAddress = utils.GetBlsAddress(selfPeer.ConsensusPubKey)
if blsPriKey != nil { 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.MsgChan = make(chan []byte)
consensus.syncReadyChan = make(chan struct{}) consensus.syncReadyChan = make(chan struct{})
consensus.syncNotReadyChan = make(chan struct{})
consensus.commitFinishChan = make(chan uint32)
consensus.ReadySignal = make(chan struct{}) consensus.ReadySignal = make(chan struct{})
if nodeconfig.GetDefaultConfig().IsLeader() { if nodeconfig.GetDefaultConfig().IsLeader() {

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

@ -4,11 +4,9 @@ import (
"encoding/hex" "encoding/hex"
"errors" "errors"
"fmt" "fmt"
"reflect"
"time" "time"
"github.com/harmony-one/harmony/crypto/hash" "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/common"
"github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/log"
@ -18,7 +16,6 @@ import (
libp2p_peer "github.com/libp2p/go-libp2p-peer" libp2p_peer "github.com/libp2p/go-libp2p-peer"
"golang.org/x/crypto/sha3" "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" msg_pb "github.com/harmony-one/harmony/api/proto/message"
consensus_engine "github.com/harmony-one/harmony/consensus/engine" consensus_engine "github.com/harmony-one/harmony/consensus/engine"
"github.com/harmony-one/harmony/core/state" "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/profiler"
"github.com/harmony-one/harmony/internal/utils" "github.com/harmony-one/harmony/internal/utils"
"github.com/harmony-one/harmony/p2p" "github.com/harmony-one/harmony/p2p"
"github.com/harmony-one/harmony/p2p/host"
) )
// WaitForNewRandomness listens to the RndChannel to receive new VDF randomness. // 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 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 ... // Prepare is to prepare ...
// TODO(RJ): fix it. // TODO(RJ): fix it.
func (consensus *Consensus) Prepare(chain consensus_engine.ChainReader, header *types.Header) error { 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 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. // Populates the common basic fields for all consensus message.
func (consensus *Consensus) populateMessageFields(request *msg_pb.ConsensusRequest) { func (consensus *Consensus) populateMessageFields(request *msg_pb.ConsensusRequest) {
request.ViewId = consensus.viewID request.ViewId = consensus.viewID
request.BlockNum = consensus.blockNum request.BlockNum = consensus.blockNum
request.ShardId = consensus.ShardID
// 32 byte block hash // 32 byte block hash
request.BlockHash = consensus.blockHash[:] request.BlockHash = consensus.blockHash[:]
// sender address // sender address
request.SenderPubkey = consensus.PubKey.Serialize() request.SenderPubkey = consensus.PubKey.Serialize()
consensus.getLogger().Debug("[populateMessageFields]", "SenderKey", consensus.PubKey.SerializeToHexStr())
utils.GetLogInstance().Debug("[populateMessageFields]", "myViewID", consensus.viewID, "SenderAddress", consensus.SelfAddress, "blockNum", consensus.blockNum)
} }
// Signs the consensus message and returns the marshaled message. // Signs the consensus message and returns the marshaled message.
@ -168,33 +165,18 @@ func (consensus *Consensus) DebugPrintPublicKeys() {
utils.GetLogInstance().Debug("PublicKeys:", "#", len(consensus.PublicKeys)) 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 // UpdatePublicKeys updates the PublicKeys variable, protected by a mutex
func (consensus *Consensus) UpdatePublicKeys(pubKeys []*bls.PublicKey) int { func (consensus *Consensus) UpdatePublicKeys(pubKeys []*bls.PublicKey) int {
consensus.pubKeyLock.Lock() consensus.pubKeyLock.Lock()
consensus.PublicKeys = append(pubKeys[:0:0], pubKeys...) consensus.PublicKeys = append(pubKeys[:0:0], pubKeys...)
consensus.CommitteeAddresses = map[common.Address]bool{} consensus.CommitteePublicKeys = map[string]bool{}
for _, pubKey := range consensus.PublicKeys { 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. // TODO: use pubkey to identify leader rather than p2p.Peer.
consensus.leader = p2p.Peer{ConsensusPubKey: pubKeys[0]} consensus.leader = p2p.Peer{ConsensusPubKey: pubKeys[0]}
consensus.LeaderPubKey = 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 { if err == nil {
consensus.prepareBitmap = prepareBitmap consensus.prepareBitmap = prepareBitmap
} }
@ -204,7 +186,7 @@ func (consensus *Consensus) UpdatePublicKeys(pubKeys []*bls.PublicKey) int {
consensus.commitBitmap = commitBitmap 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) utils.GetLogInstance().Info("My Committee", "info", consensus.PublicKeys)
consensus.pubKeyLock.Unlock() consensus.pubKeyLock.Unlock()
// reset states after update public keys // 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 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 // Sign on the hash of the message
func (consensus *Consensus) signMessage(message []byte) []byte { func (consensus *Consensus) signMessage(message []byte) []byte {
hash := hash.Keccak256(message) hash := hash.Keccak256(message)
@ -353,8 +329,8 @@ func (consensus *Consensus) GetViewIDSigsArray() []*bls.Sign {
func (consensus *Consensus) ResetState() { func (consensus *Consensus) ResetState() {
consensus.phase = Announce consensus.phase = Announce
consensus.blockHash = [32]byte{} consensus.blockHash = [32]byte{}
consensus.prepareSigs = map[common.Address]*bls.Sign{} consensus.prepareSigs = map[string]*bls.Sign{}
consensus.commitSigs = map[common.Address]*bls.Sign{} consensus.commitSigs = map[string]*bls.Sign{}
prepareBitmap, _ := bls_cosi.NewMask(consensus.PublicKeys, consensus.LeaderPubKey) prepareBitmap, _ := bls_cosi.NewMask(consensus.PublicKeys, consensus.LeaderPubKey)
commitBitmap, _ := 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 { } else {
duty = "VLD" // validator duty = "VLD" // validator
} }
return fmt.Sprintf("[duty:%s, PubKey:%s, ShardID:%v, Address:%v]", return fmt.Sprintf("[duty:%s, PubKey:%s, ShardID:%v]",
duty, hex.EncodeToString(consensus.PubKey.Serialize()), consensus.ShardID, consensus.SelfAddress) duty, consensus.PubKey.SerializeToHexStr(), consensus.ShardID)
}
// 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
} }
// ToggleConsensusCheck flip the flag of whether ignore viewID check during consensus process // ToggleConsensusCheck flip the flag of whether ignore viewID check during consensus process
@ -457,25 +359,9 @@ func (consensus *Consensus) ToggleConsensusCheck() {
consensus.ignoreViewIDCheck = !consensus.ignoreViewIDCheck 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 // IsValidatorInCommittee returns whether the given validator BLS address is part of my committee
func (consensus *Consensus) IsValidatorInCommittee(validatorBlsAddress common.Address) bool { func (consensus *Consensus) IsValidatorInCommittee(pubKey *bls.PublicKey) bool {
_, ok := consensus.CommitteeAddresses[validatorBlsAddress] _, ok := consensus.CommitteePublicKeys[pubKey.SerializeToHexStr()]
return ok return ok
} }
@ -508,28 +394,24 @@ func (consensus *Consensus) verifySenderKey(msg *msg_pb.Message) (*bls.PublicKey
if err != nil { if err != nil {
return nil, err return nil, err
} }
addrBytes := senderKey.GetAddress()
senderAddr := common.BytesToAddress(addrBytes[:])
if !consensus.IsValidatorInCommittee(senderAddr) { if !consensus.IsValidatorInCommittee(senderKey) {
return nil, fmt.Errorf("Validator address %s is not in committee", common2.MustAddressToBech32(senderAddr)) return nil, fmt.Errorf("Validator %s is not in committee", senderKey.SerializeToHexStr())
} }
return senderKey, nil 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() vcMsg := msg.GetViewchange()
senderKey, err := bls_cosi.BytesToBlsPublicKey(vcMsg.SenderPubkey) senderKey, err := bls_cosi.BytesToBlsPublicKey(vcMsg.SenderPubkey)
if err != nil { if err != nil {
return nil, common.Address{}, err return nil, err
} }
addrBytes := senderKey.GetAddress()
senderAddr := common.BytesToAddress(addrBytes[:])
if !consensus.IsValidatorInCommittee(senderAddr) { if !consensus.IsValidatorInCommittee(senderKey) {
return nil, common.Address{}, fmt.Errorf("Validator address %s is not in committee", common2.MustAddressToBech32(senderAddr)) 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 // 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 { func (consensus *Consensus) checkViewID(msg *PbftMessage) error {
// just ignore consensus check for the first time when node join // just ignore consensus check for the first time when node join
if consensus.ignoreViewIDCheck { 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.viewID = msg.ViewID
consensus.mode.SetViewID(msg.ViewID) consensus.mode.SetViewID(msg.ViewID)
consensus.LeaderPubKey = msg.SenderPubkey consensus.LeaderPubKey = msg.SenderPubkey
consensus.ignoreViewIDCheck = false consensus.ignoreViewIDCheck = false
consensus.consensusTimeout[timeoutConsensus].Start() consensus.consensusTimeout[timeoutConsensus].Start()
utils.GetLogger().Debug("viewID and leaderKey override", "viewID", consensus.viewID, "leaderKey", consensus.LeaderPubKey.SerializeToHexStr()[:20]) 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 return nil
} else if msg.ViewID > consensus.viewID { } else if msg.ViewID > consensus.viewID {
return consensus_engine.ErrViewIDNotMatch return consensus_engine.ErrViewIDNotMatch

@ -4,10 +4,7 @@ import (
"bytes" "bytes"
"testing" "testing"
"github.com/ethereum/go-ethereum/common"
"github.com/harmony-one/harmony/crypto/bls" "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" msg_pb "github.com/harmony-one/harmony/api/proto/message"
"github.com/harmony-one/harmony/internal/utils" "github.com/harmony-one/harmony/internal/utils"
@ -15,26 +12,6 @@ import (
"github.com/harmony-one/harmony/p2p/p2pimpl" "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) { func TestPopulateMessageFields(t *testing.T) {
leader := p2p.Peer{IP: "127.0.0.1", Port: "9902"} leader := p2p.Peer{IP: "127.0.0.1", Port: "9902"}
priKey, _, _ := utils.GenKeyP2P("127.0.0.1", "9902") priKey, _, _ := utils.GenKeyP2P("127.0.0.1", "9902")
@ -83,7 +60,6 @@ func TestSignAndMarshalConsensusMessage(t *testing.T) {
} }
consensus.viewID = 2 consensus.viewID = 2
consensus.blockHash = [32]byte{} consensus.blockHash = [32]byte{}
consensus.SelfAddress = common.Address{}
msg := &msg_pb.Message{} msg := &msg_pb.Message{}
marshaledMessage, err := consensus.signAndMarshalConsensusMessage(msg) marshaledMessage, err := consensus.signAndMarshalConsensusMessage(msg)

@ -37,6 +37,20 @@ func (consensus *Consensus) handleMessageUpdate(payload []byte) {
return 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 { switch msg.Type {
case msg_pb.MessageType_ANNOUNCE: case msg_pb.MessageType_ANNOUNCE:
consensus.onAnnounce(msg) consensus.onAnnounce(msg)
@ -57,23 +71,14 @@ func (consensus *Consensus) handleMessageUpdate(payload []byte) {
} }
// TODO: move to consensus_leader.go later // TODO: move to consensus_leader.go later
func (consensus *Consensus) tryAnnounce(block *types.Block) { func (consensus *Consensus) announce(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
}
blockHash := block.Hash() blockHash := block.Hash()
copy(consensus.blockHash[:], blockHash[:]) copy(consensus.blockHash[:], blockHash[:])
// prepare message and broadcast to validators // prepare message and broadcast to validators
encodedBlock, err := rlp.EncodeToBytes(block) encodedBlock, err := rlp.EncodeToBytes(block)
if err != nil { if err != nil {
consensus.getLogger().Debug("tryAnnounce Failed encoding block") consensus.getLogger().Debug("announce Failed encoding block")
return return
} }
consensus.block = encodedBlock consensus.block = encodedBlock
@ -86,7 +91,7 @@ func (consensus *Consensus) tryAnnounce(block *types.Block) {
_ = protobuf.Unmarshal(msgPayload, msg) _ = protobuf.Unmarshal(msgPayload, msg)
pbftMsg, err := ParsePbftMessage(msg) pbftMsg, err := ParsePbftMessage(msg)
if err != nil { 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 return
} }
@ -94,7 +99,7 @@ func (consensus *Consensus) tryAnnounce(block *types.Block) {
consensus.pbftLog.AddBlock(block) consensus.pbftLog.AddBlock(block)
// Leader sign the block hash itself // 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 // Construct broadcast p2p message
if err := consensus.host.SendMessageToGroups([]p2p.GroupID{p2p.NewGroupIDByShardID(p2p.ShardID(consensus.ShardID))}, host.ConstructP2pMessage(byte(17), msgToSend)); err != nil { 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) //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) logMsgs := consensus.pbftLog.GetMessagesByTypeSeqView(msg_pb.MessageType_ANNOUNCE, recvMsg.BlockNum, recvMsg.ViewID)
if len(logMsgs) > 0 { 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) consensus.getLogger().Debug("viewID check failed", "msgViewID", recvMsg.ViewID, "msgBlockNum", recvMsg.BlockNum)
return return
} }
consensus.tryPrepare(blockObj.Header().Hash()) consensus.prepare(&blockObj)
return return
} }
// tryPrepare will try to send prepare message // tryPrepare will try to send prepare message
func (consensus *Consensus) tryPrepare(blockHash common.Hash) { func (consensus *Consensus) prepare(block *types.Block) {
var hash common.Hash // if consensus.blockNum != block.NumberU64() || !consensus.pbftLog.HasMatchingViewAnnounce(consensus.blockNum, consensus.viewID, hash) {
copy(hash[:], blockHash[:]) // consensus.getLogger().Debug("blockNum or announce message not match")
block := consensus.pbftLog.GetBlockByHash(hash) // return
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
}
consensus.switchPhase(Prepare, true) consensus.switchPhase(Prepare, true)
@ -258,9 +245,7 @@ func (consensus *Consensus) onPrepare(msg *msg_pb.Message) {
return return
} }
validatorPubKey := recvMsg.SenderPubkey validatorPubKey := recvMsg.SenderPubkey.SerializeToHexStr()
addrBytes := validatorPubKey.GetAddress()
validatorAddress := common.BytesToAddress(addrBytes[:])
prepareSig := recvMsg.Payload prepareSig := recvMsg.Payload
prepareSigs := consensus.prepareSigs prepareSigs := consensus.prepareSigs
@ -270,13 +255,14 @@ func (consensus *Consensus) onPrepare(msg *msg_pb.Message) {
defer consensus.mutex.Unlock() defer consensus.mutex.Unlock()
if len(prepareSigs) >= consensus.Quorum() { if len(prepareSigs) >= consensus.Quorum() {
// already have enough signatures // already have enough signatures
consensus.getLogger().Info("received additional prepare message", "validatorPubKey", validatorPubKey)
return return
} }
// proceed only when the message is not received before // proceed only when the message is not received before
_, ok := prepareSigs[validatorAddress] _, ok := prepareSigs[validatorPubKey]
if ok { 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 return
} }
@ -284,23 +270,22 @@ func (consensus *Consensus) onPrepare(msg *msg_pb.Message) {
var sign bls.Sign var sign bls.Sign
err = sign.Deserialize(prepareSig) err = sign.Deserialize(prepareSig)
if err != nil { if err != nil {
consensus.getLogger().Error("Failed to deserialize bls signature", "validatorAddress", validatorAddress) consensus.getLogger().Error("Failed to deserialize bls signature", "validatorPubKey", validatorPubKey)
return return
} }
if !sign.VerifyHash(validatorPubKey, consensus.blockHash[:]) { if !sign.VerifyHash(recvMsg.SenderPubkey, consensus.blockHash[:]) {
consensus.getLogger().Error("Received invalid BLS signature", "validatorAddress", validatorAddress) consensus.getLogger().Error("Received invalid BLS signature", "validatorPubKey", validatorPubKey)
return return
} }
consensus.getLogger().Debug("Received new prepare signature", "numReceivedSoFar", len(prepareSigs), "validatorAddress", validatorAddress, "PublicKeys", len(consensus.PublicKeys)) consensus.getLogger().Debug("Received new prepare signature", "numReceivedSoFar", len(prepareSigs), "validatorPubKey", validatorPubKey, "PublicKeys", len(consensus.PublicKeys))
prepareSigs[validatorAddress] = &sign prepareSigs[validatorPubKey] = &sign
// Set the bitmap indicating that this validator signed. // 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") ctxerror.Warn(consensus.getLogger(), err, "prepareBitmap.SetKey failed")
} }
if len(prepareSigs) >= consensus.Quorum() { if len(prepareSigs) >= consensus.Quorum() {
consensus.switchPhase(Commit, true)
// Construct and broadcast prepared message // Construct and broadcast prepared message
msgToSend, aggSig := consensus.constructPreparedMessage() msgToSend, aggSig := consensus.constructPreparedMessage()
consensus.aggregatedPrepareSig = aggSig consensus.aggregatedPrepareSig = aggSig
@ -322,11 +307,15 @@ func (consensus *Consensus) onPrepare(msg *msg_pb.Message) {
consensus.getLogger().Debug("sent prepared message") consensus.getLogger().Debug("sent prepared message")
} }
consensus.switchPhase(Commit, true)
// Leader add commit phase signature // Leader add commit phase signature
blockNumHash := make([]byte, 8) blockNumHash := make([]byte, 8)
binary.LittleEndian.PutUint64(blockNumHash, consensus.blockNum) binary.LittleEndian.PutUint64(blockNumHash, consensus.blockNum)
commitPayload := append(blockNumHash, consensus.blockHash[:]...) 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 return
} }
@ -411,11 +400,16 @@ func (consensus *Consensus) onPrepared(msg *msg_pb.Message) {
consensus.prepareBitmap = mask consensus.prepareBitmap = mask
// Construct and send the commit message // Construct and send the commit message
blockNumHash := make([]byte, 8) blockNumBytes := make([]byte, 8)
binary.LittleEndian.PutUint64(blockNumHash, consensus.blockNum) binary.LittleEndian.PutUint64(blockNumBytes, consensus.blockNum)
commitPayload := append(blockNumHash, consensus.blockHash[:]...) commitPayload := append(blockNumBytes, consensus.blockHash[:]...)
msgToSend := consensus.constructCommitMessage(commitPayload) 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 { 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") consensus.getLogger().Warn("cannot send commit message")
} else { } else {
@ -464,17 +458,15 @@ func (consensus *Consensus) onCommit(msg *msg_pb.Message) {
return return
} }
validatorPubKey := recvMsg.SenderPubkey validatorPubKey := recvMsg.SenderPubkey.SerializeToHexStr()
addrBytes := validatorPubKey.GetAddress()
validatorAddress := common.BytesToAddress(addrBytes[:])
commitSig := recvMsg.Payload commitSig := recvMsg.Payload
consensus.mutex.Lock() consensus.mutex.Lock()
defer consensus.mutex.Unlock() defer consensus.mutex.Unlock()
if !consensus.IsValidatorInCommittee(validatorAddress) { if !consensus.IsValidatorInCommittee(recvMsg.SenderPubkey) {
consensus.getLogger().Error("Invalid validator", "validatorAddress", validatorAddress) consensus.getLogger().Error("Invalid validator", "validatorPubKey", validatorPubKey)
return return
} }
@ -482,48 +474,58 @@ func (consensus *Consensus) onCommit(msg *msg_pb.Message) {
commitBitmap := consensus.commitBitmap commitBitmap := consensus.commitBitmap
// proceed only when the message is not received before // proceed only when the message is not received before
_, ok := commitSigs[validatorAddress] _, ok := commitSigs[validatorPubKey]
if ok { 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 return
} }
// already had enough signautres quorumWasMet := len(commitSigs) >= consensus.Quorum()
if len(commitSigs) >= consensus.Quorum() {
return
}
// Verify the signature on commitPayload is correct // Verify the signature on commitPayload is correct
var sign bls.Sign var sign bls.Sign
err = sign.Deserialize(commitSig) err = sign.Deserialize(commitSig)
if err != nil { if err != nil {
consensus.getLogger().Debug("Failed to deserialize bls signature", "validatorAddress", validatorAddress) consensus.getLogger().Debug("Failed to deserialize bls signature", "validatorPubKey", validatorPubKey)
return return
} }
blockNumHash := make([]byte, 8) blockNumHash := make([]byte, 8)
binary.LittleEndian.PutUint64(blockNumHash, recvMsg.BlockNum) binary.LittleEndian.PutUint64(blockNumHash, recvMsg.BlockNum)
commitPayload := append(blockNumHash, recvMsg.BlockHash[:]...) 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) consensus.getLogger().Error("cannot verify commit message", "msgViewID", recvMsg.ViewID, "msgBlock", recvMsg.BlockNum)
return return
} }
consensus.getLogger().Debug("Received new commit message", "numReceivedSoFar", len(commitSigs), "msgViewID", recvMsg.ViewID, "msgBlock", recvMsg.BlockNum, "validatorAddress", validatorAddress) consensus.getLogger().Debug("Received new commit message", "numReceivedSoFar", len(commitSigs), "msgViewID", recvMsg.ViewID, "msgBlock", recvMsg.BlockNum, "validatorPubKey", validatorPubKey)
commitSigs[validatorAddress] = &sign commitSigs[validatorPubKey] = &sign
// Set the bitmap indicating that this validator signed. // 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") ctxerror.Warn(consensus.getLogger(), err, "commitBitmap.SetKey failed")
} }
if len(commitSigs) >= consensus.Quorum() { quorumIsMet := len(commitSigs) >= consensus.Quorum()
consensus.getLogger().Info("Enough commits received!", "num", len(commitSigs)) rewardThresholdIsMet := len(commitSigs) >= consensus.RewardThreshold()
consensus.finalizeCommits()
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() { func (consensus *Consensus) finalizeCommits() {
consensus.getLogger().Info("finalizing block", "num", len(consensus.commitSigs)) consensus.getLogger().Info("finalizing block", "num", len(consensus.commitSigs))
consensus.switchPhase(Announce, true)
// Construct and broadcast committed message // Construct and broadcast committed message
msgToSend, aggSig := consensus.constructCommittedMessage() msgToSend, aggSig := consensus.constructCommittedMessage()
@ -535,6 +537,7 @@ func (consensus *Consensus) finalizeCommits() {
consensus.getLogger().Debug("sent committed message", "len", len(msgToSend)) consensus.getLogger().Debug("sent committed message", "len", len(msgToSend))
} }
consensus.switchPhase(Announce, true)
var blockObj types.Block var blockObj types.Block
err := rlp.DecodeBytes(consensus.block, &blockObj) err := rlp.DecodeBytes(consensus.block, &blockObj)
if err != nil { if err != nil {
@ -567,14 +570,17 @@ func (consensus *Consensus) finalizeCommits() {
if consensus.consensusTimeout[timeoutBootstrap].IsActive() { if consensus.consensusTimeout[timeoutBootstrap].IsActive() {
consensus.consensusTimeout[timeoutBootstrap].Stop() 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 { } else {
consensus.getLogger().Debug("start consensus timeout") consensus.getLogger().Debug("start consensus timer")
} }
consensus.consensusTimeout[timeoutConsensus].Start() consensus.consensusTimeout[timeoutConsensus].Start()
consensus.OnConsensusDone(&blockObj) 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 // Send signal to Node so the new block can be added and new round of consensus can be triggered
consensus.ReadySignal <- struct{}{} consensus.ReadySignal <- struct{}{}
@ -607,6 +613,7 @@ func (consensus *Consensus) onCommitted(msg *msg_pb.Message) {
return return
} }
if recvMsg.BlockNum < consensus.blockNum { if recvMsg.BlockNum < consensus.blockNum {
consensus.getLogger().Info("received old blocks", "msgBlock", recvMsg.BlockNum)
return return
} }
@ -618,17 +625,21 @@ func (consensus *Consensus) onCommitted(msg *msg_pb.Message) {
// check has 2f+1 signatures // check has 2f+1 signatures
if count := utils.CountOneBits(mask.Bitmap); count < consensus.Quorum() { 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 return
} }
blockNumHash := make([]byte, 8) blockNumBytes := make([]byte, 8)
binary.LittleEndian.PutUint64(blockNumHash, recvMsg.BlockNum) binary.LittleEndian.PutUint64(blockNumBytes, recvMsg.BlockNum)
commitPayload := append(blockNumHash, recvMsg.BlockHash[:]...) commitPayload := append(blockNumBytes, recvMsg.BlockHash[:]...)
if !aggSig.VerifyHash(mask.AggregatePublic, commitPayload) { if !aggSig.VerifyHash(mask.AggregatePublic, commitPayload) {
consensus.getLogger().Error("Failed to verify the multi signature for commit phase", "msgBlock", recvMsg.BlockNum) consensus.getLogger().Error("Failed to verify the multi signature for commit phase", "msgBlock", recvMsg.BlockNum)
return return
} }
consensus.mutex.Lock()
defer consensus.mutex.Unlock()
consensus.aggregatedCommitSig = aggSig consensus.aggregatedCommitSig = aggSig
consensus.commitBitmap = mask consensus.commitBitmap = mask
consensus.getLogger().Debug("committed message added", "msgViewID", recvMsg.ViewID, "msgBlock", recvMsg.BlockNum) 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.tryCatchup()
consensus.mutex.Lock()
defer consensus.mutex.Unlock()
if consensus.consensusTimeout[timeoutBootstrap].IsActive() { if consensus.consensusTimeout[timeoutBootstrap].IsActive() {
consensus.consensusTimeout[timeoutBootstrap].Stop() 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 { } else {
consensus.getLogger().Debug("start consensus timeout") consensus.getLogger().Debug("start consensus timer")
} }
consensus.consensusTimeout[timeoutConsensus].Start() consensus.consensusTimeout[timeoutConsensus].Start()
return return
@ -690,6 +699,13 @@ func (consensus *Consensus) tryCatchup() {
break 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() { if block.ParentHash() != consensus.ChainReader.CurrentHeader().Hash() {
consensus.getLogger().Debug("[PBFT] parent block hash not match") consensus.getLogger().Debug("[PBFT] parent block hash not match")
break break
@ -788,12 +804,16 @@ func (consensus *Consensus) Start(blockChannel chan *types.Block, stopChan chan
break break
} }
} }
case <-consensus.syncReadyChan: case <-consensus.syncReadyChan:
consensus.mode.SetMode(Normal)
consensus.SetBlockNum(consensus.ChainReader.CurrentHeader().Number.Uint64() + 1) consensus.SetBlockNum(consensus.ChainReader.CurrentHeader().Number.Uint64() + 1)
consensus.getLogger().Info("Node is in sync")
consensus.ignoreViewIDCheck = true 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: case newBlock := <-blockChannel:
consensus.getLogger().Info("receive newBlock", "msgBlock", newBlock.NumberU64()) consensus.getLogger().Info("receive newBlock", "msgBlock", newBlock.NumberU64())
if consensus.ShardID == 0 { if consensus.ShardID == 0 {
@ -826,11 +846,20 @@ func (consensus *Consensus) Start(blockChannel chan *types.Block, stopChan chan
startTime = time.Now() startTime = time.Now()
consensus.getLogger().Debug("STARTING CONSENSUS", "numTxs", len(newBlock.Transactions()), "consensus", consensus, "startTime", startTime, "publicKeys", len(consensus.PublicKeys)) 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: case msg := <-consensus.MsgChan:
consensus.handleMessageUpdate(msg) consensus.handleMessageUpdate(msg)
case viewID := <-consensus.commitFinishChan:
func() {
consensus.mutex.Lock()
defer consensus.mutex.Unlock()
if viewID == consensus.viewID {
consensus.finalizeCommits()
}
}()
case <-stopChan: case <-stopChan:
return return
} }

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

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

@ -27,7 +27,7 @@ const (
// GenesisShardSize is the size of each shard at genesis // GenesisShardSize is the size of each shard at genesis
GenesisShardSize = 100 GenesisShardSize = 100
// GenesisShardHarmonyNodes is the number of harmony node at each shard // 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 is the percentage of nodes getting reshuffled in the second step of cuckoo resharding.
CuckooRate = 0.1 CuckooRate = 0.1
) )
@ -226,10 +226,17 @@ func GetInitShardState() types.ShardState {
com := types.Committee{ShardID: uint32(i)} com := types.Committee{ShardID: uint32(i)}
for j := 0; j < GenesisShardHarmonyNodes; j++ { for j := 0; j < GenesisShardHarmonyNodes; j++ {
index := i + j*GenesisShardNum // The initial account to use for genesis nodes 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 := types.BlsPublicKey{}
pubKey.FromLibBLSPublicKey(priKey.GetPublicKey()) pubKey.FromLibBLSPublicKey(pub)
// TODO: directly read address for bls too // TODO: directly read address for bls too
curNodeID := types.NodeID{common2.ParseAddr(genesis.GenesisAccounts[index].Address), pubKey} curNodeID := types.NodeID{common2.ParseAddr(genesis.GenesisAccounts[index].Address), pubKey}
com.NodeList = append(com.NodeList, curNodeID) com.NodeList = append(com.NodeList, curNodeID)
@ -238,10 +245,16 @@ func GetInitShardState() types.ShardState {
// add FN runner's key // add FN runner's key
for j := GenesisShardHarmonyNodes; j < GenesisShardSize; j++ { for j := GenesisShardHarmonyNodes; j < GenesisShardSize; j++ {
index := i + (j-GenesisShardHarmonyNodes)*GenesisShardNum 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 := types.BlsPublicKey{}
pubKey.FromLibBLSPublicKey(priKey.GetPublicKey()) pubKey.FromLibBLSPublicKey(pub)
// TODO: directly read address for bls too // TODO: directly read address for bls too
curNodeID := types.NodeID{common2.ParseAddr(genesis.GenesisFNAccounts[index].Address), pubKey} curNodeID := types.NodeID{common2.ParseAddr(genesis.GenesisFNAccounts[index].Address), pubKey}
com.NodeList = append(com.NodeList, curNodeID) 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) 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 { switch message.Type {
case msg_pb.MessageType_DRAND_COMMIT: case msg_pb.MessageType_DRAND_COMMIT:
dRand.processCommitMessage(message) dRand.processCommitMessage(message)

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

@ -19,7 +19,7 @@ func (dRand *DRand) constructCommitMessage(vrf [32]byte, proof []byte) []byte {
drandMsg := message.GetDrand() drandMsg := message.GetDrand()
drandMsg.SenderPubkey = dRand.pubKey.Serialize() drandMsg.SenderPubkey = dRand.pubKey.Serialize()
drandMsg.BlockHash = dRand.blockHash[:] drandMsg.BlockHash = dRand.blockHash[:]
drandMsg.BlockHash = dRand.blockHash[:] drandMsg.ShardId = dRand.ShardID
drandMsg.Payload = append(vrf[:], proof...) drandMsg.Payload = append(vrf[:], proof...)
// Adding the public key into payload so leader can verify the vrf // 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. // 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/handlers v1.4.0
github.com/gorilla/mux v1.7.0 github.com/gorilla/mux v1.7.0
github.com/harmony-ek/gencodec v0.0.0-20190215044613-e6740dbdd846 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/hashicorp/golang-lru v0.5.1
github.com/iancoleman/strcase v0.0.0-20190422225806-e506e3ef7365 github.com/iancoleman/strcase v0.0.0-20190422225806-e506e3ef7365
github.com/ipfs/go-datastore v0.0.1 github.com/ipfs/go-datastore v0.0.1

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

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

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

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

@ -2,8 +2,14 @@ package utils
import ( import (
"fmt" "fmt"
"io"
"io/ioutil"
"os"
"strconv"
"strings"
"syscall" "syscall"
"github.com/pkg/errors"
"golang.org/x/crypto/ssh/terminal" "golang.org/x/crypto/ssh/terminal"
) )
@ -19,3 +25,56 @@ func AskForPassphrase(prompt string) string {
return password 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. // 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 { if node.isFirstTime {
// Setup one time smart contracts // Setup one time smart contracts
node.AddFaucetContractToPendingTransactions() //node.AddFaucetContractToPendingTransactions()
} else { } else {
node.AddContractKeyAndAddress(scFaucet) node.AddContractKeyAndAddress(scFaucet)
} }

@ -90,7 +90,7 @@ func (node *Node) SetupGenesisBlock(db ethdb.Database, shardID uint32) error {
if shardID == 0 { if shardID == 0 {
// Accounts used by validator/nodes to stake and participate in the network. // 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 // 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) node.host.ConnectHostPeer(*peer)
if ping.Node.Role == proto_node.ClientRole { 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 node.ClientPeer = peer
} else { } else {
node.AddPeers([]*p2p.Peer{peer}) 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 return 1
@ -805,10 +805,5 @@ func getBinaryPath() (argv0 string, err error) {
// ConsensusMessageHandler passes received message in node_handler to consensus // ConsensusMessageHandler passes received message in node_handler to consensus
func (node *Node) ConsensusMessageHandler(msgPayload []byte) { func (node *Node) ConsensusMessageHandler(msgPayload []byte) {
select { node.Consensus.MsgChan <- msgPayload
case node.Consensus.MsgChan <- msgPayload:
case <-time.After(consensusTimeout):
//utils.GetLogInstance().Debug("[Consensus] ConsensusMessageHandler timeout", "duration", consensusTimeout, "msgPayload", len(msgPayload))
}
return
} }

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

@ -111,6 +111,7 @@ SyncingLoop:
node.stateMutex.Lock() node.stateMutex.Lock()
node.State = NodeNotInSync node.State = NodeNotInSync
node.stateMutex.Unlock() node.stateMutex.Unlock()
node.Consensus.BlocksNotSynchronized()
node.stateSync.SyncLoop(bc, worker, willJoinConsensus, false) node.stateSync.SyncLoop(bc, worker, willJoinConsensus, false)
if willJoinConsensus { if willJoinConsensus {
node.stateMutex.Lock() node.stateMutex.Lock()
@ -169,8 +170,7 @@ func (node *Node) SendNewBlockToUnsync() {
} }
// really need to have a unique id independent of ip/port // really need to have a unique id independent of ip/port
selfPeerAddress := node.Consensus.SelfAddress utils.GetLogInstance().Debug("[SYNC] peerRegistration Record", "selfPubKey", node.Consensus.PubKey.SerializeToHexStr(), "number", len(node.peerRegistrationRecord))
utils.GetLogInstance().Debug("[SYNC] peerRegistration Record", "selfPeerAddress", selfPeerAddress, "number", len(node.peerRegistrationRecord))
for peerID, config := range node.peerRegistrationRecord { for peerID, config := range node.peerRegistrationRecord {
elapseTime := time.Now().UnixNano() - config.timestamp 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 #!/bin/bash
function killnode() { unset -v progname
local port=$1 progname="${0##*/}"
if [ -n "port" ]; then unset -f msg err
pid=$(/bin/ps -fu $USER | grep "harmony" | grep "$port" | awk '{print $2}')
echo "killing node with port: $port" msg() {
$DRYRUN kill -9 $pid 2> /dev/null case $# in
echo "node with port: $port is killed" [1-9]*)
fi echo "${progname}: $*" >&2
;;
esac
}
err() {
local code
code="${1}"
shift 1
msg "$@"
exit "${code}"
} }
# https://www.linuxjournal.com/content/validating-ip-address-bash-script # 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 # get ipv4 address only, right now only support ipv4 addresses
PUB_IP=$(dig -4 @resolver1.opendns.com ANY myip.opendns.com +short) PUB_IP=$(dig -4 @resolver1.opendns.com ANY myip.opendns.com +short)
if valid_ip $PUB_IP; then if valid_ip $PUB_IP; then
echo MYIP = $PUB_IP msg "public IP address autodetected: $PUB_IP"
else else
echo NO valid public IP found: $PUB_IP err 1 "NO valid public IP found: $PUB_IP"
exit 1
fi fi
} }
@ -68,37 +77,65 @@ function setup_env
add_env /etc/pam.d/common-session "session required pam_limits.so" 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 ######### ######## main #########
if [[ $EUID -ne 0 ]]; then if [[ $EUID -ne 0 ]]; then
echo "This script must be run as root" msg "this script must be run as root"
echo Please use \"sudo $0\" msg please use \"sudo $0\"
exit 1 exit 1
fi fi
if [ -z "$1" ]; then print_usage() {
echo "Usage: $0 account_address" cat <<- ENDEND
echo usage: ${progname} [-1ch] account_address
echo "Please provide account address." -c back up database/logs and start clean
echo "For foundational nodes, please follow the instructions in discord #foundational-nodes channel" (use only when directed by Harmony)
echo "to generate and register your account address with <genesis at harmony dot one>" -1 do not loop; run once and exit
echo -h print this help and exit
exit 1 ENDEND
fi }
IDX=$1 usage() {
msg "$@"
print_usage >&2
exit 64 # EX_USAGE
}
killnode unset start_clean loop
start_clean=false
loop=true
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 BUCKET=pub.harmony.one
OS=$(uname -s) OS=$(uname -s)
REL=drum REL=drum
@ -117,11 +154,18 @@ for bin in "${BIN[@]}"; do
rm -f ${bin} rm -f ${bin}
done done
# download all the binaries download_binaries() {
for bin in "${BIN[@]}"; do local outdir
curl http://${BUCKET}.s3.amazonaws.com/${FOLDER}${bin} -o ${bin} outdir="${1:-.}"
done mkdir -p "${outdir}"
chmod +x harmony 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 NODE_PORT=9000
PUB_IP= PUB_IP=
@ -138,22 +182,135 @@ myip
# public boot node multiaddress # public boot node multiaddress
BN_MA=/ip4/100.26.90.187/tcp/9874/p2p/Qmdfjtk6hPoyrH1zVD9PEH4zfWLo38dP2mDvvKXfh3tnEv,/ip4/54.213.43.194/tcp/9874/p2p/QmZJJx6AdaoEkGLrYG4JeLCKeCKDjnFz2wfHNHxAqFSGA9 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 ${start_clean}
if [ "$OS" == "Linux" ]; then then
# Run Harmony Node msg "backing up old database/logs (-c)"
LD_LIBRARY_PATH=$(pwd) ./harmony -bootnodes $BN_MA -ip $PUB_IP -port $NODE_PORT -is_genesis -is_archival -accounts $IDX unset -v backup_dir now
else now=$(date -u +%Y-%m-%dT%H:%M:%SZ)
DYLD_FALLBACK_LIBRARY_PATH=$(pwd) ./harmony -bootnodes $BN_MA -ip $PUB_IP -port $NODE_PORT -is_genesis -is_archival -accounts $IDX mkdir -p backups
backup_dir=$(mktemp -d "backups/${now}.XXXXXX")
mv harmony_db_* latest "${backup_dir}/" || :
rm -rf latest
fi fi
mkdir -p latest
find_harmony_process unset -v check_update_pid
echo
echo 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
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
# echo Please run the following command to inspect the log msg "finding node processes that are our children"
# echo "tail -f harmony-${PUB_IP}.log" 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
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++ { for i := 0; i < len(genesis.NewNodeAccounts); i++ {
var sec bls.SecretKey var sec bls.SecretKey
sec.SetByCSPRNG() 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()) fmt.Printf("{Address: \"%s\", BlsPriKey: \"%s\"},\n", genesis.NewNodeAccounts[i].Address, sec.SerializeToHexStr())
if i == 0 { if i == 0 {
aggSig = sec.Sign(m) aggSig = sec.Sign(m)

@ -1,3 +1,3 @@
./test/kill_node.sh ./test/kill_node.sh
rm -rf tmp_log* 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) local ME=$(basename $0)
cat<<EOU cat<<EOU
USAGE: $ME [OPTIONS] config_file_name USAGE: $ME [OPTIONS] config_file_name [extra args to node]
-h print this help message -h print this help message
-d enable db support (default: $DB) -d enable db support (default: $DB)
@ -97,9 +97,10 @@ done
shift $((OPTIND-1)) shift $((OPTIND-1))
config=$1 config=$1
if [ -z "$config" ]; then shift 1 || usage
usage unset -v extra_args
fi declare -a extra_args
extra_args=("$@")
case "${DURATION-}" in case "${DURATION-}" in
"") "")
@ -169,7 +170,7 @@ while IFS='' read -r line || [[ -n "$line" ]]; do
esac esac
case "${mode}" in case "${mode}" in
client) ;; 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 esac
i=$((i+1)) i=$((i+1))
done < $config done < $config

Loading…
Cancel
Save