Exemple #1
0
        public override void Start()
        {
            InputShares = new T[EvalGate.InputCount];

            List <Protocol> receiveSubProtocols = new List <Protocol>();

            inputIdProtocolIdMap = new Dictionary <int, ulong>();

            // start subprotocols to receive the input values
            for (int i = 0; i < EvalGate.InputCount; i++)
            {
                OutputGateAddress counterpartGateAddr;
                if (Circuit.InputConnectionCounterparties.TryGetValue(EvalGate.GetLocalInputAddress(i), out counterpartGateAddr))
                {
                    var counterpartGate   = counterpartGateAddr.Gate;
                    var counterpartQuorum = GateQuorumMapping[counterpartGate];
                    if (!counterpartQuorum.HasMember(Me.Id))
                    {
                        // I expect to receive this value from a quorum resharing
                        Protocol reshareReceive = ProtocolFactory.GetResharingProtocol(Me, counterpartQuorum, EvalQuorum, null, EvalGate.TopologicalRank, i);
                        receiveSubProtocols.Add(reshareReceive);
                        inputIdProtocolIdMap[i] = reshareReceive.ProtocolId;
                    }
                }
                else
                {
                    InputShares[i] = CircuitInputs[EvalGate.GetLocalInputAddress(i)];
                    SharesReceived++;
                }
            }

            if (receiveSubProtocols.Count > 0)
            {
                Stage = 0;
                ExecuteSubProtocols(receiveSubProtocols);
            }
            else if (SharesReceived == EvalGate.InputCount)
            {
                StartGateEvaluation();
            }
        }