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

     1  package step
     2  
     3  import (
     4  	"github.com/ethereum/go-ethereum/mpcService/protocol"
     5  	"github.com/ethereum/go-ethereum/log"
     6  )
     7  
     8  type MpcMessageGenerator interface {
     9  	Initialize([]protocol.PeerInfo, protocol.MpcResultInterface) error
    10  	GetMessageData(int)interface{}
    11  	SetMessageData(uint64,interface{})error
    12  	GetResultData()*protocol.MpcData
    13  	CalculateResult() error
    14  }
    15  
    16  type BaseMpcStep struct {
    17  	BaseStep
    18  	messages []MpcMessageGenerator
    19  }
    20  
    21  func CreateBaseMpcStep(result protocol.MpcResultInterface,nodeInfo protocol.MpcNodeInterface, messageNum int,bFilter bool) *BaseMpcStep {
    22  	return &BaseMpcStep{*CreateBaseStep(result,nodeInfo, nodeInfo.NeedQuorum(),bFilter), make([]MpcMessageGenerator, messageNum)}
    23  }
    24  
    25  func (mpcStep *BaseMpcStep) InitStep() error {
    26  	for _, message := range mpcStep.messages {
    27  		err := message.Initialize(mpcStep.nodeInfo.GetPeers(),mpcStep.mpcResult)
    28  		if err != nil {
    29  			log.Error("BaseMpcStep, init msg fail.","error", err)
    30  			return err
    31  		}
    32  	}
    33  
    34  	return nil
    35  }
    36  
    37  func (mpcStep *BaseMpcStep) FinishStep() error {
    38  	err := mpcStep.BaseStep.FinishStep()
    39  	if err != nil {
    40  		return err
    41  	}
    42  
    43  	for _, message := range mpcStep.messages {
    44  		err := message.CalculateResult()
    45  		if err != nil {
    46  			log.Error("BaseMpcStep, calculate msg result fail. err:%s", err.Error())
    47  			return err
    48  		}
    49  	}
    50  
    51  	return nil
    52  }