Upload
others
View
2
Download
0
Embed Size (px)
Citation preview
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
116
COMPSCI 711 amp SOFTENG 710 Assignment 1
Overview
This assignment aims to give you a deeper understanding on several fundamental
distributed algorithms as described in the textbook Distributed Algorithms by Nancy
Lynch The practical implementation will use the NET framework
Part 1 requires you to build a visual simulation of the EIG Byzantine agreement
protocol (Lynch chapter 6) consisting of a number of distributed processes
synchronized via a general-purpose global synchronization library (Lynch chapter
16) The deliverable will consist of three related subprojects
1 Synchronizer a multi-threaded general-purpose global synchronization
library with round control facilities
2 DriverByz a GUI driver that runs a configurable Byz scenario consisting of a
number of ParticipantByz players globally synchronized via the Synchronizer
library
3 ParticipantByz a GUI participant in the EIG Byz protocol adapted to send
and receive all its messages as single packets (compatible with our
synchronizer)
The DriverByz GUI will initiate and control all processes and trace the message flow
in a textbox
The ParticipantByz GUI will visually demonstrate the main activities of the EIG
algorithm in a way similar to the demo used in the lectures
The Driver+Synchronizer and the Participants will use communication lines as
suggested by the following sample diagram
Driver+Synchronizer
httplocalhost8080Sync
Participant 1
httplocalhost8091User
Participant 3
httplocalhost8093User
Participant 2
httplocalhost8092User
Participant 4
httplocalhost8094User
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
216
The Driver‟s GUI provides a Step button that triggers round operations Each click
will send to the participants the round n messages accumulated in Synchronizer trays
This dataflow is suggested by the following diagram below (time axis up-down)
Comments
o Note the ldquonon-standardrdquo position of the Step click According to the literal
textbook definition it is located in the middle of a round just before
forwarding out messages to processes However this seems to simplify the
implementation logic
o To simplify the bootstrap you may conceptually consider that the first Step
click triggers the last part of a virtual round 0 where the Synchronizer
conceptually sends out null messages (practically it need not do this)
o To simplify the implementation consider that a faulty process that wants to
send illegal messages or doesn‟t want to communicate will always send out
null messages in this represented by value 2
Implementation
o For the GUI part use either WPF (preferably) or Windows Forms (ok no
penalty)
o The demo ParticipantByz uses a dynamic visual tree You can do something
similar (preferably) or display the trees as indented text in a textbox (no
penalty)
Round n Round n
P
1
S
Y
N
C
P
2
State transition as
indicated by button
clicks
Step click
State transition as
indicated by button
clicks
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
316
o For messaging your implementation must use WCF with the builtin
BasicHttpBinding and OneWay messages
o The required Synchronizer service and data contract is described in the
appendices The Participants need to extend this general purpose contract with
algorithm specific features
o Configure your processes using the indicated XML config files and
command-line arguments (where command-line arguments have priority)
o Ensure wherever needed that all secondary threads respect the GUI thread
affinity
Part 2 requires you to write a README document with the following contents
1 [about 3 pages] A high-level description of your design and implementation
explaining your choices and documenting your own ideas and extensions Include
an explanation of the technique used to pass messages of unknown types through
the general-purpose synchronizer
2 [about 3 pages] Discuss how the EIG Byzantine agreement algorithm described
in the textbook and implemented by you differs from the ConsistentBroadcast
based PolyByz algorithm
3 References with proper citations and references and at least a few books and
journal articles
Even if very brief use a consistent article style such as LNCS
Submission Details
Submit a ZIP archive named after your UPI eg APOW007ZIP This archive must
contain a folder with the same name eg APOW007 containing your solution its 3
subprojects and your README document as indicated by the structure of the given
skeleton (try to follow its layout and conventions)
Before submitting ensure that your solution can be easily executed on another
computer (including the computer which will be used for marking )
Submission deadlines
Your assignment must be submitted electronically to the dropbox no later than
Monday 21 September 2009 2100 Late submissions will incur penalties
Draft note
Comments and requests for clarifications are welcome until Monday 10 August
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
416
Appendices
APOW007 Folder Layout
o Readme doc
o Solution files
o Synchronizer folder
o Synchronizer project
o hellip
o ParticipantByz folder
o ParticipantByz project
o hellip
o DriverByz folder
o DriverByz project
o hellip
Operational details
o The whole system should start by double clicking on DriverByzexe
o DriverByz reads the following key from its config file that indicates the
location of the corresponding Participant executable eg
ltadd key=participant value=ParticipantByzParticipantByzexegt
o DriverByz starts listening at the fixed base address
httplocalhost8080Sync and starts up its GUI with an editable textbox
used to configure the desired scenario
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
516
o This textbox starts with initial values ldquo2 0 1 1rdquo corresponding to N=4
participants
1 1 starts with 0 and is faulty
2 2 starts with 0 and is non-faulty
3 3 starts with 1 and is non-faulty
4 4 starts with 1 and is non-faulty
o Generally this textbox can contain any number and combination of characters
1 Whitespaces are ignored
2 Character bdquo0‟ indicates a non-faulty process starting with 0
3 Character bdquo1‟ indicates a non-faulty process starting with 1
4 Character bdquo2‟ indicates a faulty process starting with 0
5 Character bdquo3‟ or any other non-space character indicates a faulty
process starting with 1
o Clicking on the Start button will launch N copies of the ParticipantByzexe
executable individualized by way of command-line arguments The Start
button becomes and remains disabled until all participants send out their
messages
o The ParticipantByz command-line arguments indicate in order
1 A fixed value 1 indicating a process which uses the synchronizer
0 will indicate a scenario where processes communicate
directly without using the synchronizer However you are not
required to cover this case
2 N the number of participants eg 4
3 The current process index in 1N eg 1 2 3 or 4
4 The initial value ie 0 or 1
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
616
5 A slash followed by the corresponding value in the textbox (for visual
control this argument is not used by ParticipantByz) eg 2 0 1 or
1
o Participants start their own GUI and start listening at the base address
httplocalhost809xUser where x is the process index (but no activity is
actually started) In our example there will be 4 processes respectively
listening at httplocalhost8091User httplocalhost8092User
httplocalhost8093User httplocalhost8094User and showing the
following initial GUIs
o Only the Prepare button is initially enabled The EIG trees are presented via
a tree control where nodes are colour coded according to the recorded value
red for 0 green for 1 yellow for null The tree is automatically expanded
during the top-down phase and collapsed during the bottom-up evaluation
Initially only the root is shown showing initial values As mentioned you
can also display the tree by indented text in a textbox
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
716
o A first click on Prepare displays the messages that will be normally sent at
round 1 by a non-faulty process in order to all participants (including self)
The Prepare button is disabled and the Send button is enabled
o A Byzantine faulty process offers you the possibility to change the correct
messages to whatever you may want where 2 or anything different from
space 0 and 1 indicates null (extra spaces and messages are ignored and
missing messages are assumed 2 ie null)
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
816
o A click on Participant‟s Send will effectively send all its messages to the
Driver where they are listed and internally reorganized by destination The
Participant‟s Send button is disabled and the Driverrsquos Send button is enabled
after all messages are received from all participants
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
916
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1016
o A click on Driverrsquos Send button forwards all accumulated round 1 messages
to their destinations Driverrsquos Send button is disabled participants process
their messages and their Prepare buttons are re-enabled
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1116
o A second click on Participantrsquos Prepare displays the messages that will be
normally sent at round 2 Button Prepare is disabled and button Send is
enabled A Byzantine faulty participant will again offer you the possibility to
change the messages (this option was not used in this example) A click on
Send sends out the messages and then the button becomes disabled
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1216
o The Driver logs all received messages internally reorganizes them according
to their destination and its button Send is enabled after receiving messages
from all participants
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1316
o A second click on Driverrsquos Send button forwards all accumulated round 2
messages to their destinations Driverrsquos Send button is disabled participants
process their messages and because there are only 2 messaging rounds for 4
participants the participants‟ Eval buttons are now enabled
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1416
o In this case there are three bottom-up evaluation steps 0 1 and 2 that
proceed similarly for all processes Here the final decision is 0
o A click on the DriverByz‟s form close button (X) must immediately terminate
all related processes (and free all their allocated resources eg ports)
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1516
A typical XML configuration file for DriverByz
ltconfigurationgt
ltappSettingsgt
lt--
ltadd key=participanturl
value=httplocalhost0User gt
ltadd key=syncurl
value=httplocalhost8080Sync gt
--gt
ltadd key=participant
value=ParticipantByzParticipantByzexegt
ltadd key=timeout value=30000gt
ltappSettingsgt
ltconfigurationgt
Further details
o The url‟s are considered fixed However you can take them from the config
file
o The timeouts need not be used in this simplified version
A typical XML configuration file for ParticipantByz (command-line arguments
will take precedence)
ltconfigurationgt
ltappSettingsgt
ltadd key=v0 value=0 gt
ltadd key=usesync value=1 gt
ltadd key=byzurl value=httplocalhost0Byz gt
ltadd key=userurl value=httplocalhost0User gt
ltadd key=syncurl value=httplocalhost8080Syncgt
ltadd key=maxindex value=4 gt
ltadd key=index value=1 gt
ltadd key=init value=0 gt
ltadd key=faulty value=1 gt
ltappSettingsgt
ltconfigurationgt
Further details
o v0 is the default value used by the EIG Byzantine algorithm for two distinct
purposes
o to indicate an incorrect or missing message (for us null codified as 2)
o as a tie break during a majority vote in the bottom-up evaluation
o You need only consider communications via the synchronizer when usesync
is always 1 and the byzurl is inoperant
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1616
Service Data Types and Interfaces (as known by the general purpose
synchronizer)
namespace Synchronizer
[DataContract]
public partial class TaggedMessageOut
[DataMember]
public int To
[DataMember]
public string AsString
[DataMember]
public MessageBase Message
[DataContract]
public partial class TaggedMessageIn
[DataMember]
public int From
[DataMember]
public string AsString
[DataMember]
public MessageBase Message
[DataContract]
public partial class MessageBaseIExtensibleDataObject
private ExtensionDataObject Data
public virtual ExtensionDataObject ExtensionData
get return Data
set Data = value
[ServiceContract(
Namespace = httpcompsci711comsync)]
public interface ISynchronizerService
[OperationContract(IsOneWay = true)]
void UserSend(int From ListltTaggedMessageOutgt msg)
From is not strictly needed but may help
[ServiceContract(Namespace =
httpcompsci711compart)]
public interface IParticipantService
[OperationContract(IsOneWay = true)]
void UserReceive(ListltTaggedMessageIngt msg)
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
216
The Driver‟s GUI provides a Step button that triggers round operations Each click
will send to the participants the round n messages accumulated in Synchronizer trays
This dataflow is suggested by the following diagram below (time axis up-down)
Comments
o Note the ldquonon-standardrdquo position of the Step click According to the literal
textbook definition it is located in the middle of a round just before
forwarding out messages to processes However this seems to simplify the
implementation logic
o To simplify the bootstrap you may conceptually consider that the first Step
click triggers the last part of a virtual round 0 where the Synchronizer
conceptually sends out null messages (practically it need not do this)
o To simplify the implementation consider that a faulty process that wants to
send illegal messages or doesn‟t want to communicate will always send out
null messages in this represented by value 2
Implementation
o For the GUI part use either WPF (preferably) or Windows Forms (ok no
penalty)
o The demo ParticipantByz uses a dynamic visual tree You can do something
similar (preferably) or display the trees as indented text in a textbox (no
penalty)
Round n Round n
P
1
S
Y
N
C
P
2
State transition as
indicated by button
clicks
Step click
State transition as
indicated by button
clicks
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
316
o For messaging your implementation must use WCF with the builtin
BasicHttpBinding and OneWay messages
o The required Synchronizer service and data contract is described in the
appendices The Participants need to extend this general purpose contract with
algorithm specific features
o Configure your processes using the indicated XML config files and
command-line arguments (where command-line arguments have priority)
o Ensure wherever needed that all secondary threads respect the GUI thread
affinity
Part 2 requires you to write a README document with the following contents
1 [about 3 pages] A high-level description of your design and implementation
explaining your choices and documenting your own ideas and extensions Include
an explanation of the technique used to pass messages of unknown types through
the general-purpose synchronizer
2 [about 3 pages] Discuss how the EIG Byzantine agreement algorithm described
in the textbook and implemented by you differs from the ConsistentBroadcast
based PolyByz algorithm
3 References with proper citations and references and at least a few books and
journal articles
Even if very brief use a consistent article style such as LNCS
Submission Details
Submit a ZIP archive named after your UPI eg APOW007ZIP This archive must
contain a folder with the same name eg APOW007 containing your solution its 3
subprojects and your README document as indicated by the structure of the given
skeleton (try to follow its layout and conventions)
Before submitting ensure that your solution can be easily executed on another
computer (including the computer which will be used for marking )
Submission deadlines
Your assignment must be submitted electronically to the dropbox no later than
Monday 21 September 2009 2100 Late submissions will incur penalties
Draft note
Comments and requests for clarifications are welcome until Monday 10 August
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
416
Appendices
APOW007 Folder Layout
o Readme doc
o Solution files
o Synchronizer folder
o Synchronizer project
o hellip
o ParticipantByz folder
o ParticipantByz project
o hellip
o DriverByz folder
o DriverByz project
o hellip
Operational details
o The whole system should start by double clicking on DriverByzexe
o DriverByz reads the following key from its config file that indicates the
location of the corresponding Participant executable eg
ltadd key=participant value=ParticipantByzParticipantByzexegt
o DriverByz starts listening at the fixed base address
httplocalhost8080Sync and starts up its GUI with an editable textbox
used to configure the desired scenario
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
516
o This textbox starts with initial values ldquo2 0 1 1rdquo corresponding to N=4
participants
1 1 starts with 0 and is faulty
2 2 starts with 0 and is non-faulty
3 3 starts with 1 and is non-faulty
4 4 starts with 1 and is non-faulty
o Generally this textbox can contain any number and combination of characters
1 Whitespaces are ignored
2 Character bdquo0‟ indicates a non-faulty process starting with 0
3 Character bdquo1‟ indicates a non-faulty process starting with 1
4 Character bdquo2‟ indicates a faulty process starting with 0
5 Character bdquo3‟ or any other non-space character indicates a faulty
process starting with 1
o Clicking on the Start button will launch N copies of the ParticipantByzexe
executable individualized by way of command-line arguments The Start
button becomes and remains disabled until all participants send out their
messages
o The ParticipantByz command-line arguments indicate in order
1 A fixed value 1 indicating a process which uses the synchronizer
0 will indicate a scenario where processes communicate
directly without using the synchronizer However you are not
required to cover this case
2 N the number of participants eg 4
3 The current process index in 1N eg 1 2 3 or 4
4 The initial value ie 0 or 1
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
616
5 A slash followed by the corresponding value in the textbox (for visual
control this argument is not used by ParticipantByz) eg 2 0 1 or
1
o Participants start their own GUI and start listening at the base address
httplocalhost809xUser where x is the process index (but no activity is
actually started) In our example there will be 4 processes respectively
listening at httplocalhost8091User httplocalhost8092User
httplocalhost8093User httplocalhost8094User and showing the
following initial GUIs
o Only the Prepare button is initially enabled The EIG trees are presented via
a tree control where nodes are colour coded according to the recorded value
red for 0 green for 1 yellow for null The tree is automatically expanded
during the top-down phase and collapsed during the bottom-up evaluation
Initially only the root is shown showing initial values As mentioned you
can also display the tree by indented text in a textbox
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
716
o A first click on Prepare displays the messages that will be normally sent at
round 1 by a non-faulty process in order to all participants (including self)
The Prepare button is disabled and the Send button is enabled
o A Byzantine faulty process offers you the possibility to change the correct
messages to whatever you may want where 2 or anything different from
space 0 and 1 indicates null (extra spaces and messages are ignored and
missing messages are assumed 2 ie null)
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
816
o A click on Participant‟s Send will effectively send all its messages to the
Driver where they are listed and internally reorganized by destination The
Participant‟s Send button is disabled and the Driverrsquos Send button is enabled
after all messages are received from all participants
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
916
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1016
o A click on Driverrsquos Send button forwards all accumulated round 1 messages
to their destinations Driverrsquos Send button is disabled participants process
their messages and their Prepare buttons are re-enabled
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1116
o A second click on Participantrsquos Prepare displays the messages that will be
normally sent at round 2 Button Prepare is disabled and button Send is
enabled A Byzantine faulty participant will again offer you the possibility to
change the messages (this option was not used in this example) A click on
Send sends out the messages and then the button becomes disabled
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1216
o The Driver logs all received messages internally reorganizes them according
to their destination and its button Send is enabled after receiving messages
from all participants
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1316
o A second click on Driverrsquos Send button forwards all accumulated round 2
messages to their destinations Driverrsquos Send button is disabled participants
process their messages and because there are only 2 messaging rounds for 4
participants the participants‟ Eval buttons are now enabled
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1416
o In this case there are three bottom-up evaluation steps 0 1 and 2 that
proceed similarly for all processes Here the final decision is 0
o A click on the DriverByz‟s form close button (X) must immediately terminate
all related processes (and free all their allocated resources eg ports)
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1516
A typical XML configuration file for DriverByz
ltconfigurationgt
ltappSettingsgt
lt--
ltadd key=participanturl
value=httplocalhost0User gt
ltadd key=syncurl
value=httplocalhost8080Sync gt
--gt
ltadd key=participant
value=ParticipantByzParticipantByzexegt
ltadd key=timeout value=30000gt
ltappSettingsgt
ltconfigurationgt
Further details
o The url‟s are considered fixed However you can take them from the config
file
o The timeouts need not be used in this simplified version
A typical XML configuration file for ParticipantByz (command-line arguments
will take precedence)
ltconfigurationgt
ltappSettingsgt
ltadd key=v0 value=0 gt
ltadd key=usesync value=1 gt
ltadd key=byzurl value=httplocalhost0Byz gt
ltadd key=userurl value=httplocalhost0User gt
ltadd key=syncurl value=httplocalhost8080Syncgt
ltadd key=maxindex value=4 gt
ltadd key=index value=1 gt
ltadd key=init value=0 gt
ltadd key=faulty value=1 gt
ltappSettingsgt
ltconfigurationgt
Further details
o v0 is the default value used by the EIG Byzantine algorithm for two distinct
purposes
o to indicate an incorrect or missing message (for us null codified as 2)
o as a tie break during a majority vote in the bottom-up evaluation
o You need only consider communications via the synchronizer when usesync
is always 1 and the byzurl is inoperant
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1616
Service Data Types and Interfaces (as known by the general purpose
synchronizer)
namespace Synchronizer
[DataContract]
public partial class TaggedMessageOut
[DataMember]
public int To
[DataMember]
public string AsString
[DataMember]
public MessageBase Message
[DataContract]
public partial class TaggedMessageIn
[DataMember]
public int From
[DataMember]
public string AsString
[DataMember]
public MessageBase Message
[DataContract]
public partial class MessageBaseIExtensibleDataObject
private ExtensionDataObject Data
public virtual ExtensionDataObject ExtensionData
get return Data
set Data = value
[ServiceContract(
Namespace = httpcompsci711comsync)]
public interface ISynchronizerService
[OperationContract(IsOneWay = true)]
void UserSend(int From ListltTaggedMessageOutgt msg)
From is not strictly needed but may help
[ServiceContract(Namespace =
httpcompsci711compart)]
public interface IParticipantService
[OperationContract(IsOneWay = true)]
void UserReceive(ListltTaggedMessageIngt msg)
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
316
o For messaging your implementation must use WCF with the builtin
BasicHttpBinding and OneWay messages
o The required Synchronizer service and data contract is described in the
appendices The Participants need to extend this general purpose contract with
algorithm specific features
o Configure your processes using the indicated XML config files and
command-line arguments (where command-line arguments have priority)
o Ensure wherever needed that all secondary threads respect the GUI thread
affinity
Part 2 requires you to write a README document with the following contents
1 [about 3 pages] A high-level description of your design and implementation
explaining your choices and documenting your own ideas and extensions Include
an explanation of the technique used to pass messages of unknown types through
the general-purpose synchronizer
2 [about 3 pages] Discuss how the EIG Byzantine agreement algorithm described
in the textbook and implemented by you differs from the ConsistentBroadcast
based PolyByz algorithm
3 References with proper citations and references and at least a few books and
journal articles
Even if very brief use a consistent article style such as LNCS
Submission Details
Submit a ZIP archive named after your UPI eg APOW007ZIP This archive must
contain a folder with the same name eg APOW007 containing your solution its 3
subprojects and your README document as indicated by the structure of the given
skeleton (try to follow its layout and conventions)
Before submitting ensure that your solution can be easily executed on another
computer (including the computer which will be used for marking )
Submission deadlines
Your assignment must be submitted electronically to the dropbox no later than
Monday 21 September 2009 2100 Late submissions will incur penalties
Draft note
Comments and requests for clarifications are welcome until Monday 10 August
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
416
Appendices
APOW007 Folder Layout
o Readme doc
o Solution files
o Synchronizer folder
o Synchronizer project
o hellip
o ParticipantByz folder
o ParticipantByz project
o hellip
o DriverByz folder
o DriverByz project
o hellip
Operational details
o The whole system should start by double clicking on DriverByzexe
o DriverByz reads the following key from its config file that indicates the
location of the corresponding Participant executable eg
ltadd key=participant value=ParticipantByzParticipantByzexegt
o DriverByz starts listening at the fixed base address
httplocalhost8080Sync and starts up its GUI with an editable textbox
used to configure the desired scenario
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
516
o This textbox starts with initial values ldquo2 0 1 1rdquo corresponding to N=4
participants
1 1 starts with 0 and is faulty
2 2 starts with 0 and is non-faulty
3 3 starts with 1 and is non-faulty
4 4 starts with 1 and is non-faulty
o Generally this textbox can contain any number and combination of characters
1 Whitespaces are ignored
2 Character bdquo0‟ indicates a non-faulty process starting with 0
3 Character bdquo1‟ indicates a non-faulty process starting with 1
4 Character bdquo2‟ indicates a faulty process starting with 0
5 Character bdquo3‟ or any other non-space character indicates a faulty
process starting with 1
o Clicking on the Start button will launch N copies of the ParticipantByzexe
executable individualized by way of command-line arguments The Start
button becomes and remains disabled until all participants send out their
messages
o The ParticipantByz command-line arguments indicate in order
1 A fixed value 1 indicating a process which uses the synchronizer
0 will indicate a scenario where processes communicate
directly without using the synchronizer However you are not
required to cover this case
2 N the number of participants eg 4
3 The current process index in 1N eg 1 2 3 or 4
4 The initial value ie 0 or 1
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
616
5 A slash followed by the corresponding value in the textbox (for visual
control this argument is not used by ParticipantByz) eg 2 0 1 or
1
o Participants start their own GUI and start listening at the base address
httplocalhost809xUser where x is the process index (but no activity is
actually started) In our example there will be 4 processes respectively
listening at httplocalhost8091User httplocalhost8092User
httplocalhost8093User httplocalhost8094User and showing the
following initial GUIs
o Only the Prepare button is initially enabled The EIG trees are presented via
a tree control where nodes are colour coded according to the recorded value
red for 0 green for 1 yellow for null The tree is automatically expanded
during the top-down phase and collapsed during the bottom-up evaluation
Initially only the root is shown showing initial values As mentioned you
can also display the tree by indented text in a textbox
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
716
o A first click on Prepare displays the messages that will be normally sent at
round 1 by a non-faulty process in order to all participants (including self)
The Prepare button is disabled and the Send button is enabled
o A Byzantine faulty process offers you the possibility to change the correct
messages to whatever you may want where 2 or anything different from
space 0 and 1 indicates null (extra spaces and messages are ignored and
missing messages are assumed 2 ie null)
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
816
o A click on Participant‟s Send will effectively send all its messages to the
Driver where they are listed and internally reorganized by destination The
Participant‟s Send button is disabled and the Driverrsquos Send button is enabled
after all messages are received from all participants
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
916
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1016
o A click on Driverrsquos Send button forwards all accumulated round 1 messages
to their destinations Driverrsquos Send button is disabled participants process
their messages and their Prepare buttons are re-enabled
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1116
o A second click on Participantrsquos Prepare displays the messages that will be
normally sent at round 2 Button Prepare is disabled and button Send is
enabled A Byzantine faulty participant will again offer you the possibility to
change the messages (this option was not used in this example) A click on
Send sends out the messages and then the button becomes disabled
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1216
o The Driver logs all received messages internally reorganizes them according
to their destination and its button Send is enabled after receiving messages
from all participants
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1316
o A second click on Driverrsquos Send button forwards all accumulated round 2
messages to their destinations Driverrsquos Send button is disabled participants
process their messages and because there are only 2 messaging rounds for 4
participants the participants‟ Eval buttons are now enabled
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1416
o In this case there are three bottom-up evaluation steps 0 1 and 2 that
proceed similarly for all processes Here the final decision is 0
o A click on the DriverByz‟s form close button (X) must immediately terminate
all related processes (and free all their allocated resources eg ports)
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1516
A typical XML configuration file for DriverByz
ltconfigurationgt
ltappSettingsgt
lt--
ltadd key=participanturl
value=httplocalhost0User gt
ltadd key=syncurl
value=httplocalhost8080Sync gt
--gt
ltadd key=participant
value=ParticipantByzParticipantByzexegt
ltadd key=timeout value=30000gt
ltappSettingsgt
ltconfigurationgt
Further details
o The url‟s are considered fixed However you can take them from the config
file
o The timeouts need not be used in this simplified version
A typical XML configuration file for ParticipantByz (command-line arguments
will take precedence)
ltconfigurationgt
ltappSettingsgt
ltadd key=v0 value=0 gt
ltadd key=usesync value=1 gt
ltadd key=byzurl value=httplocalhost0Byz gt
ltadd key=userurl value=httplocalhost0User gt
ltadd key=syncurl value=httplocalhost8080Syncgt
ltadd key=maxindex value=4 gt
ltadd key=index value=1 gt
ltadd key=init value=0 gt
ltadd key=faulty value=1 gt
ltappSettingsgt
ltconfigurationgt
Further details
o v0 is the default value used by the EIG Byzantine algorithm for two distinct
purposes
o to indicate an incorrect or missing message (for us null codified as 2)
o as a tie break during a majority vote in the bottom-up evaluation
o You need only consider communications via the synchronizer when usesync
is always 1 and the byzurl is inoperant
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1616
Service Data Types and Interfaces (as known by the general purpose
synchronizer)
namespace Synchronizer
[DataContract]
public partial class TaggedMessageOut
[DataMember]
public int To
[DataMember]
public string AsString
[DataMember]
public MessageBase Message
[DataContract]
public partial class TaggedMessageIn
[DataMember]
public int From
[DataMember]
public string AsString
[DataMember]
public MessageBase Message
[DataContract]
public partial class MessageBaseIExtensibleDataObject
private ExtensionDataObject Data
public virtual ExtensionDataObject ExtensionData
get return Data
set Data = value
[ServiceContract(
Namespace = httpcompsci711comsync)]
public interface ISynchronizerService
[OperationContract(IsOneWay = true)]
void UserSend(int From ListltTaggedMessageOutgt msg)
From is not strictly needed but may help
[ServiceContract(Namespace =
httpcompsci711compart)]
public interface IParticipantService
[OperationContract(IsOneWay = true)]
void UserReceive(ListltTaggedMessageIngt msg)
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
416
Appendices
APOW007 Folder Layout
o Readme doc
o Solution files
o Synchronizer folder
o Synchronizer project
o hellip
o ParticipantByz folder
o ParticipantByz project
o hellip
o DriverByz folder
o DriverByz project
o hellip
Operational details
o The whole system should start by double clicking on DriverByzexe
o DriverByz reads the following key from its config file that indicates the
location of the corresponding Participant executable eg
ltadd key=participant value=ParticipantByzParticipantByzexegt
o DriverByz starts listening at the fixed base address
httplocalhost8080Sync and starts up its GUI with an editable textbox
used to configure the desired scenario
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
516
o This textbox starts with initial values ldquo2 0 1 1rdquo corresponding to N=4
participants
1 1 starts with 0 and is faulty
2 2 starts with 0 and is non-faulty
3 3 starts with 1 and is non-faulty
4 4 starts with 1 and is non-faulty
o Generally this textbox can contain any number and combination of characters
1 Whitespaces are ignored
2 Character bdquo0‟ indicates a non-faulty process starting with 0
3 Character bdquo1‟ indicates a non-faulty process starting with 1
4 Character bdquo2‟ indicates a faulty process starting with 0
5 Character bdquo3‟ or any other non-space character indicates a faulty
process starting with 1
o Clicking on the Start button will launch N copies of the ParticipantByzexe
executable individualized by way of command-line arguments The Start
button becomes and remains disabled until all participants send out their
messages
o The ParticipantByz command-line arguments indicate in order
1 A fixed value 1 indicating a process which uses the synchronizer
0 will indicate a scenario where processes communicate
directly without using the synchronizer However you are not
required to cover this case
2 N the number of participants eg 4
3 The current process index in 1N eg 1 2 3 or 4
4 The initial value ie 0 or 1
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
616
5 A slash followed by the corresponding value in the textbox (for visual
control this argument is not used by ParticipantByz) eg 2 0 1 or
1
o Participants start their own GUI and start listening at the base address
httplocalhost809xUser where x is the process index (but no activity is
actually started) In our example there will be 4 processes respectively
listening at httplocalhost8091User httplocalhost8092User
httplocalhost8093User httplocalhost8094User and showing the
following initial GUIs
o Only the Prepare button is initially enabled The EIG trees are presented via
a tree control where nodes are colour coded according to the recorded value
red for 0 green for 1 yellow for null The tree is automatically expanded
during the top-down phase and collapsed during the bottom-up evaluation
Initially only the root is shown showing initial values As mentioned you
can also display the tree by indented text in a textbox
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
716
o A first click on Prepare displays the messages that will be normally sent at
round 1 by a non-faulty process in order to all participants (including self)
The Prepare button is disabled and the Send button is enabled
o A Byzantine faulty process offers you the possibility to change the correct
messages to whatever you may want where 2 or anything different from
space 0 and 1 indicates null (extra spaces and messages are ignored and
missing messages are assumed 2 ie null)
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
816
o A click on Participant‟s Send will effectively send all its messages to the
Driver where they are listed and internally reorganized by destination The
Participant‟s Send button is disabled and the Driverrsquos Send button is enabled
after all messages are received from all participants
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
916
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1016
o A click on Driverrsquos Send button forwards all accumulated round 1 messages
to their destinations Driverrsquos Send button is disabled participants process
their messages and their Prepare buttons are re-enabled
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1116
o A second click on Participantrsquos Prepare displays the messages that will be
normally sent at round 2 Button Prepare is disabled and button Send is
enabled A Byzantine faulty participant will again offer you the possibility to
change the messages (this option was not used in this example) A click on
Send sends out the messages and then the button becomes disabled
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1216
o The Driver logs all received messages internally reorganizes them according
to their destination and its button Send is enabled after receiving messages
from all participants
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1316
o A second click on Driverrsquos Send button forwards all accumulated round 2
messages to their destinations Driverrsquos Send button is disabled participants
process their messages and because there are only 2 messaging rounds for 4
participants the participants‟ Eval buttons are now enabled
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1416
o In this case there are three bottom-up evaluation steps 0 1 and 2 that
proceed similarly for all processes Here the final decision is 0
o A click on the DriverByz‟s form close button (X) must immediately terminate
all related processes (and free all their allocated resources eg ports)
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1516
A typical XML configuration file for DriverByz
ltconfigurationgt
ltappSettingsgt
lt--
ltadd key=participanturl
value=httplocalhost0User gt
ltadd key=syncurl
value=httplocalhost8080Sync gt
--gt
ltadd key=participant
value=ParticipantByzParticipantByzexegt
ltadd key=timeout value=30000gt
ltappSettingsgt
ltconfigurationgt
Further details
o The url‟s are considered fixed However you can take them from the config
file
o The timeouts need not be used in this simplified version
A typical XML configuration file for ParticipantByz (command-line arguments
will take precedence)
ltconfigurationgt
ltappSettingsgt
ltadd key=v0 value=0 gt
ltadd key=usesync value=1 gt
ltadd key=byzurl value=httplocalhost0Byz gt
ltadd key=userurl value=httplocalhost0User gt
ltadd key=syncurl value=httplocalhost8080Syncgt
ltadd key=maxindex value=4 gt
ltadd key=index value=1 gt
ltadd key=init value=0 gt
ltadd key=faulty value=1 gt
ltappSettingsgt
ltconfigurationgt
Further details
o v0 is the default value used by the EIG Byzantine algorithm for two distinct
purposes
o to indicate an incorrect or missing message (for us null codified as 2)
o as a tie break during a majority vote in the bottom-up evaluation
o You need only consider communications via the synchronizer when usesync
is always 1 and the byzurl is inoperant
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1616
Service Data Types and Interfaces (as known by the general purpose
synchronizer)
namespace Synchronizer
[DataContract]
public partial class TaggedMessageOut
[DataMember]
public int To
[DataMember]
public string AsString
[DataMember]
public MessageBase Message
[DataContract]
public partial class TaggedMessageIn
[DataMember]
public int From
[DataMember]
public string AsString
[DataMember]
public MessageBase Message
[DataContract]
public partial class MessageBaseIExtensibleDataObject
private ExtensionDataObject Data
public virtual ExtensionDataObject ExtensionData
get return Data
set Data = value
[ServiceContract(
Namespace = httpcompsci711comsync)]
public interface ISynchronizerService
[OperationContract(IsOneWay = true)]
void UserSend(int From ListltTaggedMessageOutgt msg)
From is not strictly needed but may help
[ServiceContract(Namespace =
httpcompsci711compart)]
public interface IParticipantService
[OperationContract(IsOneWay = true)]
void UserReceive(ListltTaggedMessageIngt msg)
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
516
o This textbox starts with initial values ldquo2 0 1 1rdquo corresponding to N=4
participants
1 1 starts with 0 and is faulty
2 2 starts with 0 and is non-faulty
3 3 starts with 1 and is non-faulty
4 4 starts with 1 and is non-faulty
o Generally this textbox can contain any number and combination of characters
1 Whitespaces are ignored
2 Character bdquo0‟ indicates a non-faulty process starting with 0
3 Character bdquo1‟ indicates a non-faulty process starting with 1
4 Character bdquo2‟ indicates a faulty process starting with 0
5 Character bdquo3‟ or any other non-space character indicates a faulty
process starting with 1
o Clicking on the Start button will launch N copies of the ParticipantByzexe
executable individualized by way of command-line arguments The Start
button becomes and remains disabled until all participants send out their
messages
o The ParticipantByz command-line arguments indicate in order
1 A fixed value 1 indicating a process which uses the synchronizer
0 will indicate a scenario where processes communicate
directly without using the synchronizer However you are not
required to cover this case
2 N the number of participants eg 4
3 The current process index in 1N eg 1 2 3 or 4
4 The initial value ie 0 or 1
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
616
5 A slash followed by the corresponding value in the textbox (for visual
control this argument is not used by ParticipantByz) eg 2 0 1 or
1
o Participants start their own GUI and start listening at the base address
httplocalhost809xUser where x is the process index (but no activity is
actually started) In our example there will be 4 processes respectively
listening at httplocalhost8091User httplocalhost8092User
httplocalhost8093User httplocalhost8094User and showing the
following initial GUIs
o Only the Prepare button is initially enabled The EIG trees are presented via
a tree control where nodes are colour coded according to the recorded value
red for 0 green for 1 yellow for null The tree is automatically expanded
during the top-down phase and collapsed during the bottom-up evaluation
Initially only the root is shown showing initial values As mentioned you
can also display the tree by indented text in a textbox
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
716
o A first click on Prepare displays the messages that will be normally sent at
round 1 by a non-faulty process in order to all participants (including self)
The Prepare button is disabled and the Send button is enabled
o A Byzantine faulty process offers you the possibility to change the correct
messages to whatever you may want where 2 or anything different from
space 0 and 1 indicates null (extra spaces and messages are ignored and
missing messages are assumed 2 ie null)
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
816
o A click on Participant‟s Send will effectively send all its messages to the
Driver where they are listed and internally reorganized by destination The
Participant‟s Send button is disabled and the Driverrsquos Send button is enabled
after all messages are received from all participants
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
916
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1016
o A click on Driverrsquos Send button forwards all accumulated round 1 messages
to their destinations Driverrsquos Send button is disabled participants process
their messages and their Prepare buttons are re-enabled
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1116
o A second click on Participantrsquos Prepare displays the messages that will be
normally sent at round 2 Button Prepare is disabled and button Send is
enabled A Byzantine faulty participant will again offer you the possibility to
change the messages (this option was not used in this example) A click on
Send sends out the messages and then the button becomes disabled
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1216
o The Driver logs all received messages internally reorganizes them according
to their destination and its button Send is enabled after receiving messages
from all participants
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1316
o A second click on Driverrsquos Send button forwards all accumulated round 2
messages to their destinations Driverrsquos Send button is disabled participants
process their messages and because there are only 2 messaging rounds for 4
participants the participants‟ Eval buttons are now enabled
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1416
o In this case there are three bottom-up evaluation steps 0 1 and 2 that
proceed similarly for all processes Here the final decision is 0
o A click on the DriverByz‟s form close button (X) must immediately terminate
all related processes (and free all their allocated resources eg ports)
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1516
A typical XML configuration file for DriverByz
ltconfigurationgt
ltappSettingsgt
lt--
ltadd key=participanturl
value=httplocalhost0User gt
ltadd key=syncurl
value=httplocalhost8080Sync gt
--gt
ltadd key=participant
value=ParticipantByzParticipantByzexegt
ltadd key=timeout value=30000gt
ltappSettingsgt
ltconfigurationgt
Further details
o The url‟s are considered fixed However you can take them from the config
file
o The timeouts need not be used in this simplified version
A typical XML configuration file for ParticipantByz (command-line arguments
will take precedence)
ltconfigurationgt
ltappSettingsgt
ltadd key=v0 value=0 gt
ltadd key=usesync value=1 gt
ltadd key=byzurl value=httplocalhost0Byz gt
ltadd key=userurl value=httplocalhost0User gt
ltadd key=syncurl value=httplocalhost8080Syncgt
ltadd key=maxindex value=4 gt
ltadd key=index value=1 gt
ltadd key=init value=0 gt
ltadd key=faulty value=1 gt
ltappSettingsgt
ltconfigurationgt
Further details
o v0 is the default value used by the EIG Byzantine algorithm for two distinct
purposes
o to indicate an incorrect or missing message (for us null codified as 2)
o as a tie break during a majority vote in the bottom-up evaluation
o You need only consider communications via the synchronizer when usesync
is always 1 and the byzurl is inoperant
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1616
Service Data Types and Interfaces (as known by the general purpose
synchronizer)
namespace Synchronizer
[DataContract]
public partial class TaggedMessageOut
[DataMember]
public int To
[DataMember]
public string AsString
[DataMember]
public MessageBase Message
[DataContract]
public partial class TaggedMessageIn
[DataMember]
public int From
[DataMember]
public string AsString
[DataMember]
public MessageBase Message
[DataContract]
public partial class MessageBaseIExtensibleDataObject
private ExtensionDataObject Data
public virtual ExtensionDataObject ExtensionData
get return Data
set Data = value
[ServiceContract(
Namespace = httpcompsci711comsync)]
public interface ISynchronizerService
[OperationContract(IsOneWay = true)]
void UserSend(int From ListltTaggedMessageOutgt msg)
From is not strictly needed but may help
[ServiceContract(Namespace =
httpcompsci711compart)]
public interface IParticipantService
[OperationContract(IsOneWay = true)]
void UserReceive(ListltTaggedMessageIngt msg)
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
616
5 A slash followed by the corresponding value in the textbox (for visual
control this argument is not used by ParticipantByz) eg 2 0 1 or
1
o Participants start their own GUI and start listening at the base address
httplocalhost809xUser where x is the process index (but no activity is
actually started) In our example there will be 4 processes respectively
listening at httplocalhost8091User httplocalhost8092User
httplocalhost8093User httplocalhost8094User and showing the
following initial GUIs
o Only the Prepare button is initially enabled The EIG trees are presented via
a tree control where nodes are colour coded according to the recorded value
red for 0 green for 1 yellow for null The tree is automatically expanded
during the top-down phase and collapsed during the bottom-up evaluation
Initially only the root is shown showing initial values As mentioned you
can also display the tree by indented text in a textbox
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
716
o A first click on Prepare displays the messages that will be normally sent at
round 1 by a non-faulty process in order to all participants (including self)
The Prepare button is disabled and the Send button is enabled
o A Byzantine faulty process offers you the possibility to change the correct
messages to whatever you may want where 2 or anything different from
space 0 and 1 indicates null (extra spaces and messages are ignored and
missing messages are assumed 2 ie null)
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
816
o A click on Participant‟s Send will effectively send all its messages to the
Driver where they are listed and internally reorganized by destination The
Participant‟s Send button is disabled and the Driverrsquos Send button is enabled
after all messages are received from all participants
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
916
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1016
o A click on Driverrsquos Send button forwards all accumulated round 1 messages
to their destinations Driverrsquos Send button is disabled participants process
their messages and their Prepare buttons are re-enabled
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1116
o A second click on Participantrsquos Prepare displays the messages that will be
normally sent at round 2 Button Prepare is disabled and button Send is
enabled A Byzantine faulty participant will again offer you the possibility to
change the messages (this option was not used in this example) A click on
Send sends out the messages and then the button becomes disabled
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1216
o The Driver logs all received messages internally reorganizes them according
to their destination and its button Send is enabled after receiving messages
from all participants
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1316
o A second click on Driverrsquos Send button forwards all accumulated round 2
messages to their destinations Driverrsquos Send button is disabled participants
process their messages and because there are only 2 messaging rounds for 4
participants the participants‟ Eval buttons are now enabled
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1416
o In this case there are three bottom-up evaluation steps 0 1 and 2 that
proceed similarly for all processes Here the final decision is 0
o A click on the DriverByz‟s form close button (X) must immediately terminate
all related processes (and free all their allocated resources eg ports)
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1516
A typical XML configuration file for DriverByz
ltconfigurationgt
ltappSettingsgt
lt--
ltadd key=participanturl
value=httplocalhost0User gt
ltadd key=syncurl
value=httplocalhost8080Sync gt
--gt
ltadd key=participant
value=ParticipantByzParticipantByzexegt
ltadd key=timeout value=30000gt
ltappSettingsgt
ltconfigurationgt
Further details
o The url‟s are considered fixed However you can take them from the config
file
o The timeouts need not be used in this simplified version
A typical XML configuration file for ParticipantByz (command-line arguments
will take precedence)
ltconfigurationgt
ltappSettingsgt
ltadd key=v0 value=0 gt
ltadd key=usesync value=1 gt
ltadd key=byzurl value=httplocalhost0Byz gt
ltadd key=userurl value=httplocalhost0User gt
ltadd key=syncurl value=httplocalhost8080Syncgt
ltadd key=maxindex value=4 gt
ltadd key=index value=1 gt
ltadd key=init value=0 gt
ltadd key=faulty value=1 gt
ltappSettingsgt
ltconfigurationgt
Further details
o v0 is the default value used by the EIG Byzantine algorithm for two distinct
purposes
o to indicate an incorrect or missing message (for us null codified as 2)
o as a tie break during a majority vote in the bottom-up evaluation
o You need only consider communications via the synchronizer when usesync
is always 1 and the byzurl is inoperant
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1616
Service Data Types and Interfaces (as known by the general purpose
synchronizer)
namespace Synchronizer
[DataContract]
public partial class TaggedMessageOut
[DataMember]
public int To
[DataMember]
public string AsString
[DataMember]
public MessageBase Message
[DataContract]
public partial class TaggedMessageIn
[DataMember]
public int From
[DataMember]
public string AsString
[DataMember]
public MessageBase Message
[DataContract]
public partial class MessageBaseIExtensibleDataObject
private ExtensionDataObject Data
public virtual ExtensionDataObject ExtensionData
get return Data
set Data = value
[ServiceContract(
Namespace = httpcompsci711comsync)]
public interface ISynchronizerService
[OperationContract(IsOneWay = true)]
void UserSend(int From ListltTaggedMessageOutgt msg)
From is not strictly needed but may help
[ServiceContract(Namespace =
httpcompsci711compart)]
public interface IParticipantService
[OperationContract(IsOneWay = true)]
void UserReceive(ListltTaggedMessageIngt msg)
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
716
o A first click on Prepare displays the messages that will be normally sent at
round 1 by a non-faulty process in order to all participants (including self)
The Prepare button is disabled and the Send button is enabled
o A Byzantine faulty process offers you the possibility to change the correct
messages to whatever you may want where 2 or anything different from
space 0 and 1 indicates null (extra spaces and messages are ignored and
missing messages are assumed 2 ie null)
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
816
o A click on Participant‟s Send will effectively send all its messages to the
Driver where they are listed and internally reorganized by destination The
Participant‟s Send button is disabled and the Driverrsquos Send button is enabled
after all messages are received from all participants
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
916
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1016
o A click on Driverrsquos Send button forwards all accumulated round 1 messages
to their destinations Driverrsquos Send button is disabled participants process
their messages and their Prepare buttons are re-enabled
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1116
o A second click on Participantrsquos Prepare displays the messages that will be
normally sent at round 2 Button Prepare is disabled and button Send is
enabled A Byzantine faulty participant will again offer you the possibility to
change the messages (this option was not used in this example) A click on
Send sends out the messages and then the button becomes disabled
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1216
o The Driver logs all received messages internally reorganizes them according
to their destination and its button Send is enabled after receiving messages
from all participants
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1316
o A second click on Driverrsquos Send button forwards all accumulated round 2
messages to their destinations Driverrsquos Send button is disabled participants
process their messages and because there are only 2 messaging rounds for 4
participants the participants‟ Eval buttons are now enabled
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1416
o In this case there are three bottom-up evaluation steps 0 1 and 2 that
proceed similarly for all processes Here the final decision is 0
o A click on the DriverByz‟s form close button (X) must immediately terminate
all related processes (and free all their allocated resources eg ports)
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1516
A typical XML configuration file for DriverByz
ltconfigurationgt
ltappSettingsgt
lt--
ltadd key=participanturl
value=httplocalhost0User gt
ltadd key=syncurl
value=httplocalhost8080Sync gt
--gt
ltadd key=participant
value=ParticipantByzParticipantByzexegt
ltadd key=timeout value=30000gt
ltappSettingsgt
ltconfigurationgt
Further details
o The url‟s are considered fixed However you can take them from the config
file
o The timeouts need not be used in this simplified version
A typical XML configuration file for ParticipantByz (command-line arguments
will take precedence)
ltconfigurationgt
ltappSettingsgt
ltadd key=v0 value=0 gt
ltadd key=usesync value=1 gt
ltadd key=byzurl value=httplocalhost0Byz gt
ltadd key=userurl value=httplocalhost0User gt
ltadd key=syncurl value=httplocalhost8080Syncgt
ltadd key=maxindex value=4 gt
ltadd key=index value=1 gt
ltadd key=init value=0 gt
ltadd key=faulty value=1 gt
ltappSettingsgt
ltconfigurationgt
Further details
o v0 is the default value used by the EIG Byzantine algorithm for two distinct
purposes
o to indicate an incorrect or missing message (for us null codified as 2)
o as a tie break during a majority vote in the bottom-up evaluation
o You need only consider communications via the synchronizer when usesync
is always 1 and the byzurl is inoperant
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1616
Service Data Types and Interfaces (as known by the general purpose
synchronizer)
namespace Synchronizer
[DataContract]
public partial class TaggedMessageOut
[DataMember]
public int To
[DataMember]
public string AsString
[DataMember]
public MessageBase Message
[DataContract]
public partial class TaggedMessageIn
[DataMember]
public int From
[DataMember]
public string AsString
[DataMember]
public MessageBase Message
[DataContract]
public partial class MessageBaseIExtensibleDataObject
private ExtensionDataObject Data
public virtual ExtensionDataObject ExtensionData
get return Data
set Data = value
[ServiceContract(
Namespace = httpcompsci711comsync)]
public interface ISynchronizerService
[OperationContract(IsOneWay = true)]
void UserSend(int From ListltTaggedMessageOutgt msg)
From is not strictly needed but may help
[ServiceContract(Namespace =
httpcompsci711compart)]
public interface IParticipantService
[OperationContract(IsOneWay = true)]
void UserReceive(ListltTaggedMessageIngt msg)
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
816
o A click on Participant‟s Send will effectively send all its messages to the
Driver where they are listed and internally reorganized by destination The
Participant‟s Send button is disabled and the Driverrsquos Send button is enabled
after all messages are received from all participants
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
916
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1016
o A click on Driverrsquos Send button forwards all accumulated round 1 messages
to their destinations Driverrsquos Send button is disabled participants process
their messages and their Prepare buttons are re-enabled
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1116
o A second click on Participantrsquos Prepare displays the messages that will be
normally sent at round 2 Button Prepare is disabled and button Send is
enabled A Byzantine faulty participant will again offer you the possibility to
change the messages (this option was not used in this example) A click on
Send sends out the messages and then the button becomes disabled
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1216
o The Driver logs all received messages internally reorganizes them according
to their destination and its button Send is enabled after receiving messages
from all participants
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1316
o A second click on Driverrsquos Send button forwards all accumulated round 2
messages to their destinations Driverrsquos Send button is disabled participants
process their messages and because there are only 2 messaging rounds for 4
participants the participants‟ Eval buttons are now enabled
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1416
o In this case there are three bottom-up evaluation steps 0 1 and 2 that
proceed similarly for all processes Here the final decision is 0
o A click on the DriverByz‟s form close button (X) must immediately terminate
all related processes (and free all their allocated resources eg ports)
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1516
A typical XML configuration file for DriverByz
ltconfigurationgt
ltappSettingsgt
lt--
ltadd key=participanturl
value=httplocalhost0User gt
ltadd key=syncurl
value=httplocalhost8080Sync gt
--gt
ltadd key=participant
value=ParticipantByzParticipantByzexegt
ltadd key=timeout value=30000gt
ltappSettingsgt
ltconfigurationgt
Further details
o The url‟s are considered fixed However you can take them from the config
file
o The timeouts need not be used in this simplified version
A typical XML configuration file for ParticipantByz (command-line arguments
will take precedence)
ltconfigurationgt
ltappSettingsgt
ltadd key=v0 value=0 gt
ltadd key=usesync value=1 gt
ltadd key=byzurl value=httplocalhost0Byz gt
ltadd key=userurl value=httplocalhost0User gt
ltadd key=syncurl value=httplocalhost8080Syncgt
ltadd key=maxindex value=4 gt
ltadd key=index value=1 gt
ltadd key=init value=0 gt
ltadd key=faulty value=1 gt
ltappSettingsgt
ltconfigurationgt
Further details
o v0 is the default value used by the EIG Byzantine algorithm for two distinct
purposes
o to indicate an incorrect or missing message (for us null codified as 2)
o as a tie break during a majority vote in the bottom-up evaluation
o You need only consider communications via the synchronizer when usesync
is always 1 and the byzurl is inoperant
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1616
Service Data Types and Interfaces (as known by the general purpose
synchronizer)
namespace Synchronizer
[DataContract]
public partial class TaggedMessageOut
[DataMember]
public int To
[DataMember]
public string AsString
[DataMember]
public MessageBase Message
[DataContract]
public partial class TaggedMessageIn
[DataMember]
public int From
[DataMember]
public string AsString
[DataMember]
public MessageBase Message
[DataContract]
public partial class MessageBaseIExtensibleDataObject
private ExtensionDataObject Data
public virtual ExtensionDataObject ExtensionData
get return Data
set Data = value
[ServiceContract(
Namespace = httpcompsci711comsync)]
public interface ISynchronizerService
[OperationContract(IsOneWay = true)]
void UserSend(int From ListltTaggedMessageOutgt msg)
From is not strictly needed but may help
[ServiceContract(Namespace =
httpcompsci711compart)]
public interface IParticipantService
[OperationContract(IsOneWay = true)]
void UserReceive(ListltTaggedMessageIngt msg)
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
916
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1016
o A click on Driverrsquos Send button forwards all accumulated round 1 messages
to their destinations Driverrsquos Send button is disabled participants process
their messages and their Prepare buttons are re-enabled
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1116
o A second click on Participantrsquos Prepare displays the messages that will be
normally sent at round 2 Button Prepare is disabled and button Send is
enabled A Byzantine faulty participant will again offer you the possibility to
change the messages (this option was not used in this example) A click on
Send sends out the messages and then the button becomes disabled
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1216
o The Driver logs all received messages internally reorganizes them according
to their destination and its button Send is enabled after receiving messages
from all participants
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1316
o A second click on Driverrsquos Send button forwards all accumulated round 2
messages to their destinations Driverrsquos Send button is disabled participants
process their messages and because there are only 2 messaging rounds for 4
participants the participants‟ Eval buttons are now enabled
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1416
o In this case there are three bottom-up evaluation steps 0 1 and 2 that
proceed similarly for all processes Here the final decision is 0
o A click on the DriverByz‟s form close button (X) must immediately terminate
all related processes (and free all their allocated resources eg ports)
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1516
A typical XML configuration file for DriverByz
ltconfigurationgt
ltappSettingsgt
lt--
ltadd key=participanturl
value=httplocalhost0User gt
ltadd key=syncurl
value=httplocalhost8080Sync gt
--gt
ltadd key=participant
value=ParticipantByzParticipantByzexegt
ltadd key=timeout value=30000gt
ltappSettingsgt
ltconfigurationgt
Further details
o The url‟s are considered fixed However you can take them from the config
file
o The timeouts need not be used in this simplified version
A typical XML configuration file for ParticipantByz (command-line arguments
will take precedence)
ltconfigurationgt
ltappSettingsgt
ltadd key=v0 value=0 gt
ltadd key=usesync value=1 gt
ltadd key=byzurl value=httplocalhost0Byz gt
ltadd key=userurl value=httplocalhost0User gt
ltadd key=syncurl value=httplocalhost8080Syncgt
ltadd key=maxindex value=4 gt
ltadd key=index value=1 gt
ltadd key=init value=0 gt
ltadd key=faulty value=1 gt
ltappSettingsgt
ltconfigurationgt
Further details
o v0 is the default value used by the EIG Byzantine algorithm for two distinct
purposes
o to indicate an incorrect or missing message (for us null codified as 2)
o as a tie break during a majority vote in the bottom-up evaluation
o You need only consider communications via the synchronizer when usesync
is always 1 and the byzurl is inoperant
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1616
Service Data Types and Interfaces (as known by the general purpose
synchronizer)
namespace Synchronizer
[DataContract]
public partial class TaggedMessageOut
[DataMember]
public int To
[DataMember]
public string AsString
[DataMember]
public MessageBase Message
[DataContract]
public partial class TaggedMessageIn
[DataMember]
public int From
[DataMember]
public string AsString
[DataMember]
public MessageBase Message
[DataContract]
public partial class MessageBaseIExtensibleDataObject
private ExtensionDataObject Data
public virtual ExtensionDataObject ExtensionData
get return Data
set Data = value
[ServiceContract(
Namespace = httpcompsci711comsync)]
public interface ISynchronizerService
[OperationContract(IsOneWay = true)]
void UserSend(int From ListltTaggedMessageOutgt msg)
From is not strictly needed but may help
[ServiceContract(Namespace =
httpcompsci711compart)]
public interface IParticipantService
[OperationContract(IsOneWay = true)]
void UserReceive(ListltTaggedMessageIngt msg)
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1016
o A click on Driverrsquos Send button forwards all accumulated round 1 messages
to their destinations Driverrsquos Send button is disabled participants process
their messages and their Prepare buttons are re-enabled
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1116
o A second click on Participantrsquos Prepare displays the messages that will be
normally sent at round 2 Button Prepare is disabled and button Send is
enabled A Byzantine faulty participant will again offer you the possibility to
change the messages (this option was not used in this example) A click on
Send sends out the messages and then the button becomes disabled
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1216
o The Driver logs all received messages internally reorganizes them according
to their destination and its button Send is enabled after receiving messages
from all participants
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1316
o A second click on Driverrsquos Send button forwards all accumulated round 2
messages to their destinations Driverrsquos Send button is disabled participants
process their messages and because there are only 2 messaging rounds for 4
participants the participants‟ Eval buttons are now enabled
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1416
o In this case there are three bottom-up evaluation steps 0 1 and 2 that
proceed similarly for all processes Here the final decision is 0
o A click on the DriverByz‟s form close button (X) must immediately terminate
all related processes (and free all their allocated resources eg ports)
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1516
A typical XML configuration file for DriverByz
ltconfigurationgt
ltappSettingsgt
lt--
ltadd key=participanturl
value=httplocalhost0User gt
ltadd key=syncurl
value=httplocalhost8080Sync gt
--gt
ltadd key=participant
value=ParticipantByzParticipantByzexegt
ltadd key=timeout value=30000gt
ltappSettingsgt
ltconfigurationgt
Further details
o The url‟s are considered fixed However you can take them from the config
file
o The timeouts need not be used in this simplified version
A typical XML configuration file for ParticipantByz (command-line arguments
will take precedence)
ltconfigurationgt
ltappSettingsgt
ltadd key=v0 value=0 gt
ltadd key=usesync value=1 gt
ltadd key=byzurl value=httplocalhost0Byz gt
ltadd key=userurl value=httplocalhost0User gt
ltadd key=syncurl value=httplocalhost8080Syncgt
ltadd key=maxindex value=4 gt
ltadd key=index value=1 gt
ltadd key=init value=0 gt
ltadd key=faulty value=1 gt
ltappSettingsgt
ltconfigurationgt
Further details
o v0 is the default value used by the EIG Byzantine algorithm for two distinct
purposes
o to indicate an incorrect or missing message (for us null codified as 2)
o as a tie break during a majority vote in the bottom-up evaluation
o You need only consider communications via the synchronizer when usesync
is always 1 and the byzurl is inoperant
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1616
Service Data Types and Interfaces (as known by the general purpose
synchronizer)
namespace Synchronizer
[DataContract]
public partial class TaggedMessageOut
[DataMember]
public int To
[DataMember]
public string AsString
[DataMember]
public MessageBase Message
[DataContract]
public partial class TaggedMessageIn
[DataMember]
public int From
[DataMember]
public string AsString
[DataMember]
public MessageBase Message
[DataContract]
public partial class MessageBaseIExtensibleDataObject
private ExtensionDataObject Data
public virtual ExtensionDataObject ExtensionData
get return Data
set Data = value
[ServiceContract(
Namespace = httpcompsci711comsync)]
public interface ISynchronizerService
[OperationContract(IsOneWay = true)]
void UserSend(int From ListltTaggedMessageOutgt msg)
From is not strictly needed but may help
[ServiceContract(Namespace =
httpcompsci711compart)]
public interface IParticipantService
[OperationContract(IsOneWay = true)]
void UserReceive(ListltTaggedMessageIngt msg)
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1116
o A second click on Participantrsquos Prepare displays the messages that will be
normally sent at round 2 Button Prepare is disabled and button Send is
enabled A Byzantine faulty participant will again offer you the possibility to
change the messages (this option was not used in this example) A click on
Send sends out the messages and then the button becomes disabled
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1216
o The Driver logs all received messages internally reorganizes them according
to their destination and its button Send is enabled after receiving messages
from all participants
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1316
o A second click on Driverrsquos Send button forwards all accumulated round 2
messages to their destinations Driverrsquos Send button is disabled participants
process their messages and because there are only 2 messaging rounds for 4
participants the participants‟ Eval buttons are now enabled
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1416
o In this case there are three bottom-up evaluation steps 0 1 and 2 that
proceed similarly for all processes Here the final decision is 0
o A click on the DriverByz‟s form close button (X) must immediately terminate
all related processes (and free all their allocated resources eg ports)
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1516
A typical XML configuration file for DriverByz
ltconfigurationgt
ltappSettingsgt
lt--
ltadd key=participanturl
value=httplocalhost0User gt
ltadd key=syncurl
value=httplocalhost8080Sync gt
--gt
ltadd key=participant
value=ParticipantByzParticipantByzexegt
ltadd key=timeout value=30000gt
ltappSettingsgt
ltconfigurationgt
Further details
o The url‟s are considered fixed However you can take them from the config
file
o The timeouts need not be used in this simplified version
A typical XML configuration file for ParticipantByz (command-line arguments
will take precedence)
ltconfigurationgt
ltappSettingsgt
ltadd key=v0 value=0 gt
ltadd key=usesync value=1 gt
ltadd key=byzurl value=httplocalhost0Byz gt
ltadd key=userurl value=httplocalhost0User gt
ltadd key=syncurl value=httplocalhost8080Syncgt
ltadd key=maxindex value=4 gt
ltadd key=index value=1 gt
ltadd key=init value=0 gt
ltadd key=faulty value=1 gt
ltappSettingsgt
ltconfigurationgt
Further details
o v0 is the default value used by the EIG Byzantine algorithm for two distinct
purposes
o to indicate an incorrect or missing message (for us null codified as 2)
o as a tie break during a majority vote in the bottom-up evaluation
o You need only consider communications via the synchronizer when usesync
is always 1 and the byzurl is inoperant
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1616
Service Data Types and Interfaces (as known by the general purpose
synchronizer)
namespace Synchronizer
[DataContract]
public partial class TaggedMessageOut
[DataMember]
public int To
[DataMember]
public string AsString
[DataMember]
public MessageBase Message
[DataContract]
public partial class TaggedMessageIn
[DataMember]
public int From
[DataMember]
public string AsString
[DataMember]
public MessageBase Message
[DataContract]
public partial class MessageBaseIExtensibleDataObject
private ExtensionDataObject Data
public virtual ExtensionDataObject ExtensionData
get return Data
set Data = value
[ServiceContract(
Namespace = httpcompsci711comsync)]
public interface ISynchronizerService
[OperationContract(IsOneWay = true)]
void UserSend(int From ListltTaggedMessageOutgt msg)
From is not strictly needed but may help
[ServiceContract(Namespace =
httpcompsci711compart)]
public interface IParticipantService
[OperationContract(IsOneWay = true)]
void UserReceive(ListltTaggedMessageIngt msg)
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1216
o The Driver logs all received messages internally reorganizes them according
to their destination and its button Send is enabled after receiving messages
from all participants
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1316
o A second click on Driverrsquos Send button forwards all accumulated round 2
messages to their destinations Driverrsquos Send button is disabled participants
process their messages and because there are only 2 messaging rounds for 4
participants the participants‟ Eval buttons are now enabled
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1416
o In this case there are three bottom-up evaluation steps 0 1 and 2 that
proceed similarly for all processes Here the final decision is 0
o A click on the DriverByz‟s form close button (X) must immediately terminate
all related processes (and free all their allocated resources eg ports)
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1516
A typical XML configuration file for DriverByz
ltconfigurationgt
ltappSettingsgt
lt--
ltadd key=participanturl
value=httplocalhost0User gt
ltadd key=syncurl
value=httplocalhost8080Sync gt
--gt
ltadd key=participant
value=ParticipantByzParticipantByzexegt
ltadd key=timeout value=30000gt
ltappSettingsgt
ltconfigurationgt
Further details
o The url‟s are considered fixed However you can take them from the config
file
o The timeouts need not be used in this simplified version
A typical XML configuration file for ParticipantByz (command-line arguments
will take precedence)
ltconfigurationgt
ltappSettingsgt
ltadd key=v0 value=0 gt
ltadd key=usesync value=1 gt
ltadd key=byzurl value=httplocalhost0Byz gt
ltadd key=userurl value=httplocalhost0User gt
ltadd key=syncurl value=httplocalhost8080Syncgt
ltadd key=maxindex value=4 gt
ltadd key=index value=1 gt
ltadd key=init value=0 gt
ltadd key=faulty value=1 gt
ltappSettingsgt
ltconfigurationgt
Further details
o v0 is the default value used by the EIG Byzantine algorithm for two distinct
purposes
o to indicate an incorrect or missing message (for us null codified as 2)
o as a tie break during a majority vote in the bottom-up evaluation
o You need only consider communications via the synchronizer when usesync
is always 1 and the byzurl is inoperant
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1616
Service Data Types and Interfaces (as known by the general purpose
synchronizer)
namespace Synchronizer
[DataContract]
public partial class TaggedMessageOut
[DataMember]
public int To
[DataMember]
public string AsString
[DataMember]
public MessageBase Message
[DataContract]
public partial class TaggedMessageIn
[DataMember]
public int From
[DataMember]
public string AsString
[DataMember]
public MessageBase Message
[DataContract]
public partial class MessageBaseIExtensibleDataObject
private ExtensionDataObject Data
public virtual ExtensionDataObject ExtensionData
get return Data
set Data = value
[ServiceContract(
Namespace = httpcompsci711comsync)]
public interface ISynchronizerService
[OperationContract(IsOneWay = true)]
void UserSend(int From ListltTaggedMessageOutgt msg)
From is not strictly needed but may help
[ServiceContract(Namespace =
httpcompsci711compart)]
public interface IParticipantService
[OperationContract(IsOneWay = true)]
void UserReceive(ListltTaggedMessageIngt msg)
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1316
o A second click on Driverrsquos Send button forwards all accumulated round 2
messages to their destinations Driverrsquos Send button is disabled participants
process their messages and because there are only 2 messaging rounds for 4
participants the participants‟ Eval buttons are now enabled
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1416
o In this case there are three bottom-up evaluation steps 0 1 and 2 that
proceed similarly for all processes Here the final decision is 0
o A click on the DriverByz‟s form close button (X) must immediately terminate
all related processes (and free all their allocated resources eg ports)
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1516
A typical XML configuration file for DriverByz
ltconfigurationgt
ltappSettingsgt
lt--
ltadd key=participanturl
value=httplocalhost0User gt
ltadd key=syncurl
value=httplocalhost8080Sync gt
--gt
ltadd key=participant
value=ParticipantByzParticipantByzexegt
ltadd key=timeout value=30000gt
ltappSettingsgt
ltconfigurationgt
Further details
o The url‟s are considered fixed However you can take them from the config
file
o The timeouts need not be used in this simplified version
A typical XML configuration file for ParticipantByz (command-line arguments
will take precedence)
ltconfigurationgt
ltappSettingsgt
ltadd key=v0 value=0 gt
ltadd key=usesync value=1 gt
ltadd key=byzurl value=httplocalhost0Byz gt
ltadd key=userurl value=httplocalhost0User gt
ltadd key=syncurl value=httplocalhost8080Syncgt
ltadd key=maxindex value=4 gt
ltadd key=index value=1 gt
ltadd key=init value=0 gt
ltadd key=faulty value=1 gt
ltappSettingsgt
ltconfigurationgt
Further details
o v0 is the default value used by the EIG Byzantine algorithm for two distinct
purposes
o to indicate an incorrect or missing message (for us null codified as 2)
o as a tie break during a majority vote in the bottom-up evaluation
o You need only consider communications via the synchronizer when usesync
is always 1 and the byzurl is inoperant
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1616
Service Data Types and Interfaces (as known by the general purpose
synchronizer)
namespace Synchronizer
[DataContract]
public partial class TaggedMessageOut
[DataMember]
public int To
[DataMember]
public string AsString
[DataMember]
public MessageBase Message
[DataContract]
public partial class TaggedMessageIn
[DataMember]
public int From
[DataMember]
public string AsString
[DataMember]
public MessageBase Message
[DataContract]
public partial class MessageBaseIExtensibleDataObject
private ExtensionDataObject Data
public virtual ExtensionDataObject ExtensionData
get return Data
set Data = value
[ServiceContract(
Namespace = httpcompsci711comsync)]
public interface ISynchronizerService
[OperationContract(IsOneWay = true)]
void UserSend(int From ListltTaggedMessageOutgt msg)
From is not strictly needed but may help
[ServiceContract(Namespace =
httpcompsci711compart)]
public interface IParticipantService
[OperationContract(IsOneWay = true)]
void UserReceive(ListltTaggedMessageIngt msg)
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1416
o In this case there are three bottom-up evaluation steps 0 1 and 2 that
proceed similarly for all processes Here the final decision is 0
o A click on the DriverByz‟s form close button (X) must immediately terminate
all related processes (and free all their allocated resources eg ports)
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1516
A typical XML configuration file for DriverByz
ltconfigurationgt
ltappSettingsgt
lt--
ltadd key=participanturl
value=httplocalhost0User gt
ltadd key=syncurl
value=httplocalhost8080Sync gt
--gt
ltadd key=participant
value=ParticipantByzParticipantByzexegt
ltadd key=timeout value=30000gt
ltappSettingsgt
ltconfigurationgt
Further details
o The url‟s are considered fixed However you can take them from the config
file
o The timeouts need not be used in this simplified version
A typical XML configuration file for ParticipantByz (command-line arguments
will take precedence)
ltconfigurationgt
ltappSettingsgt
ltadd key=v0 value=0 gt
ltadd key=usesync value=1 gt
ltadd key=byzurl value=httplocalhost0Byz gt
ltadd key=userurl value=httplocalhost0User gt
ltadd key=syncurl value=httplocalhost8080Syncgt
ltadd key=maxindex value=4 gt
ltadd key=index value=1 gt
ltadd key=init value=0 gt
ltadd key=faulty value=1 gt
ltappSettingsgt
ltconfigurationgt
Further details
o v0 is the default value used by the EIG Byzantine algorithm for two distinct
purposes
o to indicate an incorrect or missing message (for us null codified as 2)
o as a tie break during a majority vote in the bottom-up evaluation
o You need only consider communications via the synchronizer when usesync
is always 1 and the byzurl is inoperant
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1616
Service Data Types and Interfaces (as known by the general purpose
synchronizer)
namespace Synchronizer
[DataContract]
public partial class TaggedMessageOut
[DataMember]
public int To
[DataMember]
public string AsString
[DataMember]
public MessageBase Message
[DataContract]
public partial class TaggedMessageIn
[DataMember]
public int From
[DataMember]
public string AsString
[DataMember]
public MessageBase Message
[DataContract]
public partial class MessageBaseIExtensibleDataObject
private ExtensionDataObject Data
public virtual ExtensionDataObject ExtensionData
get return Data
set Data = value
[ServiceContract(
Namespace = httpcompsci711comsync)]
public interface ISynchronizerService
[OperationContract(IsOneWay = true)]
void UserSend(int From ListltTaggedMessageOutgt msg)
From is not strictly needed but may help
[ServiceContract(Namespace =
httpcompsci711compart)]
public interface IParticipantService
[OperationContract(IsOneWay = true)]
void UserReceive(ListltTaggedMessageIngt msg)
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1516
A typical XML configuration file for DriverByz
ltconfigurationgt
ltappSettingsgt
lt--
ltadd key=participanturl
value=httplocalhost0User gt
ltadd key=syncurl
value=httplocalhost8080Sync gt
--gt
ltadd key=participant
value=ParticipantByzParticipantByzexegt
ltadd key=timeout value=30000gt
ltappSettingsgt
ltconfigurationgt
Further details
o The url‟s are considered fixed However you can take them from the config
file
o The timeouts need not be used in this simplified version
A typical XML configuration file for ParticipantByz (command-line arguments
will take precedence)
ltconfigurationgt
ltappSettingsgt
ltadd key=v0 value=0 gt
ltadd key=usesync value=1 gt
ltadd key=byzurl value=httplocalhost0Byz gt
ltadd key=userurl value=httplocalhost0User gt
ltadd key=syncurl value=httplocalhost8080Syncgt
ltadd key=maxindex value=4 gt
ltadd key=index value=1 gt
ltadd key=init value=0 gt
ltadd key=faulty value=1 gt
ltappSettingsgt
ltconfigurationgt
Further details
o v0 is the default value used by the EIG Byzantine algorithm for two distinct
purposes
o to indicate an incorrect or missing message (for us null codified as 2)
o as a tie break during a majority vote in the bottom-up evaluation
o You need only consider communications via the synchronizer when usesync
is always 1 and the byzurl is inoperant
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1616
Service Data Types and Interfaces (as known by the general purpose
synchronizer)
namespace Synchronizer
[DataContract]
public partial class TaggedMessageOut
[DataMember]
public int To
[DataMember]
public string AsString
[DataMember]
public MessageBase Message
[DataContract]
public partial class TaggedMessageIn
[DataMember]
public int From
[DataMember]
public string AsString
[DataMember]
public MessageBase Message
[DataContract]
public partial class MessageBaseIExtensibleDataObject
private ExtensionDataObject Data
public virtual ExtensionDataObject ExtensionData
get return Data
set Data = value
[ServiceContract(
Namespace = httpcompsci711comsync)]
public interface ISynchronizerService
[OperationContract(IsOneWay = true)]
void UserSend(int From ListltTaggedMessageOutgt msg)
From is not strictly needed but may help
[ServiceContract(Namespace =
httpcompsci711compart)]
public interface IParticipantService
[OperationContract(IsOneWay = true)]
void UserReceive(ListltTaggedMessageIngt msg)
CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009
1616
Service Data Types and Interfaces (as known by the general purpose
synchronizer)
namespace Synchronizer
[DataContract]
public partial class TaggedMessageOut
[DataMember]
public int To
[DataMember]
public string AsString
[DataMember]
public MessageBase Message
[DataContract]
public partial class TaggedMessageIn
[DataMember]
public int From
[DataMember]
public string AsString
[DataMember]
public MessageBase Message
[DataContract]
public partial class MessageBaseIExtensibleDataObject
private ExtensionDataObject Data
public virtual ExtensionDataObject ExtensionData
get return Data
set Data = value
[ServiceContract(
Namespace = httpcompsci711comsync)]
public interface ISynchronizerService
[OperationContract(IsOneWay = true)]
void UserSend(int From ListltTaggedMessageOutgt msg)
From is not strictly needed but may help
[ServiceContract(Namespace =
httpcompsci711compart)]
public interface IParticipantService
[OperationContract(IsOneWay = true)]
void UserReceive(ListltTaggedMessageIngt msg)