> ## Documentation Index
> Fetch the complete documentation index at: https://www.dynamic.xyz/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# On-chain events

> Track transaction activity across EVM and SVM networks

The `wallet.activity` event tracks all confirmed transaction activity for user WaaS (embedded) wallets. This enables you to monitor blockchain transactions across chains in real-time without polling or indexing.

## Supported networks

### EVM networks

| Network   | Mainnet | Testnet | Internal transfers |
| :-------- | :------ | :------ | :----------------- |
| Ethereum  | ✓       | Sepolia | ✓                  |
| Polygon   | ✓       | Amoy    | ✓                  |
| Optimism  | ✓       | Sepolia | ✓                  |
| Base      | ✓       | Sepolia | ✓                  |
| Arbitrum  | ✓       | Sepolia | ✓                  |
| BNB Chain | ✓       | Testnet | ✗                  |
| Avalanche | ✓       | Testnet | ✗                  |

<Note>
  Internal transfers are transactions where the wallet address is involved in an internal (nested) call rather than as the direct `to` or `from` on the top-level transaction — for example, interactions routed through smart contracts, bridges, or account abstraction entry points. On networks that do not support internal transfer tracking, `wallet.activity` events fire only when the wallet address appears directly in the top-level transaction.
</Note>

### SVM networks

| Network | Mainnet | Testnet |
| :------ | :------ | :------ |
| Solana  | ✓       | Devnet  |

## How it works

When a confirmed transaction involves a user's WaaS (embedded) wallet, Dynamic sends a `wallet.activity` webhook event to your configured endpoint. This includes both incoming and outgoing transactions.

#### Example payload

```json theme={"system"}
{
  "eventId": "2a92c161-3167-44ad-8fce-4c6cdaed8129",
  "messageId": "5a2a5360-bb7e-4ea6-9bd3-0146bf2f734f",
  "webhookId": "a86acea4-e050-4846-8e4f-0ae039f6e37c",
  "userId": "a5914498-7a8b-4c58-b04c-9624fef2897c",
  "externalUserId": "usr_abc123",
  "eventName": "wallet.activity",
  "environmentId": "123e4567-e89b-12d3-a456-426614174000",
  "environmentName": "live",
  "timestamp": "2025-06-09T14:30:59.210Z",
  "data": {
    "transactionHash": "0xc19598158b1064e1cf684b4607abe57ed18be754172d6d454930ed82be9f0174",
    "blockNumber": 21000000,
    "transactionTimestamp": "2025-06-09T14:30:55.000Z",
    "blockHash": "0x9b2c1f0e6a4d3b8c7e5f2a1d0c9b8a7f6e5d4c3b2a1908f7e6d5c4b3a2918f0e3",
    "blockExplorerUrls": [
      "https://etherscan.io/tx/0xc19598158b1064e1cf684b4607abe57ed18be754172d6d454930ed82be9f0174"
    ],
    "fromAddress": "0x2687c802ac5eb5da413a89dcfd6cd644e6aba280",
    "toAddress": "0xc0d70ec4bf711836207ae61358d5e822111cfdf8",
    "labels": ["external", "received"],
    "assetTransfers": [
      {
        "tokenAddress": "native",
        "fromAddress": "0x2687c802ac5eb5da413a89dcfd6cd644e6aba280",
        "toAddress": "0xc0d70ec4bf711836207ae61358d5e822111cfdf8",
        "amount": 0.05,
        "metadata": {
          "name": "Ether",
          "symbol": "ETH",
          "decimals": 18
        }
      }
    ],
    "chainName": "ETH",
    "networkId": 1
  }
}
```

## Registration event

When a new embedded wallet is created and the environment has on-chain activity tracking enabled, Dynamic registers the wallet address with on-chain monitoring providers. A `wallet.activity.registered` event is sent once this registration succeeds.

This event fires only once per wallet — not on duplicates, replays, or already-registered addresses. Use it to confirm that a wallet is actively monitored before expecting `wallet.activity` transaction events.

#### Example payload

```json theme={"system"}
{
  "eventId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "messageId": "f0e1d2c3-b4a5-6789-0abc-def123456789",
  "webhookId": "a86acea4-e050-4846-8e4f-0ae039f6e37c",
  "userId": "a5914498-7a8b-4c58-b04c-9624fef2897c",
  "eventName": "wallet.activity.registered",
  "environmentId": "123e4567-e89b-12d3-a456-426614174000",
  "environmentName": "sandbox",
  "timestamp": "2025-06-09T14:30:59.210Z",
  "data": {
    "walletAddress": "0x3FcE1F4F28DbA209344072867134A3a7F547C7f1",
    "walletId": "484e49ba-3026-4e2c-9bf0-ed98ae224833",
    "userId": "a5914498-7a8b-4c58-b04c-9624fef2897c"
  }
}
```

## Use cases

* Notify users when they receive funds
* Track transaction history for compliance or analytics
* Trigger downstream workflows based on on-chain activity
* Build real-time activity feeds in your application

## Getting started

To receive on-chain events:

1. [Set up a webhook endpoint](/docs/overview/developer-dashboard/webhooks/setup)
2. Subscribe to the `wallet.activity` and/or `wallet.activity.registered` event types
3. Process incoming events in your webhook handler

See the [wallet.activity event reference](/docs/overview/developer-dashboard/webhooks/events#param-wallet-activity) and [wallet.activity.registered event reference](/docs/overview/developer-dashboard/webhooks/events#param-wallet-activity-registered) for the full event payload structures.
