@sablier/evm-utils
v2.0.1
Published
Utilities solidity files used across Sablier's smart contracts
Readme
Sablier EVM Utils

This package contains the following two sets of contracts:
Sablier Comptroller
Its a standalone contract with the following responsibilities:
- Handles state variables, setters and getters, and calculations using external oracles to manage fees across all the Sablier protocols.
- Authority over admin functions across Sablier protocols.
Utility contracts
Its a collection of smart contracts used across various Sablier Solidity projects. The motivation behind this is to reduce code duplication. The following projects imports these contracts:
In-depth documentation is available at docs.sablier.com.
Repository Structure
This package contains the following subdirectories:
src/interfaces: Interfaces to be used by external projects.src/libraries: Helper libraries used by external projects.src/mocks: Mock contracts used by external projects in tests.src/tests: Helper contracts used by external projects in tests and deployment scripts.
Install
Node.js
This is the recommended approach.
Install using your favorite package manager, e.g., with Bun:
bun add @sablier/evm-utilsGit Submodules
This installation method is not recommended, but it is available for those who prefer it.
Install the monorepo using Forge:
forge install sablier-labs/evm-monorepo@[email protected] OpenZeppelin/[email protected] smartcontractkit/[email protected]Then, add the following remapping in remappings.txt:
@chainlink/contracts/=lib/chainlink/contracts-evm/
@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/
@sablier/evm-utils/=lib/evm-monorepo/utils/Usage
import { Adminable } from "@sablier/evm-utils/src/Adminable.sol";
import { Batch } from "@sablier/evm-utils/src/Batch.sol";
import { NoDelegateCall } from "@sablier/evm-utils/src/NoDelegateCall.sol";
contract MyContract is Adminable, Batch, NoDelegateCall {
constructor(address initialAdmin) Adminable(initialAdmin) { }
// Use the `noDelegateCall` modifier to prevent delegate calls.
function foo() public noDelegateCall { }
// Use the `onlyAdmin` modifier to restrict access to the admin.
function editFee(uint256 newFee) public onlyAdmin { }
}Contributing
Feel free to dive in! Open an issue, start a discussion or submit a PR. For any informal concerns or feedback, please join our Discord server.
For guidance on how to create PRs, see the CONTRIBUTING guide.
License
See LICENSE.md.
