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