Skip to content

A fork of Sablier, with an extended focus on people and their security.

License

Notifications You must be signed in to change notification settings

kernel-community/streams

 
 

Repository files navigation

Kernel Streams Styled with Prettier Commitizen Friendly License: LGPL3.0

This is a set of payment streaming contracts for open source contributors working on public goods.

It combines Paul Razvan Berg's work on both Sablier and Foundry templates. We are enormously grateful to him for both of these meaningful exmaples of the kinds of public goods we love working with, and are interested in creating ourselves.

Note: while Paul's foundry template is licensed under MIT, we have followed the GPL-3.0 licensing for Sablier, as this holds the functionality we intend to use.

Getting Started

You can clone the repo and set it up manually:

git clone --recurse-submodules https://github.com/kernel-community/streams.git
cd streams
yarn

If you prefer to install using foundry directly:

forge init kernel-streams --template https://github.com/kernel-community/streams
cd kernel-streams
yarn # install Solhint, Prettier, and other Node.js deps

If this is your first time with Foundry, check out the installation instructions.

Work TODO

  1. Tests
  2. Deploy scripts

Features

If you're interested in exploring Foundry in more detail, you should look at the Foundry Book. In particular, you may be interested in reading the Writing Tests tutorial.

Sensible Defaults

This template comes with a set of sensible default configurations for you to use. These defaults can be found in the following files:

├── .editorconfig
├── .gitignore
├── .prettierignore
├── .prettierrc.yml
├── .solhint.json
├── .yarnrc.yml
├── foundry.toml
└── remappings.txt

VSCode Integration

This template is IDE agnostic, but for the best user experience, you may want to use it in VSCode alongside Juan Blanco's Solidity extension.

For guidance on how to integrate a Foundry project in VSCode, please refer to this guide.

Writing Tests

To write a new test contract, you start by importing PRBTest and inherit from it in your test contract. PRBTest comes with a pre-instantiated cheatcodes environment accessible via the vm property. If you would like to view the logs in the terminal output you can add the -vvv flag and use console.log.

This template comes with an example test contract Foo.t.sol.

Usage

This is a list of the most frequently needed commands.

Build

Build the contracts:

$ forge build

Clean

Delete the build artifacts and cache directories:

$ forge clean

Compile

Compile the contracts:

$ forge build

Coverage

Get a test coverage report:

$ forge coverage

Deploy

Deploy to Anvil:

$ forge script script/DeployStreams.s.sol --broadcast --fork-url http://localhost:8545

For this script to work, you need to have a MNEMONIC environment variable set to a valid BIP39 mnemonic.

For instructions on how to deploy to a testnet or mainnet, check out the Solidity Scripting tutorial.

Format

Format the contracts:

$ forge fmt

Gas Usage

Get a gas report:

$ forge test --gas-report

Lint

Lint the contracts:

$ yarn lint

Test

Run the tests:

$ forge test

What's Inside

  • Forge: compile, test, fuzz, format, and deploy smart contracts
  • PRBTest: modern collection of testing assertions and logging utilities
  • Forge Std: collection of helpful contracts and cheatcodes for testing
  • Solhint: linter for Solidity code
  • Prettier Plugin Solidity: code formatter for non-Solidity files

About

A fork of Sablier, with an extended focus on people and their security.

Topics

Resources

License

Stars

Watchers

Forks

Languages

  • Solidity 100.0%