# Stream Transaction

Stream transactions will help you to track the activity of the subscribed address on the blockchain.(Currently Available for Ethereum Only)

### Response Schema:

<table><thead><tr><th width="225">Field</th><th>Description</th></tr></thead><tbody><tr><td>blockHash</td><td>Hash of the block.</td></tr><tr><td>blockNumber</td><td>Number of the block.</td></tr><tr><td>chainId</td><td><code>0x1</code> denotes ethereum.</td></tr><tr><td>from</td><td>Ethereum address of the sender of the transaction.</td></tr><tr><td>gas</td><td>Gas provided by the sender.</td></tr><tr><td>gasPrice</td><td>Amount of Ether that the sender is willing to pay for each unit of gas.</td></tr><tr><td>maxPriorityFeePerGas</td><td>max Priority Fee Per Gas of transaction</td></tr><tr><td>maxFeePerGas</td><td>max Fee Per Gas of transaction</td></tr><tr><td>accessList</td><td>accessList of transaction</td></tr><tr><td>hash</td><td>Hash of the transaction.</td></tr><tr><td>input</td><td>The data sent along with the transaction.</td></tr><tr><td>nonce</td><td>Unique value that is incremented with each transaction and is unique to each account.</td></tr><tr><td>v,r,s</td><td>Signature values that are used to verify the transaction's authenticity.</td></tr><tr><td>to</td><td>Ethereum address of the recipient of the transaction.</td></tr><tr><td>transactionIndex</td><td>Integer of the transactions index position in the block.</td></tr><tr><td>value</td><td>Amount of Ether to be transferred in the transaction.</td></tr><tr><td>yParity</td><td>yParity of transactions</td></tr><tr><td>timestamp</td><td>Block timestamp</td></tr><tr><td>type</td><td>Type of transaction method</td></tr><tr><td>tokenStandard</td><td>Token Standard involved in the transaction. <br>Like <code>ERC20, ERC721 and ERC1155</code> </td></tr></tbody></table>

### Streaming transactions:

Users can stream transactions in two ways:

#### Example 1: via wscat script (For Linux based distro)

First, the user needs to run the following command in their terminal to install wscat in their system:&#x20;

```shell
npm install -g wscat 
```

After installing wscat, the user needs to create a shell script and paste the following sample code:

**Client Side Sample Socket Code** :

```shell
#!/bin/bash

echo "Price Discovery\n"
read -p "x-api-key: " YOUR_API_KEY
wscat -c wss://pricediscovery.expand.network -H authorization:secret-token -H x-api-key:$YOUR_API_KEY
```

{% hint style="info" %}
Once the file has been saved, the user will need to grant permission for it to be executed. This can be accomplished by executing the following command:
{% endhint %}

```bash
chmod +x YOUR_FILE_NAME.sh
```

After following the above steps, the user needs to run the file. This can be done by entering the filename in the console.

**Executing a query**:&#x20;

After executing the aforementioned file(shell script), the user will be prompted to input the appropriate API key.

After entering the API key, user can subscribe to following actions:

```shell
{"action": "streamTransactions"}
```

{% hint style="info" %}
Make sure you are connected to the WebSocket before you perform the following queries.&#x20;
{% endhint %}

**Applying a filter in the query**:&#x20;

Users can apply the following filters in their query:-

* addresses
* minAmount(Wei)
* maxAmount(Wei)

**The above filters can be applied in any combination, using the following syntax**:&#x20;

```shell
{"action": "streamTransactions", "addresses": "array_of_strings", "minAmount": "minimum_amount_in_wei", "maxAmount": "maximum_amount_in_wei"}
```

**Sample Query**:

```shell
{"action": "streamTransactions", "addresses": ["0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D","0xdafea492d9c6733ae3d56b7ed1adb60692c98bc5"], "minAmount": "0", "maxAmount": "1000000000000000000000000000000000000"}
```

#### Example 2. via javascript code

First, the user needs to run the following command in their terminal to install wscat in their system:&#x20;

```shell
npm i ws
```

After installing ws, the user needs to run the following sample code on their device to start streaming:&#x20;

**Client Side Sample Socket Code** :

```javascript
const WebSocket = require('ws');
const url = 'wss://pricediscovery.expand.network';
const options = {
  headers: {
    Authorization: 'secret-token',
    'x-api-key': 'YOUR_API_KEY', // Replace this with your API Key
  }
};

const ws = new WebSocket(url, options);

ws.on('open', () => {
  console.log('WebSocket connection established.');
  const payload = {
    action: "streamTransactions",
    addresses: ["0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D","0xdafea492d9c6733ae3d56b7ed1adb60692c98bc5"],
    minAmount: "0",
    maxAmount: "10000000000000000000000000000000000000000000"
  };
  ws.send(JSON.stringify(payload));
});


ws.on('message', (data) => {
  console.log(`Received data: ${data}`);
});

ws.on('close', () => {
  console.log('WebSocket connection closed.');
});
```

{% hint style="info" %}
The payload can be modified, depending on the action.
{% endhint %}

### Expected Output:

```json
{
    "blockHash": "0x98aaecde2e4f18d962bd928b3f438ceb68b7f2e167b05d457bdad4588b0945fb",
    "blockNumber": 21921404,
    "from": "0x891022873dd8e82d4817cc3cd6f8850dfcf0d50f",
    "gas": 203518,
    "gasPrice": "762473304",
    "maxPriorityFeePerGas": "100000000",
    "maxFeePerGas": "781194160",
    "hash": "0x8466921039f757c5258afc197ca6def50f09d34cc3ba2d75a3f78d920b5ec1c4",
    "input": "0x095ea7b30000000000000000000000000016ab524fdf4e8289d4066ad6deef8226c637ca000000000000000000000000000000000000000000000000000000004abe8580",
    "nonce": 1,
    "to": "0x226bb599a12c826476e3a771454697ea52e9e220",
    "transactionIndex": 137,
    "value": "0",
    "type": "approve",
    "accessList": [],
    "chainId": "0x1",
    "v": "0x1",
    "yParity": "0x1",
    "r": "0x3687ccbc146c727b1eaa93c1c445c40b6d6d25be00fb1e65a139ba30235035d8",
    "s": "0x30af56312a1e31f40156aa50a170ea5cc7e3b4a48a84a58c57091c56eed6f717",
    "tokenStandard": [
        "ERC-20"
    ],
    "timestamp": 1740463115
}
```

### How to disconnect:&#x20;

To disconnect from our API, enter `ctrl-c`  in the connected console.
