github.com/cranelv/ethereum_mpc@v0.0.0-20191031014521-23aeb1415092/mpcService/step/mpc_point_step.go (about) 1 package step 2 3 import ( 4 "github.com/ethereum/go-ethereum/mpcService/protocol" 5 "github.com/ethereum/go-ethereum/mpcService/step/generator" 6 "github.com/ethereum/go-ethereum/log" 7 ) 8 9 type MpcPoint_Step struct { 10 BaseMpcStep 11 resultKeys []string 12 } 13 14 func CreateMpcPoint_Step(result protocol.MpcResultInterface,nodeInfo protocol.MpcNodeInterface, preValueKeys []string, resultKeys []string) *MpcPoint_Step { 15 log.Info("CreateMpcPoint_Step begin") 16 17 signNum := len(preValueKeys) 18 mpc := &MpcPoint_Step{*CreateBaseMpcStep(result,nodeInfo, signNum,true), resultKeys} 19 20 for i := 0; i < signNum; i++ { 21 mpc.messages[i] = generator.CreatePointGenerator(preValueKeys[i],resultKeys[i]) 22 } 23 24 return mpc 25 } 26 27 func (ptStep *MpcPoint_Step) CreateMessage() []protocol.StepMessage { 28 log.Info("MpcPoint_Step.CreateMessage begin") 29 30 message := make([]protocol.StepMessage, 1) 31 message[0].Msgcode = protocol.MSG_MPCMessage 32 message[0].PeerID = nil 33 34 for _,msg := range ptStep.messages { 35 message[0].Data = append(message[0].Data, &protocol.MpcData{protocol.MpcPointPart,msg.GetMessageData(0)}) 36 } 37 38 return message 39 } 40 41 func (ptStep *MpcPoint_Step) HandleMessage(msg *protocol.StepMessage) bool { 42 seed := ptStep.nodeInfo.GetSeed(msg.PeerID) 43 if seed == 0 { 44 log.Error("MpcPoint_Step.HandleMessage, get peer seed fail. peer:%s", msg.PeerID.String()) 45 return false 46 } 47 48 if len(msg.Data) != len(ptStep.messages){ 49 log.Error("MpcPoint_Step HandleMessage, msg data len doesn't match requiremant, dataLen:%d", len(msg.Data)) 50 return false 51 } 52 53 for i,msger := range ptStep.messages { 54 err := msger.SetMessageData(seed,msg.Data[i].Data) 55 if err != nil{ 56 log.Error("MpcPoint_Step.HandleMessage, get msg from seed fail. peer:%s", msg.PeerID.String()) 57 return false 58 } 59 } 60 61 return true 62 } 63 64 func (ptStep *MpcPoint_Step) FinishStep( mpc protocol.MpcManager) error { 65 log.Info("MpcPoint_Step.FinishStep begin") 66 err := ptStep.BaseMpcStep.FinishStep() 67 if err != nil { 68 return err 69 } 70 for _,msg := range ptStep.messages { 71 result := msg.GetResultData() 72 ptStep.mpcResult.SetValue(result.Key,result.Data) 73 } 74 log.Info("MpcPoint_Step.FinishStep succeed") 75 return nil 76 } 77