Supported Chains
Effectstream is chain-agnostic. It can connect to, monitor, and write to multiple blockchains simultaneously.
- EVM: Ethereum, Arbitrum, Optimism, Polygon, and other EVM-compatible chains.
- Midnight: Privacy-focused ZK chain for confidential smart contracts.
- Cardano: UTXO-based blockchain using Ouroboros proof-of-stake.
- Avail: Data Availability (DA) layer for scalable rollups.
- Bitcoin: The original UTXO blockchain.
- Polkadot: Polkadot relay chain and Substrate-based parachains.
- Mina: The lightweight ZK blockchain.
- Algorand: Pure Proof-of-Stake blockchain.
Each chain integration can contain up to 4 parts:
-
Read (Sync Service): Configuring the node to listen for specific events or state changes.
-
Write (Batcher): Configuring adapters to submit transactions back to the chain.
-
Connect (Wallets & Cryptography): Connecting user wallets in the frontend to sign messages and transactions.
-
Orchestration (Processes): Tools for spinning up a local node, indexer, etc, and deploying contracts automatically.
Feature Support Matrix
| Chain | Read Chain (Sync) | Write Chain (Batcher) | Local Node (Orchestrator) | Browser Wallet |
|---|---|---|---|---|
| EVM | ✅ | ✅ | ✅ | ✅ |
| Midnight | ✅ | ✅ | ✅ | ✅ |
| Cardano | ✅ | ✅ | ✅ | ✅ |
| Avail | ✅ | ✅ | ✅ | ✅ |
| Bitcoin | ✅ | ✅ | ✅ | ⚠️ |
| Polkadot | ⚠️ | ⚠️ | ⚠️ | ✅ |
| Mina | ⚠️ | ⚠️ | ⚠️ | ✅ |
| Algorand | ⚠️ | ⚠️ | ⚠️ | ✅ |
✅ Available | ⚠️ Partial or not built-in
Cryptography & Verification
Effectstream provides a unified package, @effectstream/crypto, to handle the complexities of different cryptographic standards (ECDSA, Ed25519, Schnorr, etc.).
Instead of installing specific SDKs for every chain (e.g., ethers, lucid, polkadot-js), you can use the CryptoManager singleton. This is particularly useful inside State Transition Functions (STFs) to verify that a user action was authorized by a specific wallet.
import { CryptoManager } from "@effectstream/crypto";
import { AddressType } from "@effectstream/utils";
// Generic verification using AddressType enum
const crypto = CryptoManager.getCryptoManager(AddressType.EVM);
// 1. Verify Address Format
const isValid = crypto.verifyAddress(userAddress);
// 2. Verify Some Signed Message
const isAuthorized = await crypto.verifySignature(userAddress, message, signature);