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 }