Circuitz - iPaaS on the IC

Project summary

Circuitz is an iPaaS (Integration Platform as a Service) platform designed for interaction within the IC ecosystem. This platform simplifies the process of integrating with various canisters. It allows seamless data exchange and transformation, building on each step to create a circuit (workflow).

The primary goal is to ease the process of data integration and management on the IC, making it more accessible and user-friendly for everyone. The aim is to bridge the gap between complex blockchain technology and everyday web2 applications using ICs HTTP outcalls, for both developers and non-developers.

Key fuctionalities are:

  • Node filtering

  • Lookup Node filtering

  • Data mapper

  • Output Node

The platform is designed for the following users:

  • Developers who are looking to streamline their workflows in building and managing application on the IC.

  • Non-developers such as business analysts who require an interface to interact with and utilize data from various canisters.

How it works

Users can create a Circuit that referres to its own Nodes canister. This canister is the base of your circuits where you store 1 or more nodes.

Each circuit will begin with an Input Node that retreives data from the outside world, with the chosen verification method. This data then flows to its subsequent nodes.

Lookup node

A lookup is basically saying “Fetch data from Canister X or a Web2 Service X and combine it with my previous node’s data”.

Lookup node Pins

These Pins can act as a sort of middlewares for the node.

  • Filter pin: allows skipping the node based on certain rules

  • Lookup filter pin: prevents data flow to the next node based on rules

  • Mapper: converts data into a different format

All these rules can be based on dynamic values received from the Input Node or Lookup Node’s data.

Output node

An Output Node is the end destination of your circuit. This will consolidate all data and send it to a designated Canister or Web2 service.

Here is a little preview: https://x.com/Slmii05/status/1731423434180051110

Arcitecture

The project consists of a front-end and a back-end

Front-end

Developed in React, this allows users to configure their circuits and nodes to suit their needs, including data fetching and mapping.

Back-end

Developed in Rust using tools like ic-cdk and serde, the back-end can operate independently, running circuits based on user configurations.

Canisters

The project includes a 3 canister-system:

  • Front end canister

  • Main canister
    – Stores user data and cirtuits meta data

  • Nodes canister
    – Each circuit a user creates will also create its own nodes canister.This canister is then in full controll of the owner, meaning that the user is responsible for the canister management, eg. cycles
    – Stores nodes configuration, errors and logs

Status

The front-end configuration of circuits and nodes is nearly complete. The next steps involve enabling the back-end to operate independently and implementing logging and error tracing for better user debugging.

Future

The roadmap includes features like automated node triggering and custom script injections for detailed data transformations. These are just a few examples of the project’s future.

2 Likes

This looks very interesting.
It looks like this could be in the realm of pub/sub
There is a working group currently working on a standard if it applies/you are interested

1 Like

thanks, this looks interesting as well and a good usecase for this project!

1 Like

Here is a simple example I would like to share.

The Input Node retreives data from an ecommerce webshop, which then fetches the corresponding NFT for that item.

The Lookup makes a call to the configured API to fetch the NFT, and afterwards it transforms/maps the data to an accepted format by the API, that the Output Node will POST the data to.