def from_configuration(node_config,
                       store,
                       redeemer=None,
                       default_token_count=None):
    """
    Instantiate the plugin root resource using data from its configuration
    section, **storageclient.plugins.privatestorageio-zkapauthz-v1**, in the
    Tahoe-LAFS configuration file.  See the configuration documentation for
    details of the configuration section.

    :param _Config node_config: An object representing the overall node
        configuration.  The plugin configuration can be extracted from this.
        This is also used to read and write files in the private storage area
        of the node's persistent state location.

    :param VoucherStore store: The store to use.

    :param IRedeemer redeemer: The voucher redeemer to use.  If ``None`` a
        sensible one is constructed.

    :return IZKAPRoot: The root of the resource hierarchy presented by the
        client side of the plugin.
    """
    if redeemer is None:
        redeemer = get_redeemer(
            u"privatestorageio-zkapauthz-v1",
            node_config,
            None,
            None,
        )
    if default_token_count is None:
        default_token_count = NUM_TOKENS
    controller = PaymentController(store, redeemer, default_token_count)
    root = Resource()
    root.store = store
    root.controller = controller
    root.putChild(
        b"voucher",
        _VoucherCollection(
            store,
            controller,
        ),
    )
    root.putChild(
        b"unblinded-token",
        _UnblindedTokenCollection(
            store,
            controller,
        ),
    )
    root.putChild(
        b"version",
        _ProjectVersion(),
    )
    return root