github.com/cranelv/ethereum_mpc@v0.0.0-20191031014521-23aeb1415092/mpcService/step/txsign_lagrange_step.go (about)

     1  package step
     2  
     3  import (
     4  	"github.com/ethereum/go-ethereum/log"
     5  	"github.com/ethereum/go-ethereum/mpcService/protocol"
     6  	"github.com/ethereum/go-ethereum/mpcService/step/generator"
     7  )
     8  
     9  type TXSign_Lagrange_Step struct {
    10  	BaseMpcStep
    11  }
    12  
    13  func CreateTXSign_Lagrange_Step(result protocol.MpcResultInterface,nodeinfo protocol.MpcNodeInterface, preValueKeys []string, resultKeys []string) *TXSign_Lagrange_Step {
    14  	log.Info("CreateTXSign_Lagrange_Step begin")
    15  
    16  	signNum := len(preValueKeys)
    17  	mpc := &TXSign_Lagrange_Step{*CreateBaseMpcStep(result,nodeinfo, signNum,true)}
    18  
    19  	for i := 0; i < signNum; i++ {
    20  		mpc.messages[i] = generator.CreateLagrangeGenerator(preValueKeys[i],resultKeys[i])
    21  	}
    22  
    23  	log.Info("CreateTXSign_Lagrange_Step succeed")
    24  	return mpc
    25  }
    26  
    27  func (lagStep *TXSign_Lagrange_Step) CreateMessage() []protocol.StepMessage {
    28  	log.Info("TXSign_Lagrange_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 lagStep.messages{
    35  		message[0].Data = append(message[0].Data, &protocol.MpcData{protocol.MpcLagrange,msg.GetMessageData(0)})
    36  	}
    37  
    38  	log.Info("TXSign_Lagrange_Step.CreateMessage succeed")
    39  	return message
    40  }
    41  
    42  func (lagStep *TXSign_Lagrange_Step) HandleMessage(msg *protocol.StepMessage) bool {
    43  	log.Info("TXSign_Lagrange_Step.HandleMessage begin, peerID:%s", msg.PeerID.String())
    44  
    45  	seed := lagStep.nodeInfo.GetSeed(msg.PeerID)
    46  	if seed == 0 {
    47  		log.Error("TXSign_Lagrange_Step.HandleMessage, get seed fail. peer:%s", msg.PeerID.String())
    48  		return false
    49  	}
    50  //	log.Error("TXSign_Lagrange_Step","Seed",seed,"Data",msg.Data[0].Data.(*big.Int))
    51  
    52  	for i,msger := range lagStep.messages{
    53  		msger.SetMessageData(seed,msg.Data[i].Data)
    54  	}
    55  	log.Info("TXSign_Lagrange_Step.HandleMessage succees")
    56  	return true
    57  }
    58  
    59  func (lagStep *TXSign_Lagrange_Step) FinishStep( mpc protocol.MpcManager) error {
    60  	log.Info("TXSign_Lagrange_Step.FinishStep begin")
    61  
    62  	err := lagStep.BaseMpcStep.FinishStep()
    63  	if err != nil {
    64  		return err
    65  	}
    66  
    67  	for _,msger := range lagStep.messages{
    68  		result := msger.GetResultData()
    69  		lagStep.mpcResult.SetValue(result.Key,result.Data)
    70  	}
    71  
    72  	log.Info("TXSign_Lagrange_Step.FinishStep succeed")
    73  	return nil
    74  }
    75  
    76