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

     1  package step
     2  
     3  import (
     4  	"github.com/ethereum/go-ethereum/mpcService/step/generator"
     5  	"github.com/ethereum/go-ethereum/mpcService/protocol"
     6  	"github.com/ethereum/go-ethereum/log"
     7  )
     8  
     9  type MpcJRSS_Step struct {
    10  	BaseMpcStep
    11  }
    12  
    13  func CreateMpcJRSS_Step(result protocol.MpcResultInterface,degree int, nodeInfo protocol.MpcNodeInterface) *MpcJRSS_Step {
    14  	mpc := &MpcJRSS_Step{*CreateBaseMpcStep(result,nodeInfo, 1,true)}
    15  	mpc.messages[0] = generator.CreateJRSSValue(degree, nodeInfo.NeedQuorum(),protocol.MpcPrivateShare)
    16  	return mpc
    17  }
    18  
    19  func (jrss *MpcJRSS_Step) CreateMessage() []protocol.StepMessage {
    20  	peerLen := jrss.nodeInfo.NeedQuorum()
    21  	message := make([]protocol.StepMessage, peerLen)
    22  	peerInfo := jrss.nodeInfo.GetPeers()
    23  	for i := 0; i < peerLen; i++ {
    24  		message[i].Msgcode = protocol.MSG_MPCMessage
    25  		message[i].PeerID = peerInfo[i].PeerID
    26  		message[i].Data = append(message[i].Data,&protocol.MpcData{protocol.MPCPolyvalue,jrss.messages[0].GetMessageData(i)})
    27  	}
    28  	return message
    29  }
    30  
    31  func (jrss *MpcJRSS_Step) FinishStep( mpc protocol.MpcManager) error {
    32  	err := jrss.BaseMpcStep.FinishStep()
    33  	if err != nil {
    34  		return err
    35  	}
    36  
    37  	result := jrss.messages[0].GetResultData()
    38  	err = jrss.mpcResult.SetValue(result.Key,result.Data)
    39  	if err != nil {
    40  		return err
    41  	}
    42  	JRSSvalue := jrss.messages[0].(*generator.RandomPolynomialValue)
    43  	err = jrss.mpcResult.SetValue(protocol.MpcPublicShare, JRSSvalue.RandCoefficient[0])
    44  	if err != nil {
    45  		return err
    46  	}
    47  	return nil
    48  }
    49  
    50  func (jrss *MpcJRSS_Step) HandleMessage(msg *protocol.StepMessage) bool {
    51  	seed := jrss.nodeInfo.GetSeed(msg.PeerID)
    52  	if seed == 0 {
    53  		log.Error("MpcJRSS_Step, can't find peer seed. peerID:%s", msg.PeerID)
    54  	}
    55  
    56  	jrss.messages[0].SetMessageData(seed,msg.Data[0].Data)
    57  //	log.Error("MpcJRSS_Step.HandleMessage","peerId",msg.PeerID,"stepWaiting",jrss.waiting)
    58  	return true
    59  }