https://github.com/dfinity/icp-calculator
A calculator of fees and costs for smart contracts on the Internet Computer Protocol (ICP)
https://github.com/dfinity/icp-calculator
Last synced: about 1 month ago
JSON representation
A calculator of fees and costs for smart contracts on the Internet Computer Protocol (ICP)
- Host: GitHub
- URL: https://github.com/dfinity/icp-calculator
- Owner: dfinity
- License: apache-2.0
- Created: 2024-07-25T16:39:34.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2025-08-25T07:53:32.000Z (8 months ago)
- Last Synced: 2025-08-26T19:11:46.620Z (8 months ago)
- Language: TypeScript
- Size: 234 KB
- Stars: 5
- Watchers: 3
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Codeowners: .github/CODEOWNERS
Awesome Lists containing this project
README
# icp-calculator
This repository contains a utility library that implements a calculator of fees
and costs for smart contracts on the Internet Computer Protocol (ICP).
Currently it supports the following operations and resources:
- **storage**: the cost to store some number of bytes for some period of time.
- **message execution**: the cost to execute some number of instructions.
- **message sending**: the cost to send some number of bytes as a message.
- **HTTP outcalls**: the cost to make an HTTP outcall.
- **canister creation**: the cost to create a canister.
More will be added in the future.
## Installation
```bash
# with npm
npm install @dfinity/icp-calculator
# with pnpm
pnpm add @dfinity/icp-calculator
# with yarn
yarn add @dfinity/icp-calculator
```
## Usage
See `src/index.spec.ts` for more examples of usage.
```typescript
import {
calculators,
Direction,
Duration,
Mode,
} from "@dfinity/icp-calculator";
import type { Bytes, Instructions } from "@dfinity/icp-calculator";
const $ = calculators().calculatorUSD;
const storage1mb = $.storage(1_000_000 as Bytes, Duration.fromDays(365));
const execute1b = $.execution(Mode.Replicated, 1_000_000_000 as Instructions);
const send1mb = $.message(
Mode.Replicated,
Direction.UserToCanister,
1_000_000 as Bytes,
);
expect(storage1mb).toBeCloseTo(0.00494, 5);
expect(execute1b).toBeCloseTo(0.00053, 5);
expect(send1mb).toBeCloseTo(0.00265, 5);
```
## How it works
The main logic of the calculator is in `src/calculator.ts`.
The code there mirrors the replica code and it depends on the replica config, which is stored in `src/icp/config.json`.
The JSON config file is generated by the `icp_config` tool in the replica repository.
The JSON config file can be updated as follows:
```
# Check out `https://github.com/dfinity/ic` to `~/ic`
# Check out `https://github.com/dfinity/icp-calculator` to `~/icp-calculator`
cd ~/ic
bazel run //rs/execution_environment/tools:icp_config -- --replica-version=rc--2024-07-25_01-30 --output=~/icp-calculator/src/icp/config.json
```
## Documentation
`@dfinity/icp-calculator` exposes following types and functions:
### :toolbox: Functions
- [calculators](#gear-calculators)
#### :gear: calculators
The main export of the library. It returns cost calculators that operate in
cycles and USD based on the given options.
| Function | Type |
| ------------- | ------------------------------------------------- |
| `calculators` | `(options?: Options or undefined) => Calculators` |
Parameters:
- `options`: - optional options to configure the calculators.
[:link: Source](https://github.com/dfinity/icp-calculator/tree/main/src/index.ts#L64)