create staking transaction

pull/402/head
Minh Doan 6 years ago
parent e4fe327426
commit 86f145ff42
  1. 0
      api/proto/message/gen.sh
  2. 137
      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

@ -28,6 +28,7 @@ const (
MessageType_BOOTNODE_NEWNODE MessageType = 2
MessageType_NEWNODE_BEACON MessageType = 3
MessageType_BEACON_NEWNODE MessageType = 4
MessageType_NEWNODE_BEACON_STAKING MessageType = 5
)
var MessageType_name = map[int32]string{
@ -36,6 +37,7 @@ var MessageType_name = map[int32]string{
2: "BOOTNODE_NEWNODE",
3: "NEWNODE_BEACON",
4: "BEACON_NEWNODE",
5: "NEWNODE_BEACON_STAKING",
}
var MessageType_value = map[string]int32{
@ -44,6 +46,7 @@ var MessageType_value = map[string]int32{
"BOOTNODE_NEWNODE": 2,
"NEWNODE_BEACON": 3,
"BEACON_NEWNODE": 4,
"NEWNODE_BEACON_STAKING": 5,
}
func (x MessageType) String() string {
@ -61,9 +64,9 @@ func (MessageType) EnumDescriptor() ([]byte, []int) {
// The request field will be either one of the structure corresponding to the MessageType type.
type Message struct {
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:
// *Message_NewnodeBootnodeRequest
// *Message_BootnodeNewnodeRequest
// *Message_Staking
Request isMessage_Request `protobuf_oneof:"request"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
@ -102,21 +105,22 @@ func (m *Message) GetType() MessageType {
return MessageType_UNKNOWN
}
type isMessage_Request interface {
isMessage_Request()
func (m *Message) GetSignature() string {
if m != nil {
return m.Signature
}
return ""
}
type Message_NewnodeBootnodeRequest struct {
NewnodeBootnodeRequest *NewNodeBootNodeRequest `protobuf:"bytes,2,opt,name=newnode_bootnode_request,json=newnodeBootnodeRequest,proto3,oneof"`
type isMessage_Request interface {
isMessage_Request()
}
type Message_BootnodeNewnodeRequest struct {
BootnodeNewnodeRequest *BootNodeNewNodeRequest `protobuf:"bytes,3,opt,name=bootnode_newnode_request,json=bootnodeNewnodeRequest,proto3,oneof"`
type Message_Staking struct {
Staking *StakingRequest `protobuf:"bytes,3,opt,name=staking,proto3,oneof"`
}
func (*Message_NewnodeBootnodeRequest) isMessage_Request() {}
func (*Message_BootnodeNewnodeRequest) isMessage_Request() {}
func (*Message_Staking) isMessage_Request() {}
func (m *Message) GetRequest() isMessage_Request {
if m != nil {
@ -125,16 +129,9 @@ func (m *Message) GetRequest() isMessage_Request {
return nil
}
func (m *Message) GetNewnodeBootnodeRequest() *NewNodeBootNodeRequest {
if x, ok := m.GetRequest().(*Message_NewnodeBootnodeRequest); ok {
return x.NewnodeBootnodeRequest
}
return nil
}
func (m *Message) GetBootnodeNewnodeRequest() *BootNodeNewNodeRequest {
if x, ok := m.GetRequest().(*Message_BootnodeNewnodeRequest); ok {
return x.BootnodeNewnodeRequest
func (m *Message) GetStaking() *StakingRequest {
if x, ok := m.GetRequest().(*Message_Staking); ok {
return x.Staking
}
return nil
}
@ -142,8 +139,7 @@ func (m *Message) GetBootnodeNewnodeRequest() *BootNodeNewNodeRequest {
// XXX_OneofWrappers is for the internal use of the proto package.
func (*Message) XXX_OneofWrappers() []interface{} {
return []interface{}{
(*Message_NewnodeBootnodeRequest)(nil),
(*Message_BootnodeNewnodeRequest)(nil),
(*Message_Staking)(nil),
}
}
@ -211,31 +207,92 @@ func (m *BootNodeNewNodeRequest) XXX_DiscardUnknown() {
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() {
proto.RegisterEnum("message.MessageType", MessageType_name, MessageType_value)
proto.RegisterType((*Message)(nil), "message.Message")
proto.RegisterType((*NewNodeBootNodeRequest)(nil), "message.NewNodeBootNodeRequest")
proto.RegisterType((*BootNodeNewNodeRequest)(nil), "message.BootNodeNewNodeRequest")
proto.RegisterType((*StakingRequest)(nil), "message.StakingRequest")
}
func init() { proto.RegisterFile("message.proto", fileDescriptor_33c57e4bae7b9afd) }
var fileDescriptor_33c57e4bae7b9afd = []byte{
// 253 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x91, 0x41, 0x4b, 0xc3, 0x40,
0x10, 0x85, 0xbb, 0x6d, 0x31, 0x38, 0xc1, 0xb2, 0x2c, 0xa5, 0xe4, 0x66, 0xe9, 0x29, 0x78, 0xe8,
0xa1, 0xfe, 0x02, 0xa3, 0x01, 0x41, 0x9c, 0x85, 0x50, 0xe9, 0xc1, 0x43, 0xb0, 0x74, 0xf0, 0x64,
0x26, 0x36, 0x2b, 0xa5, 0xff, 0xdc, 0xa3, 0x6c, 0x32, 0x1b, 0x8a, 0xe4, 0xb4, 0x6f, 0xe6, 0xbd,
0xf9, 0x66, 0xd9, 0x85, 0x9b, 0x2f, 0x6a, 0x9a, 0x8f, 0x4f, 0x5a, 0xd7, 0x47, 0x76, 0x6c, 0x22,
0x29, 0x57, 0xbf, 0x0a, 0xa2, 0xd7, 0x4e, 0x9b, 0x14, 0xa6, 0xee, 0x5c, 0x53, 0xa2, 0x96, 0x2a,
0x9d, 0x6d, 0xe6, 0xeb, 0x30, 0x22, 0xfe, 0xf6, 0x5c, 0x53, 0xd1, 0x26, 0xcc, 0x3b, 0x24, 0x15,
0x9d, 0x2a, 0x3e, 0x50, 0xb9, 0x67, 0x76, 0xad, 0x38, 0xd2, 0xf7, 0x0f, 0x35, 0x2e, 0x19, 0x2f,
0x55, 0x1a, 0x6f, 0x6e, 0xfb, 0x69, 0xa4, 0x13, 0xf2, 0x81, 0x32, 0x66, 0xe7, 0xcf, 0xa2, 0x8b,
0x3d, 0x8f, 0x8a, 0x85, 0x20, 0x32, 0x21, 0x88, 0xe3, 0xe1, 0x3d, 0x34, 0x6c, 0x09, 0xf0, 0xc9,
0x3f, 0x78, 0xa0, 0xca, 0x92, 0x0b, 0x78, 0x40, 0x60, 0x47, 0x10, 0x27, 0xbb, 0x86, 0x48, 0x58,
0xab, 0x04, 0x16, 0xc3, 0x77, 0xf3, 0xce, 0x30, 0xf8, 0xae, 0x82, 0xf8, 0xe2, 0x35, 0x4c, 0x0c,
0xd1, 0x1b, 0xbe, 0xa0, 0xdd, 0xa1, 0x1e, 0x99, 0x39, 0x68, 0xcc, 0x77, 0x68, 0x9f, 0xf2, 0x32,
0xb3, 0x76, 0xeb, 0x85, 0x56, 0xbe, 0x1b, 0xaa, 0x52, 0x6c, 0x3d, 0x36, 0x06, 0x66, 0x7d, 0x36,
0x7f, 0x78, 0xb4, 0xa8, 0x27, 0xbe, 0xd7, 0xe9, 0x3e, 0x37, 0xdd, 0x5f, 0xb5, 0xdf, 0x75, 0xff,
0x17, 0x00, 0x00, 0xff, 0xff, 0x37, 0x30, 0xd0, 0xfb, 0xbf, 0x01, 0x00, 0x00,
// 307 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x54, 0x91, 0x51, 0x6b, 0xc2, 0x30,
0x14, 0x85, 0x8d, 0x3a, 0x4b, 0xaf, 0x4c, 0xca, 0x45, 0x5c, 0x19, 0x1b, 0x88, 0x4f, 0x65, 0x0f,
0x3e, 0xe8, 0x2f, 0xd0, 0x4d, 0xb6, 0x21, 0x4b, 0x21, 0x3a, 0x7c, 0x2c, 0x75, 0x5e, 0x44, 0x9c,
0xa6, 0x6b, 0x52, 0x46, 0xff, 0xc2, 0xde, 0xf6, 0x8f, 0x47, 0x9b, 0x46, 0xe7, 0x53, 0xcf, 0xf9,
0xce, 0xe9, 0x25, 0x37, 0x81, 0xeb, 0x03, 0x29, 0x15, 0x6f, 0x69, 0x98, 0xa4, 0x52, 0x4b, 0x74,
0x2a, 0x3b, 0xf8, 0x65, 0xe0, 0xbc, 0x19, 0x8d, 0x01, 0x34, 0x75, 0x9e, 0x90, 0xcf, 0xfa, 0x2c,
0xe8, 0x8c, 0xba, 0x43, 0xfb, 0x4b, 0x95, 0x2f, 0xf3, 0x84, 0x44, 0xd9, 0xc0, 0x3b, 0x70, 0xd5,
0x6e, 0x7b, 0x8c, 0x75, 0x96, 0x92, 0x5f, 0xef, 0xb3, 0xc0, 0x15, 0x67, 0x80, 0x63, 0x70, 0x94,
0x8e, 0xf7, 0xbb, 0xe3, 0xd6, 0x6f, 0xf4, 0x59, 0xd0, 0x1e, 0xdd, 0x9c, 0x46, 0x2d, 0x0c, 0x17,
0xf4, 0x95, 0x91, 0xd2, 0x2f, 0x35, 0x61, 0x9b, 0x53, 0x17, 0x9c, 0xd4, 0xd0, 0x81, 0x0f, 0x3d,
0x4e, 0xdf, 0x5c, 0x6e, 0x68, 0x2a, 0xa5, 0x2e, 0xbe, 0xe2, 0x9c, 0x58, 0x54, 0x35, 0x6c, 0x12,
0x43, 0xe7, 0x72, 0x36, 0xfa, 0xe0, 0xc4, 0x9b, 0x4d, 0x4a, 0x4a, 0x95, 0x0b, 0xb9, 0xc2, 0x5a,
0xec, 0x41, 0x2b, 0x3e, 0xc8, 0xec, 0xa8, 0xcb, 0xa3, 0x37, 0x44, 0xe5, 0xf0, 0x1e, 0x20, 0xc9,
0xd6, 0x9f, 0xbb, 0x8f, 0x68, 0x4f, 0xb9, 0xdf, 0x34, 0x6b, 0x19, 0x32, 0xa7, 0xfc, 0xe1, 0x87,
0x41, 0xfb, 0xdf, 0x55, 0x60, 0x1b, 0x9c, 0x77, 0x3e, 0xe7, 0xe1, 0x8a, 0x7b, 0x35, 0xec, 0x82,
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;
NEWNODE_BEACON = 3;
BEACON_NEWNODE = 4;
NEWNODE_BEACON_STAKING = 5;
}
// 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.
message Message {
MessageType type = 1;
string signature = 2;
oneof request {
NewNodeBootNodeRequest newnode_bootnode_request = 2;
BootNodeNewNodeRequest bootnode_newnode_request = 3;
StakingRequest staking = 3;
}
}
@ -30,4 +31,9 @@ message NewNodeBootNodeRequest {
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 (
"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/contract"
"github.com/harmony-one/harmony/p2p"
)
@ -54,6 +56,25 @@ func (s *Service) Run() {
// DoService does staking.
func (s *Service) DoService(peer *p2p.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.

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

Loading…
Cancel
Save