npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

n8n-nodes-evmstream

v0.2.3

Published

n8n community node for real-time EVM blockchain event streaming via Moralis Streams and Alchemy Webhooks

Downloads

176

Readme

n8n-nodes-evmstream

This is the only open-source n8n node package for real-time EVM blockchain event streaming. Never run security-critical blockchain tools from closed-source packages you cannot audit. If you can't read the code, you can lose your data. Audit this package yourself.

n8n community node package for real-time EVM blockchain event streaming via webhooks. Supports Moralis Streams and Alchemy Webhooks, giving you two independent providers for redundancy and flexibility.

First real-time blockchain event streaming nodes for n8n.

2 trigger nodes | 14+ chains | Multiple event types | Webhook signature verification | E2E tested

npm License: MIT


Table of Contents


Supported Providers

| Provider | Free Tier | Signature | Chains | Best For | |----------|-----------|-----------|--------|----------| | Moralis Streams | ~80K-120K events/mo (40K CU/day) | Keccak-256 | 14 EVM chains | Contract logs, decoded transfers, ABI filtering | | Alchemy Webhooks | ~750K events/mo (30M CU/mo, shared with RPC) | HMAC-SHA256 | 10 EVM networks | Address activity, NFT monitoring, GraphQL custom queries |

Both providers auto-manage webhook lifecycle: stream/webhook is created when the workflow activates and deleted when it deactivates.


Installation

n8n Community Nodes (Recommended)

  1. Go to Settings > Community Nodes in your n8n instance
  2. Enter n8n-nodes-evmstream
  3. Click Install

See the n8n community nodes installation guide for details.

Manual Installation

cd ~/.n8n/custom
npm install n8n-nodes-evmstream

Restart n8n after installation. See manual install docs.


Credentials Setup

Moralis Streams API Key

| Field | Required | Description | |-------|----------|-------------| | API Key | Yes | Your Moralis Web3 API Key |

How to get your Moralis API Key:

  1. Go to admin.moralis.io
  2. Sign up or log in (free account available)
  3. Navigate to Settings > Secrets (or the API Keys section)
  4. Copy your Web3 API Key
  5. In n8n, create a new Moralis Streams API credential and paste the key

The same API key works for all Moralis services (Streams, Web3 Data API, etc.). Free plan: 40,000 Compute Units/day (~80K-120K webhook events/month at 10-15 CU per event).

Alchemy Webhooks Auth Token

| Field | Required | Description | |-------|----------|-------------| | Auth Token | Yes | Your Alchemy Notify Auth Token |

How to get your Alchemy Auth Token:

  1. Go to dashboard.alchemy.com
  2. Sign up or log in (free account available, no credit card required)
  3. Navigate to the Webhooks section in the left sidebar (under Notify)
  4. At the top of the webhooks page, find your Auth Token (click to reveal/copy)
  5. In n8n, create a new Alchemy Webhooks API credential and paste the token

The Auth Token is account-wide (not per-app). Free plan: 30M Compute Units/month (~750K webhook events), 5 webhooks max, 25 RPS. Webhook events cost ~40 CU each (bandwidth-based at 0.04 CU/byte).


Node: Moralis Streams Trigger

Receives real-time EVM blockchain events via Moralis Streams webhooks. Automatically creates a stream when the workflow is activated and deletes it when deactivated.

Parameters

| Parameter | Type | Required | Description | |-----------|------|----------|-------------| | Chains | Multi-select | Yes | EVM chains to monitor (select one or more) | | Contract Addresses | String | Yes | Comma-separated list of contract addresses to monitor | | Monitor Type | Select | No | What to monitor (default: Contract Logs) | | ABI | JSON | No | Contract ABI (JSON array) — only event entries are used | | Topic0 Filter | String | No | Event signature hash to filter specific events |

Monitor Types

| Type | Value | Description | |------|-------|-------------| | Contract Logs | contractLogs | Monitor emitted event logs (default) | | Native Transactions | nativeTxs | Monitor native token transfers (ETH, MATIC, etc.) | | Internal Transactions | internalTxs | Monitor internal contract calls | | All Events | all | Monitor all event types |

Options

| Option | Type | Default | Description | |--------|------|---------|-------------| | Stream Description | String | n8n workflow stream | Description for the Moralis stream | | Include All Transaction Logs | Boolean | false | Include all logs for matching transactions | | Only Confirmed | Boolean | false | Only emit confirmed (not pending) events | | Verify Signature | Boolean | true | Verify the Moralis webhook signature (Keccak-256) |

Output Format

{
  "eventType": "erc20Transfers",
  "chainId": "0x1",
  "confirmed": true,
  "block": { "number": "18500000", "hash": "0xabc123...", "timestamp": "1698700800" },
  "data": {
    "transactionHash": "0xdef456...",
    "from": "0xa1b2c3d4...",
    "to": "0xf6e5d4c3...",
    "value": "2000000"
  }
}

Event types: logs, erc20Transfers, nftTransfers, txs, txsInternal.


Node: Alchemy Webhooks Trigger

Receives real-time blockchain events via Alchemy Notify webhooks. Automatically creates a webhook when the workflow is activated and deletes it when deactivated.

Parameters

| Parameter | Type | Required | Description | |-----------|------|----------|-------------| | Webhook Type | Select | Yes | Type of events to monitor | | Network | Select | Yes | Alchemy network to monitor | | Addresses | String | Yes* | Comma-separated addresses (Address Activity only) | | NFT Contract Address | String | Yes | NFT contract to monitor (NFT Activity only) | | NFT Token IDs | String | No | Comma-separated token IDs to filter (NFT Activity) | | GraphQL Query | String | Yes | Custom event filter (*Custom/GraphQL only) |

Webhook Types

| Type | Value | Description | |------|-------|-------------| | Address Activity | ADDRESS_ACTIVITY | Monitor addresses for ETH/ERC-20/ERC-721/ERC-1155 transfers | | NFT Activity | NFT_ACTIVITY | Monitor NFT contracts for transfer events | | Custom (GraphQL) | GRAPHQL | Arbitrary event filtering via GraphQL queries |

Options

| Option | Type | Default | Description | |--------|------|---------|-------------| | Webhook Name | String | (empty) | Name/description for the Alchemy webhook | | Verify Signature | Boolean | true | Verify the Alchemy webhook HMAC-SHA256 signature |

Output Format

{
  "eventType": "addressActivity",
  "network": "ETH_MAINNET",
  "category": "token",
  "webhookId": "wh_abc123",
  "data": {
    "fromAddress": "0xa1b2c3d4...",
    "toAddress": "0xf6e5d4c3...",
    "value": 1.5,
    "asset": "ETH",
    "category": "external"
  }
}

Supported Chains

Moralis Streams (14 chains)

| Chain | Hex Chain ID | Network | |-------|:------------:|---------| | Ethereum | 0x1 | Mainnet | | Polygon | 0x89 | Mainnet | | BSC | 0x38 | Mainnet | | Avalanche | 0xa86a | Mainnet | | Arbitrum | 0xa4b1 | Mainnet | | Optimism | 0xa | Mainnet | | Base | 0x2105 | Mainnet | | Fantom | 0xfa | Mainnet | | Cronos | 0x19 | Mainnet | | Ronin | 0x7e4 | Mainnet | | Sepolia | 0xaa36a7 | Testnet | | Mumbai (Amoy) | 0x13882 | Testnet | | BSC Testnet | 0x61 | Testnet | | Base Sepolia | 0x14a34 | Testnet |

Alchemy Webhooks (10 networks)

| Chain | Network ID | Network | |-------|-----------|---------| | Ethereum | ETH_MAINNET | Mainnet | | Polygon | MATIC_MAINNET | Mainnet | | Arbitrum | ARB_MAINNET | Mainnet | | Optimism | OPT_MAINNET | Mainnet | | Base | BASE_MAINNET | Mainnet | | Ethereum Sepolia | ETH_SEPOLIA | Testnet | | Polygon Amoy | MATIC_AMOY | Testnet | | Arbitrum Sepolia | ARB_SEPOLIA | Testnet | | Optimism Sepolia | OPT_SEPOLIA | Testnet | | Base Sepolia | BASE_SEPOLIA | Testnet |


Development

Prerequisites

  • Node.js 22+
  • npm

Setup

git clone https://github.com/pvdyck/n8n-nodes-evmstream
cd n8n-nodes-evmstream
cp .env.example .env
npm install

Environment Variables

MORALIS_API_KEY=your-moralis-api-key
ALCHEMY_AUTH_TOKEN=your-alchemy-auth-token

Scripts

| Command | Description | |---------|-------------| | npm run build | Compile TypeScript + copy icons | | npm test | Run unit tests | | npm run test:coverage | Run with coverage report | | npm run test:e2e | Moralis E2E tests (spawns n8n on port 5679) | | npm run test:e2e:alchemy:tunnel | Alchemy E2E tests with localhost.run tunnel | | npm run lint | ESLint check | | npm run lint:fix | ESLint auto-fix |

E2E Tests

Moralis Streams (4 tests)

| Test | What it validates | |------|---| | Stream Lifecycle | Create stream on activate, delete on deactivate | | Webhook Data Processing | POST webhook payload -> normalized event items | | Signature Rejection | Invalid signature -> rejected with 401 | | Test Webhook Handling | Moralis test payload (empty arrays) -> acknowledged, not triggered |

Alchemy Webhooks (4 tests)

| Test | What it validates | |------|---| | Webhook Lifecycle | Create webhook on activate, delete on deactivate | | Webhook Data Processing | POST webhook payload -> normalized activity items | | Signature Rejection | Invalid HMAC signature -> rejected | | Custom GraphQL Webhook | GraphQL webhook type -> event passthrough |


Design Decisions

For detailed architecture diagrams, webhook lifecycle flows, and source file maps, see IMPLEMENTATION.md.

Pure TypeScript Keccak-256

Moralis verifies webhook authenticity using Keccak-256 (the Ethereum hashing standard). Node.js crypto only provides SHA-3-256 which uses different padding (0x06 vs 0x01). This package includes a pure TypeScript BigInt-based Keccak-256 implementation — zero external dependencies.

Dual Signature Verification

  • Moralis: Keccak-256 hash of JSON.stringify(body) + apiKey, compared against x-signature header
  • Alchemy: HMAC-SHA256 of the raw request body using a per-webhook signing key, compared against x-alchemy-signature header

Webhook Trigger Pattern

Both nodes register a webhook URL with the provider. Events arrive in real-time as they happen on-chain. The webhook is automatically managed: created when the workflow activates, deleted when it deactivates.

Event Normalization

Both providers send structured payloads that are normalized into consistent n8n items with eventType, network/chain metadata, and data fields, making downstream processing straightforward.


Links & References

Moralis

| Resource | URL | |----------|-----| | Moralis Streams Documentation | docs.moralis.io/streams-api | | Moralis Admin Panel (API Keys) | admin.moralis.io | | Moralis Pricing | moralis.com/pricing |

Alchemy

| Resource | URL | |----------|-----| | Alchemy Webhooks Documentation | docs.alchemy.com/reference/notify-api-quickstart | | Alchemy Dashboard (Auth Token) | dashboard.alchemy.com | | Alchemy Pricing | alchemy.com/pricing |

n8n

| Resource | URL | |----------|-----| | Community Nodes Install (GUI) | docs.n8n.io/integrations/community-nodes/installation/gui-install | | Community Nodes Install (Manual) | docs.n8n.io/integrations/community-nodes/installation/manual-install |

GitHub

| Repository | URL | |------------|-----| | This Package | github.com/pvdyck/n8n-nodes-evmstream |


License

MIT