/zkfs

Distributed, Incentivised, Zero-Knowledge File System

Primary LanguageTypeScriptApache License 2.0Apache-2.0

ZKFS | Zero-Knowledge File System

License Commitizen friendly release @latest packages

Table of contents

Quick start

// make sure to configure your build environment as described below
npm i --save @zkfs/contract-api@latest

🚨 You will have to configure your build environment to resolve some of the relative imports temporarily used within ZKFS libraries, you can find out how and why in this issue.

⚠️ ZKFS is currently being shipped as a development preview, containing a limited subset of features. As of now, you can use ZKFS in your test suite using @zkfs/contract-api@latest. Next step is to ship a UI development kit, with a fully fledged ZKFS node/peer.

import { method, UInt64 } from 'snarkyjs';
import {
  offchainState,
  OffchainStateContract,
  OffchainState,
} from '@zkfs/contract-api';

class Counter extends OffchainStateContract {
  @offchainState() public count = OffchainState.fromRoot<UInt64>(UInt64);

  public init() {
    super.init();
    this.count.set(UInt64.from(0));
  }

  @method
  public update() {
    const currentCount = this.count.get();
    const newCount = currentCount.add(1);
    this.count.set(newCount);
  }
}

Open in StackBlitz

Contributing

When contributing, please keep the following in mind:

  • Use the git flow convention for branch names:
    • feature/*
      • Feature branches shall be created only for corresponding issues and named accordingly, such as feature/#1-development-release-workflow
    • develop
    • release/<package-name>@<version> .e.g.: release/@zkfs/sdk-test@0.0.1
      • Alternatively, in case of a multi package release, feel free to use an arbitrary release name (release/*)
  • Follow commitizen's conventional-changelog commit message format
    • Use npm run commit and you'll be presented with a commitizen prompt walking you through writing the commit message properly.
  • Each pull request for the develop branch must pass the underlying workflows for lint/test/build.
  • There are a few git hooks configured to help you validate commit contents before pushing:
    • pre-commit: validates staged files
    • pre-push: validates branch names
  • Releases and changelog generation shall happen after merging from release/* to develop
    • Changelog and semver increments are generated automatically from conventional commits. All commits are included together with a merge commit, so that the changelog and semver can be deducted automatically.
    • Releases happen automatically on merge to develop (@alpha releases)

Issue tracking / Github project

You can keep track of the work being done across all ZKFS repositories in the ZKFS Github project.

Local CI workflow

In order to run github workflows locally, you need to install act. This is especially useful when developing changes to the CI/CD pipeline. Afterwards you should be able to run the following:

# run all workflows tied to pull_request(s)
act pull_request

Powered by