Commit 4f86f81b authored by 张振华's avatar 张振华

update

parent 2cb03695
...@@ -291,7 +291,7 @@ func (cs *ConsensusState) handleMsg(mi MsgInfo) { ...@@ -291,7 +291,7 @@ func (cs *ConsensusState) handleMsg(mi MsgInfo) {
cs.dposState.recvNotify(cs, msg) cs.dposState.recvNotify(cs, msg)
case *dpostype.DPosVoteReply: case *dpostype.DPosVoteReply:
cs.dposState.recvVoteReply(cs, msg) cs.dposState.recvVoteReply(cs, msg)
case *dty.DposCBInfo: case *dpostype.DPosCBInfo:
cs.dposState.recvCBInfo(cs, msg) cs.dposState.recvCBInfo(cs, msg)
default: default:
dposlog.Error("Unknown msg type", "msg", msg.String(), "peerid", peerID, "peerip", peerIP) dposlog.Error("Unknown msg type", "msg", msg.String(), "peerid", peerID, "peerip", peerIP)
...@@ -602,14 +602,14 @@ func (cs *ConsensusState) Init() { ...@@ -602,14 +602,14 @@ func (cs *ConsensusState) Init() {
// InitCycleBoundaryInfo method // InitCycleBoundaryInfo method
func (cs *ConsensusState) InitCycleBoundaryInfo(task Task){ func (cs *ConsensusState) InitCycleBoundaryInfo(task Task){
info, err := cs.QueryCycleBoundaryInfo(task.cycle) info, err := cs.QueryCycleBoundaryInfo(task.Cycle)
if err == nil && info != nil { if err == nil && info != nil {
//cs.cycleBoundaryMap[task.cycle] = info //cs.cycleBoundaryMap[task.cycle] = info
cs.UpdateCBInfo(info) cs.UpdateCBInfo(info)
return return
} }
info, err = cs.QueryCycleBoundaryInfo(task.cycle - 1) info, err = cs.QueryCycleBoundaryInfo(task.Cycle - 1)
if err == nil && info != nil { if err == nil && info != nil {
//cs.cycleBoundaryMap[task.cycle] = info //cs.cycleBoundaryMap[task.cycle] = info
cs.UpdateCBInfo(info) cs.UpdateCBInfo(info)
...@@ -737,7 +737,7 @@ func (cs *ConsensusState) SendCBTx(info *dty.DposCBInfo) bool { ...@@ -737,7 +737,7 @@ func (cs *ConsensusState) SendCBTx(info *dty.DposCBInfo) bool {
dposlog.Error("SignCBInfo failed.", "err", err) dposlog.Error("SignCBInfo failed.", "err", err)
return false return false
} else { } else {
info.Signature = sig info.Signature = hex.EncodeToString(sig.Bytes())
tx, err := cs.client.CreateRecordCBTx(info) tx, err := cs.client.CreateRecordCBTx(info)
if err != nil { if err != nil {
dposlog.Error("CreateRecordCBTx failed.", "err", err) dposlog.Error("CreateRecordCBTx failed.", "err", err)
...@@ -824,14 +824,14 @@ func (cs *ConsensusState) QueryVrf(pubkey []byte, cycle int64) (info *dty.VrfInf ...@@ -824,14 +824,14 @@ func (cs *ConsensusState) QueryVrf(pubkey []byte, cycle int64) (info *dty.VrfInf
// InitCycleVrfInfo method // InitCycleVrfInfo method
func (cs *ConsensusState) InitCycleVrfInfo(task Task){ func (cs *ConsensusState) InitCycleVrfInfo(task Task){
info, err := cs.QueryVrf(cs.privValidator.GetPubKey().Bytes(), task.cycle) info, err := cs.QueryVrf(cs.privValidator.GetPubKey().Bytes(), task.Cycle)
if err == nil && info != nil { if err == nil && info != nil {
//cs.cycleBoundaryMap[task.cycle] = info //cs.cycleBoundaryMap[task.cycle] = info
cs.UpdateVrfInfo(info) cs.UpdateVrfInfo(info)
return return
} }
info, err = cs.QueryVrf(cs.privValidator.GetPubKey().Bytes(), task.cycle - 1) info, err = cs.QueryVrf(cs.privValidator.GetPubKey().Bytes(), task.Cycle - 1)
if err == nil && info != nil { if err == nil && info != nil {
//cs.cycleBoundaryMap[task.cycle] = info //cs.cycleBoundaryMap[task.cycle] = info
cs.UpdateVrfInfo(info) cs.UpdateVrfInfo(info)
...@@ -909,10 +909,10 @@ func (cs *ConsensusState) QueryVrfs(set *ttypes.ValidatorSet, cycle int64) (info ...@@ -909,10 +909,10 @@ func (cs *ConsensusState) QueryVrfs(set *ttypes.ValidatorSet, cycle int64) (info
// InitCycleVrfInfo method // InitCycleVrfInfo method
func (cs *ConsensusState) InitCycleVrfInfos(task Task){ func (cs *ConsensusState) InitCycleVrfInfos(task Task){
infos, err := cs.QueryVrfs(cs.validatorMgr.Validators, task.cycle - 1) infos, err := cs.QueryVrfs(cs.validatorMgr.Validators, task.Cycle - 1)
if err == nil && infos != nil { if err == nil && infos != nil {
//cs.cycleBoundaryMap[task.cycle] = info //cs.cycleBoundaryMap[task.cycle] = info
cs.UpdateVrfInfos(task.cycle, infos) cs.UpdateVrfInfos(task.Cycle, infos)
} }
return return
......
...@@ -54,3 +54,10 @@ message DPosNotify { ...@@ -54,3 +54,10 @@ message DPosNotify {
bytes signature = 7; //通知节点的签名 bytes signature = 7; //通知节点的签名
} }
message DPosCBInfo {
int64 cycle = 1;
int64 stopHeight = 2;
string stopHash = 3;
string pubkey = 4;
string signature = 5;
}
\ No newline at end of file
This diff is collapsed.
...@@ -29,17 +29,17 @@ func setParams(delegateNum int64, blockInterval int64, continueBlockNum int64) { ...@@ -29,17 +29,17 @@ func setParams(delegateNum int64, blockInterval int64, continueBlockNum int64) {
func printTask(now int64, task *Task) { func printTask(now int64, task *Task) {
fmt.Printf("now:%v|cycleStart:%v|cycleStop:%v|periodStart:%v|periodStop:%v|blockStart:%v|blockStop:%v|nodeId:%v\n", fmt.Printf("now:%v|cycleStart:%v|cycleStop:%v|periodStart:%v|periodStop:%v|blockStart:%v|blockStop:%v|nodeId:%v\n",
now, now,
task.cycleStart, task.CycleStart,
task.cycleStop, task.CycleStop,
task.periodStart, task.PeriodStart,
task.periodStop, task.PeriodStop,
task.blockStart, task.BlockStart,
task.blockStop, task.BlockStop,
task.nodeID) task.NodeID)
} }
func assertTask(task *Task, t *testing.T) { func assertTask(task *Task, t *testing.T) {
assert.Equal(t, true, task.nodeID >= 0 && task.nodeID < dposDelegateNum) assert.Equal(t, true, task.NodeID >= 0 && task.NodeID < dposDelegateNum)
assert.Equal(t, true, task.cycleStart <= task.periodStart && task.periodStart <= task.blockStart && task.blockStop <= task.periodStop && task.periodStop <= task.cycleStop) assert.Equal(t, true, task.CycleStart <= task.PeriodStart && task.PeriodStart <= task.BlockStart && task.BlockStop <= task.PeriodStop && task.PeriodStop <= task.CycleStop)
} }
func TestDecideTaskByTime(t *testing.T) { func TestDecideTaskByTime(t *testing.T) {
......
...@@ -14,6 +14,7 @@ It has these top-level messages: ...@@ -14,6 +14,7 @@ It has these top-level messages:
DPosVote DPosVote
DPosVoteReply DPosVoteReply
DPosNotify DPosNotify
DPosCBInfo
*/ */
package types package types
...@@ -338,6 +339,54 @@ func (m *DPosNotify) GetSignature() []byte { ...@@ -338,6 +339,54 @@ func (m *DPosNotify) GetSignature() []byte {
return nil return nil
} }
type DPosCBInfo struct {
Cycle int64 `protobuf:"varint,1,opt,name=cycle" json:"cycle,omitempty"`
StopHeight int64 `protobuf:"varint,2,opt,name=stopHeight" json:"stopHeight,omitempty"`
StopHash string `protobuf:"bytes,3,opt,name=stopHash" json:"stopHash,omitempty"`
Pubkey string `protobuf:"bytes,4,opt,name=pubkey" json:"pubkey,omitempty"`
Signature string `protobuf:"bytes,5,opt,name=signature" json:"signature,omitempty"`
}
func (m *DPosCBInfo) Reset() { *m = DPosCBInfo{} }
func (m *DPosCBInfo) String() string { return proto.CompactTextString(m) }
func (*DPosCBInfo) ProtoMessage() {}
func (*DPosCBInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} }
func (m *DPosCBInfo) GetCycle() int64 {
if m != nil {
return m.Cycle
}
return 0
}
func (m *DPosCBInfo) GetStopHeight() int64 {
if m != nil {
return m.StopHeight
}
return 0
}
func (m *DPosCBInfo) GetStopHash() string {
if m != nil {
return m.StopHash
}
return ""
}
func (m *DPosCBInfo) GetPubkey() string {
if m != nil {
return m.Pubkey
}
return ""
}
func (m *DPosCBInfo) GetSignature() string {
if m != nil {
return m.Signature
}
return ""
}
func init() { func init() {
proto.RegisterType((*CycleBoundaryInfo)(nil), "types.CycleBoundaryInfo") proto.RegisterType((*CycleBoundaryInfo)(nil), "types.CycleBoundaryInfo")
proto.RegisterType((*SuperNode)(nil), "types.SuperNode") proto.RegisterType((*SuperNode)(nil), "types.SuperNode")
...@@ -345,45 +394,48 @@ func init() { ...@@ -345,45 +394,48 @@ func init() {
proto.RegisterType((*DPosVote)(nil), "types.DPosVote") proto.RegisterType((*DPosVote)(nil), "types.DPosVote")
proto.RegisterType((*DPosVoteReply)(nil), "types.DPosVoteReply") proto.RegisterType((*DPosVoteReply)(nil), "types.DPosVoteReply")
proto.RegisterType((*DPosNotify)(nil), "types.DPosNotify") proto.RegisterType((*DPosNotify)(nil), "types.DPosNotify")
proto.RegisterType((*DPosCBInfo)(nil), "types.DPosCBInfo")
} }
func init() { proto.RegisterFile("dpos_msg.proto", fileDescriptor0) } func init() { proto.RegisterFile("dpos_msg.proto", fileDescriptor0) }
var fileDescriptor0 = []byte{ var fileDescriptor0 = []byte{
// 558 bytes of a gzipped FileDescriptorProto // 587 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x54, 0xdd, 0x8a, 0x13, 0x31, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x54, 0xdd, 0x8a, 0xd3, 0x4c,
0x14, 0xa6, 0x3b, 0xfd, 0x3d, 0xfd, 0xd9, 0xdd, 0x20, 0x12, 0x44, 0xa4, 0x8c, 0x22, 0x45, 0xa5, 0x18, 0x26, 0x9b, 0xb6, 0xdb, 0xbc, 0xfd, 0xd9, 0xdd, 0xe1, 0xe3, 0x63, 0x10, 0x91, 0x12, 0x45,
0x48, 0x15, 0x11, 0xc1, 0x0b, 0x77, 0xf7, 0xc2, 0x22, 0x2c, 0x32, 0xbb, 0xf4, 0x56, 0xb2, 0x3b, 0x8a, 0x4a, 0x91, 0x2a, 0x22, 0x82, 0x07, 0xee, 0xee, 0x81, 0x45, 0x58, 0x64, 0x76, 0xe9, 0xa9,
0x69, 0x67, 0xa0, 0x6d, 0x42, 0x92, 0x16, 0xe7, 0x21, 0x7c, 0x0d, 0x5f, 0xc7, 0x57, 0x92, 0x9c, 0x64, 0x37, 0xd3, 0x26, 0xd8, 0x76, 0x86, 0x99, 0x69, 0x31, 0x17, 0xe1, 0x99, 0xd7, 0xe0, 0xed,
0xcc, 0x4c, 0xa6, 0x53, 0x7a, 0x37, 0xdf, 0x77, 0x7e, 0x92, 0xf3, 0x9d, 0x2f, 0x03, 0xa3, 0x58, 0x78, 0x4b, 0x32, 0x3f, 0xc9, 0xa4, 0x29, 0x3d, 0xf3, 0x2c, 0xcf, 0xf3, 0xfe, 0xcc, 0xbc, 0xcf,
0x0a, 0xfd, 0x6b, 0xa3, 0x57, 0x53, 0xa9, 0x84, 0x11, 0xa4, 0x65, 0x32, 0xc9, 0x75, 0xc8, 0xe1, 0xfb, 0x64, 0x60, 0x98, 0x72, 0x26, 0xbf, 0xad, 0xe5, 0x72, 0xc2, 0x05, 0x53, 0x0c, 0xb5, 0x55,
0xf2, 0x3a, 0x7b, 0x5c, 0xf3, 0x2b, 0xb1, 0xdb, 0xc6, 0x4c, 0x65, 0xf3, 0xed, 0x52, 0x90, 0x27, 0xc1, 0xa9, 0x8c, 0x29, 0x5c, 0x5c, 0x15, 0x0f, 0x2b, 0x7a, 0xc9, 0xb6, 0x9b, 0x34, 0x11, 0xc5,
0xd0, 0x7a, 0xb4, 0x24, 0x6d, 0x8c, 0x1b, 0x93, 0x20, 0x72, 0x80, 0xbc, 0x00, 0xd0, 0x46, 0xc8, 0x6c, 0xb3, 0x60, 0xe8, 0x3f, 0x68, 0x3f, 0x68, 0x12, 0x07, 0xa3, 0x60, 0x1c, 0x12, 0x0b, 0xd0,
0xef, 0x3c, 0x5d, 0x25, 0x86, 0x9e, 0x61, 0xa8, 0xc2, 0x90, 0x67, 0xd0, 0x45, 0xc4, 0x74, 0x42, 0x13, 0x00, 0xa9, 0x18, 0xff, 0x4c, 0xf3, 0x65, 0xa6, 0xf0, 0x89, 0x09, 0xd5, 0x18, 0xf4, 0x08,
0x83, 0x71, 0x63, 0xd2, 0x8b, 0x4a, 0x1c, 0x7e, 0x85, 0xde, 0xdd, 0x4e, 0x72, 0x75, 0x2b, 0x62, 0xba, 0x06, 0x25, 0x32, 0xc3, 0xe1, 0x28, 0x18, 0x47, 0xa4, 0xc2, 0xf1, 0x47, 0x88, 0x6e, 0xb7,
0x4e, 0x28, 0x74, 0x58, 0x1c, 0x2b, 0xae, 0x35, 0x1e, 0x30, 0x88, 0x0a, 0x48, 0x9e, 0x42, 0x5b, 0x9c, 0x8a, 0x1b, 0x96, 0x52, 0x84, 0xe1, 0x34, 0x49, 0x53, 0x41, 0xa5, 0x34, 0x07, 0xf4, 0x49,
0xee, 0x1e, 0x7e, 0xf0, 0x0c, 0xdb, 0x0f, 0xa2, 0x1c, 0x85, 0x7f, 0x9b, 0xd0, 0x5d, 0x08, 0xc3, 0x09, 0xd1, 0xff, 0xd0, 0xe1, 0xdb, 0xfb, 0x2f, 0xb4, 0x30, 0xed, 0xfb, 0xc4, 0xa1, 0xf8, 0x77,
0xe7, 0x86, 0x6f, 0xc8, 0x6b, 0x18, 0xed, 0x85, 0xe1, 0xb1, 0xed, 0x35, 0xdf, 0xc6, 0xfc, 0x37, 0x0b, 0xba, 0x73, 0xa6, 0xe8, 0x4c, 0xd1, 0x35, 0x7a, 0x0e, 0xc3, 0x1d, 0x53, 0x34, 0xd5, 0xbd,
0x76, 0x69, 0x45, 0x35, 0x96, 0xbc, 0x81, 0x8b, 0x92, 0xf9, 0x96, 0x9f, 0xe7, 0xda, 0x1e, 0xf1, 0x66, 0x9b, 0x94, 0xfe, 0x30, 0x5d, 0xda, 0xa4, 0xc1, 0xa2, 0x17, 0x70, 0x5e, 0x31, 0x9f, 0xdc,
0x7e, 0xe2, 0xa0, 0x36, 0x31, 0x7e, 0xdc, 0x19, 0xa6, 0x0c, 0x6d, 0xba, 0x89, 0x3d, 0x43, 0x9e, 0x79, 0xb6, 0xed, 0x01, 0xef, 0x27, 0x0e, 0x1b, 0x13, 0x9b, 0x8f, 0x5b, 0x95, 0x08, 0x85, 0x5b,
0x43, 0x2f, 0x47, 0x42, 0xd2, 0x16, 0x86, 0x3d, 0x41, 0xc6, 0xd0, 0x97, 0x5c, 0xa5, 0x22, 0x76, 0x76, 0x62, 0xcf, 0xa0, 0xc7, 0x10, 0x39, 0xc4, 0x38, 0x6e, 0x9b, 0xb0, 0x27, 0xd0, 0x08, 0x7a,
0xe5, 0x6d, 0x8c, 0x57, 0x29, 0xdb, 0xbf, 0x80, 0x42, 0xd2, 0x8e, 0xeb, 0xef, 0x19, 0x2b, 0x47, 0x9c, 0x8a, 0x9c, 0xa5, 0xb6, 0xbc, 0x63, 0xe2, 0x75, 0x4a, 0xf7, 0x2f, 0x21, 0xe3, 0xf8, 0xd4,
0xe2, 0xd4, 0xee, 0x62, 0x2c, 0x47, 0x96, 0xb7, 0x13, 0xcc, 0x6f, 0x68, 0xcf, 0xc9, 0xe4, 0x10, 0xf6, 0xf7, 0x8c, 0x96, 0x23, 0xb3, 0x6a, 0x77, 0x4d, 0xcc, 0x21, 0xcd, 0xeb, 0x09, 0x66, 0xd7,
0xf9, 0x0c, 0xb0, 0x66, 0xda, 0x5c, 0x5f, 0xd9, 0x2d, 0x52, 0x18, 0x37, 0x26, 0xfd, 0x19, 0x9d, 0x38, 0xb2, 0x32, 0x59, 0x84, 0xde, 0x03, 0xac, 0x12, 0xa9, 0xae, 0x2e, 0xf5, 0x16, 0x31, 0x8c,
0xe2, 0xa2, 0xa7, 0x47, 0x5b, 0x8e, 0x2a, 0xb9, 0xf6, 0xae, 0x3a, 0xd9, 0x2d, 0x97, 0x6b, 0x7e, 0x82, 0x71, 0x6f, 0x8a, 0x27, 0x66, 0xd1, 0x93, 0x83, 0x2d, 0x93, 0x5a, 0xae, 0xbe, 0xab, 0xcc,
0x9f, 0x49, 0x4e, 0xfb, 0xee, 0xae, 0x15, 0x8a, 0xbc, 0x07, 0xd8, 0xb3, 0x75, 0x1a, 0x33, 0x23, 0xb6, 0x8b, 0xc5, 0x8a, 0xde, 0x15, 0x9c, 0xe2, 0x9e, 0xbd, 0x6b, 0x8d, 0x42, 0xaf, 0x01, 0x76,
0x94, 0xa6, 0x83, 0x71, 0x30, 0xe9, 0xcf, 0x2e, 0xf2, 0xde, 0xe5, 0x6a, 0xa3, 0x4a, 0x0e, 0xf9, 0xc9, 0x2a, 0x4f, 0x13, 0xc5, 0x84, 0xc4, 0xfd, 0x51, 0x38, 0xee, 0x4d, 0xcf, 0x5d, 0xef, 0x6a,
0x04, 0xc3, 0xbd, 0x5a, 0x2e, 0x7c, 0xd1, 0xf0, 0x44, 0xd1, 0x61, 0x1a, 0xf9, 0x02, 0xe7, 0x5b, 0xb5, 0xa4, 0x96, 0x83, 0xde, 0xc1, 0x60, 0x27, 0x16, 0x73, 0x5f, 0x34, 0x38, 0x52, 0xb4, 0x9f,
0xb1, 0x38, 0xa8, 0x1c, 0x9d, 0xa8, 0xac, 0x27, 0x86, 0xff, 0x1a, 0xd0, 0xbd, 0xf9, 0x29, 0xb4, 0x86, 0x3e, 0xc0, 0xd9, 0x86, 0xcd, 0xf7, 0x2a, 0x87, 0x47, 0x2a, 0x9b, 0x89, 0xf1, 0x9f, 0x00,
0x35, 0x0b, 0x79, 0x0b, 0xdd, 0x7d, 0x6e, 0x1a, 0xb4, 0x48, 0x7f, 0x76, 0x9e, 0x77, 0x28, 0xbc, 0xba, 0xd7, 0x5f, 0x99, 0xd4, 0x66, 0x41, 0x2f, 0xa1, 0xbb, 0x73, 0xa6, 0x31, 0x16, 0xe9, 0x4d,
0x14, 0x95, 0x09, 0xe4, 0x15, 0x0c, 0xed, 0xf7, 0x7d, 0xba, 0xe1, 0xda, 0xb0, 0x8d, 0xcc, 0x0d, 0xcf, 0x5c, 0x87, 0xd2, 0x4b, 0xa4, 0x4a, 0x40, 0xcf, 0x60, 0xa0, 0xbf, 0xef, 0xf2, 0x35, 0x95,
0x7e, 0x48, 0x16, 0xde, 0x53, 0xde, 0x7b, 0x81, 0xf7, 0x9e, 0x3a, 0xf2, 0x9e, 0xaa, 0x7a, 0xaf, 0x2a, 0x59, 0x73, 0x67, 0xf0, 0x7d, 0xb2, 0xf4, 0x9e, 0xf0, 0xde, 0x0b, 0xbd, 0xf7, 0xc4, 0x81,
0xe9, 0xbd, 0x57, 0xe5, 0xad, 0x8b, 0x74, 0xba, 0xda, 0x32, 0xb3, 0x53, 0x1c, 0x5d, 0x34, 0x88, 0xf7, 0x44, 0xdd, 0x7b, 0x2d, 0xef, 0xbd, 0x3a, 0xaf, 0x5d, 0x24, 0xf3, 0xe5, 0x26, 0x51, 0x5b,
0x3c, 0x11, 0x7e, 0x84, 0x61, 0x31, 0x50, 0xc4, 0xe5, 0x3a, 0x23, 0x2f, 0xa1, 0x69, 0x5b, 0xd4, 0x41, 0x8d, 0x8b, 0xfa, 0xc4, 0x13, 0xf1, 0x5b, 0x18, 0x94, 0x03, 0x11, 0xca, 0x57, 0x05, 0x7a,
0x26, 0x2a, 0x73, 0x30, 0x18, 0xfe, 0x39, 0x03, 0xb0, 0xd4, 0xad, 0x30, 0xe9, 0xf2, 0x54, 0x4d, 0x0a, 0x2d, 0xdd, 0xa2, 0x31, 0x51, 0x95, 0x63, 0x82, 0xf1, 0xcf, 0x13, 0x00, 0x4d, 0xdd, 0x30,
0xa9, 0x02, 0x06, 0xad, 0x1b, 0x9d, 0xbf, 0xd0, 0x8d, 0xf9, 0xfb, 0xf6, 0x8c, 0x7d, 0xdf, 0x09, 0x95, 0x2f, 0x8e, 0xd5, 0x54, 0x2a, 0x98, 0xa0, 0x76, 0xa3, 0xf5, 0x97, 0x71, 0xa3, 0xfb, 0xbf,
0xd3, 0x09, 0x46, 0x03, 0xbc, 0x66, 0x89, 0xc9, 0xc4, 0xee, 0xcc, 0x1e, 0xe5, 0xf5, 0x73, 0xcf, 0x3d, 0xa3, 0xff, 0xef, 0x2c, 0x91, 0x99, 0x89, 0x86, 0xe6, 0x9a, 0x15, 0x46, 0x63, 0xbd, 0x33,
0xa5, 0x4e, 0xfb, 0x4c, 0x2f, 0x61, 0x0b, 0x25, 0xac, 0xd3, 0xe4, 0x1d, 0x5c, 0x7a, 0xaa, 0x10, 0x7d, 0x94, 0xd7, 0xcf, 0xfe, 0x2e, 0x4d, 0xda, 0x67, 0x7a, 0x09, 0xdb, 0x46, 0xc2, 0x26, 0x8d,
0xb1, 0x8d, 0x07, 0x1f, 0x07, 0x0e, 0x55, 0xec, 0xd4, 0x54, 0x7c, 0x68, 0xe3, 0x4f, 0xef, 0xc3, 0x5e, 0xc1, 0x85, 0xa7, 0x4a, 0x11, 0x3b, 0xe6, 0xe0, 0xc3, 0xc0, 0xbe, 0x8a, 0xa7, 0x4d, 0x15,
0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x1d, 0x49, 0x1a, 0xb6, 0x06, 0x05, 0x00, 0x00, 0x7f, 0x05, 0x56, 0x0f, 0x67, 0xf7, 0x7f, 0xfe, 0xc0, 0xb9, 0x97, 0xeb, 0x3b, 0x2d, 0xcc, 0xdc,
0x11, 0x71, 0xe8, 0x70, 0xb9, 0x51, 0xed, 0x5a, 0xf7, 0x1d, 0xf3, 0x16, 0xbf, 0xf9, 0x1b, 0x00,
0x00, 0xff, 0xff, 0xea, 0x85, 0x23, 0x04, 0x9d, 0x05, 0x00, 0x00,
} }
package types
import (
"bytes"
"github.com/33cn/chain33/common/crypto"
"github.com/33cn/chain33/types"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"os"
"testing"
)
const(
err_genesis_file = `{"genesis_time:"2018-08-16T15:38:56.951569432+08:00","chain_id":"chain33-Z2cgFj","validators":[{"pub_key":{"type":"secp256k1","data":"03EF0E1D3112CF571743A3318125EDE2E52A4EB904BCBAA4B1F75020C2846A7EB4"},"name":""},{"pub_key":{"type":"secp256k1","data":"027848E7FA630B759DB406940B5506B666A344B1060794BBF314EB459D40881BB3"},"name":""},{"pub_key":{"type":"secp256k1","data":"03F4AB6659E61E8512C9A24AC385CC1AC4D52B87D10ADBDF060086EA82BE62CDDE"},"name":""}],"app_hash":null}`
genesis_file = `{"genesis_time":"2018-08-16T15:38:56.951569432+08:00","chain_id":"chain33-Z2cgFj","validators":[{"pub_key":{"type":"secp256k1","data":"03EF0E1D3112CF571743A3318125EDE2E52A4EB904BCBAA4B1F75020C2846A7EB4"},"name":""},{"pub_key":{"type":"secp256k1","data":"027848E7FA630B759DB406940B5506B666A344B1060794BBF314EB459D40881BB3"},"name":""},{"pub_key":{"type":"secp256k1","data":"03F4AB6659E61E8512C9A24AC385CC1AC4D52B87D10ADBDF060086EA82BE62CDDE"},"name":""}],"app_hash":null}`
)
func init(){
//为了使用VRF,需要使用SECP256K1体系的公私钥
cr, err := crypto.New(types.GetSignName("", types.SECP256K1))
if err != nil {
panic("init ConsensusCrypto failed.")
return
}
ConsensusCrypto = cr
}
func TestGenesisDocFromFile(t *testing.T) {
genDoc, err := GenesisDocFromFile("./genesis.json")
require.NotNil(t, err)
require.Nil(t, genDoc)
genDoc, err = GenesisDocFromFile("../genesis.json")
require.NotNil(t, genDoc)
require.Nil(t, err)
}
func TestGenesisDocFromJSON(t *testing.T) {
genDoc, err := GenesisDocFromJSON([]byte(genesis_file))
require.NotNil(t, genDoc)
require.Nil(t, err)
assert.True(t, genDoc.ChainID == "chain33-Z2cgFj")
assert.True(t, genDoc.AppHash == nil)
assert.True(t, len(genDoc.Validators) == 3)
genDoc, err = GenesisDocFromJSON([]byte(err_genesis_file))
require.NotNil(t, err)
require.Nil(t, genDoc)
}
func TestSaveAs(t *testing.T) {
genDoc, err := GenesisDocFromJSON([]byte(genesis_file))
require.NotNil(t, genDoc)
require.Nil(t, err)
assert.True(t, genDoc.ChainID == "chain33-Z2cgFj")
assert.True(t, genDoc.AppHash == nil)
assert.True(t, len(genDoc.Validators) == 3)
err = genDoc.SaveAs("./tmp_genesis.json")
require.Nil(t, err)
genDoc2, err := GenesisDocFromFile("./tmp_genesis.json")
require.NotNil(t, genDoc2)
require.Nil(t, err)
assert.True(t, genDoc.ChainID == genDoc2.ChainID)
assert.True(t, genDoc.GenesisTime == genDoc2.GenesisTime)
assert.True(t, bytes.Equal(genDoc.AppHash , genDoc2.AppHash))
assert.True(t, genDoc.Validators[0].Name == genDoc2.Validators[0].Name)
assert.True(t, genDoc.Validators[0].PubKey.Data == genDoc2.Validators[0].PubKey.Data)
assert.True(t, genDoc.Validators[0].PubKey.Kind == genDoc2.Validators[0].PubKey.Kind)
assert.True(t, genDoc.Validators[1].Name == genDoc2.Validators[1].Name)
assert.True(t, genDoc.Validators[1].PubKey.Data == genDoc2.Validators[1].PubKey.Data)
assert.True(t, genDoc.Validators[1].PubKey.Kind == genDoc2.Validators[1].PubKey.Kind)
assert.True(t, genDoc.Validators[2].Name == genDoc2.Validators[2].Name)
assert.True(t, genDoc.Validators[2].PubKey.Data == genDoc2.Validators[2].PubKey.Data)
assert.True(t, genDoc.Validators[2].PubKey.Kind == genDoc2.Validators[2].PubKey.Kind)
err = os.Remove("./tmp_genesis.json")
require.Nil(t, err)
}
func TestValidateAndComplete(t *testing.T) {
genDoc, err := GenesisDocFromJSON([]byte(genesis_file))
require.NotNil(t, genDoc)
require.Nil(t, err)
tt := genDoc.GenesisTime
setSize := len(genDoc.Validators)
err = genDoc.ValidateAndComplete()
assert.True(t, tt == genDoc.GenesisTime)
require.Nil(t, err)
assert.True(t, setSize == len(genDoc.Validators))
vals := genDoc.Validators
genDoc.Validators = nil
err = genDoc.ValidateAndComplete()
require.NotNil(t, err)
genDoc.Validators = vals
genDoc.ChainID = ""
err = genDoc.ValidateAndComplete()
require.NotNil(t, err)
}
func TestValidatorHash(t *testing.T) {
genDoc, err := GenesisDocFromJSON([]byte(genesis_file))
require.NotNil(t, genDoc)
require.Nil(t, err)
hash := genDoc.ValidatorHash()
assert.True(t, len(hash) > 0)
}
\ No newline at end of file
...@@ -32,6 +32,7 @@ func InitMessageMap() { ...@@ -32,6 +32,7 @@ func InitMessageMap() {
VoteID: reflect.TypeOf(DPosVote{}), VoteID: reflect.TypeOf(DPosVote{}),
VoteReplyID: reflect.TypeOf(DPosVoteReply{}), VoteReplyID: reflect.TypeOf(DPosVoteReply{}),
NotifyID: reflect.TypeOf(DPosNotify{}), NotifyID: reflect.TypeOf(DPosNotify{}),
CBInfoID: reflect.TypeOf(DPosCBInfo{}),
} }
} }
......
...@@ -34,7 +34,7 @@ type PrivValidator interface { ...@@ -34,7 +34,7 @@ type PrivValidator interface {
SignVote(chainID string, vote *Vote) error SignVote(chainID string, vote *Vote) error
SignNotify(chainID string, notify *Notify) error SignNotify(chainID string, notify *Notify) error
SignMsg(msg []byte) (sig string, err error) SignMsg(msg []byte) (sig crypto.Signature, err error)
SignTx(tx *types.Transaction) SignTx(tx *types.Transaction)
VrfEvaluate(input []byte) (hash [32]byte, proof []byte) VrfEvaluate(input []byte) (hash [32]byte, proof []byte)
VrfProof(pubkey []byte, input []byte, hash [32]byte, proof []byte) bool VrfProof(pubkey []byte, input []byte, hash [32]byte, proof []byte) bool
...@@ -46,8 +46,8 @@ type PrivValidator interface { ...@@ -46,8 +46,8 @@ type PrivValidator interface {
type PrivValidatorFS struct { type PrivValidatorFS struct {
Address string `json:"address"` Address string `json:"address"`
PubKey KeyText `json:"pub_key"` PubKey KeyText `json:"pub_key"`
LastSignature *KeyText `json:"last_signature,omitempty"` // so we dont lose signatures //LastSignature *KeyText `json:"last_signature,omitempty"` // so we dont lose signatures
LastSignBytes string `json:"last_signbytes,omitempty"` // so we dont lose signatures //LastSignBytes string `json:"last_signbytes,omitempty"` // so we dont lose signatures
// PrivKey should be empty if a Signer other than the default is being used. // PrivKey should be empty if a Signer other than the default is being used.
PrivKey KeyText `json:"priv_key"` PrivKey KeyText `json:"priv_key"`
...@@ -57,8 +57,8 @@ type PrivValidatorFS struct { ...@@ -57,8 +57,8 @@ type PrivValidatorFS struct {
type PrivValidatorImp struct { type PrivValidatorImp struct {
Address []byte Address []byte
PubKey crypto.PubKey PubKey crypto.PubKey
LastSignature crypto.Signature //LastSignature crypto.Signature
LastSignBytes []byte //LastSignBytes []byte
// PrivKey should be empty if a Signer other than the default is being used. // PrivKey should be empty if a Signer other than the default is being used.
PrivKey crypto.PrivKey PrivKey crypto.PrivKey
...@@ -130,6 +130,7 @@ func PubKeyFromString(pubkeystring string) (crypto.PubKey, error) { ...@@ -130,6 +130,7 @@ func PubKeyFromString(pubkeystring string) (crypto.PubKey, error) {
} }
// SignatureFromString ... // SignatureFromString ...
/*
func SignatureFromString(sigString string) (crypto.Signature, error) { func SignatureFromString(sigString string) (crypto.Signature, error) {
sigbyte, err := hex.DecodeString(sigString) sigbyte, err := hex.DecodeString(sigString)
if err != nil { if err != nil {
...@@ -141,7 +142,7 @@ func SignatureFromString(sigString string) (crypto.Signature, error) { ...@@ -141,7 +142,7 @@ func SignatureFromString(sigString string) (crypto.Signature, error) {
} }
return sig, nil return sig, nil
} }
*/
// GenPrivValidatorImp generates a new validator with randomly generated private key // GenPrivValidatorImp generates a new validator with randomly generated private key
// and sets the filePath, but does not call Save(). // and sets the filePath, but does not call Save().
func GenPrivValidatorImp(filePath string) *PrivValidatorImp { func GenPrivValidatorImp(filePath string) *PrivValidatorImp {
...@@ -221,6 +222,7 @@ func LoadPrivValidatorFSWithSigner(filePath string, signerFunc func(PrivValidato ...@@ -221,6 +222,7 @@ func LoadPrivValidatorFSWithSigner(filePath string, signerFunc func(PrivValidato
} }
privValImp.PubKey = pubKey privValImp.PubKey = pubKey
/*
if len(privVal.LastSignBytes) != 0 { if len(privVal.LastSignBytes) != 0 {
tmp, err = hex.DecodeString(privVal.LastSignBytes) tmp, err = hex.DecodeString(privVal.LastSignBytes)
if err != nil { if err != nil {
...@@ -237,7 +239,7 @@ func LoadPrivValidatorFSWithSigner(filePath string, signerFunc func(PrivValidato ...@@ -237,7 +239,7 @@ func LoadPrivValidatorFSWithSigner(filePath string, signerFunc func(PrivValidato
} else { } else {
privValImp.LastSignature = nil privValImp.LastSignature = nil
} }
*/
privValImp.filePath = filePath privValImp.filePath = filePath
privValImp.Signer = signerFunc(privValImp) privValImp.Signer = signerFunc(privValImp)
return privValImp return privValImp
...@@ -258,10 +260,11 @@ func (pv *PrivValidatorImp) save() { ...@@ -258,10 +260,11 @@ func (pv *PrivValidatorImp) save() {
privValFS := &PrivValidatorFS{ privValFS := &PrivValidatorFS{
Address: addr, Address: addr,
LastSignature: nil, //LastSignature: nil,
} }
privValFS.PrivKey = KeyText{Kind: "secp256k1", Data: Fmt("%X", pv.PrivKey.Bytes()[:])} privValFS.PrivKey = KeyText{Kind: "secp256k1", Data: Fmt("%X", pv.PrivKey.Bytes()[:])}
privValFS.PubKey = KeyText{Kind: "secp256k1", Data: pv.PubKey.KeyString()} privValFS.PubKey = KeyText{Kind: "secp256k1", Data: pv.PubKey.KeyString()}
/*
if len(pv.LastSignBytes) != 0 { if len(pv.LastSignBytes) != 0 {
tmp := Fmt("%X", pv.LastSignBytes[:]) tmp := Fmt("%X", pv.LastSignBytes[:])
privValFS.LastSignBytes = tmp privValFS.LastSignBytes = tmp
...@@ -270,6 +273,7 @@ func (pv *PrivValidatorImp) save() { ...@@ -270,6 +273,7 @@ func (pv *PrivValidatorImp) save() {
sig := Fmt("%X", pv.LastSignature.Bytes()[:]) sig := Fmt("%X", pv.LastSignature.Bytes()[:])
privValFS.LastSignature = &KeyText{Kind: "ed25519", Data: sig} privValFS.LastSignature = &KeyText{Kind: "ed25519", Data: sig}
} }
*/
jsonBytes, err := json.Marshal(privValFS) jsonBytes, err := json.Marshal(privValFS)
if err != nil { if err != nil {
// `@; BOOM!!! // `@; BOOM!!!
...@@ -285,8 +289,8 @@ func (pv *PrivValidatorImp) save() { ...@@ -285,8 +289,8 @@ func (pv *PrivValidatorImp) save() {
// Reset resets all fields in the PrivValidatorFS. // Reset resets all fields in the PrivValidatorFS.
// NOTE: Unsafe! // NOTE: Unsafe!
func (pv *PrivValidatorImp) Reset() { func (pv *PrivValidatorImp) Reset() {
pv.LastSignature = nil //pv.LastSignature = nil
pv.LastSignBytes = nil //pv.LastSignBytes = nil
pv.Save() pv.Save()
} }
...@@ -323,21 +327,13 @@ func (pv *PrivValidatorImp) SignNotify(chainID string, notify *Notify) error { ...@@ -323,21 +327,13 @@ func (pv *PrivValidatorImp) SignNotify(chainID string, notify *Notify) error {
} }
// SignCBInfo signs a canonical representation of the DposCBInfo, Implements PrivValidator. // SignCBInfo signs a canonical representation of the DposCBInfo, Implements PrivValidator.
func (pv *PrivValidatorImp) SignMsg(msg []byte) (sig string, err error) { func (pv *PrivValidatorImp) SignMsg(msg []byte) (sig crypto.Signature, err error) {
pv.mtx.Lock() pv.mtx.Lock()
defer pv.mtx.Unlock() defer pv.mtx.Unlock()
buf := new(bytes.Buffer) signature := pv.PrivKey.Sign(msg)
//sig = hex.EncodeToString(signature.Bytes())
_, err = buf.Write(msg) return signature, nil
if err != nil {
return "", errors.New(Fmt("Error write buffer: %v", err))
}
signature := pv.PrivKey.Sign(buf.Bytes())
sig = hex.EncodeToString(signature.Bytes())
return sig, nil
} }
// SignTx signs a tx, Implements PrivValidator. // SignTx signs a tx, Implements PrivValidator.
func (pv *PrivValidatorImp)SignTx(tx *types.Transaction){ func (pv *PrivValidatorImp)SignTx(tx *types.Transaction){
...@@ -376,12 +372,14 @@ func (pv *PrivValidatorImp) VrfProof(pubkey []byte, input []byte, hash [32]byte, ...@@ -376,12 +372,14 @@ func (pv *PrivValidatorImp) VrfProof(pubkey []byte, input []byte, hash [32]byte,
} }
// Persist height/round/step and signature // Persist height/round/step and signature
/*
func (pv *PrivValidatorImp) saveSigned(signBytes []byte, sig crypto.Signature) { func (pv *PrivValidatorImp) saveSigned(signBytes []byte, sig crypto.Signature) {
pv.LastSignature = sig //pv.LastSignature = sig
pv.LastSignBytes = signBytes //pv.LastSignBytes = signBytes
pv.save() pv.save()
} }
*/
// String returns a string representation of the PrivValidatorImp. // String returns a string representation of the PrivValidatorImp.
func (pv *PrivValidatorImp) String() string { func (pv *PrivValidatorImp) String() string {
......
package types
import (
"bytes"
"encoding/hex"
"encoding/json"
"fmt"
"github.com/33cn/chain33/common/crypto"
"github.com/33cn/chain33/types"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"io"
"os"
"sort"
"strings"
"testing"
"time"
)
const(
priv_validator_file = `{"address":"2FA286246F0222C4FF93210E91AECE0C66723F15","pub_key":{"type":"secp256k1","data":"03EF0E1D3112CF571743A3318125EDE2E52A4EB904BCBAA4B1F75020C2846A7EB4"},"last_height":1679,"last_round":0,"last_step":3,"last_signature":{"type":"secp256k1","data":"37892A916D6E487ADF90F9E88FE37024597677B6C6FED47444AD582F74144B3D6E4B364EAF16AF03A4E42827B6D3C86415D734A5A6CCA92E114B23EB9265AF09"},"last_signbytes":"7B22636861696E5F6964223A22636861696E33332D5A326367466A222C22766F7465223A7B22626C6F636B5F6964223A7B2268617368223A224F6A657975396B2B4149426A6E4859456739584765356A7A462B673D222C227061727473223A7B2268617368223A6E756C6C2C22746F74616C223A307D7D2C22686569676874223A313637392C22726F756E64223A302C2274696D657374616D70223A22323031382D30382D33315430373A35313A34332E3935395A222C2274797065223A327D7D","priv_key":{"type":"secp256k1","data":"5A6A14DA6F5A42835E529D75D87CC8904544F59EEE5387A37D87EEAD194D7EB2"}}`
strAddr = "2FA286246F0222C4FF93210E91AECE0C66723F15"
strPubkey = "03EF0E1D3112CF571743A3318125EDE2E52A4EB904BCBAA4B1F75020C2846A7EB4"
addr1 = "79F9608B6826762CACCA843E81AE86837ABFFB21"
addr2 = "3480088E35099CBA75958DAE7A364A8AAD2C1BD0"
addr3 = "9FF8678DBDA4EAE2F999CBFBCBD8F5F3FC47FBAE"
addr4 = "70A51AD9777EF1F97250F7E4C156D8637BC7143C"
)
func init(){
//为了使用VRF,需要使用SECP256K1体系的公私钥
cr, err := crypto.New(types.GetSignName("", types.SECP256K1))
if err != nil {
panic("init ConsensusCrypto failed.")
return
}
ConsensusCrypto = cr
}
func save(filename , filecontent string) {
f, err := os.Create(filename)
if err != nil {
fmt.Println("err = ", err)
return
}
defer f.Close()
n, err := f.WriteString(filecontent)
if err != nil {
fmt.Println("err = ", err)
return
}
fmt.Println("n=", n, " contentlen=", len(filecontent))
}
func remove(filename string) {
os.Remove(filename)
}
func read(filename string) bool{
f, err := os.Open(filename)
if err != nil {
fmt.Println("err=", err)
return false
}
defer f.Close()
buf := make([]byte, 1024 * 2)
_, err1 := f.Read(buf)
if err1 != nil && err1 != io.EOF {
fmt.Println("err1=", err1)
return false
}
//fmt.Println("buf=",string(buf[:n]))
return true
}
func TestLoadOrGenPrivValidatorFS(t *testing.T) {
filename := "./tmp_priv_validator.json"
save(filename, priv_validator_file)
privValidator := LoadOrGenPrivValidatorFS(filename)
require.NotNil(t, privValidator)
assert.True(t, strings.EqualFold(strAddr,hex.EncodeToString(privValidator.GetAddress())))
assert.True(t, strings.EqualFold(strPubkey,hex.EncodeToString(privValidator.GetPubKey().Bytes())))
fmt.Println(privValidator.String())
remove(filename)
}
func TestGenPrivValidatorImp(t *testing.T) {
filename := "tmp_priv_validator2.json"
//save(filename, priv_validator_file)
privValidator := LoadOrGenPrivValidatorFS(filename)
require.NotNil(t, privValidator)
assert.True(t, true == read(filename))
remove(filename)
assert.True(t, false == read(filename))
privValidator.Reset()
assert.True(t, true == read(filename))
assert.True(t, len(privValidator.GetPubKey().Bytes()) > 0)
assert.True(t, len(privValidator.GetAddress()) > 0)
remove(filename)
}
func TestPrivValidatorImpSort(t *testing.T) {
var arr []*PrivValidatorImp
Addr1 , _ := hex.DecodeString(addr1)
Addr2 , _ := hex.DecodeString(addr2)
Addr3 , _ := hex.DecodeString(addr3)
Addr4 , _ := hex.DecodeString(addr4)
imp1 := &PrivValidatorImp{
Address: Addr1,
}
arr = append(arr, imp1)
imp2 := &PrivValidatorImp{
Address: Addr2,
}
arr = append(arr, imp2)
imp3 := &PrivValidatorImp{
Address: Addr3,
}
arr = append(arr, imp3)
imp4 := &PrivValidatorImp{
Address: Addr4,
}
arr = append(arr, imp4)
sort.Sort(PrivValidatorsByAddress(arr))
assert.True(t, strings.EqualFold(addr2,hex.EncodeToString(arr[0].Address)))
assert.True(t, strings.EqualFold(addr4,hex.EncodeToString(arr[1].Address)))
assert.True(t, strings.EqualFold(addr1,hex.EncodeToString(arr[2].Address)))
assert.True(t, strings.EqualFold(addr3,hex.EncodeToString(arr[3].Address)))
}
func TestSignAndVerifyVote(t *testing.T) {
filename := "./tmp_priv_validator.json"
save(filename, priv_validator_file)
privValidator := LoadOrGenPrivValidatorFS(filename)
now := time.Now().Unix()
//task := dpos.DecideTaskByTime(now)
//生成vote, 对于vote进行签名
voteItem := &VoteItem{
VotedNodeAddress: privValidator.Address,
VotedNodeIndex: int32(0),
Cycle: 100,
CycleStart: 18888,
CycleStop: 28888,
PeriodStart: 20000,
PeriodStop: 21000,
Height: 100,
}
encode, err := json.Marshal(voteItem)
if err != nil {
panic("Marshal vote failed.")
}
voteItem.VoteID = crypto.Ripemd160(encode)
vote := &Vote{
DPosVote: &DPosVote{
VoteItem: voteItem,
VoteTimestamp: now,
VoterNodeAddress: privValidator.GetAddress(),
VoterNodeIndex: int32(0),
},
}
assert.True(t, 0 == len(vote.Signature))
chainID := "test-chain-Ep9EcD"
privValidator.SignVote(chainID, vote)
assert.True(t, 0 < len(vote.Signature))
vote2 := vote.Copy()
err = vote2.Verify(chainID, privValidator.PubKey)
require.Nil(t, err)
remove(filename)
privValidator2 := LoadOrGenPrivValidatorFS(filename)
require.NotNil(t, privValidator2)
err = vote2.Verify(chainID, privValidator2.PubKey)
require.NotNil(t, err)
remove(filename)
}
func TestSignAndVerifyNotify(t *testing.T) {
filename := "./tmp_priv_validator.json"
save(filename, priv_validator_file)
privValidator := LoadOrGenPrivValidatorFS(filename)
now := time.Now().Unix()
//task := dpos.DecideTaskByTime(now)
//生成vote, 对于vote进行签名
voteItem := &VoteItem{
VotedNodeAddress: privValidator.Address,
VotedNodeIndex: int32(0),
Cycle: 100,
CycleStart: 18888,
CycleStop: 28888,
PeriodStart: 20000,
PeriodStop: 21000,
Height: 100,
}
encode, err := json.Marshal(voteItem)
if err != nil {
panic("Marshal vote failed.")
}
voteItem.VoteID = crypto.Ripemd160(encode)
chainID := "test-chain-Ep9EcD"
notify := &Notify{
DPosNotify: &DPosNotify{
Vote: voteItem,
HeightStop: 200,
HashStop: []byte("abcdef121212"),
NotifyTimestamp: now,
NotifyNodeAddress: privValidator.GetAddress(),
NotifyNodeIndex: int32(0),
},
}
err = privValidator.SignNotify(chainID, notify)
require.Nil(t, err)
notify2 := notify.Copy()
err = notify2.Verify(chainID, privValidator.PubKey)
require.Nil(t, err)
remove(filename)
privValidator2 := LoadOrGenPrivValidatorFS(filename)
require.NotNil(t, privValidator2)
err = notify2.Verify(chainID, privValidator2.PubKey)
require.NotNil(t, err)
remove(filename)
}
func TestSignMsg(t *testing.T) {
filename := "./tmp_priv_validator.json"
save(filename, priv_validator_file)
privValidator := LoadOrGenPrivValidatorFS(filename)
byteCB := []byte("asdfadsasf")
sig, err := privValidator.SignMsg(byteCB)
require.Nil(t, err)
assert.True(t, 0 < len(sig.Bytes()))
remove(filename)
}
func TestVrf(t *testing.T) {
filename := "./tmp_priv_validator.json"
save(filename, priv_validator_file)
privValidator := LoadOrGenPrivValidatorFS(filename)
input := []byte("abcdefghijklmn")
hash, proof := privValidator.VrfEvaluate(input)
assert.True(t, 32 == len(hash))
assert.True(t, 0 < len(proof))
result := privValidator.VrfProof(privValidator.PubKey.Bytes(), input, hash, proof)
assert.True(t, result)
remove(filename)
}
func TestSignTx(t *testing.T) {
filename := "./tmp_priv_validator.json"
save(filename, priv_validator_file)
privValidator := LoadOrGenPrivValidatorFS(filename)
tx := &types.Transaction{}
privValidator.SignTx(tx)
assert.True(t, types.SECP256K1 == tx.Signature.Ty)
assert.True(t, bytes.Equal(privValidator.PubKey.Bytes(), tx.Signature.Pubkey))
assert.True(t, 0 < len(tx.Signature.Signature))
remove(filename)
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment