- Implement a batch status endpoint for scabbard
- Set up the Cypress integration test framework for the Gameroom UI
- Copy Splinter .proto files into installed client builds
- Redirect the user to a “Not Found” page if the page does not exist
- Set up integration tests using Cypress
- Add XO smart contract to installed gameroomd builds
- Reduce latency of events by replacing run_interval in EventDealerWebSocket with streams
- Change the scabbard database name to be the sha256 hash of service_id::circuit_id to ensure that it will be a valid file name
- Add signature and structure verification to the scabbard service when it receives batches submitted via the REST API
- Add /batch_statuses endpoint to scabbard and update /batches endpoint to return a /batch_statuses link for the submitted batch IDs
- Add config builder with toml loading (experimental feature)
- Add Dockerfile to package gameroom UI
- Update packaging for gameroomd and splinterd so modified systemd files are not overwritten
- Modify gameroomd and splinterd postinst scripts to add data directories
- Add plumbing to properly version deb packages
- Add functionality to create and play XO games
- Add EventHistory trait to EventDealer to allow for new event subscribers to catch up on previous events. This trait describes how events are stored.
- Add LocalEventHistory, a basic implementation of EventHistory that stores events locally in a queue.
- Add MessageWrapper to be consumed by EventDealerWebsockets, to allow for shutdown messages to be sent by the EventDealer
- Enforce that a Splinter service may only be added to Splinter state if the connecting node is in its list of allowed nodes
- Add Context object for WebSocket callbacks to assist in restarting WebSocket connections
- Add specified supported service types to the service orchestrator to determine which service types are locally supported versus externally supported
- Only allow initialization of the orchestrator’s supported service
- On restart, reuse the services of circuits which are stored locally
- Add circuit ID when creating a service factory, in case it is needed by the service
- Replace UUID with service_id::circuit_id, which is guaranteed to be unique on a Splinter node, to name the Scabbard database
- Fix clippy error in events reactor
- Fix tests to match updated cargo args format
- Change certain circuit fields from strings to enums
- Remove Splinter client from CLI to decrease build time
- Add ability in the UI to fetch and list XO games
- Correct arguments used to fetch the members of an existing gameroom, allowing the members to be included in the /gamerooms endpoint response
- Add GET /keys/{public_key} endpoint to gameroomd, to fetch key information associated with a public key
- Add UI functionality to create a new XO game:
- Add ability to calculate addresses
- Add methods to build and sign XO transactions and batches
- Add methods to submit XO transactions and batches
- Add form for user to create new game
- Add new game notification to UI and gameroomd
- Add player information displayed for a game in UI
- Implement XO game board in UI
- Implement XO take functionality and state styling in UI
- Add component to show game information in the Gameroom details page in the UI
- Use md5 hash of game name when creating a game, rather than URL-encoded name that handles special characters
- Add player information when updating an XO game from exported data (from state delta export)
- Add auto-generated protos for the UI
- Remove the explicit caching in the Gameroom Detail view in the UI, because Vue does this automatically
- Make various UI styling fixes
- Remove unused imports to avoid cargo compilation warnings
- Completed the code to propose, accept, and create a gameroom in the Gameroom example application
- Persist AdminService state that includes the pending circuits
- Replace the WebSocketClient with a new events module, which improves multi-threaded capabilities of the clients (libsplinter::events; requires the use of "events" feature flag)
- Improve log messages by logging the length of the bytes instead of the bytes themselves
- Fix issue with sending and receiving large messages (greater than 64k)
- Fix issues with threads exiting without reporting the error
- Removed inaccurate warn log message that said signature verification was not turned off
- Add Key Registry REST API resources
- Increase message queue sizes for the admin service's ServiceProcessor.
- Remove outdated CLI commands
- Add XoStateDeltaProcessor to Gameroom application authorization handler
- Add route to gameroom REST API to submit batches to scabbard service
- Set six-second timeout for toast notifications in the UI
- Add notification in the UI for newly active gamerooms
- Enhance invitation UI and add tabs for viewing sent, received, or all invitations
- Fix bug that caused read notifications to not appear as read in the UI
- Fix bug where the Gameroom WebSocket was sending notifications to the UI every 3 seconds instead of when a new notification was added
- Completion of circuit proposal validation, voting, and dynamic circuit creation
- Addition of key generation and management, as well as role-based permissions
- Continued progress towards proposing, accepting, and creating a gameroom in the Gameroom example application
- Add AdminService, with support for:
- Accepting and verifying votes on circuit proposals
- Committing approved circuit proposals to SplinterState
- Add notification to be sent to application authorization handlers when a circuit is ready
- Update scabbard to properly set up Sabre state by adding admin keys
- Add support for exposing service endpoints using the orchestrator and service factories
- Add WebSocketClient for consuming Splinter service events
- Add KeyRegistry trait for managing key information with a StorageKeyRegistry implementation, backed by the storage module
- Add KeyPermissionsManager trait for accessing simple, role-based permissions using public keys and an insecure AllowAllKeyPermissionManager implementation
- Add SHA512 hash implementation of signing traits, for test cases
- Add Sawtooth-compatible signing trait implementations behind the "sawtooth-signing-compat" feature flag.
- Add package metadata and license field to Cargo.toml file
- Add example configuration files, systemd files, and postinst script to Debian package
- Reorder internal service startup to ensure that the admin service and orchestrator can appropriately connect and start up
- Use SawtoothSecp256k1SignatureVerifier for admin service
- Add "splinter-cli admin keygen" command to generate secp256k1 public/private key pairs
- Add "splinter-cli admin keyregistry" command to generate a key registry and key pairs based on a YAML specification
- Add license field to all Cargo.toml files
- Rename private-xo package to private-xo-service-.deb
- Rename private-counter packages to private-counter-cli-.deb and private-counter-service-.deb
- Add package metadata and license field to gameroomd Cargo.toml file
- Add example configs, systemd files, and postinst script to gameroomd Debian package; rename package to gameroom-.deb
- Implement notification retrieval using WebSocket subscription and notifications endpoints
- Show pending and accepted gamerooms in the Gameroom UI
- Add full support for signing CircuitManagementPayloads with the user's private key and submitting it to splinterd
- Update gameroomd to specify itself as the scabbard admin and submit the XO smart contract when the circuit is ready
- Make various UI enhancements
- Completion of the two-phase-commit consensus algorithm with deterministic coordination
- Continued progress towards dynamically generating circuits, including dynamic peering and circuit proposal validation
- Continued progress on the Gameroom example, including UI updates and automatic reconnection
- Add a service orchestration implementation
- Add Scabbard service factory
- Implement a deterministic two-phase-commit coordinator
- Reorder the commit/reject process for the two-phase-commit coordinator. The coordinator now tells proposal manager to commit/reject before broadcasting the corresponding message to other verifiers.
- Refactor two-phase-commit complete_coordination. Move the process of finishing the coordination of a proposal in two-phase commit to a single function to reduce duplication.
- Implement a two-phase-commit timeout for consensus proposals
- Update the two-phase-commit algorithm to ignore duplicate proposals
- Allow dynamic verifiers for a single instance of two-phase-commit consensus
- Add an Authorization Inquisitor trait for inspecting peer authorization state
- Add the ability to queue messages from unauthorized peers and unpeered nodes to the admin service
- Fix an issue that caused the admin service to deadlock when handling proposals
- Add Event Dealers for services to construct websocket endpoints
- Add a subscribe endpoint to Scabbard
- Validate circuit proposals against existing Splinter state
- Update create-circuit notification messages to include durability field
- Log only warning-level messages from Tokio and Hyper
- Improve Splinter component build times
- Add a NoOp registry to handle when a node registry backend is not specified
- Use service IDs as peer node IDs, in order to make them compatible with two-phase consensus
- Add server-side WebSocket notifications to the UI
- Add borders to the Acme UI
- Improve error handling and add reconnects to the Application Authorization Handler
- Add a circuit ID and hash to GET /proposals endpoint
- Standardize buttons and forms in the UI
- Improve error formatting in the UI by adding toasts and progress bar spinners
- Change the Gameroom REST API to retrieve node data automatically on startup
- Split the circuit_proposals table into gameroom and gameroom_proposals tables
- Use the Material elevation strategy for coloring the UI
- Decrease the font size
- Change the UI to redirect users who are not logged in to login page
- Add a dashboard view
- Add an invitation cards view
- Add a button for creating a new gameroom to the UI
- Add new consensus API (libsplinter::consensus)
- Add new consensus implementation for N-party, two-phase commit (libsplinter::consensus::two_phase)
- Add new service SDK with in-process service implementations (libsplinter::service)
- Add initial implementation for Scabbard, a Splinter service for running Sabre transactions with two-phase commit between services (libsplinter::service::scabbard)
- Add REST API SDK (consider this experimental, as the backing implementation may change)
- Add new node registry REST API endpoint for providing information about all possible nodes in the network, with initial YAML-file backed implementation.
- Add new signing API for verifying and signing messages, with optional Ursa-backed implementation (libsplinter::signing, requires the use of "ursa-compat" feature flag)
- Add MultiTransport for managing multiple transport types and selecting connections based on a URI (libsplinter::transport::multi)
- Add ZMQ transport implementation (libsplinter::transport::zmq, requires the use of the "zmq-transport" feature flag)
- Add peer authorization callbacks, in order to notify other system entities that a peer is fully ready to receive messages
- Add REST API instance to provide node registry API endpoints
- Add CLI parameter --bind for the REST API port
- Add CLI parameters for configuring node registryy; the default registry type is "FILE"
- Add gameroom example infrastructure, such as the gameroomd binary, docker images, and compose files
- Add Login and Register UI
- Add New Gameroom UI
- Add UI themes for both parties in demo
- Initialize Gameroom database
- Add circuit proposals table
- Initialize Gameroom REST API
- Implement Gameroom REST API authentication routes
- Implement Gameroom REST API create gameroom endpoint
- Implement Gameroom REST API proposals route
- Implement /nodes endpoint in gameroomd