finish refactor, next steps to add rest of protocol implementation and allow for multi node simulation, and finish implmenting termination cond in run