create staking transaction

pull/402/head
Minh Doan 6 years ago
parent e4fe327426
commit 86f145ff42
  1. 0
      api/proto/message/gen.sh
  2. 159
      api/proto/message/message.pb.go
  3. 12
      api/proto/message/message.proto
  4. 21
      api/service/staking/service.go
  5. 3
      node/contract.go

@ -23,11 +23,12 @@ const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
type MessageType int32 type MessageType int32
const ( const (
MessageType_UNKNOWN MessageType = 0 MessageType_UNKNOWN MessageType = 0
MessageType_NEWNODE_BOOTNODE MessageType = 1 MessageType_NEWNODE_BOOTNODE MessageType = 1
MessageType_BOOTNODE_NEWNODE MessageType = 2 MessageType_BOOTNODE_NEWNODE MessageType = 2
MessageType_NEWNODE_BEACON MessageType = 3 MessageType_NEWNODE_BEACON MessageType = 3
MessageType_BEACON_NEWNODE MessageType = 4 MessageType_BEACON_NEWNODE MessageType = 4
MessageType_NEWNODE_BEACON_STAKING MessageType = 5
) )
var MessageType_name = map[int32]string{ var MessageType_name = map[int32]string{
@ -36,14 +37,16 @@ var MessageType_name = map[int32]string{
2: "BOOTNODE_NEWNODE", 2: "BOOTNODE_NEWNODE",
3: "NEWNODE_BEACON", 3: "NEWNODE_BEACON",
4: "BEACON_NEWNODE", 4: "BEACON_NEWNODE",
5: "NEWNODE_BEACON_STAKING",
} }
var MessageType_value = map[string]int32{ var MessageType_value = map[string]int32{
"UNKNOWN": 0, "UNKNOWN": 0,
"NEWNODE_BOOTNODE": 1, "NEWNODE_BOOTNODE": 1,
"BOOTNODE_NEWNODE": 2, "BOOTNODE_NEWNODE": 2,
"NEWNODE_BEACON": 3, "NEWNODE_BEACON": 3,
"BEACON_NEWNODE": 4, "BEACON_NEWNODE": 4,
"NEWNODE_BEACON_STAKING": 5,
} }
func (x MessageType) String() string { func (x MessageType) String() string {
@ -60,10 +63,10 @@ func (MessageType) EnumDescriptor() ([]byte, []int) {
// //
// The request field will be either one of the structure corresponding to the MessageType type. // The request field will be either one of the structure corresponding to the MessageType type.
type Message struct { type Message struct {
Type MessageType `protobuf:"varint,1,opt,name=type,proto3,enum=message.MessageType" json:"type,omitempty"` Type MessageType `protobuf:"varint,1,opt,name=type,proto3,enum=message.MessageType" json:"type,omitempty"`
Signature string `protobuf:"bytes,2,opt,name=signature,proto3" json:"signature,omitempty"`
// Types that are valid to be assigned to Request: // Types that are valid to be assigned to Request:
// *Message_NewnodeBootnodeRequest // *Message_Staking
// *Message_BootnodeNewnodeRequest
Request isMessage_Request `protobuf_oneof:"request"` Request isMessage_Request `protobuf_oneof:"request"`
XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"` XXX_unrecognized []byte `json:"-"`
@ -102,21 +105,22 @@ func (m *Message) GetType() MessageType {
return MessageType_UNKNOWN return MessageType_UNKNOWN
} }
type isMessage_Request interface { func (m *Message) GetSignature() string {
isMessage_Request() if m != nil {
return m.Signature
}
return ""
} }
type Message_NewnodeBootnodeRequest struct { type isMessage_Request interface {
NewnodeBootnodeRequest *NewNodeBootNodeRequest `protobuf:"bytes,2,opt,name=newnode_bootnode_request,json=newnodeBootnodeRequest,proto3,oneof"` isMessage_Request()
} }
type Message_BootnodeNewnodeRequest struct { type Message_Staking struct {
BootnodeNewnodeRequest *BootNodeNewNodeRequest `protobuf:"bytes,3,opt,name=bootnode_newnode_request,json=bootnodeNewnodeRequest,proto3,oneof"` Staking *StakingRequest `protobuf:"bytes,3,opt,name=staking,proto3,oneof"`
} }
func (*Message_NewnodeBootnodeRequest) isMessage_Request() {} func (*Message_Staking) isMessage_Request() {}
func (*Message_BootnodeNewnodeRequest) isMessage_Request() {}
func (m *Message) GetRequest() isMessage_Request { func (m *Message) GetRequest() isMessage_Request {
if m != nil { if m != nil {
@ -125,16 +129,9 @@ func (m *Message) GetRequest() isMessage_Request {
return nil return nil
} }
func (m *Message) GetNewnodeBootnodeRequest() *NewNodeBootNodeRequest { func (m *Message) GetStaking() *StakingRequest {
if x, ok := m.GetRequest().(*Message_NewnodeBootnodeRequest); ok { if x, ok := m.GetRequest().(*Message_Staking); ok {
return x.NewnodeBootnodeRequest return x.Staking
}
return nil
}
func (m *Message) GetBootnodeNewnodeRequest() *BootNodeNewNodeRequest {
if x, ok := m.GetRequest().(*Message_BootnodeNewnodeRequest); ok {
return x.BootnodeNewnodeRequest
} }
return nil return nil
} }
@ -142,8 +139,7 @@ func (m *Message) GetBootnodeNewnodeRequest() *BootNodeNewNodeRequest {
// XXX_OneofWrappers is for the internal use of the proto package. // XXX_OneofWrappers is for the internal use of the proto package.
func (*Message) XXX_OneofWrappers() []interface{} { func (*Message) XXX_OneofWrappers() []interface{} {
return []interface{}{ return []interface{}{
(*Message_NewnodeBootnodeRequest)(nil), (*Message_Staking)(nil),
(*Message_BootnodeNewnodeRequest)(nil),
} }
} }
@ -211,31 +207,92 @@ func (m *BootNodeNewNodeRequest) XXX_DiscardUnknown() {
var xxx_messageInfo_BootNodeNewNodeRequest proto.InternalMessageInfo var xxx_messageInfo_BootNodeNewNodeRequest proto.InternalMessageInfo
// Staking Request from new node to beacon node.
type StakingRequest struct {
Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"`
Amount int64 `protobuf:"varint,2,opt,name=amount,proto3" json:"amount,omitempty"`
PublicKey string `protobuf:"bytes,4,opt,name=public_key,json=publicKey,proto3" json:"public_key,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *StakingRequest) Reset() { *m = StakingRequest{} }
func (m *StakingRequest) String() string { return proto.CompactTextString(m) }
func (*StakingRequest) ProtoMessage() {}
func (*StakingRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_33c57e4bae7b9afd, []int{3}
}
func (m *StakingRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_StakingRequest.Unmarshal(m, b)
}
func (m *StakingRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_StakingRequest.Marshal(b, m, deterministic)
}
func (m *StakingRequest) XXX_Merge(src proto.Message) {
xxx_messageInfo_StakingRequest.Merge(m, src)
}
func (m *StakingRequest) XXX_Size() int {
return xxx_messageInfo_StakingRequest.Size(m)
}
func (m *StakingRequest) XXX_DiscardUnknown() {
xxx_messageInfo_StakingRequest.DiscardUnknown(m)
}
var xxx_messageInfo_StakingRequest proto.InternalMessageInfo
func (m *StakingRequest) GetAddress() string {
if m != nil {
return m.Address
}
return ""
}
func (m *StakingRequest) GetAmount() int64 {
if m != nil {
return m.Amount
}
return 0
}
func (m *StakingRequest) GetPublicKey() string {
if m != nil {
return m.PublicKey
}
return ""
}
func init() { func init() {
proto.RegisterEnum("message.MessageType", MessageType_name, MessageType_value) proto.RegisterEnum("message.MessageType", MessageType_name, MessageType_value)
proto.RegisterType((*Message)(nil), "message.Message") proto.RegisterType((*Message)(nil), "message.Message")
proto.RegisterType((*NewNodeBootNodeRequest)(nil), "message.NewNodeBootNodeRequest") proto.RegisterType((*NewNodeBootNodeRequest)(nil), "message.NewNodeBootNodeRequest")
proto.RegisterType((*BootNodeNewNodeRequest)(nil), "message.BootNodeNewNodeRequest") proto.RegisterType((*BootNodeNewNodeRequest)(nil), "message.BootNodeNewNodeRequest")
proto.RegisterType((*StakingRequest)(nil), "message.StakingRequest")
} }
func init() { proto.RegisterFile("message.proto", fileDescriptor_33c57e4bae7b9afd) } func init() { proto.RegisterFile("message.proto", fileDescriptor_33c57e4bae7b9afd) }
var fileDescriptor_33c57e4bae7b9afd = []byte{ var fileDescriptor_33c57e4bae7b9afd = []byte{
// 253 bytes of a gzipped FileDescriptorProto // 307 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x91, 0x41, 0x4b, 0xc3, 0x40, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x54, 0x91, 0x51, 0x6b, 0xc2, 0x30,
0x10, 0x85, 0xbb, 0x6d, 0x31, 0x38, 0xc1, 0xb2, 0x2c, 0xa5, 0xe4, 0x66, 0xe9, 0x29, 0x78, 0xe8, 0x14, 0x85, 0x8d, 0x3a, 0x4b, 0xaf, 0x4c, 0xca, 0x45, 0x5c, 0x19, 0x1b, 0x88, 0x4f, 0x65, 0x0f,
0xa1, 0xfe, 0x02, 0xa3, 0x01, 0x41, 0x9c, 0x85, 0x50, 0xe9, 0xc1, 0x43, 0xb0, 0x74, 0xf0, 0x64, 0x3e, 0xe8, 0x2f, 0xd0, 0x4d, 0xb6, 0x21, 0x4b, 0x21, 0x3a, 0x7c, 0x2c, 0x75, 0x5e, 0x44, 0x9c,
0x26, 0x36, 0x2b, 0xa5, 0xff, 0xdc, 0xa3, 0x6c, 0x32, 0x1b, 0x8a, 0xe4, 0xb4, 0x6f, 0xe6, 0xbd, 0xa6, 0x6b, 0x52, 0x46, 0xff, 0xc2, 0xde, 0xf6, 0x8f, 0x47, 0x9b, 0x46, 0xe7, 0x53, 0xcf, 0xf9,
0xf9, 0x66, 0xd9, 0x85, 0x9b, 0x2f, 0x6a, 0x9a, 0x8f, 0x4f, 0x5a, 0xd7, 0x47, 0x76, 0x6c, 0x22, 0xce, 0xe9, 0x25, 0x37, 0x81, 0xeb, 0x03, 0x29, 0x15, 0x6f, 0x69, 0x98, 0xa4, 0x52, 0x4b, 0x74,
0x29, 0x57, 0xbf, 0x0a, 0xa2, 0xd7, 0x4e, 0x9b, 0x14, 0xa6, 0xee, 0x5c, 0x53, 0xa2, 0x96, 0x2a, 0x2a, 0x3b, 0xf8, 0x65, 0xe0, 0xbc, 0x19, 0x8d, 0x01, 0x34, 0x75, 0x9e, 0x90, 0xcf, 0xfa, 0x2c,
0x9d, 0x6d, 0xe6, 0xeb, 0x30, 0x22, 0xfe, 0xf6, 0x5c, 0x53, 0xd1, 0x26, 0xcc, 0x3b, 0x24, 0x15, 0xe8, 0x8c, 0xba, 0x43, 0xfb, 0x4b, 0x95, 0x2f, 0xf3, 0x84, 0x44, 0xd9, 0xc0, 0x3b, 0x70, 0xd5,
0x9d, 0x2a, 0x3e, 0x50, 0xb9, 0x67, 0x76, 0xad, 0x38, 0xd2, 0xf7, 0x0f, 0x35, 0x2e, 0x19, 0x2f, 0x6e, 0x7b, 0x8c, 0x75, 0x96, 0x92, 0x5f, 0xef, 0xb3, 0xc0, 0x15, 0x67, 0x80, 0x63, 0x70, 0x94,
0x55, 0x1a, 0x6f, 0x6e, 0xfb, 0x69, 0xa4, 0x13, 0xf2, 0x81, 0x32, 0x66, 0xe7, 0xcf, 0xa2, 0x8b, 0x8e, 0xf7, 0xbb, 0xe3, 0xd6, 0x6f, 0xf4, 0x59, 0xd0, 0x1e, 0xdd, 0x9c, 0x46, 0x2d, 0x0c, 0x17,
0x3d, 0x8f, 0x8a, 0x85, 0x20, 0x32, 0x21, 0x88, 0xe3, 0xe1, 0x3d, 0x34, 0x6c, 0x09, 0xf0, 0xc9, 0xf4, 0x95, 0x91, 0xd2, 0x2f, 0x35, 0x61, 0x9b, 0x53, 0x17, 0x9c, 0xd4, 0xd0, 0x81, 0x0f, 0x3d,
0x3f, 0x78, 0xa0, 0xca, 0x92, 0x0b, 0x78, 0x40, 0x60, 0x47, 0x10, 0x27, 0xbb, 0x86, 0x48, 0x58, 0x4e, 0xdf, 0x5c, 0x6e, 0x68, 0x2a, 0xa5, 0x2e, 0xbe, 0xe2, 0x9c, 0x58, 0x54, 0x35, 0x6c, 0x12,
0xab, 0x04, 0x16, 0xc3, 0x77, 0xf3, 0xce, 0x30, 0xf8, 0xae, 0x82, 0xf8, 0xe2, 0x35, 0x4c, 0x0c, 0x43, 0xe7, 0x72, 0x36, 0xfa, 0xe0, 0xc4, 0x9b, 0x4d, 0x4a, 0x4a, 0x95, 0x0b, 0xb9, 0xc2, 0x5a,
0xd1, 0x1b, 0xbe, 0xa0, 0xdd, 0xa1, 0x1e, 0x99, 0x39, 0x68, 0xcc, 0x77, 0x68, 0x9f, 0xf2, 0x32, 0xec, 0x41, 0x2b, 0x3e, 0xc8, 0xec, 0xa8, 0xcb, 0xa3, 0x37, 0x44, 0xe5, 0xf0, 0x1e, 0x20, 0xc9,
0xb3, 0x76, 0xeb, 0x85, 0x56, 0xbe, 0x1b, 0xaa, 0x52, 0x6c, 0x3d, 0x36, 0x06, 0x66, 0x7d, 0x36, 0xd6, 0x9f, 0xbb, 0x8f, 0x68, 0x4f, 0xb9, 0xdf, 0x34, 0x6b, 0x19, 0x32, 0xa7, 0xfc, 0xe1, 0x87,
0x7f, 0x78, 0xb4, 0xa8, 0x27, 0xbe, 0xd7, 0xe9, 0x3e, 0x37, 0xdd, 0x5f, 0xb5, 0xdf, 0x75, 0xff, 0x41, 0xfb, 0xdf, 0x55, 0x60, 0x1b, 0x9c, 0x77, 0x3e, 0xe7, 0xe1, 0x8a, 0x7b, 0x35, 0xec, 0x82,
0x17, 0x00, 0x00, 0xff, 0xff, 0x37, 0x30, 0xd0, 0xfb, 0xbf, 0x01, 0x00, 0x00, 0xc7, 0x67, 0x2b, 0x1e, 0x3e, 0xcd, 0xa2, 0x69, 0x18, 0x2e, 0x0b, 0xe1, 0xb1, 0x82, 0x5a, 0x17,
0x55, 0xb1, 0x57, 0x47, 0x84, 0xce, 0xa9, 0x3b, 0x9b, 0x3c, 0x86, 0xdc, 0x6b, 0x14, 0xcc, 0xe8,
0x53, 0xaf, 0x89, 0xb7, 0xd0, 0xbb, 0xec, 0x45, 0x8b, 0xe5, 0x64, 0xfe, 0xca, 0x9f, 0xbd, 0xab,
0x75, 0xab, 0x7c, 0xc7, 0xf1, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x02, 0x35, 0x6a, 0x87, 0xd8,
0x01, 0x00, 0x00,
} }

@ -7,6 +7,7 @@ enum MessageType {
BOOTNODE_NEWNODE = 2; BOOTNODE_NEWNODE = 2;
NEWNODE_BEACON = 3; NEWNODE_BEACON = 3;
BEACON_NEWNODE = 4; BEACON_NEWNODE = 4;
NEWNODE_BEACON_STAKING = 5;
} }
// This is universal message for all communication protocols. // This is universal message for all communication protocols.
@ -16,9 +17,9 @@ enum MessageType {
// The request field will be either one of the structure corresponding to the MessageType type. // The request field will be either one of the structure corresponding to the MessageType type.
message Message { message Message {
MessageType type = 1; MessageType type = 1;
string signature = 2;
oneof request { oneof request {
NewNodeBootNodeRequest newnode_bootnode_request = 2; StakingRequest staking = 3;
BootNodeNewNodeRequest bootnode_newnode_request = 3;
} }
} }
@ -30,4 +31,9 @@ message NewNodeBootNodeRequest {
message BootNodeNewNodeRequest { message BootNodeNewNodeRequest {
} }
// TODO(minhdoan): refactor and introduce consensus message as one of possible Message.request. // Staking Request from new node to beacon node.
message StakingRequest {
string address = 1;
int64 amount = 2;
string public_key = 4;
}

@ -2,7 +2,9 @@ package staking
import ( import (
"github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/log"
"github.com/harmony-one/harmony/api/proto/message"
"github.com/harmony-one/harmony/internal/utils" "github.com/harmony-one/harmony/internal/utils"
"github.com/harmony-one/harmony/internal/utils/contract"
"github.com/harmony-one/harmony/p2p" "github.com/harmony-one/harmony/p2p"
) )
@ -54,6 +56,25 @@ func (s *Service) Run() {
// DoService does staking. // DoService does staking.
func (s *Service) DoService(peer *p2p.Peer) { func (s *Service) DoService(peer *p2p.Peer) {
utils.GetLogInstance().Info("Staking with Peer") utils.GetLogInstance().Info("Staking with Peer")
// TODO(minhdoan): How to use the p2p or pubsub to send Staking Message to beacon chain.
// See below of how to create a staking message.
}
func (s *Service) createStakingMessage() *message.Message {
// TODO(minhdoan): Add signature and public key.
// To add public we need to assign a fake account to new node initially.
return &message.Message{
Type: message.MessageType_NEWNODE_BEACON_STAKING,
Signature: "",
Request: &message.Message_Staking{
Staking: &message.StakingRequest{
Address: contract.FakeAccounts[0].Address,
Amount: 1000,
PublicKey: "",
},
},
}
} }
// StopService stops staking service. // StopService stops staking service.

@ -11,6 +11,7 @@ import (
"github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/log"
"github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/params"
"github.com/harmony-one/harmony/core/types" "github.com/harmony-one/harmony/core/types"
"github.com/harmony-one/harmony/internal/utils/contract"
) )
const ( const (
@ -75,7 +76,7 @@ func (node *Node) createSendingMoneyTransaction(walletAddress common.Address) co
// DepositToFakeAccounts invokes the faucet contract to give the walletAddress initial money // DepositToFakeAccounts invokes the faucet contract to give the walletAddress initial money
func (node *Node) DepositToFakeAccounts() { func (node *Node) DepositToFakeAccounts() {
for _, deployAccount := range FakeAccounts { for _, deployAccount := range contract.FakeAccounts {
address := common.HexToAddress(deployAccount.Address) address := common.HexToAddress(deployAccount.Address)
node.createSendingMoneyTransaction(address) node.createSendingMoneyTransaction(address)
} }

Loading…
Cancel
Save