Not a Propaganda Machine

    TypeScript icon, indicating that this package has built-in type declarations

    0.1.6 • Public • Published


    This is the TypeScript implementation of the Counterfactual protocol. It is responsible for executing the Counterfactual protocols specified here and producing correctly constructed signed commitments that correspond to state transitions of the users' state channels.

    The specific design philosophy it adopts is the middleware pattern. That is, all of these protocols are naturally broken down into steps, for each of which there is a middleware responsible for executing that step.

    Given this design, it's easy to extend the machine to support additional protocols, replace a default middleware with an alternative implementation, and for the machine to rely on yet delegate more advanced logic to external services.

    Some specific examples of this include:

    • delegating to a signing module that verifies whether a given action is safe to sign & countersign
    • storing state commitments (delegating to an arbitrary, possibly non-local service implementing a desired interface)
    • implementing a custom Write-Ahead-Log to tweak performance/security properties

    Note that because of this architecture, the machine becomes embeddable and its surrounding context can decide how to implement/extend needed functionality/services.


    Make sure you have Yarn v1.10.1 installed or higher. Refer to Yarn's installation guide for setup instructions for your operating system.

    To install the dependencies:


    Building the package

    To build the machine package:

    yarn build


    To run all tests:

    yarn test

    To run only specific tests:

    yarn test <pattern that jest can recognize>

    will run tests in files whose filename matches <pattern> (see Jest's CLI reference).




    npm i @counterfactual/machine

    DownloadsWeekly Downloads






    Unpacked Size

    2.33 MB

    Total Files


    Last publish


    • alonbukai
    • cf19drofxots
    • ebryn
    • joelalejandro
    • snario