chronix
v0.0.9
Published
chronix is an environment for testing Lido offchain applications with the ability to deploy pre-defined states.
Downloads
75
Readme
chronix
chronix is an environment for testing Lido offchain applications with the ability to deploy pre-defined states.
At this point, it's a proof of concept. Only one state is currently supported: testing keys-api for DVT module support.
Motivation
Testing oracles and services requires the ability to have a network with a set of given states.
These states include:
- Lido's smart contracts
- Staking modules
- Keys of staking modules
- External staking modules
- Different invariants of contracts, modules, and keys
This type of problem cannot be solved in local e2e tests.
- Lido's deployment is not trivial
- As part of the Validator Set tasks, smart contracts developed by external teams may appear, and we need to test their integration
- In many cases, it is necessary to publish and test smart contracts
- Ganache does not support blockTag in RPC requests
- We would like to have a declarative description of states that can be applied to different networks for testing purposes
Introduction
This environment was developed as a solution to these problems.
This project allows you to run a test network with an arbitrary chainId, load and deploy smart contracts, and declaratively describe the states needed for testing service operations.
Currently, only one state is supported: to test keys-api for DVT module support.
Getting started
You will need to have the latest LTS versions of NodeJS and Yarn installed.
Add the test package to your repository
yarn add --dev chronix
Create configuration file in root dir of your project with name chronix.config.js
// chronix.config.js
module.exports = {
engine: {
// the port on which the node-state-engine will run
port: 8001
},
};
Run compile command to build contracts and dependencies
npx chronix compile
Start engine running start command
npx chronix start
Interact with the environment using http-api or using the sdk
SDK
import { createSDK } from "chronix";
(async () => {
const sdk = await createSDK("http://localhost:8001");
const { port } = await sdk.env.hardhat({});
const simpleDVTState = await sdk.story("simple-dvt-mock/initial-state", {
sessionKey: port,
});
console.log(simpleDVTState);
})();
HTTP-API
If you want to interact with the API directly, you can check out the list of endpoints at address: http://localhost:8001/docs (port from engine config)
Usecases
Testing your applcation using Jest
import { createSDK, chronix } from 'chronix';
jest.setTimeout(100_000);
describe('Simple DVT', () => {
let sdk: chronix.SDK;
let session: chronix.Session;
let initialState: chronix.StoryResult<'simple-dvt-mock/initial-state'>;
beforeAll(async () => {
sdk = await createSDK('http://localhost:8001');
session = await sdk.env.hardhat({});
initialState = await session.story('simple-dvt-mock/initial-state', {});
});
test('initial state created', () => {
console.log(initialState);
});
});
Known Issues
- Regenerating types inside node_modules requires a server reboot ts: https://github.com/microsoft/vscode/issues/187208