# Introduction

Welcome to the API Documentation of VeChain Stats, the leading block explorer for the vechain blockchain!&#x20;

This documentation serves as a comprehensive and professional guide that outlines the various endpoints, request and response formats, authentication mechanisms, rate limiting, error handling, and best practices, equipping you with the necessary tools to effectively integrate with our Blockchain Explorer. By leveraging our API, you can seamlessly retrieve in-depth information about transactions, addresses, blocks, and more, enabling you to effortlessly build sophisticated applications and services on top of the blockchain.

Please note that in order to use our API, you will need a valid API key, which can be obtained by registering for an account on our platform. Once you have an API key, you can start making requests to our API and harness the power of the blockchain to build innovative applications and services. So let's dive in and explore the possibilities of our Blockchain Explorer API!&#x20;

{% hint style="info" %}
**Source attribution** via a backlink or a mention that your app is **"Powered by vechainstats.com APIs"** is required except for personal/private usage.
{% endhint %}


# Getting an API Key

Within VeChainStats, every user is able to create an account to create a free API key. To obtain an API key, please follow these steps:

1. Create an account on VeChainStats by navigating to 'API' under the 'More' dropdown in the top bar. You will end up on the page below where you can press 'Sign Up' which prompts a window allowing you to set up your account. After creating your credentials you will have to verify your email by pressing the link that's sent to your email.

<figure><img src="https://1145306167-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FESkyzeOkl7HeLgRCneHE%2Fuploads%2F4UBAfVrot6qAr2hC1PRL%2FScherm%C2%ADafbeelding%202023-11-29%20om%2011.30.33.png?alt=media&amp;token=9e21ab40-562e-4a3a-8ebd-ba7f80fee7ac" alt=""><figcaption><p>Sign up for an account</p></figcaption></figure>

2. After validating your email by clicking the link that has been sent to you, you should be automatically logged in and brought to your personal API dashboard. Clicking the button 'create a free API Key' should generate your first API Key.&#x20;

<figure><img src="https://1145306167-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FESkyzeOkl7HeLgRCneHE%2Fuploads%2F9IIjOmkNYyXOgWgeZrHI%2FScherm%C2%ADafbeelding%202023-11-29%20om%2011.25.26.png?alt=media&amp;token=c93d88d6-9add-4f3d-9de6-3c72bf99565a" alt=""><figcaption><p>Create a free API Key</p></figcaption></figure>

Creating a premium or enterprise key through the dashboard isn't available at this time. If you're interest in obtaining a key with higher request limits and premium endpoints you should reach out through our contact form.&#x20;

<figure><img src="https://1145306167-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FESkyzeOkl7HeLgRCneHE%2Fuploads%2FKLb09VIFj0QORdatHfPy%2FScherm%C2%ADafbeelding%202023-11-29%20om%2011.56.55.png?alt=media&amp;token=a2afc983-7e7d-4efb-b704-2599828ce824" alt=""><figcaption><p>Contact Us for an upgraded API Key. </p></figcaption></figure>


# Authentication

Utilizing Your API Key&#x20;

To interact with the VeChainStats API, you have the flexibility to employ any server-side programming language capable of making HTTP requests. All requests must be directed towards the domain <https://api.vechainstats.com/v2/>[.](https://api.vechainstats.com/v2/) You have two options for incorporating your API Key into REST API calls:

1. Preferred approach: Through a dedicated custom header named X-API-Key.

In your application, you need to add the API Key to the header of your requests for authentication. Below we provide some code examples to add the API Key to the header in different environments:

{% tabs %}
{% tab title="curl (bash)" %}

```bash
curl -X GET "https://api.vechainstats.com/v2/network/totals" -H "X-API-Key: YOUR_API_KEY_HERE"
```

{% endtab %}

{% tab title="java" %}

```java
import java.net.HttpURLConnection;
import java.net.URL;
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class APIClient {
    public static void main(String[] args) {
        try {
            String apiKey = "YOUR_API_KEY";
            String apiUrl = "https://api.vechainstats.com/v2/network/totals";

            URL url = new URL(apiUrl);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();

            // Set the request method to GET
            connection.setRequestMethod("GET");

            // Set the API Key header
            connection.setRequestProperty("X-API-Key", apiKey);

            // Read the response
            BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            String inputLine;
            StringBuilder response = new StringBuilder();

            while ((inputLine = in.readLine()) != null) {
                response.append(inputLine);
            }

            // Close the connection and print the response
            in.close();
            System.out.println(response.toString());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

```

{% endtab %}

{% tab title="JavaScript (Node.js)" %}

```javascript
const https = require('https');

const apiKey = 'YOUR_API_KEY';
const apiUrl = 'https://api.vechainstats.com/v2/network/totals';

const options = {
  method: 'GET',
  headers: {
    'X-API-Key': apiKey,
  },
};

const req = https.request(apiUrl, options, (res) => {
  let data = '';

  res.on('data', (chunk) => {
    data += chunk;
  });

  res.on('end', () => {
    console.log(data);
  });
});

req.on('error', (error) => {
  console.error(error);
});

req.end();

```

{% endtab %}

{% tab title="Go" %}

```go
package main

import (
	"fmt"
	"net/http"
	"io/ioutil"
)

func main() {
	apiKey := "YOUR_API_KEY"
	apiURL := "https://api.vechainstats.com/v2/network/totals"

	req, err := http.NewRequest("GET", apiURL, nil)
	if err != nil {
		fmt.Println(err)
		return
	}

	req.Header.Set("X-API-Key", apiKey)

	client := &http.Client{}
	resp, err := client.Do(req)
	if err != nil {
		fmt.Println(err)
		return
	}
	defer resp.Body.Close()

	body, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		fmt.Println(err)
		return
	}

	fmt.Println(string(body))
}

```

{% endtab %}

{% tab title="Python" %}

```python
import requests

# Set your API Key as a variable
API_KEY = "YOUR_API_KEY"

# Define the API endpoint
api_url = "https://api.vechainstats.com/v2/network/totals"

# Set the headers with the API Key
headers = {
    "X-API-Key": API_KEY
}

# Make a GET request to the API
response = requests.get(api_url, headers=headers)

# Print the response
print(response.text)
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$API_KEY = 'your_api_key_here';
$url = 'https://api.vechainstats.com/v2/network/totals';

// Initialize cURL session
$ch = curl_init($url);

// Set cURL options
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Return output as string
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    "X-API-Key: $API_KEY"
));

// Execute the cURL session and fetch the data
$response = curl_exec($ch);

// Check for cURL errors
if(curl_errno($ch)) {
    echo 'cURL error: ' . curl_error($ch);
} else {
    // Decode JSON response
    $data = json_decode($response, true);

    // Print the response
    print_r($data);
}

// Close the cURL session
curl_close($ch);
?>
```

{% endtab %}
{% endtabs %}

Replace `"YOUR_API_KEY"` with your actual API key.

2. Convenience method: By including it as a query string parameter named VCS\_API\_KEY.&#x20;

```
Example request:

https://api.vechainstats.com/v2/account/vet-vtho
    ?address=0xd0d9cd5aa98efcaeee2e065ddb8538fa977bc8eb
    &VCS_API_KEY=YOUR_API_KEY
```

Replace `YOUR_API_KEY` with your actual API key.

{% hint style="danger" %}
**Security Alert:** Safeguarding your API Key from public exposure is of utmost importance. For operational environments, it is strongly advised to utilize the custom header option instead of the query string method when transmitting your API Key.
{% endhint %}


# Postman

To help with development, we provide a postman collection that you can import and use to start testing and debugging immediately.

1. Visit the '[VCS2 API Production](https://www.postman.com/vechainstats/workspace/vcs2-api-production/folder/8150792-bcd394d3-e94d-41b3-9783-5ed1bfec1f46)' collection
2. Duplicate or fork the collection
3. Input your API Key in the collection variables
4. Start testing<br>


# Swagger

To help you get started, we provide a Swagger UI that you can and use to start testing and debugging immediately.

1. Visit <https://swagger.vechainstats.com>
2. Click the 'Authorize' button and input your API Key
3. Start testing


# Account

**Endpoints**

* Account Stats
* Account Info
* Account VTHO Info
* VET/VTHO Balance
* Transactions Out


# Account Stats

Returns metrics on the total, new, active and seen accounts on vechain.

{% hint style="info" %}
**Note :** This endpoint is throttled to **10 calls/minute** regardless of API Pro tier.
{% endhint %}

```
https://api.vechainstats.com/v2/account/stats
    ?date=2023-09-25
    &expanded=true
    &VCS_API_KEY=your_api_key
```

{% tabs %}
{% tab title="Request" %}

| Parameter    | Description                                                                                          |
| ------------ | ---------------------------------------------------------------------------------------------------- |
| date         | The requested date formatted as yyyy-mm-dd                                                           |
| expanded     | Either `true` or `false`. Setting this option to `true` expands the response with extra information. |
| {% endtab %} |                                                                                                      |

{% tab title="Response" %}

```json
{
    "status": {
        "success": true,
        "message": "OK"
    },
    "data": {
        "addresses_known": 2197260,
        "addresses_new": 1710,
        "addresses_active": 6798,
        "addresses_seen": 10480
    },
    "meta": {
        "date": "2023-09-22",
        "expanded": true,
        "partial_data": false,
        "timestamp": 1695653926
    }
}
```

{% endtab %}
{% endtabs %}


# Account Extended Stats

Returns extended metrics on the total, new, active and seen accounts on vechain. This premium endpoint also included stats on 7d activity and has a higher request limit.

{% hint style="info" %}
**Note :** This endpoint is throttled to **30 calls/minute** regardless of API tier.
{% endhint %}

```
https://api.vedev.io/v2/account/extended-stats
    ?date=2024-08-19
    &VCS_API_KEY=your_api_key
```

{% tabs %}
{% tab title="Request" %}

| Parameter    | Description                                |
| ------------ | ------------------------------------------ |
| date         | The requested date formatted as yyyy-mm-dd |
| {% endtab %} |                                            |

{% tab title="Response" %}

```json
{
    "status": {
        "success": true,
        "message": "OK"
    },
    "data": {
        "addresses_known": 4068942,
        "addresses_new": 89355,
        "addresses_active": 46203,
        "addresses_active_7d": 310636,
        "addresses_seen": 140320,
        "addresses_seen_7d": 452463,
        "contracts_known": 28422,
        "contracts_new": 45,
        "contracts_active": 438
    },
    "meta": {
        "date": "2024-08-18",
        "partial_data": false,
        "timestamp": 1724061579
    }
}
```

{% endtab %}
{% endtabs %}


# Account Info

Returns metadata of a requested account address

{% hint style="info" %}
**Note :** This endpoint is throttled to **30 calls/minute** regardless of API Pro tier.
{% endhint %}

```
https://api.vechainstats.com/v2/account/info
    ?address=0xFF5ba88a17b2E16D23FF6647E9052E937AcB1406
    &expanded=true
    &VCS_API_KEY=your_api_key
```

{% tabs %}
{% tab title="Request" %}

| Parameter    | Description                                                                                          |
| ------------ | ---------------------------------------------------------------------------------------------------- |
| address      | The address you want to query                                                                        |
| expanded     | Either `true` or `false`. Setting this option to `true` expands the response with extra information. |
| {% endtab %} |                                                                                                      |

{% tab title="Response" %}

```json
{
    "status": {
        "success": true,
        "message": "OK"
    },
    "data": {
        "vcs_alias": "Coinbase (Hot Wallet 4)",
        "has_code": false,
        "node_type": "",
        "balance_vet": "343339.037779306251836017",
        "balance_vtho": "60837952.2920319642473895",
        "first_seen_block": 15694364,
        "first_seen_timestamp": 1687467730,
        "last_seen_block": 16521178,
        "last_seen_timestamp": 1695736140,
        "has_txns_in": true,
        "has_txns_out": true
    },
    "meta": {
        "address": "0xff5ba88a17b2e16d23ff6647e9052e937acb1406",
        "expanded": true,
        "timestamp": 1695736222
    }
}
```

{% endtab %}
{% endtabs %}

{% hint style="info" %}
Works for both regular accounts and contract addresses
{% endhint %}


# Account VTHO Info

Returns the paid, generated and sponsored VTHO of a requested address

{% hint style="info" %}
**Note :** This endpoint is throttled to **30 calls/minute** regardless of API Pro tier.
{% endhint %}

```
https://api.vechainstats.com/v2/account/vtho-info
    ?address=0x0da8fa475c8272d21be204fe8112d1e2cd698c96
    &VCS_API_KEY=your_api_key
```

{% tabs %}
{% tab title="Request" %}

| Parameter    | Description                   |
| ------------ | ----------------------------- |
| address      | The address you want to query |
| {% endtab %} |                               |

{% tab title="Response" %}

```json
{
    "status": {
        "success": true,
        "message": "OK"
    },
    "data": {
        "vtho_paid": "73.862420000000000000",
        "vtho_generated": "20708583.9283780002000000",
        "vtho_sponsored": "0"
    },
    "meta": {
        "address": "0x0da8fa475c8272d21be204fe8112d1e2cd698c96",
        "timestamp": 1695971364
    }
}
```

{% endtab %}
{% endtabs %}


# VET/VTHO Balance

Returns the VET and VTHO balance of a given address. The field 'vet\_staked' shows the amount of VET held in Stargate node NFTs, the official staking mechanism of vechain.

```
https://api.vechainstats.com/v2/account/vet-vtho
    ?address=0x61c3ba79478f8fd35181da94aae1a813384f0e96
    &VCS_API_KEY=your_api_key
```

{% tabs %}
{% tab title="Request" %}

| Parameter    | Description                                                      |
| ------------ | ---------------------------------------------------------------- |
| address      | The address of which you want to query the VET and VTHO balance. |
| {% endtab %} |                                                                  |

{% tab title="Response" %}

```json
{
    "status": {
        "success": true,
        "message": "OK"
    },
    "data": {
        "vet": "5957.929529697327753023",
        "vet_staked": "3380000",
        "vtho": "1365231.827454740375982794"
    },
    "meta": {
        "address": "0x61c3ba79478f8fd35181da94aae1a813384f0e96",
        "timestamp": 1753706216
    }
}
```

{% endtab %}
{% endtabs %}


# Transactions In

Returns the transactions in of a requested address

```
https://api.vechainstats.com/v2/account/txin
    ?address=0x6c0A6e1d922E0e63901301573370b932AE20DAdB
    &page=1
    &sort=desc
    &VCS_API_KEY=your_api_key
```

{% hint style="info" %}
Transactions on vechain can have multiple receivers but must always have 1 origin, this is exampled by the "clauses\_incoming" and "clauses\_total" fields. In the example response below, the requested address was the incoming receiver of 1 out of 2 clauses in all three unique transaction.
{% endhint %}

{% tabs %}
{% tab title="Request" %}

| Parameter    | Description                                                                             |
| ------------ | --------------------------------------------------------------------------------------- |
| address      | The address you want to query                                                           |
| page         | The `integer` page number, the available pages are shown in the response meta fields    |
| sort         | The sorting preference, use `asc` to sort by ascending and `desc` to sort by descending |
| {% endtab %} |                                                                                         |

{% tab title="Response" %}

```json
{
    "status": {
        "success": true,
        "message": "OK"
    },
    "data": [
        {
            "txid": "0x9d5c2e153324fd364f2c9db543a5552f83ec2364abe6d9a25e3d86ddbdd6d9b4",
            "status": "success",
            "from": "0xf84ad4f20e1ed650c410b2e279da14c36fe9b357",
            "block_height": 19000243,
            "block_timestamp": 1720530440,
            "clauses_incoming": 1,
            "clauses_total": 2
        },
        {
            "txid": "0x976ac0f6655d5f9eb285be39bd0c7280fc0ce752e5a91d5adec0babc0cc35258",
            "status": "reverted",
            "from": "0x7904999901885a5168dbcf024404f36c162f24d0",
            "block_height": 19000243,
            "block_timestamp": 1720530440,
            "clauses_incoming": 1,
            "clauses_total": 2
        },
        {
            "txid": "0x1e4fd92577e4e6cf5dae80a2dafd873aa1864b6e448300155419b74a6bd045f3",
            "status": "success",
            "from": "0xf84ad4f20e1ed650c410b2e279da14c36fe9b357",
            "block_height": 18993820,
            "block_timestamp": 1720466200,
            "clauses_incoming": 1,
            "clauses_total": 2
        }
    ],
    "meta": {
        "address": "0x6c0a6e1d922e0e63901301573370b932ae20dadb",
        "count": 901960,
        "page": 1,
        "pages": 4510,
        "per_page": 200,
        "sort": "desc",
        "timestamp": 1720533691
    }
}
```

{% endtab %}
{% endtabs %}


# Transactions Out

Returns the transactions out of a requested address

```
https://api.vechainstats.com/v2/account/txout
    ?address=0xA129f34Ad3e333373425088De3e6d7C09E0B7Dab
    &page=1
    &sort=asc
    &VCS_API_KEY=your_api_key
```

{% tabs %}
{% tab title="Request" %}

| Parameter    | Description                                                                             |
| ------------ | --------------------------------------------------------------------------------------- |
| address      | The address you want to query                                                           |
| page         | The `integer` page number, the available pages are shown in the response meta fields    |
| sort         | The sorting preference, use `asc` to sort by ascending and `desc` to sort by descending |
| {% endtab %} |                                                                                         |

{% tab title="Response" %}
{% hint style="info" %}
Output below is shortened and only serves as an example
{% endhint %}

```json
{
    "status": {
        "success": true,
        "message": "OK"
    },
    "data": [
        {
            "txid": "0x4543676bf59d78993c9c6a66f88f821d2b651a9f2f401e38f403c96eb990d2a5",
            "status": "success",
            "block_height": 11851304,
            "block_timestamp": 1649034020,
            "clauses": 1,
            "vtho_paid": "0.89153"
        },
        {
            "txid": "0xf5e9f3469713fe191611bac0ab1cba4b7b74cae54b7db63772b52fcb361d5603",
            "status": "success",
            "block_height": 11851304,
            "block_timestamp": 1649034020,
            "clauses": 1,
            "vtho_paid": "0.81653"
        },
        {
            "txid": "0x08d29b9e3ad73d94f2a907fe2cb8b0d39f77a74d6a77537ad44f85cf79fcd2c1",
            "status": "reverted",
            "block_height": 11872643,
            "block_timestamp": 1649247420,
            "clauses": 1,
            "vtho_paid": "1.03089"
        }
    ],
    "meta": {
        "address": "0xa129f34ad3e333373425088de3e6d7c09e0b7dab",
        "count": 204361,
        "page": 1,
        "pages": 2044,
        "per_page": 100,
        "sort": "asc",
        "timestamp": 1696253088
    }
}
```

{% endtab %}
{% endtabs %}


# Token Transfers

Returns the Token Transfers where a requested address is either the sender or receiver

```
https://api.vechainstats.com/v2/account/token-transfers
    ?token_type=vip180
    &address=0x20a02aca8f66cbf324c61dc9c1c40d48a8946651
    &page=1
    &sort=desc
    &VCS_API_KEY=your_api_key
```

{% tabs %}
{% tab title="Request" %}

| Parameter    | Description                                                                             |
| ------------ | --------------------------------------------------------------------------------------- |
| token\_type  | <p>Accepted values:<br>- vip180<br>- vet<br>- vtho</p>                                  |
| address      | The address you want to query                                                           |
| page         | The `integer` page number, the available pages are shown in the response meta fields    |
| sort         | The sorting preference, use `asc` to sort by ascending and `desc` to sort by descending |
| {% endtab %} |                                                                                         |

{% tab title="Response" %}

```json
{
    "status": {
        "success": true,
        "message": "OK"
    },
    "data": [
        {
            "txid": "0x129bc9081832bea2aec89751434d9c8ea14a8812bcccaa1bae0d796faf365b76",
            "clause_index": 0,
            "event_index": 0,
            "sender": "0x20a02aca8f66cbf324c61dc9c1c40d48a8946651",
            "receiver": "0x274f09ed3351eb02c9a5a5f81291e450c0dbe68b",
            "block_height": 18979107,
            "block_timestamp": 1720319070,
            "token": "hai",
            "token_symbol": "HAI",
            "token_name": "Hacken",
            "token_contract": "0xacc280010b2ee0efc770bce34774376656d8ce14",
            "token_decimals": 8,
            "amount": "258"
        },
        {
            "txid": "0x92ff4cd519a57b206b746415623a4c365381a02773688518d2eeea90dfc02793",
            "clause_index": 0,
            "event_index": 0,
            "sender": "0x20a02aca8f66cbf324c61dc9c1c40d48a8946651",
            "receiver": "0x1000b0e0e5035605680527a89f58be083487ac66",
            "block_height": 18975393,
            "block_timestamp": 1720281930,
            "token": "sha",
            "token_symbol": "SHA",
            "token_name": "Safe Haven",
            "token_contract": "0x5db3c8a942333f6468176a870db36eef120a34dc",
            "token_decimals": 18,
            "amount": "1015440"
        },
        {
            "txid": "0xb1c3b3e94dad6b16db8122751c824f666cac55cacfec53a9ff6bd1407558573d",
            "clause_index": 0,
            "event_index": 0,
            "sender": "0x20a02aca8f66cbf324c61dc9c1c40d48a8946651",
            "receiver": "0x9b9b182dc21631adcbdd2b271f635d5546bc0211",
            "block_height": 18433089,
            "block_timestamp": 1714858720,
            "token": "oce",
            "token_symbol": "OCE",
            "token_name": "OceanEx",
            "token_contract": "0x0ce6661b4ba86a0ea7ca2bd86a0de87b0b860f14",
            "token_decimals": 18,
            "amount": "723629"
        }
    ],
    "meta": {
        "token_type": "vip180",
        "address": "0x20a02aca8f66cbf324c61dc9c1c40d48a8946651",
        "count": 4300,
        "page": 1,
        "pages": 22,
        "per_page": 200,
        "sort": "desc",
        "timestamp": 1720603700
    }
}
```

{% endtab %}
{% endtabs %}


# NFT Transfers

Returns the NFT Transfers where a requested address is either the sender or receiver of an NFT

```
https://api.vechainstats.com/v2/account/nft-transfers
    ?address=0xeeb0b1ead396b75c820130dafdee2898be939cf6
    &page=1
    &sort=desc
    &VCS_API_KEY=your_api_key
```

{% tabs %}
{% tab title="Request" %}

| Parameter    | Description                                                                             |
| ------------ | --------------------------------------------------------------------------------------- |
| address      | The address you want to query                                                           |
| page         | The `integer` page number, the available pages are shown in the response meta fields    |
| sort         | The sorting preference, use `asc` to sort by ascending and `desc` to sort by descending |
| {% endtab %} |                                                                                         |

{% tab title="Response" %}

```json
{
    "status": {
        "success": true,
        "message": "OK"
    },
    "data": [
        {
            "txid": "0x416cd03a2d43a9979d9035c3fa5445304dfd48e259693d896ee06cd35b6e39e5",
            "clause_index": 4,
            "sender": "0xc3f851f9f78c92573620582bf9002f0c4a114b67",
            "receiver": "0x4d54ebe891682be7847b33163199427bff553fdd",
            "block_height": 18854669,
            "block_timestamp": 1719074630,
            "nft_project_id": "domination",
            "nft_name": "Domination",
            "nft_contract": "0xa01ae12475e8b93e37caa339ef147c1d10cfdee9",
            "nft_token_id": "1260",
            "type": "transfer"
        },
        {
            "txid": "0x416cd03a2d43a9979d9035c3fa5445304dfd48e259693d896ee06cd35b6e39e5",
            "clause_index": 2,
            "sender": "0xc3f851f9f78c92573620582bf9002f0c4a114b67",
            "receiver": "0x4d54ebe891682be7847b33163199427bff553fdd",
            "block_height": 18854669,
            "block_timestamp": 1719074630,
            "nft_project_id": "baby_dragons_singapura",
            "nft_name": "Baby Dragons of Singapura",
            "nft_contract": "0xc22d8ca65bb9ee4a8b64406f3b0405cc1ebeec4e",
            "nft_token_id": "956",
            "type": "transfer"
        },
        {
            "txid": "0x527a120df62585d4c38bf37b37dd5c7a21ff17cec609d26bb3882ef38fb21b75",
            "clause_index": 0,
            "sender": "0xc3f851f9f78c92573620582bf9002f0c4a114b67",
            "receiver": "0x9b8007422d3b5819de89e1201e8ae4c5e1c989d8",
            "block_height": 18132550,
            "block_timestamp": 1711853140,
            "nft_project_id": "vebounce",
            "nft_name": "VeBounce",
            "nft_contract": "0x4167d527340afa546bb88d5d83afb6272e48b40e",
            "nft_token_id": "1406",
            "type": "transfer"
        },
        {
            "txid": "0xa0f20c8b4a0a72feb29409811cf40bbefce8dfccee88ead1ac780457ad0d36c1",
            "clause_index": 0,
            "sender": "0xc3f851f9f78c92573620582bf9002f0c4a114b67",
            "receiver": "0xe53bf1325d099698f6df4bc6098fbd0be2059506",
            "block_height": 18132503,
            "block_timestamp": 1711852670,
            "nft_project_id": "vebounce",
            "nft_name": "VeBounce",
            "nft_contract": "0x4167d527340afa546bb88d5d83afb6272e48b40e",
            "nft_token_id": "1407",
            "type": "transfer"
        }
    ],
    "meta": {
        "address": "0xc3f851f9f78c92573620582bf9002f0c4a114b67",
        "count": 317606,
        "page": 1,
        "pages": 1589,
        "per_page": 200,
        "sort": "desc",
        "timestamp": 1720604002
    }
}
```

{% endtab %}
{% endtabs %}


# DEX Trades

Returns the DEX Trades executed by a given address

```
https://api.vechainstats.com/v2/account/dex-trades
    ?address=0xa416bdda32b00e218f08ace220bab512c863ff2f
    &page=1
    &sort=desc
    &VCS_API_KEY=your_api_key
```

{% tabs %}
{% tab title="Request" %}

<table><thead><tr><th>Parameter</th><th>Description</th><th data-hidden></th></tr></thead><tbody><tr><td>address</td><td>The address you want to query</td><td></td></tr><tr><td>page</td><td>the <code>integer</code> page number, the available pages are shown in the response meta fields</td><td></td></tr><tr><td>sort</td><td>The sorting preference, use <code>asc</code> to sort by ascending and <code>desc</code> to sort by descending</td><td></td></tr></tbody></table>
{% endtab %}

{% tab title="Response" %}

```json
{
    "status": {
        "success": true,
        "message": "OK"
    },
    "data": [
        {
            "txid": "0x6527831ae1d3ab5bb4c1aa449a7529fbf05f05ab413461ab6fec1d1010589e30",
            "origin": "0xa416bdda32b00e218f08ace220bab512c863ff2f",
            "block_height": 19000355,
            "block_timestamp": 1720531560,
            "platform": "verocket",
            "input_token": "hai",
            "input_amount": "188.000000000000000000",
            "output_token": "vet",
            "output_amount": "295.867971557107647635"
        },
        {
            "txid": "0x95017936396209ad0c2a07eed37c4e241a0db9c4e0b1169c4e10a5602a1117a2",
            "block_height": 19000336,
            "block_timestamp": 1720531370,
            "platform": "verocket",
            "input_token": "hai",
            "input_amount": "188.000000000000000000",
            "output_token": "vet",
            "output_amount": "296.135500352510107065",
            "origin": "0xa416bdda32b00e218f08ace220bab512c863ff2f"
        },
        {
            "txid": "0x2d840868b6eb1aa1148ab2de3634247acf365f862a0d5821d7754f42f2bbe417",
            "block_height": 19000284,
            "block_timestamp": 1720530850,
            "platform": "verocket",
            "input_token": "hai",
            "input_amount": "188.000000000000000000",
            "output_token": "vet",
            "output_amount": "297.144533489993423820",
            "origin": "0xa416bdda32b00e218f08ace220bab512c863ff2f"
        }
    ],
    "meta": {
        "address": "0xa416bdda32b00e218f08ace220bab512c863ff2f",
        "count": 297900,
        "page": 1,
        "pages": 1490,
        "per_page": 200,
        "sort": "desc",
        "timestamp": 1720532727
    }
}
```

{% endtab %}
{% endtabs %}


# DEPRECATED: Internal Transfers

Returns the Internal Transfers received by a requested address

{% hint style="danger" %}
This endpoint is deprecated. Data historically returned by this endpoint is now merged and available in the [Token Transfers](/api-endpoints/account/token-transfers) endpoint.
{% endhint %}

```
https://api.vechainstats.com/v2/account/internal-transfers
    ?address=0xc3f851f9f78c92573620582bf9002f0c4a114b67
    &page=1
    &sort=desc
    &VCS_API_KEY=your_api_key
```

{% hint style="info" %}
This endpoint returns all incoming transfers of a given address, also VET even though it's not a VIP180 contract.
{% endhint %}

{% tabs %}
{% tab title="Request" %}

| Parameter    | Description                                                                             |
| ------------ | --------------------------------------------------------------------------------------- |
| address      | The address you want to query                                                           |
| page         | The `integer` page number, the available pages are shown in the response meta fields    |
| sort         | The sorting preference, use `asc` to sort by ascending and `desc` to sort by descending |
| {% endtab %} |                                                                                         |

{% tab title="Response" %}

```json
{
    "status": {
        "success": true,
        "message": "OK"
    },
    "data": [
        {
            "txid": "0xf7b79092eccc89c9f6819a448723efea68340cecfa0279b107ec68456baf9dc3",
            "clause_index": 0,
            "event_index": 0,
            "sender": "0xc3f851f9f78c92573620582bf9002f0c4a114b67",
            "receiver": "0x7dc30ec6cd9255f76405d826d1a6abfa698eeeb0",
            "block_height": 18326048,
            "block_timestamp": 1713788270,
            "token": "vet",
            "token_symbol": "VET",
            "token_name": "VeChain",
            "token_contract": null,
            "token_decimals": 18,
            "amount": "391.6375"
        },
        {
            "txid": "0xf7b79092eccc89c9f6819a448723efea68340cecfa0279b107ec68456baf9dc3",
            "clause_index": 0,
            "event_index": 0,
            "sender": "0xc3f851f9f78c92573620582bf9002f0c4a114b67",
            "receiver": "0x7dc30ec6cd9255f76405d826d1a6abfa698eeeb0",
            "block_height": 18326048,
            "block_timestamp": 1713788270,
            "token": "vet",
            "token_symbol": "VET",
            "token_name": "VeChain",
            "token_contract": null,
            "token_decimals": 18,
            "amount": "20.6125"
        }
    ],
    "meta": {
        "token_type": "internal",
        "address": "0xc3f851f9f78c92573620582bf9002f0c4a114b67",
        "count": 84996,
        "page": 1,
        "pages": 425,
        "per_page": 200,
        "sort": "desc",
        "timestamp": 1720603499
    }
}
```

{% endtab %}
{% endtabs %}


# Historic VET/VTHO

Returns the historic VET/VTHO balance on the last block of the given date in UTC time or exact block number for an address. The field 'vet\_staked' shows the amount of VET held in Stargate nodes.

```url
https://api.vechainstats.com/v2/account/historic-vet-vtho
    ?date=2021-08-01
    &address=0x61c3ba79478f8fd35181da94aae1a813384f0e96
    &VCS_API_KEY=your_api_key
```

{% tabs %}
{% tab title="Request" %}

| Parameter           | Description                                                                                                                                                  |
| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| date (optional)     | The requested date formatted as YYYY-MM-DD. The values given in the response present the values at the latest block hight of the requested date in UTC time. |
| blocknum (optional) | The requested block number for which the balance should be returned                                                                                          |
| address             | The address you want to query                                                                                                                                |
| {% endtab %}        |                                                                                                                                                              |

{% tab title="Response" %}

```json
{
    "status": {
        "success": true,
        "message": "OK"
    },
    "data": {
        "vet": "6510.038763294093053518",
        "vet_staked": "3380000",
        "vtho": "1801196.443210922393308527"
    },
    "meta": {
        "address": "0x61c3ba79478f8fd35181da94aae1a813384f0e96",
        "blocknum": "22197910",
        "timestamp": 1753695719
    }
}
```

{% endtab %}
{% endtabs %}


# Token

**Endpoints**

* Token List
* Token Price List
* Token Info
* Token Price<br>

**PRO Endpoints**

* Token Supply
* VIP180 Balance
* VIP180 Balance Custom
* Token Holder List&#x20;


# Token List

Returns a list of all VIP180 and native tokens supported on VeChain Stats.

```
https://api.vechainstats.com/v2/token/list
    ?VCS_API_KEY=your_api_key
```

{% tabs %}
{% tab title="Response" %}

```json
{
    "status": {
        "success": true,
        "message": "OK"
    },
    "data": {
        "vet": {
            "name": "VeChain",
            "type": "native",
            "decimals": 18,
            "contract": null
        },
        "vtho": {
            "name": "VeThor",
            "type": "vip180",
            "decimals": 18,
            "contract": "0x0000000000000000000000000000456e65726779"
        },
        "veusd": {
            "name": "VeUSD",
            "type": "vip180",
            "decimals": 6,
            "contract": "0x4e17357053da4b473e2daa2c65c2c949545724b8"
        },
        "sha": {
            "name": "Safe Haven",
            "type": "vip180",
            "decimals": 18,
            "contract": "0x5db3c8a942333f6468176a870db36eef120a34dc"
        },
        "hai": {
            "name": "Hacken",
            "type": "vip180",
            "decimals": 8,
            "contract": "0xacc280010b2ee0efc770bce34774376656d8ce14"
        },
        "oce": {
            "name": "OceanEx",
            "type": "vip180",
            "decimals": 18,
            "contract": "0x0ce6661b4ba86a0ea7ca2bd86a0de87b0b860f14"
        },
        "veed": {
            "name": "VEED Token",
            "type": "vip180",
            "decimals": 18,
            "contract": "0x67fd63f6068962937ec81ab3ae3bf9871e524fc9"
        },
        "yeet": {
            "name": "Yeet Coin",
            "type": "vip180",
            "decimals": 18,
            "contract": "0xae4c53b120cba91a44832f875107cbc8fbee185c"
        },
        "mvg": {
            "name": "Mad Viking Games",
            "type": "vip180",
            "decimals": 18,
            "contract": "0x99763494a7b545f983ee9fe02a3b5441c7ef1396"
        },
        "wov": {
            "name": "WorldOfV",
            "type": "vip180",
            "decimals": 18,
            "contract": "0x170f4ba8e7acf6510f55db26047c83d13498af8a"
        },
        "mva": {
            "name": "MVA Token",
            "type": "vip180",
            "decimals": 18,
            "contract": "0xc3fd50a056dc4025875fa164ced1524c93053f29"
        },
        "fcws": {
            "name": "FreeCoffeeWithSunny",
            "type": "vip180",
            "decimals": 0,
            "contract": "0xd5bd1b64cc9dafbfd58abd1d24a51f745ba64712"
        },
        "sht": {
            "name": "SHT Coin",
            "type": "vip180",
            "decimals": 18,
            "contract": "0x9af004570f2a301d99f2ce4554e564951ee48e3c"
        },
        "vvet": {
            "name": "Veiled VET",
            "type": "vip180",
            "decimals": 18,
            "contract": "0x45429a2255e7248e57fce99e7239aed3f84b7a53"
        },
        "wvet": {
            "name": "Wrapped VET",
            "type": "vip180",
            "decimals": 18,
            "contract": "0xd8ccdd85abdbf68dfec95f06c973e87b1b5a9997"
        },
        "vex": {
            "name": "Vexchange",
            "type": "vip180",
            "decimals": 18,
            "contract": "0x0bd802635eb9ceb3fcbe60470d2857b86841aab6"
        },
        "vpu": {
            "name": "VPunks Token",
            "type": "vip180",
            "decimals": 18,
            "contract": "0xb0821559723db89e0bd14fee81e13a3aae007e65"
        },
        "gold": {
            "name": "GOLD Token",
            "type": "vip180",
            "decimals": 18,
            "contract": "0xff3bc357600885aaa97506ea6e24fb21aba88fbd"
        },
        "vsea": {
            "name": "VeSea",
            "type": "vip180",
            "decimals": 18,
            "contract": "0x23368c20c16f64ecbb30164a08666867be22f216"
        },
        "jur": {
            "name": "Jur",
            "type": "vip180",
            "decimals": 18,
            "contract": "0x46209d5e5a49c1d403f4ee3a0a88c3a27e29e58d"
        },
        "vfa": {
            "name": "VFox Token",
            "type": "vip180",
            "decimals": 18,
            "contract": "0xa4f95b1f1c9f4cf984b0a003c4303e8ea86302f6"
        },
        "lgct": {
            "name": "Legacy Token",
            "type": "vip180",
            "decimals": 18,
            "contract": "0xe5bb68318120828fd1159bf73d0e3a823043efc8"
        },
        "dhn": {
            "name": "Dohrnii",
            "type": "vip180",
            "decimals": 18,
            "contract": "0x8e57aadf0992afcc41f7843656c6c7129f738f7b"
        },
        "pla": {
            "name": "Plair",
            "type": "vip180",
            "decimals": 18,
            "contract": "0x89827f7bb951fd8a56f8ef13c5bfee38522f2e1f"
        },
        "ppr": {
            "name": "Paper Token",
            "type": "vip180",
            "decimals": 18,
            "contract": "0x2f10726b240d7efb08671f4d5f0a442db6f29416"
        },
        "union": {
            "name": "UNION Token",
            "type": "vip180",
            "decimals": 18,
            "contract": "0x34109fc2a649965eecd953d31802c67dcc183d57"
        },
        "dragon": {
            "name": "Dragon Coin",
            "type": "vip180",
            "decimals": 18,
            "contract": "0x107a0b0faeb58c1fdef97f37f50e319833ad1b94"
        },
        "banana": {
            "name": "Banana Coin",
            "type": "vip180",
            "decimals": 18,
            "contract": "0xf01069227b814f425bad4ba70ca30580f2297ae8"
        },
        "vst": {
            "name": "VeStacks",
            "type": "vip180",
            "decimals": 18,
            "contract": "0xb9c146507b77500a5cedfcf468da57ba46143e06"
        },
        "dbet": {
            "name": "DecentBet",
            "type": "vip180",
            "decimals": 18,
            "contract": "0x1b8ec6c2a45cca481da6f243df0d7a5744afc1f8"
        },
        "ehrt": {
            "name": "8Hours Token",
            "type": "vip180",
            "decimals": 18,
            "contract": "0xf8e1faa0367298b55f57ed17f7a2ff3f5f1d1628"
        },
        "snk": {
            "name": "SNKr",
            "type": "vip180",
            "decimals": 18,
            "contract": "0x540768b909782c430cc321192e6c2322f77494ec"
        },
        "tic": {
            "name": "TicTalk",
            "type": "vip180",
            "decimals": 18,
            "contract": "0xa94a33f776073423e163088a5078feac31373990"
        },
        "gems": {
            "name": "GEMS",
            "type": "vip180",
            "decimals": 18,
            "contract": "0x28c61940bdcf5a67158d00657e8c3989e112eb38"
        },
        "aqd": {
            "name": "Aqua Diamond Token",
            "type": "vip180",
            "decimals": 18,
            "contract": "0xf9fc8681bec2c9f35d0dd2461d035e62d643659b"
        },
        "mdn": {
            "name": "Madini",
            "type": "vip180",
            "decimals": 18,
            "contract": "0x1b44a9718e12031530604137f854160759677192"
        },
        "bag": {
            "name": "BitAgora",
            "type": "vip180",
            "decimals": 18,
            "contract": "0x2182aa52adb1b27903d089e4432538a695effe3d"
        },
        "bvc": {
            "name": "Black VeCoin",
            "type": "vip180",
            "decimals": 18,
            "contract": "0x7ae288b7224ad8740b2d4fc2b2c8a2392caea3c6"
        },
        "vsc": {
            "name": "VSC Token",
            "type": "vip180",
            "decimals": 18,
            "contract": "0x65c542ad413dd406d7ae5e47f61fbda027ce7983"
        },
        "squad": {
            "name": "Squirtle Squad",
            "type": "vip180",
            "decimals": 18,
            "contract": "0xb27a1fb87935b85cdaa2e16468247278c74c5ec7"
        },
        "3dt": {
            "name": "ThreeDAble Token",
            "type": "vip180",
            "decimals": 18,
            "contract": "0x8fcddbb322b18d8bdaec9243e9f4c6eb8901e566"
        },
        "lion": {
            "name": "LION Token",
            "type": "vip180",
            "decimals": 18,
            "contract": "0x99ae6b435d37995befb749670c1fb7c377fbb6d1"
        },
        "mvc": {
            "name": "MyVeChain",
            "type": "vip180",
            "decimals": 18,
            "contract": "0x02de9e580b51907a471d78ccfb2e8abe4c6b7515"
        },
        "usdv": {
            "name": "Vyvo US Dollar",
            "type": "vip180",
            "decimals": 6,
            "contract": "0x094042f9719cd6736fa3bd45b605b1b2a23abdec"
        }
    },
    "meta": {
        "timestamp": 1692798373
    }
}
```

{% endtab %}
{% endtabs %}


# Token Info

Returns information on a token symbol such as socials, holder count, contract and more.

```url
https://api.vechainstats.com/v2/token/info
    ?token=vet
    &expanded=true
    &VCS_API_KEY=your_api_key
```

{% tabs %}
{% tab title="Request" %}

| Parameter    | Description                                                                                          |
| ------------ | ---------------------------------------------------------------------------------------------------- |
| token        | Symbol of the requested token                                                                        |
| expanded     | Either `true` or `false`. Setting this option to `true` expands the response with extra information. |
| {% endtab %} |                                                                                                      |

{% tab title="Response" %}

```json
{
    "status": {
        "success": true,
        "message": "OK"
    },
    "data": {
        "name": "VeThor",
        "type": "VIP180",
        "symbol": "vtho",
        "decimals": 18,
        "contract": "0x0000000000000000000000000000456e65726779",
        "creation_timestamp": 1530316800,
        "creation_block": "0",
        "deployer_address": "0x0000000000000000000000000000000000000000",
        "website": "https://www.vechain.org/",
        "whitepaper": "https://www.vechain.org/whitepaper/",
        "telegram": "https://t.me/vechain_official_english",
        "twitter": "https://twitter.com/vechainofficial",
        "reddit": "https://www.reddit.com/r/Vechain/",
        "medium": "https://medium.com/@vechainofficial",
        "github": "https://github.com/vechain",
        "token_holders": 2045049
    },
    "meta": {
        "symbol": "vtho",
        "timestamp": 1692788187
    }
}
```

{% endtab %}
{% endtabs %}


# Token Price

Returns the last known price of a token on vechain

```url
https://api.vechainstats.com/v2/token/price
    ?token=vtho
    &expanded=true
    &VCS_API_KEY=your_api_key
```

{% hint style="info" %}
**Note :** This endpoint is throttled to **10 calls/minute** regardless of API Pro tier.
{% endhint %}

{% hint style="warning" %}
The returned prices should be used for information purposes only. VeChainStats doesn't  take any accountability for damages incurred due to outdated or manipulated prices.
{% endhint %}

{% tabs %}
{% tab title="Request" %}

| Parameter    | Description                                                                                                        |
| ------------ | ------------------------------------------------------------------------------------------------------------------ |
| token        | Symbol of the requested token                                                                                      |
| expanded     | Either `true` or `false`. Setting this option to `true` expands the response with **VET**, **EUR**, **CNY** price. |
| {% endtab %} |                                                                                                                    |

{% tab title="Response" %}

```json
{
    "status": {
        "success": true,
        "message": "OK"
    },
    "data": {
        "price_usd": "0.00092253",
        "price_eur": "0.00085198",
        "price_cny": "0.00672516",
        "price_vet": "0.05807554",
        "last_updated": 1692797521
    },
    "meta": {
        "token": "vtho",
        "expanded": true,
        "timestamp": 1692797521
    }
}
```

{% endtab %}
{% endtabs %}

{% hint style="info" %}
Not all tokens have their price information supported, a price can only be returned if a token is supported on a central exchange or meets volume and liquidity standards.
{% endhint %}


# Token Price List

Returns a list of all tokens supported by VeChain Stats that meet the conditions to have a price displayed.

{% hint style="warning" %}
The returned prices should be used for information purposes only. VeChainStats doesn't  take any accountability for damages incurred due to outdated or manipulated prices.
{% endhint %}

```
https://api.vechainstats.com/v2/token/price-list
    ?expanded=false
    &VCS_API_KEY=your_api_key
```

{% tabs %}
{% tab title="Request" %}

| Parameter    | Description                                                                                                                                                 |
| ------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
| expanded     | Either `true` or `false`. Setting this option to `true` expands the response with **VET**, **EUR**, **CNY** price as well as a last updated unix timestamp. |
| {% endtab %} |                                                                                                                                                             |

{% tab title="Response" %}

```json
{
    "status": {
        "success": true,
        "message": "OK"
    },
    "data": {
        "vet": "0.01602273",
        "vtho": "0.00093",
        "veusd": "1",
        "sha": "0.00034201",
        "hai": "0.01966804",
        "oce": "0.00022254",
        "veed": "0.00343635",
        "yeet": "0.00021126",
        "mvg": "0.00059811",
        "wov": "0.00064644",
        "mva": "0.05094685",
        "sht": "0.000002",
        "vvet": "0.01602273",
        "wvet": "0.01602273",
        "vex": "0.00766357",
        "vpu": "0.00532254",
        "gold": "0.00036065",
        "vsea": "0.0177082",
        "jur": "0.00629254",
        "dhn": "0.03975",
        "pla": "0.00000282",
        "ppr": "1.96883",
        "union": "0.00003163",
        "dragon": "0.00477",
        "banana": "0.00724",
        "dbet": "0.00031321",
        "ehrt": "0.00000268"
    },
    "meta": {
        "expanded": false,
        "timestamp": 1692799835
    }
}
```

{% endtab %}
{% endtabs %}

{% hint style="info" %}
Not all tokens have their price information supported, a price can only be returned if a token is supported on a central exchange or meets volume and liquidity standards.
{% endhint %}


# Token Supply

Returns the total, max and circulating supply known by VeChain Stats of a token

```
https://api.vechainstats.com/v2/token/supply
    ?token=vet
    &VCS_API_KEY=your_api_key
```

{% tabs %}
{% tab title="Request" %}

<table><thead><tr><th width="237">Parameter</th><th>Description</th></tr></thead><tbody><tr><td>token</td><td>The symbol/ticker of the token requested </td></tr></tbody></table>
{% endtab %}

{% tab title="Response" %}

```json
{
    "status": {
        "success": true,
        "message": "OK"
    },
    "data": {
        "circulating_supply": 72714516834,
        "total_supply": 85985041177,
        "max_supply": 86712634466,
        "max_supply_is_infinite": false
    },
    "meta": {
        "token": "vet",
        "timestamp": 1696946648
    }
}
```

{% endtab %}
{% endtabs %}


# VIP180 Balance

This endpoint returns the VIP180 token balances of a given address

```
https://api.vechainstats.com/v2/token/vip180
    ?address=0x3FB604A9b40e4c1aBF0Eb91A67bB90FC06dfb27E
    &expanded=false
    &VCS_API_KEY=your_api_key
```

{% tabs %}
{% tab title="Request" %}

| Parameter    | Description                                                                                                                |
| ------------ | -------------------------------------------------------------------------------------------------------------------------- |
| address      | The address for which you want to know it's token balance.                                                                 |
| expanded     | Either `true` or `false`. Setting this option to `true` expands the response with **name**, **contract** and **decimals**. |
| {% endtab %} |                                                                                                                            |

{% tab title="Response" %}

```json
{
    "status": {
        "success": true,
        "message": "OK"
    },
    "data": {
        "vtho": "497382339.912165195246439",
        "sha": "897889972.44071606",
        "hai": "49832113.43189046",
        "veed": "151000000",
        "yeet": "0.69"
    },
    "meta": {
        "address": "0x3fb604a9b40e4c1abf0eb91a67bb90fc06dfb27e",
        "timestamp": 1692782620
    }
}
```

{% endtab %}
{% endtabs %}

{% hint style="info" %}
This VIP180 token balances in this response are limited to the tokens that are fully integrated on VeChainStats. Non-Supported token balances can be requested in [VIP180 Balance Custom](/api-endpoints/token/vip180-balance-custom). Since VET is the native token and not VIP180 it's not returned in this endpoint. &#x20;
{% endhint %}


# VIP180 Balance Custom

This endpoint returns the balance of a vip180 token contract address for a specific address

{% code overflow="wrap" %}

```
https://api.vechainstats.com/v2/token/vip180-custom
    ?address=0x3FB604A9b40e4c1aBF0Eb91A67bB90FC06dfb27E
    &contract=0xaCc280010B2EE0efc770BCE34774376656D8cE14
    &VCS_API_KEY=your_api_key
```

{% endcode %}

{% tabs %}
{% tab title="Request" %}

| Parameter    | Description                                                |
| ------------ | ---------------------------------------------------------- |
| address      | The address for which you want to know it's token balance. |
| contract     | The contract address of the VIP180 token.                  |
| {% endtab %} |                                                            |

{% tab title="Response" %}
Sample Response

```json
{
    "status": {
        "success": true,
        "message": "OK"
    },
    "data": {
        "amount": "49832113.43189046"
    },
    "meta": {
        "address": "0x3fb604a9b40e4c1abf0eb91a67bb90fc06dfb27e",
        "contract": "0xacc280010b2ee0efc770bce34774376656d8ce14",
        "symbol": "HAI",
        "decimals": 8,
        "timestamp": 1692716473
    }
}
```

{% endtab %}
{% endtabs %}


# Token Holder List

Returns the list of addresses and their count of tokens held of a requested VIP180 Token

{% hint style="info" %}
**Note :** This endpoint is throttled to **10 calls/minute** regardless of API Pro tier.
{% endhint %}

```
https://api.vechainstats.com/v2/token/holder-list
    ?token=vet
    &threshold=1250000000
    &page=1
    &VCS_API_KEY=your_api_key
```

{% tabs %}
{% tab title="Request" %}

| Parameter             | Description                                                                                                                     |
| --------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
| token                 | Symbol of the requested token                                                                                                   |
| treshold (*optional*) | Setting this to an `Integer` value limits the response addresses to those that hold an amount equal or above the treshold value |
| page                  | the `integer` page number, the available pages are shown in the response meta fields                                            |
| {% endtab %}          |                                                                                                                                 |

{% tab title="Response" %}

```json
{
    "status": {
        "success": true,
        "message": "OK"
    },
    "data": {
        "0xd0d9cd5aa98efcaeee2e065ddb8538fa977bc8eb": "7977822092.24503776546074",
        "0xfde60d8e6ea93654364c34b04155cc81063b6c6a": "5983483811.35809508932812",
        "0x1263c741069eda8056534661256079d485e111eb": "4907167006",
        "0x058a871358c1b01039a265635ea282c3f435a9ed": "3331894389.729398",
        "0xcecc1b17d875e9d94847379c536954fa546faae0": "3284370381.21542342",
        "0x8db1490f413dff85ee18ce6ab24e518fbb2dbdfe": "2422110393.92839135389128",
        "0x9f0a53db6dc336f0b50ac35254433869a16d15a0": "1781662474.50849483126314",
        "0xa6d080563b4a1cef3ab8caf67293ee239189967c": "1720482756.31365952534682",
        "0x8aa382728ca7ebb62202a2e6729078113d82fef4": "1450005001"
    },
    "meta": {
        "count": 9,
        "page": 1,
        "pages": 1,
        "per_page": 200,
        "token": "vet",
        "threshold": 1250000000,
        "name": "VeChain",
        "symbol": "vet",
        "contract": null,
        "holders": 654805,
        "timestamp": 1696328745
    }
}
```

{% endtab %}
{% endtabs %}


# Transaction

**Endpoints**

* Transaction Status
* Transaction Info


# Transaction Status

Returns the status and possible EVM error of a given transaction hash

```
https://api.vechainstats.com/v2/transaction/status
    ?txid=0x7ea45490b25257769d656343cf240d63b6813d553a7d82d459c046bc3046ed77
    &VCS_API_KEY=your_api_key
```

{% hint style="info" %}
**Note :** This endpoint is throttled to **30 calls/minute** regardless of API Pro tier.
{% endhint %}

{% tabs %}
{% tab title="Request" %}

| Parameter    | Description                                                   |
| ------------ | ------------------------------------------------------------- |
| txid         | The transaction hash for which you want to request the status |
| {% endtab %} |                                                               |

{% tab title="Response" %}

```json
{
    "status": {
        "success": true,
        "message": "OK"
    },
    "data": {
        "status": "reverted",
        "block_height": 16572263,
        "vcs_evm_error": "UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT"
    },
    "meta": {
        "txid": "0x7ea45490b25257769d656343cf240d63b6813d553a7d82d459c046bc3046ed77",
        "timestamp": 1696252801
    }
}
```

{% endtab %}
{% endtabs %}


# Transaction Info

Returns transaction metadata and receipt of a given transaction hash

```
https://api.vechainstats.com/v2/transaction/info
    ?txid=0x0d99fbdbcac0a70675294d15afd9798fe9c54c9e4a383fcab61c5ebff0bb79e1
    &VCS_API_KEY=your_api_key
```

{% hint style="info" %}
**Note :** This endpoint is throttled to **30 calls/minute** regardless of API Pro tier.
{% endhint %}

{% tabs %}
{% tab title="Request" %}

| Parameter    | Description                                          |
| ------------ | ---------------------------------------------------- |
| txid         | The transaction hash you want to request the data of |
| {% endtab %} |                                                      |

{% tab title="Response" %}

```json5
{
    "status": {
        "success": true,
        "message": "OK"
    },
    "data": {
        "status": "success",
        "block_height": 16572781,
        "block_timestamp": 1696252170,
        "vtho_paid": "1.84016"
    },
    "transaction": {
        "id": "0x0d99fbdbcac0a70675294d15afd9798fe9c54c9e4a383fcab61c5ebff0bb79e1",
        "chainTag": 74,
        "blockRef": "0x00fce16c12650378",
        "expiration": 18,
        "clauses": [
            {
                "to": "0xff3bc357600885aaa97506ea6e24fb21aba88fbd",
                "value": "0x0",
                "data": "0x3950935100000000000000000000000054a343c40a6ee31b27ca98e4c814d5bd02065b200000000000000000000000000000000000000000000000008ac7230489e80000"
            },
            {
                "to": "0x54a343c40a6ee31b27ca98e4c814d5bd02065b20",
                "value": "0x0",
                "data": "0xbdb7a9830000000000000000000000000000000000000000000000000000000000000583000000000000000000000000000000000000000000000000000000000000030e0000000000000000000000000000000000000000000000000000000000000576000000000000000000000000000000000000000000000000000000000000005f"
            }
        ],
        "gasPriceCoef": 0,
        "gas": 214016,
        "origin": "0xca08b05fdf270381bbec4d02621ccb9794e6f1e4",
        "delegator": null,
        "nonce": "0x7a90f7f7c0b3067b",
        "dependsOn": null,
        "size": 350,
        "meta": {
            "blockID": "0x00fce16d9cdbbfae8306727dfe086dfe034d8999c6ea59e47db4b2b48e652d4f",
            "blockNumber": 16572781,
            "blockTimestamp": 1696252170
        }
    },
    "receipt": {
        "gasUsed": 184016,
        "gasPayer": "0xca08b05fdf270381bbec4d02621ccb9794e6f1e4",
        "paid": "0x19898fc539e20000",
        "reward": "0x7a944bb2af70000",
        "reverted": false,
        "meta": {
            "blockID": "0x00fce16d9cdbbfae8306727dfe086dfe034d8999c6ea59e47db4b2b48e652d4f",
            "blockNumber": 16572781,
            "blockTimestamp": 1696252170,
            "txID": "0x0d99fbdbcac0a70675294d15afd9798fe9c54c9e4a383fcab61c5ebff0bb79e1",
            "txOrigin": "0xca08b05fdf270381bbec4d02621ccb9794e6f1e4"
        },
        "outputs": [
            {
                "contractAddress": null,
                "events": [
                    {
                        "address": "0xff3bc357600885aaa97506ea6e24fb21aba88fbd",
                        "topics": [
                            "0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925",
                            "0x000000000000000000000000ca08b05fdf270381bbec4d02621ccb9794e6f1e4",
                            "0x00000000000000000000000054a343c40a6ee31b27ca98e4c814d5bd02065b20"
                        ],
                        "data": "0x0000000000000000000000000000000000000000000000008ac7230489e80000"
                    }
                ],
                "transfers": []
            },
            {
                "contractAddress": null,
                "events": [
                    {
                        "address": "0xff3bc357600885aaa97506ea6e24fb21aba88fbd",
                        "topics": [
                            "0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925",
                            "0x000000000000000000000000ca08b05fdf270381bbec4d02621ccb9794e6f1e4",
                            "0x00000000000000000000000054a343c40a6ee31b27ca98e4c814d5bd02065b20"
                        ],
                        "data": "0x0000000000000000000000000000000000000000000000000000000000000000"
                    },
                    {
                        "address": "0xff3bc357600885aaa97506ea6e24fb21aba88fbd",
                        "topics": [
                            "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
                            "0x000000000000000000000000ca08b05fdf270381bbec4d02621ccb9794e6f1e4",
                            "0x00000000000000000000000054a343c40a6ee31b27ca98e4c814d5bd02065b20"
                        ],
                        "data": "0x0000000000000000000000000000000000000000000000008ac7230489e80000"
                    },
                    {
                        "address": "0x54a343c40a6ee31b27ca98e4c814d5bd02065b20",
                        "topics": [
                            "0xbee049f2f03d8debb0a2b719855e511ced32439206320734e5bdbdd7b8f6ef40"
                        ],
                        "data": "0x000000000000000000000000ca08b05fdf270381bbec4d02621ccb9794e6f1e40000000000000000000000000000000000000000000000000000000000003a7600000000000000000000000000000000000000000000000000000000000004ac0000000000000000000000000000000000000000000000000000000000000273000000000000000000000000000000000000000000000000000000000000030e00000000000000000000000000000000000000000000000000000000000001290000000000000000000000000000000000000000000000000000000000000310"
                    }
                ],
                "transfers": []
            }
        ]
    },
    "meta": {
        "txid": "0x0d99fbdbcac0a70675294d15afd9798fe9c54c9e4a383fcab61c5ebff0bb79e1",
        "timestamp": 1696252689
    }
}
```

{% endtab %}
{% endtabs %}


# Block

**Endpoints**

* Block Daily Stats
* Bloick Info
* Height
* Block by reference
* Block by timestamp


# Block Daily Stats

Returns metadata and stats of the blocks produced on a given date

```
https://api.vechainstats.com/v2/block/stats
    ?date=2023-09-21
    &expanded=true
    &VCS_API_KEY=your_api_key
```

{% tabs %}
{% tab title="Request" %}

| Parameter    | Description                                                                                          |
| ------------ | ---------------------------------------------------------------------------------------------------- |
| date         | The requested date formatted as YYYY-MM-DD                                                           |
| expanded     | Either `true` or `false`. Setting this option to `true` expands the response with extra information. |
| {% endtab %} |                                                                                                      |

{% tab title="Response" %}

```json
{
    "status": {
        "success": true,
        "message": "OK"
    },
    "data": {
        "block_height_first": 16473008,
        "block_height_last": 16477572,
        "block_count": 4565,
        "block_total_size": 34946772,
        "block_total_gas_limit": 136573351403,
        "block_total_gas_used": 11843923045,
        "txns_total_count": 21532,
        "clauses_total_count": 243016,
        "vtho_total_paid": 120699.67,
        "vtho_total_rewarded": 36210.18,
        "vtho_total_burned": 84489.77
    },
    "meta": {
        "date": "2023-09-21",
        "expanded": true,
        "partial_data": true,
        "timestamp": 1695300045
    }
}
```

{% endtab %}
{% endtabs %}


# Block Info

Returns metadata and raw block information for a requested block number

```
https://api.vechainstats.com/v2/block/info
    ?blocknum=16581454
    &VCS_API_KEY=your_api_key
```

{% tabs %}
{% tab title="Request" %}

| Parameter    | Description                                 |
| ------------ | ------------------------------------------- |
| blocknum     | The block number to get more information of |
| {% endtab %} |                                             |

{% tab title="Response" %}

```json
{
    "status": {
        "success": true,
        "message": "OK"
    },
    "data": {
        "gas_target_perc": 5.4,
        "txns_total_count": 4,
        "txns_reverted": 0,
        "txns_mtt": 2,
        "clauses_total_count": 15,
        "vtho_total_paid": "22.864030862744759573",
        "vtho_total_rewarded": "6.859209258823427871",
        "vtho_total_burned": "16.004821603921330686"
    },
    "block": {
        "number": 16581454,
        "id": "0x00fd034ea5738ca0a76a1a6edf2a383ac5e68b93b22f75c4c0cceb29e18329d5",
        "size": 3534,
        "parentID": "0x00fd034d0a4bd59abb550f0c423fbe80fc3429e250a74a66b63c68abae55bfdb",
        "timestamp": 1696338910,
        "gasLimit": 30000000,
        "beneficiary": "0x7100a4dd6c3cf9c54aed649832a6c0170cf71329",
        "gasUsed": 1619885,
        "totalScore": 1617097443,
        "txsRoot": "0x8759cb394a74093dcd045af9c4e8b49ba24f453b5adfd83c15d7ac8574dac35b",
        "txsFeatures": 1,
        "stateRoot": "0x6dd41f63fab92a7798c62065c52b191f1a25832f85380847305920ddc61d2351",
        "receiptsRoot": "0x2b57ea02036d294cd4fd315385213ac9c6492f4c6779dbeed9255125ee9756d6",
        "com": true,
        "signer": "0x454055c76bc7381d1d8880a80e817691a9de1fd0",
        "isTrunk": true,
        "isFinalized": true,
        "transactions": [
            "0x8981c599fb132afef11457c3439b915067152dad3d2e9e12932489f8441f9002",
            "0x4feed6903dea70e9e62fba04afb4f8fcbef7c8013717d1b54ecd8d1603e510ad",
            "0xc967d57b0ba0a1438457910d257ec8b50d882fef09b2cf059b22feeceb86dc82",
            "0x448449c8ddd43132b4679ac7ced399ef53147e6744d635436bae53cd09b554de"
        ]
    },
    "meta": {
        "blocknum": 16581454,
        "timestamp": 1696414827
    }
}
```

{% endtab %}
{% endtabs %}


# Block Height

This endpoint returns the ID and hash of the most recent block and the amount of transactions in this block.

```
https://api.vechainstats.com/v2/block/height
    ?VCS_API_KEY=your_api_key
```

{% tabs %}
{% tab title="Response" %}

```json
{
    "status": {
        "success": true,
        "message": "OK"
    },
    "data": {
        "block_height": 16225597,
        "block_hash": "0x00f7953d744c648cac09367b6e0abb65a129eb69584504c1e32c002e1ee5b0d5",
        "block_timestamp": 1692780130,
        "tx_count": 20
    },
    "meta": {
        "timestamp": 1692780130
    }
}
```

{% hint style="info" %}
The timestamp is returned as a **Unix Timestamp**
{% endhint %}
{% endtab %}
{% endtabs %}


# Block by reference

Returns the block number and variables for a given block reference (blockref)

```
https://api.vechainstats.com/v2/block/blockref
    ?blockref=0x00fb6fb52e0d6d67
    &VCS_API_KEY=your_api_key
```

{% tabs %}
{% tab title="Request" %}

| Parameter    | Description                                                                                                               |
| ------------ | ------------------------------------------------------------------------------------------------------------------------- |
| blockref     | A block reference on an EVM-compatible blockchain refers to a specific block's unique identifier based on the block hash. |
| {% endtab %} |                                                                                                                           |

{% tab title="Response" %}

```json
{
    "status": {
        "success": true,
        "message": "OK"
    },
    "data": {
        "number": 16478133,
        "hash": "0x00fb6fb52e0d6d678d5d17871a458d07fe9b738f5271f4e65f2b0cfe4e98f3c8",
        "timestamp": 1695305650
    },
    "meta": {
        "blockref": "0x00fb6fb52e0d6d67",
        "timestamp": 1695642736
    }
}
```

{% endtab %}
{% endtabs %}


# Block by timestamp

Returns the next block produced for any given timestamp

```
https://api.vechainstats.com/v2/block/blocktime
    ?blockts=1695307034
    &VCS_API_KEY=your_api_key
```

{% tabs %}
{% tab title="Request" %}

| Parameter    | Description                        |
| ------------ | ---------------------------------- |
| blockts      | Timestamp in Unix Timestamp format |
| {% endtab %} |                                    |

{% tab title="Response" %}
{% hint style="info" %}
The response will return the block number produced on or the first one after the requested timestamp
{% endhint %}

```json
{
    "status": {
        "success": true,
        "message": "OK"
    },
    "data": {
        "number": 16478272,
        "hash": "0x00fb70402a118cd7c571736eb14bfa98c0df1bc5cb97db3a2843d60460eb38ae",
        "timestamp": 1695307040
    },
    "meta": {
        "blockts": 1695307034,
        "timestamp": 1695634559
    }
}
```

{% endtab %}
{% endtabs %}


# Contract

**Endpoints**

* Contract Stats
* Contract Info
* Contract Code


# Contract Stats

Returns metrics on the total, new, active and seen contracts on vechain.

```
https://api.vechainstats.com/v2/contract/stats
    ?date=2023-09-25
    &expanded=true
    &VCS_API_KEY=your_api_key
```

{% hint style="info" %}
**Note :** This endpoint is throttled to **10 calls/minute** regardless of API Pro tier.
{% endhint %}

{% tabs %}
{% tab title="Request" %}

| Parameter    | Description                                                                                          |
| ------------ | ---------------------------------------------------------------------------------------------------- |
| date         | The requested date formatted as yyyy-mm-dd                                                           |
| expanded     | Either `true` or `false`. Setting this option to `true` expands the response with extra information. |
| {% endtab %} |                                                                                                      |

{% tab title="Response" %}

```json
{
    "status": {
        "success": true,
        "message": "OK"
    },
    "data": {
        "contracts_total": 22145,
        "contracts_new": 8,
        "contracts_active": 233
    },
    "meta": {
        "date": "2023-09-25",
        "expanded": true,
        "partial_data": false,
        "timestamp": 1695723438
    }
}
```

{% endtab %}
{% endtabs %}


# Contract Info

Returns information and metadata on a requested contract address

```
https://api.vechainstats.com/v2/contract/info
    ?address=0xae4c53b120cba91a44832f875107cbc8fbee185c
    &expanded=true
    &VCS_API_KEY=your_api_key
```

{% hint style="info" %}
**Note :** This endpoint is throttled to **10 calls/minute** regardless of API Pro tier.
{% endhint %}

{% tabs %}
{% tab title="Request" %}

| Parameter    | Description                                                                                          |
| ------------ | ---------------------------------------------------------------------------------------------------- |
| address      | The address you want to query                                                                        |
| expanded     | Either `true` or `false`. Setting this option to `true` expands the response with extra information. |
| {% endtab %} |                                                                                                      |

{% tab title="Response" %}

```json5
{
    "status": {
        "success": true,
        "message": "OK"
    },
    "data": {
        "contract_name": "Yeet Coin",
        "vcs_alias": "Yeet (YEET Token)",
        "type": "vip180",
        "balance_vet": "0",
        "balance_vtho": "56",
        "contract_total_supply": "69000000",
        "creation_block": 2256958,
        "creation_txid": "0x0ace736bc4ad5a25e2493d71fbc3315e422068ecefb3715d86ea85ab0ba26716",
        "creation_timestamp": 1552926040,
        "creation_type": "create",
        "deployer_address": "0x7567d83b7b8d80addcb281a71d54fc7b3364ffed",
        "master_address": "0x714e34ad16d78ef503cff5c686975031ebaece8d",
        "has_interface": false,
        "has_total_supply": true,
        "has_txns_in": true,
        "has_txns_out": false,
        "nft_royalties": null,
        "token_decimals": 18,
        "token_symbol": "YEET"
    },
    "meta": {
        "address": "0xae4c53b120cba91a44832f875107cbc8fbee185c",
        "expanded": true,
        "timestamp": 1747908556
    }
}
```

{% endtab %}
{% endtabs %}


# Contract Code

Returns the code of a verified contract.

{% hint style="warning" %}
**Note:** This API uses `https://verify-api.vechainstats.com` instead of the standard `https://api.vechainstats.com`base URL.
{% endhint %}

{% code overflow="wrap" %}

```
https://verify- api.vechainstats.com/v2/contract/100009/0xDf94739bd169C84fe6478D8420Bb807F1f47b135?fields=all
```

{% endcode %}

{% tabs %}
{% tab title="Request" %}

| Parameter    | Description                                                                                                                                       |
| ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| fields       | Comma seperated fields to include in the response. Can also take 'all'                                                                            |
| omit         | Comma seperated fields to NOT include in the response. All fields except matching ones will be returned. Can't be used simultanously with fields. |
| {% endtab %} |                                                                                                                                                   |

{% tab title="Response" %}
Sample Response

{% code overflow="wrap" %}

````json
{
    "matchId": "4",
    "creationMatch": null,
    "runtimeMatch": "exact_match",
    "verifiedAt": "2025-04-24T16:26:10Z",
    "creationBytecode": {
        "onchainBytecode": null,
        "recompiledBytecode": "0x60806040526040516104103803806104108339810160408190526100229161025a565b61002c8282610033565b5050610358565b61003c82610092565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115610086576100818282610109565b505050565b61008e610180565b5050565b806001600160a01b03163b6000036100c85780604051634c9c8ce360e01b81526004016100bf9190610328565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051610126919061033c565b600060405180830381855af49150503d8060008114610161576040519150601f19603f3d011682016040523d82523d6000602084013e610166565b606091505b5090925090506101778583836101a1565b95945050505050565b341561019f5760405163b398979f60e01b815260040160405180910390fd5b565b6060826101b6576101b1826101f7565b6101f0565b81511580156101cd57506001600160a01b0384163b155b156101ed5783604051639996b31560e01b81526004016100bf9190610328565b50805b9392505050565b8051156102075780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b634e487b7160e01b600052604160045260246000fd5b60005b83811015610251578181015183820152602001610239565b50506000910152565b6000806040838503121561026d57600080fd5b82516001600160a01b038116811461028457600080fd5b60208401519092506001600160401b03808211156102a157600080fd5b818501915085601f8301126102b557600080fd5b8151818111156102c7576102c7610220565b604051601f8201601f19908116603f011681019083821181831017156102ef576102ef610220565b8160405282815288602084870101111561030857600080fd5b610319836020830160208801610236565b80955050505050509250929050565b6001600160a01b0391909116815260200190565b6000825161034e818460208701610236565b9190910192915050565b60aa806103666000396000f3fe6080604052600a600c565b005b60186014601a565b6051565b565b6000604c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e808015606f573d6000f35b3d6000fdfea26469706673582212201bcd65594c3688ff2a063e0eb80faf8a16f4016ee9a78f079dec70e19cb0f50a64736f6c63430008140033",
        "sourceMap": "1938:1064:5:-:0;;;2395:127;;;;;;;;;;;;;;;;;;:::i;:::-;2465:52;2495:14;2511:5;2465:29;:52::i;:::-;2395:127;;1938:1064;;2779:335:0;2870:37;2889:17;2870:18;:37::i;:::-;2922:27;;-1:-1:-1;;;;;2922:27:0;;;;;;;;2964:11;;:15;2960:148;;2995:53;3024:17;3043:4;2995:28;:53::i;:::-;;2779:335;;:::o;2960:148::-;3079:18;:16;:18::i;:::-;2779:335;;:::o;2186:281::-;2263:17;-1:-1:-1;;;;;2263:29:0;;2296:1;2263:34;2259:119;;2349:17;2320:47;;-1:-1:-1;;;2320:47:0;;;;;;;;:::i;:::-;;;;;;;;2259:119;1327:66;2387:73;;-1:-1:-1;;;;;;2387:73:0;-1:-1:-1;;;;;2387:73:0;;;;;;;;;;2186:281::o;4106:253:3:-;4189:12;4214;4228:23;4255:6;-1:-1:-1;;;;;4255:19:3;4275:4;4255:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4213:67:3;;-1:-1:-1;4213:67:3;-1:-1:-1;4297:55:3;4324:6;4213:67;;4297:26;:55::i;:::-;4290:62;4106:253;-1:-1:-1;;;;;4106:253:3:o;6598:122:0:-;6648:9;:13;6644:70;;6684:19;;-1:-1:-1;;;6684:19:0;;;;;;;;;;;6644:70;6598:122::o;4625:582:3:-;4769:12;4798:7;4793:408;;4821:19;4829:10;4821:7;:19::i;:::-;4793:408;;;5045:17;;:22;:49;;;;-1:-1:-1;;;;;;5071:18:3;;;:23;5045:49;5041:119;;;5138:6;5121:24;;-1:-1:-1;;;5121:24:3;;;;;;;;:::i;5041:119::-;-1:-1:-1;5180:10:3;4793:408;4625:582;;;;;:::o;5743:516::-;5874:17;;:21;5870:383;;6102:10;6096:17;6158:15;6145:10;6141:2;6137:19;6130:44;5870:383;6225:17;;-1:-1:-1;;;6225:17:3;;;;;;;;;;;14:127:6;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:250;231:1;241:113;255:6;252:1;249:13;241:113;;;331:11;;;325:18;312:11;;;305:39;277:2;270:10;241:113;;;-1:-1:-1;;388:1:6;370:16;;363:27;146:250::o;401:1063::-;489:6;497;550:2;538:9;529:7;525:23;521:32;518:52;;;566:1;563;556:12;518:52;592:16;;-1:-1:-1;;;;;637:31:6;;627:42;;617:70;;683:1;680;673:12;617:70;755:2;740:18;;734:25;706:5;;-1:-1:-1;;;;;;808:14:6;;;805:34;;;835:1;832;825:12;805:34;873:6;862:9;858:22;848:32;;918:7;911:4;907:2;903:13;899:27;889:55;;940:1;937;930:12;889:55;969:2;963:9;991:2;987;984:10;981:36;;;997:18;;:::i;:::-;1072:2;1066:9;1040:2;1126:13;;-1:-1:-1;;1122:22:6;;;1146:2;1118:31;1114:40;1102:53;;;1170:18;;;1190:22;;;1167:46;1164:72;;;1216:18;;:::i;:::-;1256:10;1252:2;1245:22;1291:2;1283:6;1276:18;1331:7;1326:2;1321;1317;1313:11;1309:20;1306:33;1303:53;;;1352:1;1349;1342:12;1303:53;1365:68;1430:2;1425;1417:6;1413:15;1408:2;1404;1400:11;1365:68;:::i;:::-;1452:6;1442:16;;;;;;;401:1063;;;;;:::o;1469:203::-;-1:-1:-1;;;;;1633:32:6;;;;1615:51;;1603:2;1588:18;;1469:203::o;1677:287::-;1806:3;1844:6;1838:13;1860:66;1919:6;1914:3;1907:4;1899:6;1895:17;1860:66;:::i;:::-;1942:16;;;;;1677:287;-1:-1:-1;;1677:287:6:o;:::-;1938:1064:5;;;;;;",
        "linkReferences": {},
        "cborAuxdata": {
            "1": {
                "value": "0xa26469706673582212201bcd65594c3688ff2a063e0eb80faf8a16f4016ee9a78f079dec70e19cb0f50a64736f6c63430008140033",
                "offset": 987
            }
        },
        "transformations": null,
        "transformationValues": null
    },
    "runtimeBytecode": {
        "onchainBytecode": "0x6080604052600a600c565b005b60186014601a565b6051565b565b6000604c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e808015606f573d6000f35b3d6000fdfea26469706673582212201bcd65594c3688ff2a063e0eb80faf8a16f4016ee9a78f079dec70e19cb0f50a64736f6c63430008140033",
        "recompiledBytecode": "0x6080604052600a600c565b005b60186014601a565b6051565b565b6000604c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e808015606f573d6000f35b3d6000fdfea26469706673582212201bcd65594c3688ff2a063e0eb80faf8a16f4016ee9a78f079dec70e19cb0f50a64736f6c63430008140033",
        "sourceMap": "1938:1064:5:-:0;;;2649:11:1;:9;:11::i;:::-;1938:1064:5;2323:83:1;2371:28;2381:17;:15;:17::i;:::-;2371:9;:28::i;:::-;2323:83::o;2874:126:5:-;2941:7;2963:32;1327:66:0;2035:53;-1:-1:-1;;;;;2035:53:0;;1957:138;2963:32:5;2956:39;;2874:126;:::o;949:895:1:-;1287:14;1284:1;1281;1268:34;1501:1;1498;1482:14;1479:1;1463:14;1456:5;1443:60;1577:16;1574:1;1571;1556:38;1615:6;1682:66;;;;1797:16;1794:1;1787:27;1682:66;1717:16;1714:1;1707:27",
        "linkReferences": {},
        "cborAuxdata": {
            "1": {
                "value": "0xa26469706673582212201bcd65594c3688ff2a063e0eb80faf8a16f4016ee9a78f079dec70e19cb0f50a64736f6c63430008140033",
                "offset": 117
            }
        },
        "immutableReferences": {},
        "transformations": [],
        "transformationValues": {}
    },
    "deployment": {
        "transactionHash": null,
        "blockNumber": null,
        "transactionIndex": null,
        "deployer": null
    },
    "sources": {
        "@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol": {
            "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (proxy/ERC1967/ERC1967Utils.sol)\n\npragma solidity ^0.8.20;\n\nimport {IBeacon} from \"../beacon/IBeacon.sol\";\nimport {Address} from \"../../utils/Address.sol\";\nimport {StorageSlot} from \"../../utils/StorageSlot.sol\";\n\n/**\n * @dev This abstract contract provides getters and event emitting update functions for\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\n */\nlibrary ERC1967Utils {\n    // We re-declare ERC-1967 events here because they can't be used directly from IERC1967.\n    // This will be fixed in Solidity 0.8.21. At that point we should remove these events.\n    /**\n     * @dev Emitted when the implementation is upgraded.\n     */\n    event Upgraded(address indexed implementation);\n\n    /**\n     * @dev Emitted when the admin account has changed.\n     */\n    event AdminChanged(address previousAdmin, address newAdmin);\n\n    /**\n     * @dev Emitted when the beacon is changed.\n     */\n    event BeaconUpgraded(address indexed beacon);\n\n    /**\n     * @dev Storage slot with the address of the current implementation.\n     * This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1.\n     */\n    // solhint-disable-next-line private-vars-leading-underscore\n    bytes32 internal constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n\n    /**\n     * @dev The `implementation` of the proxy is invalid.\n     */\n    error ERC1967InvalidImplementation(address implementation);\n\n    /**\n     * @dev The `admin` of the proxy is invalid.\n     */\n    error ERC1967InvalidAdmin(address admin);\n\n    /**\n     * @dev The `beacon` of the proxy is invalid.\n     */\n    error ERC1967InvalidBeacon(address beacon);\n\n    /**\n     * @dev An upgrade function sees `msg.value > 0` that may be lost.\n     */\n    error ERC1967NonPayable();\n\n    /**\n     * @dev Returns the current implementation address.\n     */\n    function getImplementation() internal view returns (address) {\n        return StorageSlot.getAddressSlot(IMPLEMENTATION_SLOT).value;\n    }\n\n    /**\n     * @dev Stores a new address in the EIP1967 implementation slot.\n     */\n    function _setImplementation(address newImplementation) private {\n        if (newImplementation.code.length == 0) {\n            revert ERC1967InvalidImplementation(newImplementation);\n        }\n        StorageSlot.getAddressSlot(IMPLEMENTATION_SLOT).value = newImplementation;\n    }\n\n    /**\n     * @dev Performs implementation upgrade with additional setup call if data is nonempty.\n     * This function is payable only if the setup call is performed, otherwise `msg.value` is rejected\n     * to avoid stuck value in the contract.\n     *\n     * Emits an {IERC1967-Upgraded} event.\n     */\n    function upgradeToAndCall(address newImplementation, bytes memory data) internal {\n        _setImplementation(newImplementation);\n        emit Upgraded(newImplementation);\n\n        if (data.length > 0) {\n            Address.functionDelegateCall(newImplementation, data);\n        } else {\n            _checkNonPayable();\n        }\n    }\n\n    /**\n     * @dev Storage slot with the admin of the contract.\n     * This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1.\n     */\n    // solhint-disable-next-line private-vars-leading-underscore\n    bytes32 internal constant ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\n\n    /**\n     * @dev Returns the current admin.\n     *\n     * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using\n     * the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n     * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n     */\n    function getAdmin() internal view returns (address) {\n        return StorageSlot.getAddressSlot(ADMIN_SLOT).value;\n    }\n\n    /**\n     * @dev Stores a new address in the EIP1967 admin slot.\n     */\n    function _setAdmin(address newAdmin) private {\n        if (newAdmin == address(0)) {\n            revert ERC1967InvalidAdmin(address(0));\n        }\n        StorageSlot.getAddressSlot(ADMIN_SLOT).value = newAdmin;\n    }\n\n    /**\n     * @dev Changes the admin of the proxy.\n     *\n     * Emits an {IERC1967-AdminChanged} event.\n     */\n    function changeAdmin(address newAdmin) internal {\n        emit AdminChanged(getAdmin(), newAdmin);\n        _setAdmin(newAdmin);\n    }\n\n    /**\n     * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\n     * This is the keccak-256 hash of \"eip1967.proxy.beacon\" subtracted by 1.\n     */\n    // solhint-disable-next-line private-vars-leading-underscore\n    bytes32 internal constant BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\n\n    /**\n     * @dev Returns the current beacon.\n     */\n    function getBeacon() internal view returns (address) {\n        return StorageSlot.getAddressSlot(BEACON_SLOT).value;\n    }\n\n    /**\n     * @dev Stores a new beacon in the EIP1967 beacon slot.\n     */\n    function _setBeacon(address newBeacon) private {\n        if (newBeacon.code.length == 0) {\n            revert ERC1967InvalidBeacon(newBeacon);\n        }\n\n        StorageSlot.getAddressSlot(BEACON_SLOT).value = newBeacon;\n\n        address beaconImplementation = IBeacon(newBeacon).implementation();\n        if (beaconImplementation.code.length == 0) {\n            revert ERC1967InvalidImplementation(beaconImplementation);\n        }\n    }\n\n    /**\n     * @dev Change the beacon and trigger a setup call if data is nonempty.\n     * This function is payable only if the setup call is performed, otherwise `msg.value` is rejected\n     * to avoid stuck value in the contract.\n     *\n     * Emits an {IERC1967-BeaconUpgraded} event.\n     *\n     * CAUTION: Invoking this function has no effect on an instance of {BeaconProxy} since v5, since\n     * it uses an immutable beacon without looking at the value of the ERC-1967 beacon slot for\n     * efficiency.\n     */\n    function upgradeBeaconToAndCall(address newBeacon, bytes memory data) internal {\n        _setBeacon(newBeacon);\n        emit BeaconUpgraded(newBeacon);\n\n        if (data.length > 0) {\n            Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\n        } else {\n            _checkNonPayable();\n        }\n    }\n\n    /**\n     * @dev Reverts if `msg.value` is not zero. It can be used to avoid `msg.value` stuck in the contract\n     * if an upgrade doesn't perform an initialization call.\n     */\n    function _checkNonPayable() private {\n        if (msg.value > 0) {\n            revert ERC1967NonPayable();\n        }\n    }\n}\n"
        },
        "@openzeppelin/contracts/proxy/Proxy.sol": {
            "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (proxy/Proxy.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\n * be specified by overriding the virtual {_implementation} function.\n *\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\n * different contract through the {_delegate} function.\n *\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\n */\nabstract contract Proxy {\n    /**\n     * @dev Delegates the current call to `implementation`.\n     *\n     * This function does not return to its internal call site, it will return directly to the external caller.\n     */\n    function _delegate(address implementation) internal virtual {\n        assembly {\n            // Copy msg.data. We take full control of memory in this inline assembly\n            // block because it will not return to Solidity code. We overwrite the\n            // Solidity scratch pad at memory position 0.\n            calldatacopy(0, 0, calldatasize())\n\n            // Call the implementation.\n            // out and outsize are 0 because we don't know the size yet.\n            let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\n\n            // Copy the returned data.\n            returndatacopy(0, 0, returndatasize())\n\n            switch result\n            // delegatecall returns 0 on error.\n            case 0 {\n                revert(0, returndatasize())\n            }\n            default {\n                return(0, returndatasize())\n            }\n        }\n    }\n\n    /**\n     * @dev This is a virtual function that should be overridden so it returns the address to which the fallback\n     * function and {_fallback} should delegate.\n     */\n    function _implementation() internal view virtual returns (address);\n\n    /**\n     * @dev Delegates the current call to the address returned by `_implementation()`.\n     *\n     * This function does not return to its internal call site, it will return directly to the external caller.\n     */\n    function _fallback() internal virtual {\n        _delegate(_implementation());\n    }\n\n    /**\n     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\n     * function in the contract matches the call data.\n     */\n    fallback() external payable virtual {\n        _fallback();\n    }\n}\n"
        },
        "@openzeppelin/contracts/proxy/beacon/IBeacon.sol": {
            "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (proxy/beacon/IBeacon.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\n */\ninterface IBeacon {\n    /**\n     * @dev Must return an address that can be used as a delegate call target.\n     *\n     * {UpgradeableBeacon} will check that this address is a contract.\n     */\n    function implementation() external view returns (address);\n}\n"
        },
        "@openzeppelin/contracts/utils/Address.sol": {
            "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/Address.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n    /**\n     * @dev The ETH balance of the account is not enough to perform the operation.\n     */\n    error AddressInsufficientBalance(address account);\n\n    /**\n     * @dev There's no code at `target` (it is not a contract).\n     */\n    error AddressEmptyCode(address target);\n\n    /**\n     * @dev A call to an address target failed. The target may have reverted.\n     */\n    error FailedInnerCall();\n\n    /**\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n     * `recipient`, forwarding all available gas and reverting on errors.\n     *\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\n     * imposed by `transfer`, making them unable to receive funds via\n     * `transfer`. {sendValue} removes this limitation.\n     *\n     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n     *\n     * IMPORTANT: because control is transferred to `recipient`, care must be\n     * taken to not create reentrancy vulnerabilities. Consider using\n     * {ReentrancyGuard} or the\n     * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n     */\n    function sendValue(address payable recipient, uint256 amount) internal {\n        if (address(this).balance < amount) {\n            revert AddressInsufficientBalance(address(this));\n        }\n\n        (bool success, ) = recipient.call{value: amount}(\"\");\n        if (!success) {\n            revert FailedInnerCall();\n        }\n    }\n\n    /**\n     * @dev Performs a Solidity function call using a low level `call`. A\n     * plain `call` is an unsafe replacement for a function call: use this\n     * function instead.\n     *\n     * If `target` reverts with a revert reason or custom error, it is bubbled\n     * up by this function (like regular Solidity function calls). However, if\n     * the call reverted with no returned reason, this function reverts with a\n     * {FailedInnerCall} error.\n     *\n     * Returns the raw returned data. To convert to the expected return value,\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n     *\n     * Requirements:\n     *\n     * - `target` must be a contract.\n     * - calling `target` with `data` must not revert.\n     */\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n        return functionCallWithValue(target, data, 0);\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n     * but also transferring `value` wei to `target`.\n     *\n     * Requirements:\n     *\n     * - the calling contract must have an ETH balance of at least `value`.\n     * - the called Solidity function must be `payable`.\n     */\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n        if (address(this).balance < value) {\n            revert AddressInsufficientBalance(address(this));\n        }\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\n        return verifyCallResultFromTarget(target, success, returndata);\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n     * but performing a static call.\n     */\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n        (bool success, bytes memory returndata) = target.staticcall(data);\n        return verifyCallResultFromTarget(target, success, returndata);\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n     * but performing a delegate call.\n     */\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n        (bool success, bytes memory returndata) = target.delegatecall(data);\n        return verifyCallResultFromTarget(target, success, returndata);\n    }\n\n    /**\n     * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\n     * was not a contract or bubbling up the revert reason (falling back to {FailedInnerCall}) in case of an\n     * unsuccessful call.\n     */\n    function verifyCallResultFromTarget(\n        address target,\n        bool success,\n        bytes memory returndata\n    ) internal view returns (bytes memory) {\n        if (!success) {\n            _revert(returndata);\n        } else {\n            // only check if target is a contract if the call was successful and the return data is empty\n            // otherwise we already know that it was a contract\n            if (returndata.length == 0 && target.code.length == 0) {\n                revert AddressEmptyCode(target);\n            }\n            return returndata;\n        }\n    }\n\n    /**\n     * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\n     * revert reason or with a default {FailedInnerCall} error.\n     */\n    function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {\n        if (!success) {\n            _revert(returndata);\n        } else {\n            return returndata;\n        }\n    }\n\n    /**\n     * @dev Reverts with returndata if present. Otherwise reverts with {FailedInnerCall}.\n     */\n    function _revert(bytes memory returndata) private pure {\n        // Look for revert reason and bubble it up if present\n        if (returndata.length > 0) {\n            // The easiest way to bubble the revert reason is using memory via assembly\n            /// @solidity memory-safe-assembly\n            assembly {\n                let returndata_size := mload(returndata)\n                revert(add(32, returndata), returndata_size)\n            }\n        } else {\n            revert FailedInnerCall();\n        }\n    }\n}\n"
        },
        "@openzeppelin/contracts/utils/StorageSlot.sol": {
            "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/StorageSlot.sol)\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Library for reading and writing primitive types to specific storage slots.\n *\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\n * This library helps with reading and writing to such slots without the need for inline assembly.\n *\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\n *\n * Example usage to set ERC1967 implementation slot:\n * ```solidity\n * contract ERC1967 {\n *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n *\n *     function _getImplementation() internal view returns (address) {\n *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n *     }\n *\n *     function _setImplementation(address newImplementation) internal {\n *         require(newImplementation.code.length > 0);\n *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n *     }\n * }\n * ```\n */\nlibrary StorageSlot {\n    struct AddressSlot {\n        address value;\n    }\n\n    struct BooleanSlot {\n        bool value;\n    }\n\n    struct Bytes32Slot {\n        bytes32 value;\n    }\n\n    struct Uint256Slot {\n        uint256 value;\n    }\n\n    struct StringSlot {\n        string value;\n    }\n\n    struct BytesSlot {\n        bytes value;\n    }\n\n    /**\n     * @dev Returns an `AddressSlot` with member `value` located at `slot`.\n     */\n    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\n        /// @solidity memory-safe-assembly\n        assembly {\n            r.slot := slot\n        }\n    }\n\n    /**\n     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\n     */\n    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\n        /// @solidity memory-safe-assembly\n        assembly {\n            r.slot := slot\n        }\n    }\n\n    /**\n     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\n     */\n    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\n        /// @solidity memory-safe-assembly\n        assembly {\n            r.slot := slot\n        }\n    }\n\n    /**\n     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\n     */\n    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\n        /// @solidity memory-safe-assembly\n        assembly {\n            r.slot := slot\n        }\n    }\n\n    /**\n     * @dev Returns an `StringSlot` with member `value` located at `slot`.\n     */\n    function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\n        /// @solidity memory-safe-assembly\n        assembly {\n            r.slot := slot\n        }\n    }\n\n    /**\n     * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\n     */\n    function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\n        /// @solidity memory-safe-assembly\n        assembly {\n            r.slot := store.slot\n        }\n    }\n\n    /**\n     * @dev Returns an `BytesSlot` with member `value` located at `slot`.\n     */\n    function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\n        /// @solidity memory-safe-assembly\n        assembly {\n            r.slot := slot\n        }\n    }\n\n    /**\n     * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\n     */\n    function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\n        /// @solidity memory-safe-assembly\n        assembly {\n            r.slot := store.slot\n        }\n    }\n}\n"
        },
        "contracts/B3TRProxy.sol": {
            "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (proxy/ERC1967/ERC1967Proxy.sol)\n\n//                                      #######\n//                                 ################\n//                               ####################\n//                             ###########   #########\n//                            #########      #########\n//          #######          #########       #########\n//          #########       #########      ##########\n//           ##########     ########     ####################\n//            ##########   #########  #########################\n//              ################### ############################\n//               #################  ##########          ########\n//                 ##############      ###              ########\n//                  ############                       #########\n//                    ##########                     ##########\n//                     ########                    ###########\n//                       ###                    ############\n//                                          ##############\n//                                    #################\n//                                   ##############\n//                                   #########\n\npragma solidity 0.8.20;\n\nimport { Proxy } from \"@openzeppelin/contracts/proxy/Proxy.sol\";\nimport { ERC1967Utils } from \"@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol\";\n\n/**\n * Forked from OZ.\n *\n * @dev This contract implements an upgradeable proxy.\n * It is upgradeable because calls are delegated to an implementation address that can be changed. This address is stored in storage\n * in the location specified by https://eips.ethereum.org/EIPS/eip-1967[EIP1967],\n * so that it doesn't conflict with the storage layout of the implementation behind the proxy.\n */\n// https://stackoverflow.com/a/61678986/7302689\n// solc-ignore-next-line missing-receive\ncontract B3TRProxy is Proxy {\n  /**\n   * @dev Initializes the upgradeable proxy with an initial implementation specified by `implementation`.\n   *\n   * If `_data` is nonempty, it's used as data in a delegate call to `implementation`. This will typically be an\n   * encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.\n   *\n   * Requirements:\n   *\n   * - If `_data` is empty, `msg.value` must be zero.\n   */\n  constructor(address implementation, bytes memory _data) payable {\n    ERC1967Utils.upgradeToAndCall(implementation, _data);\n  }\n\n  /**\n   * @dev Returns the current implementation address.\n   *\n   * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using\n   * the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n   * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\n   */\n  function _implementation() internal view virtual override returns (address) {\n    return ERC1967Utils.getImplementation();\n  }\n}\n"
        }
    },
    "compilation": {
        "language": "Solidity",
        "compiler": "solc",
        "compilerVersion": "0.8.20+commit.a1b79de6",
        "compilerSettings": {
            "metadata": {
                "bytecodeHash": "ipfs"
            },
            "libraries": {},
            "optimizer": {
                "runs": 1,
                "enabled": true
            },
            "evmVersion": "paris",
            "remappings": []
        },
        "name": "B3TRProxy",
        "fullyQualifiedName": "contracts/B3TRProxy.sol:B3TRProxy"
    },
    "abi": [
        {
            "type": "constructor",
            "inputs": [
                {
                    "name": "implementation",
                    "type": "address",
                    "internalType": "address"
                },
                {
                    "name": "_data",
                    "type": "bytes",
                    "internalType": "bytes"
                }
            ],
            "stateMutability": "payable"
        },
        {
            "name": "AddressEmptyCode",
            "type": "error",
            "inputs": [
                {
                    "name": "target",
                    "type": "address",
                    "internalType": "address"
                }
            ]
        },
        {
            "name": "ERC1967InvalidImplementation",
            "type": "error",
            "inputs": [
                {
                    "name": "implementation",
                    "type": "address",
                    "internalType": "address"
                }
            ]
        },
        {
            "name": "ERC1967NonPayable",
            "type": "error",
            "inputs": []
        },
        {
            "name": "FailedInnerCall",
            "type": "error",
            "inputs": []
        },
        {
            "name": "Upgraded",
            "type": "event",
            "inputs": [
                {
                    "name": "implementation",
                    "type": "address",
                    "indexed": true,
                    "internalType": "address"
                }
            ],
            "anonymous": false
        },
        {
            "type": "fallback",
            "stateMutability": "payable"
        }
    ],
    "metadata": {
        "compiler": {
            "version": "0.8.20+commit.a1b79de6"
        },
        "language": "Solidity",
        "output": {
            "abi": [
                {
                    "inputs": [
                        {
                            "internalType": "address",
                            "name": "implementation",
                            "type": "address"
                        },
                        {
                            "internalType": "bytes",
                            "name": "_data",
                            "type": "bytes"
                        }
                    ],
                    "stateMutability": "payable",
                    "type": "constructor"
                },
                {
                    "inputs": [
                        {
                            "internalType": "address",
                            "name": "target",
                            "type": "address"
                        }
                    ],
                    "name": "AddressEmptyCode",
                    "type": "error"
                },
                {
                    "inputs": [
                        {
                            "internalType": "address",
                            "name": "implementation",
                            "type": "address"
                        }
                    ],
                    "name": "ERC1967InvalidImplementation",
                    "type": "error"
                },
                {
                    "inputs": [],
                    "name": "ERC1967NonPayable",
                    "type": "error"
                },
                {
                    "inputs": [],
                    "name": "FailedInnerCall",
                    "type": "error"
                },
                {
                    "anonymous": false,
                    "inputs": [
                        {
                            "indexed": true,
                            "internalType": "address",
                            "name": "implementation",
                            "type": "address"
                        }
                    ],
                    "name": "Upgraded",
                    "type": "event"
                },
                {
                    "stateMutability": "payable",
                    "type": "fallback"
                }
            ],
            "devdoc": {
                "details": "This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an implementation address that can be changed. This address is stored in storage in the location specified by https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the implementation behind the proxy.",
                "errors": {
                    "AddressEmptyCode(address)": [
                        {
                            "details": "There's no code at `target` (it is not a contract)."
                        }
                    ],
                    "ERC1967InvalidImplementation(address)": [
                        {
                            "details": "The `implementation` of the proxy is invalid."
                        }
                    ],
                    "ERC1967NonPayable()": [
                        {
                            "details": "An upgrade function sees `msg.value > 0` that may be lost."
                        }
                    ],
                    "FailedInnerCall()": [
                        {
                            "details": "A call to an address target failed. The target may have reverted."
                        }
                    ]
                },
                "events": {
                    "Upgraded(address)": {
                        "details": "Emitted when the implementation is upgraded."
                    }
                },
                "kind": "dev",
                "methods": {
                    "constructor": {
                        "details": "Initializes the upgradeable proxy with an initial implementation specified by `implementation`. If `_data` is nonempty, it's used as data in a delegate call to `implementation`. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor. Requirements: - If `_data` is empty, `msg.value` must be zero."
                    }
                },
                "version": 1
            },
            "userdoc": {
                "kind": "user",
                "methods": {},
                "notice": "Forked from OZ.",
                "version": 1
            }
        },
        "settings": {
            "compilationTarget": {
                "contracts/B3TRProxy.sol": "B3TRProxy"
            },
            "evmVersion": "paris",
            "libraries": {},
            "metadata": {
                "bytecodeHash": "ipfs"
            },
            "optimizer": {
                "enabled": true,
                "runs": 1
            },
            "remappings": []
        },
        "sources": {
            "@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol": {
                "keccak256": "0x06a78f9b3ee3e6d0eb4e4cd635ba49960bea34cac1db8c0a27c75f2319f1fd65",
                "license": "MIT",
                "urls": [
                    "bzz-raw://547d21aa17f4f3f1a1a7edf7167beff8dd9496a0348d5588f15cc8a4b29d052a",
                    "dweb:/ipfs/QmT16JtRQSWNpLo9W23jr6CzaMuTAcQcjJJcdRd8HLJ6cE"
                ]
            },
            "@openzeppelin/contracts/proxy/Proxy.sol": {
                "keccak256": "0xc3f2ec76a3de8ed7a7007c46166f5550c72c7709e3fc7e8bb3111a7191cdedbd",
                "license": "MIT",
                "urls": [
                    "bzz-raw://e73efb4c2ca655882dc237c6b4f234a9bd36d97159d8fcaa837eb01171f726ac",
                    "dweb:/ipfs/QmTNnnv7Gu5fs5G1ZMh7Fexp8N4XUs3XrNAngjcxgiss3e"
                ]
            },
            "@openzeppelin/contracts/proxy/beacon/IBeacon.sol": {
                "keccak256": "0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c",
                "license": "MIT",
                "urls": [
                    "bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa",
                    "dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM"
                ]
            },
            "@openzeppelin/contracts/utils/Address.sol": {
                "keccak256": "0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721",
                "license": "MIT",
                "urls": [
                    "bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245",
                    "dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y"
                ]
            },
            "@openzeppelin/contracts/utils/StorageSlot.sol": {
                "keccak256": "0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418",
                "license": "MIT",
                "urls": [
                    "bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c",
                    "dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR"
                ]
            },
            "contracts/B3TRProxy.sol": {
                "keccak256": "0xf1b9772445bcc61d3eb203cc3f7258936fa1df80c431fec22e2e2b9225b4bc31",
                "license": "MIT",
                "urls": [
                    "bzz-raw://de2d50120bca5ff261af648cc15b1ed928fa4455a7d4d01220b3bd2404e19b32",
                    "dweb:/ipfs/QmYWfg3942TokjKf9WkmixTNBFGidVDRq9Xs9Vs7M2mz19"
                ]
            }
        },
        "version": 1
    },
    "storageLayout": {
        "types": null,
        "storage": []
    },
    "userdoc": {
        "kind": "user",
        "notice": "Forked from OZ.",
        "methods": {},
        "version": 1
    },
    "devdoc": {
        "kind": "dev",
        "errors": {
            "FailedInnerCall()": [
                {
                    "details": "A call to an address target failed. The target may have reverted."
                }
            ],
            "ERC1967NonPayable()": [
                {
                    "details": "An upgrade function sees `msg.value > 0` that may be lost."
                }
            ],
            "AddressEmptyCode(address)": [
                {
                    "details": "There's no code at `target` (it is not a contract)."
                }
            ],
            "ERC1967InvalidImplementation(address)": [
                {
                    "details": "The `implementation` of the proxy is invalid."
                }
            ]
        },
        "events": {
            "Upgraded(address)": {
                "details": "Emitted when the implementation is upgraded."
            }
        },
        "details": "This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an implementation address that can be changed. This address is stored in storage in the location specified by https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the implementation behind the proxy.",
        "methods": {
            "constructor": {
                "details": "Initializes the upgradeable proxy with an initial implementation specified by `implementation`. If `_data` is nonempty, it's used as data in a delegate call to `implementation`. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor. Requirements: - If `_data` is empty, `msg.value` must be zero."
            }
        },
        "version": 1
    },
    "sourceIds": {
        "contracts/B3TRProxy.sol": {
            "id": 5
        },
        "@openzeppelin/contracts/proxy/Proxy.sol": {
            "id": 1
        },
        "@openzeppelin/contracts/utils/Address.sol": {
            "id": 3
        },
        "@openzeppelin/contracts/utils/StorageSlot.sol": {
            "id": 4
        },
        "@openzeppelin/contracts/proxy/beacon/IBeacon.sol": {
            "id": 2
        },
        "@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol": {
            "id": 0
        }
    },
    "stdJsonInput": {
        "language": "Solidity",
        "sources": {
            "@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol": {
                "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (proxy/ERC1967/ERC1967Utils.sol)\n\npragma solidity ^0.8.20;\n\nimport {IBeacon} from \"../beacon/IBeacon.sol\";\nimport {Address} from \"../../utils/Address.sol\";\nimport {StorageSlot} from \"../../utils/StorageSlot.sol\";\n\n/**\n * @dev This abstract contract provides getters and event emitting update functions for\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\n */\nlibrary ERC1967Utils {\n    // We re-declare ERC-1967 events here because they can't be used directly from IERC1967.\n    // This will be fixed in Solidity 0.8.21. At that point we should remove these events.\n    /**\n     * @dev Emitted when the implementation is upgraded.\n     */\n    event Upgraded(address indexed implementation);\n\n    /**\n     * @dev Emitted when the admin account has changed.\n     */\n    event AdminChanged(address previousAdmin, address newAdmin);\n\n    /**\n     * @dev Emitted when the beacon is changed.\n     */\n    event BeaconUpgraded(address indexed beacon);\n\n    /**\n     * @dev Storage slot with the address of the current implementation.\n     * This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1.\n     */\n    // solhint-disable-next-line private-vars-leading-underscore\n    bytes32 internal constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n\n    /**\n     * @dev The `implementation` of the proxy is invalid.\n     */\n    error ERC1967InvalidImplementation(address implementation);\n\n    /**\n     * @dev The `admin` of the proxy is invalid.\n     */\n    error ERC1967InvalidAdmin(address admin);\n\n    /**\n     * @dev The `beacon` of the proxy is invalid.\n     */\n    error ERC1967InvalidBeacon(address beacon);\n\n    /**\n     * @dev An upgrade function sees `msg.value > 0` that may be lost.\n     */\n    error ERC1967NonPayable();\n\n    /**\n     * @dev Returns the current implementation address.\n     */\n    function getImplementation() internal view returns (address) {\n        return StorageSlot.getAddressSlot(IMPLEMENTATION_SLOT).value;\n    }\n\n    /**\n     * @dev Stores a new address in the EIP1967 implementation slot.\n     */\n    function _setImplementation(address newImplementation) private {\n        if (newImplementation.code.length == 0) {\n            revert ERC1967InvalidImplementation(newImplementation);\n        }\n        StorageSlot.getAddressSlot(IMPLEMENTATION_SLOT).value = newImplementation;\n    }\n\n    /**\n     * @dev Performs implementation upgrade with additional setup call if data is nonempty.\n     * This function is payable only if the setup call is performed, otherwise `msg.value` is rejected\n     * to avoid stuck value in the contract.\n     *\n     * Emits an {IERC1967-Upgraded} event.\n     */\n    function upgradeToAndCall(address newImplementation, bytes memory data) internal {\n        _setImplementation(newImplementation);\n        emit Upgraded(newImplementation);\n\n        if (data.length > 0) {\n            Address.functionDelegateCall(newImplementation, data);\n        } else {\n            _checkNonPayable();\n        }\n    }\n\n    /**\n     * @dev Storage slot with the admin of the contract.\n     * This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1.\n     */\n    // solhint-disable-next-line private-vars-leading-underscore\n    bytes32 internal constant ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\n\n    /**\n     * @dev Returns the current admin.\n     *\n     * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using\n     * the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n     * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n     */\n    function getAdmin() internal view returns (address) {\n        return StorageSlot.getAddressSlot(ADMIN_SLOT).value;\n    }\n\n    /**\n     * @dev Stores a new address in the EIP1967 admin slot.\n     */\n    function _setAdmin(address newAdmin) private {\n        if (newAdmin == address(0)) {\n            revert ERC1967InvalidAdmin(address(0));\n        }\n        StorageSlot.getAddressSlot(ADMIN_SLOT).value = newAdmin;\n    }\n\n    /**\n     * @dev Changes the admin of the proxy.\n     *\n     * Emits an {IERC1967-AdminChanged} event.\n     */\n    function changeAdmin(address newAdmin) internal {\n        emit AdminChanged(getAdmin(), newAdmin);\n        _setAdmin(newAdmin);\n    }\n\n    /**\n     * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\n     * This is the keccak-256 hash of \"eip1967.proxy.beacon\" subtracted by 1.\n     */\n    // solhint-disable-next-line private-vars-leading-underscore\n    bytes32 internal constant BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\n\n    /**\n     * @dev Returns the current beacon.\n     */\n    function getBeacon() internal view returns (address) {\n        return StorageSlot.getAddressSlot(BEACON_SLOT).value;\n    }\n\n    /**\n     * @dev Stores a new beacon in the EIP1967 beacon slot.\n     */\n    function _setBeacon(address newBeacon) private {\n        if (newBeacon.code.length == 0) {\n            revert ERC1967InvalidBeacon(newBeacon);\n        }\n\n        StorageSlot.getAddressSlot(BEACON_SLOT).value = newBeacon;\n\n        address beaconImplementation = IBeacon(newBeacon).implementation();\n        if (beaconImplementation.code.length == 0) {\n            revert ERC1967InvalidImplementation(beaconImplementation);\n        }\n    }\n\n    /**\n     * @dev Change the beacon and trigger a setup call if data is nonempty.\n     * This function is payable only if the setup call is performed, otherwise `msg.value` is rejected\n     * to avoid stuck value in the contract.\n     *\n     * Emits an {IERC1967-BeaconUpgraded} event.\n     *\n     * CAUTION: Invoking this function has no effect on an instance of {BeaconProxy} since v5, since\n     * it uses an immutable beacon without looking at the value of the ERC-1967 beacon slot for\n     * efficiency.\n     */\n    function upgradeBeaconToAndCall(address newBeacon, bytes memory data) internal {\n        _setBeacon(newBeacon);\n        emit BeaconUpgraded(newBeacon);\n\n        if (data.length > 0) {\n            Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\n        } else {\n            _checkNonPayable();\n        }\n    }\n\n    /**\n     * @dev Reverts if `msg.value` is not zero. It can be used to avoid `msg.value` stuck in the contract\n     * if an upgrade doesn't perform an initialization call.\n     */\n    function _checkNonPayable() private {\n        if (msg.value > 0) {\n            revert ERC1967NonPayable();\n        }\n    }\n}\n"
            },
            "@openzeppelin/contracts/proxy/Proxy.sol": {
                "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (proxy/Proxy.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\n * be specified by overriding the virtual {_implementation} function.\n *\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\n * different contract through the {_delegate} function.\n *\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\n */\nabstract contract Proxy {\n    /**\n     * @dev Delegates the current call to `implementation`.\n     *\n     * This function does not return to its internal call site, it will return directly to the external caller.\n     */\n    function _delegate(address implementation) internal virtual {\n        assembly {\n            // Copy msg.data. We take full control of memory in this inline assembly\n            // block because it will not return to Solidity code. We overwrite the\n            // Solidity scratch pad at memory position 0.\n            calldatacopy(0, 0, calldatasize())\n\n            // Call the implementation.\n            // out and outsize are 0 because we don't know the size yet.\n            let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\n\n            // Copy the returned data.\n            returndatacopy(0, 0, returndatasize())\n\n            switch result\n            // delegatecall returns 0 on error.\n            case 0 {\n                revert(0, returndatasize())\n            }\n            default {\n                return(0, returndatasize())\n            }\n        }\n    }\n\n    /**\n     * @dev This is a virtual function that should be overridden so it returns the address to which the fallback\n     * function and {_fallback} should delegate.\n     */\n    function _implementation() internal view virtual returns (address);\n\n    /**\n     * @dev Delegates the current call to the address returned by `_implementation()`.\n     *\n     * This function does not return to its internal call site, it will return directly to the external caller.\n     */\n    function _fallback() internal virtual {\n        _delegate(_implementation());\n    }\n\n    /**\n     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\n     * function in the contract matches the call data.\n     */\n    fallback() external payable virtual {\n        _fallback();\n    }\n}\n"
            },
            "@openzeppelin/contracts/proxy/beacon/IBeacon.sol": {
                "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (proxy/beacon/IBeacon.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\n */\ninterface IBeacon {\n    /**\n     * @dev Must return an address that can be used as a delegate call target.\n     *\n     * {UpgradeableBeacon} will check that this address is a contract.\n     */\n    function implementation() external view returns (address);\n}\n"
            },
            "@openzeppelin/contracts/utils/Address.sol": {
                "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/Address.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n    /**\n     * @dev The ETH balance of the account is not enough to perform the operation.\n     */\n    error AddressInsufficientBalance(address account);\n\n    /**\n     * @dev There's no code at `target` (it is not a contract).\n     */\n    error AddressEmptyCode(address target);\n\n    /**\n     * @dev A call to an address target failed. The target may have reverted.\n     */\n    error FailedInnerCall();\n\n    /**\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n     * `recipient`, forwarding all available gas and reverting on errors.\n     *\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\n     * imposed by `transfer`, making them unable to receive funds via\n     * `transfer`. {sendValue} removes this limitation.\n     *\n     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n     *\n     * IMPORTANT: because control is transferred to `recipient`, care must be\n     * taken to not create reentrancy vulnerabilities. Consider using\n     * {ReentrancyGuard} or the\n     * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n     */\n    function sendValue(address payable recipient, uint256 amount) internal {\n        if (address(this).balance < amount) {\n            revert AddressInsufficientBalance(address(this));\n        }\n\n        (bool success, ) = recipient.call{value: amount}(\"\");\n        if (!success) {\n            revert FailedInnerCall();\n        }\n    }\n\n    /**\n     * @dev Performs a Solidity function call using a low level `call`. A\n     * plain `call` is an unsafe replacement for a function call: use this\n     * function instead.\n     *\n     * If `target` reverts with a revert reason or custom error, it is bubbled\n     * up by this function (like regular Solidity function calls). However, if\n     * the call reverted with no returned reason, this function reverts with a\n     * {FailedInnerCall} error.\n     *\n     * Returns the raw returned data. To convert to the expected return value,\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n     *\n     * Requirements:\n     *\n     * - `target` must be a contract.\n     * - calling `target` with `data` must not revert.\n     */\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n        return functionCallWithValue(target, data, 0);\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n     * but also transferring `value` wei to `target`.\n     *\n     * Requirements:\n     *\n     * - the calling contract must have an ETH balance of at least `value`.\n     * - the called Solidity function must be `payable`.\n     */\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n        if (address(this).balance < value) {\n            revert AddressInsufficientBalance(address(this));\n        }\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\n        return verifyCallResultFromTarget(target, success, returndata);\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n     * but performing a static call.\n     */\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n        (bool success, bytes memory returndata) = target.staticcall(data);\n        return verifyCallResultFromTarget(target, success, returndata);\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n     * but performing a delegate call.\n     */\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n        (bool success, bytes memory returndata) = target.delegatecall(data);\n        return verifyCallResultFromTarget(target, success, returndata);\n    }\n\n    /**\n     * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\n     * was not a contract or bubbling up the revert reason (falling back to {FailedInnerCall}) in case of an\n     * unsuccessful call.\n     */\n    function verifyCallResultFromTarget(\n        address target,\n        bool success,\n        bytes memory returndata\n    ) internal view returns (bytes memory) {\n        if (!success) {\n            _revert(returndata);\n        } else {\n            // only check if target is a contract if the call was successful and the return data is empty\n            // otherwise we already know that it was a contract\n            if (returndata.length == 0 && target.code.length == 0) {\n                revert AddressEmptyCode(target);\n            }\n            return returndata;\n        }\n    }\n\n    /**\n     * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\n     * revert reason or with a default {FailedInnerCall} error.\n     */\n    function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {\n        if (!success) {\n            _revert(returndata);\n        } else {\n            return returndata;\n        }\n    }\n\n    /**\n     * @dev Reverts with returndata if present. Otherwise reverts with {FailedInnerCall}.\n     */\n    function _revert(bytes memory returndata) private pure {\n        // Look for revert reason and bubble it up if present\n        if (returndata.length > 0) {\n            // The easiest way to bubble the revert reason is using memory via assembly\n            /// @solidity memory-safe-assembly\n            assembly {\n                let returndata_size := mload(returndata)\n                revert(add(32, returndata), returndata_size)\n            }\n        } else {\n            revert FailedInnerCall();\n        }\n    }\n}\n"
            },
            "@openzeppelin/contracts/utils/StorageSlot.sol": {
                "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/StorageSlot.sol)\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Library for reading and writing primitive types to specific storage slots.\n *\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\n * This library helps with reading and writing to such slots without the need for inline assembly.\n *\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\n *\n * Example usage to set ERC1967 implementation slot:\n * ```solidity\n * contract ERC1967 {\n *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n *\n *     function _getImplementation() internal view returns (address) {\n *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n *     }\n *\n *     function _setImplementation(address newImplementation) internal {\n *         require(newImplementation.code.length > 0);\n *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n *     }\n * }\n * ```\n */\nlibrary StorageSlot {\n    struct AddressSlot {\n        address value;\n    }\n\n    struct BooleanSlot {\n        bool value;\n    }\n\n    struct Bytes32Slot {\n        bytes32 value;\n    }\n\n    struct Uint256Slot {\n        uint256 value;\n    }\n\n    struct StringSlot {\n        string value;\n    }\n\n    struct BytesSlot {\n        bytes value;\n    }\n\n    /**\n     * @dev Returns an `AddressSlot` with member `value` located at `slot`.\n     */\n    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\n        /// @solidity memory-safe-assembly\n        assembly {\n            r.slot := slot\n        }\n    }\n\n    /**\n     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\n     */\n    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\n        /// @solidity memory-safe-assembly\n        assembly {\n            r.slot := slot\n        }\n    }\n\n    /**\n     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\n     */\n    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\n        /// @solidity memory-safe-assembly\n        assembly {\n            r.slot := slot\n        }\n    }\n\n    /**\n     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\n     */\n    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\n        /// @solidity memory-safe-assembly\n        assembly {\n            r.slot := slot\n        }\n    }\n\n    /**\n     * @dev Returns an `StringSlot` with member `value` located at `slot`.\n     */\n    function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\n        /// @solidity memory-safe-assembly\n        assembly {\n            r.slot := slot\n        }\n    }\n\n    /**\n     * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\n     */\n    function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\n        /// @solidity memory-safe-assembly\n        assembly {\n            r.slot := store.slot\n        }\n    }\n\n    /**\n     * @dev Returns an `BytesSlot` with member `value` located at `slot`.\n     */\n    function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\n        /// @solidity memory-safe-assembly\n        assembly {\n            r.slot := slot\n        }\n    }\n\n    /**\n     * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\n     */\n    function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\n        /// @solidity memory-safe-assembly\n        assembly {\n            r.slot := store.slot\n        }\n    }\n}\n"
            },
            "contracts/B3TRProxy.sol": {
                "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (proxy/ERC1967/ERC1967Proxy.sol)\n\n//                                      #######\n//                                 ################\n//                               ####################\n//                             ###########   #########\n//                            #########      #########\n//          #######          #########       #########\n//          #########       #########      ##########\n//           ##########     ########     ####################\n//            ##########   #########  #########################\n//              ################### ############################\n//               #################  ##########          ########\n//                 ##############      ###              ########\n//                  ############                       #########\n//                    ##########                     ##########\n//                     ########                    ###########\n//                       ###                    ############\n//                                          ##############\n//                                    #################\n//                                   ##############\n//                                   #########\n\npragma solidity 0.8.20;\n\nimport { Proxy } from \"@openzeppelin/contracts/proxy/Proxy.sol\";\nimport { ERC1967Utils } from \"@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol\";\n\n/**\n * Forked from OZ.\n *\n * @dev This contract implements an upgradeable proxy.\n * It is upgradeable because calls are delegated to an implementation address that can be changed. This address is stored in storage\n * in the location specified by https://eips.ethereum.org/EIPS/eip-1967[EIP1967],\n * so that it doesn't conflict with the storage layout of the implementation behind the proxy.\n */\n// https://stackoverflow.com/a/61678986/7302689\n// solc-ignore-next-line missing-receive\ncontract B3TRProxy is Proxy {\n  /**\n   * @dev Initializes the upgradeable proxy with an initial implementation specified by `implementation`.\n   *\n   * If `_data` is nonempty, it's used as data in a delegate call to `implementation`. This will typically be an\n   * encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.\n   *\n   * Requirements:\n   *\n   * - If `_data` is empty, `msg.value` must be zero.\n   */\n  constructor(address implementation, bytes memory _data) payable {\n    ERC1967Utils.upgradeToAndCall(implementation, _data);\n  }\n\n  /**\n   * @dev Returns the current implementation address.\n   *\n   * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using\n   * the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n   * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\n   */\n  function _implementation() internal view virtual override returns (address) {\n    return ERC1967Utils.getImplementation();\n  }\n}\n"
            }
        },
        "settings": {
            "metadata": {
                "bytecodeHash": "ipfs"
            },
            "libraries": {},
            "optimizer": {
                "runs": 1,
                "enabled": true
            },
            "evmVersion": "paris",
            "remappings": []
        }
    },
    "stdJsonOutput": {
        "sources": {
            "contracts/B3TRProxy.sol": {
                "id": 5
            },
            "@openzeppelin/contracts/proxy/Proxy.sol": {
                "id": 1
            },
            "@openzeppelin/contracts/utils/Address.sol": {
                "id": 3
            },
            "@openzeppelin/contracts/utils/StorageSlot.sol": {
                "id": 4
            },
            "@openzeppelin/contracts/proxy/beacon/IBeacon.sol": {
                "id": 2
            },
            "@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol": {
                "id": 0
            }
        },
        "contracts": {
            "contracts/B3TRProxy.sol": {
                "B3TRProxy": {
                    "abi": [
                        {
                            "type": "constructor",
                            "inputs": [
                                {
                                    "name": "implementation",
                                    "type": "address",
                                    "internalType": "address"
                                },
                                {
                                    "name": "_data",
                                    "type": "bytes",
                                    "internalType": "bytes"
                                }
                            ],
                            "stateMutability": "payable"
                        },
                        {
                            "name": "AddressEmptyCode",
                            "type": "error",
                            "inputs": [
                                {
                                    "name": "target",
                                    "type": "address",
                                    "internalType": "address"
                                }
                            ]
                        },
                        {
                            "name": "ERC1967InvalidImplementation",
                            "type": "error",
                            "inputs": [
                                {
                                    "name": "implementation",
                                    "type": "address",
                                    "internalType": "address"
                                }
                            ]
                        },
                        {
                            "name": "ERC1967NonPayable",
                            "type": "error",
                            "inputs": []
                        },
                        {
                            "name": "FailedInnerCall",
                            "type": "error",
                            "inputs": []
                        },
                        {
                            "name": "Upgraded",
                            "type": "event",
                            "inputs": [
                                {
                                    "name": "implementation",
                                    "type": "address",
                                    "indexed": true,
                                    "internalType": "address"
                                }
                            ],
                            "anonymous": false
                        },
                        {
                            "type": "fallback",
                            "stateMutability": "payable"
                        }
                    ],
                    "metadata": "{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC1967NonPayable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"}],\"devdoc\":{\"details\":\"This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an implementation address that can be changed. This address is stored in storage in the location specified by https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the implementation behind the proxy.\",\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"ERC1967InvalidImplementation(address)\":[{\"details\":\"The `implementation` of the proxy is invalid.\"}],\"ERC1967NonPayable()\":[{\"details\":\"An upgrade function sees `msg.value > 0` that may be lost.\"}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}]},\"events\":{\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the upgradeable proxy with an initial implementation specified by `implementation`. If `_data` is nonempty, it's used as data in a delegate call to `implementation`. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor. Requirements: - If `_data` is empty, `msg.value` must be zero.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Forked from OZ.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/B3TRProxy.sol\":\"B3TRProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":1},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x06a78f9b3ee3e6d0eb4e4cd635ba49960bea34cac1db8c0a27c75f2319f1fd65\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://547d21aa17f4f3f1a1a7edf7167beff8dd9496a0348d5588f15cc8a4b29d052a\",\"dweb:/ipfs/QmT16JtRQSWNpLo9W23jr6CzaMuTAcQcjJJcdRd8HLJ6cE\"]},\"@openzeppelin/contracts/proxy/Proxy.sol\":{\"keccak256\":\"0xc3f2ec76a3de8ed7a7007c46166f5550c72c7709e3fc7e8bb3111a7191cdedbd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e73efb4c2ca655882dc237c6b4f234a9bd36d97159d8fcaa837eb01171f726ac\",\"dweb:/ipfs/QmTNnnv7Gu5fs5G1ZMh7Fexp8N4XUs3XrNAngjcxgiss3e\"]},\"@openzeppelin/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"]},\"contracts/B3TRProxy.sol\":{\"keccak256\":\"0xf1b9772445bcc61d3eb203cc3f7258936fa1df80c431fec22e2e2b9225b4bc31\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://de2d50120bca5ff261af648cc15b1ed928fa4455a7d4d01220b3bd2404e19b32\",\"dweb:/ipfs/QmYWfg3942TokjKf9WkmixTNBFGidVDRq9Xs9Vs7M2mz19\"]}},\"version\":1}",
                    "userdoc": {
                        "kind": "user",
                        "notice": "Forked from OZ.",
                        "methods": {},
                        "version": 1
                    },
                    "devdoc": {
                        "kind": "dev",
                        "errors": {
                            "FailedInnerCall()": [
                                {
                                    "details": "A call to an address target failed. The target may have reverted."
                                }
                            ],
                            "ERC1967NonPayable()": [
                                {
                                    "details": "An upgrade function sees `msg.value > 0` that may be lost."
                                }
                            ],
                            "AddressEmptyCode(address)": [
                                {
                                    "details": "There's no code at `target` (it is not a contract)."
                                }
                            ],
                            "ERC1967InvalidImplementation(address)": [
                                {
                                    "details": "The `implementation` of the proxy is invalid."
                                }
                            ]
                        },
                        "events": {
                            "Upgraded(address)": {
                                "details": "Emitted when the implementation is upgraded."
                            }
                        },
                        "details": "This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an implementation address that can be changed. This address is stored in storage in the location specified by https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the implementation behind the proxy.",
                        "methods": {
                            "constructor": {
                                "details": "Initializes the upgradeable proxy with an initial implementation specified by `implementation`. If `_data` is nonempty, it's used as data in a delegate call to `implementation`. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor. Requirements: - If `_data` is empty, `msg.value` must be zero."
                            }
                        },
                        "version": 1
                    },
                    "storageLayout": {
                        "types": null,
                        "storage": []
                    },
                    "evm": {
                        "bytecode": {
                            "object": "0x60806040526040516104103803806104108339810160408190526100229161025a565b61002c8282610033565b5050610358565b61003c82610092565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115610086576100818282610109565b505050565b61008e610180565b5050565b806001600160a01b03163b6000036100c85780604051634c9c8ce360e01b81526004016100bf9190610328565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051610126919061033c565b600060405180830381855af49150503d8060008114610161576040519150601f19603f3d011682016040523d82523d6000602084013e610166565b606091505b5090925090506101778583836101a1565b95945050505050565b341561019f5760405163b398979f60e01b815260040160405180910390fd5b565b6060826101b6576101b1826101f7565b6101f0565b81511580156101cd57506001600160a01b0384163b155b156101ed5783604051639996b31560e01b81526004016100bf9190610328565b50805b9392505050565b8051156102075780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b634e487b7160e01b600052604160045260246000fd5b60005b83811015610251578181015183820152602001610239565b50506000910152565b6000806040838503121561026d57600080fd5b82516001600160a01b038116811461028457600080fd5b60208401519092506001600160401b03808211156102a157600080fd5b818501915085601f8301126102b557600080fd5b8151818111156102c7576102c7610220565b604051601f8201601f19908116603f011681019083821181831017156102ef576102ef610220565b8160405282815288602084870101111561030857600080fd5b610319836020830160208801610236565b80955050505050509250929050565b6001600160a01b0391909116815260200190565b6000825161034e818460208701610236565b9190910192915050565b60aa806103666000396000f3fe6080604052600a600c565b005b60186014601a565b6051565b565b6000604c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e808015606f573d6000f35b3d6000fdfea26469706673582212201bcd65594c3688ff2a063e0eb80faf8a16f4016ee9a78f079dec70e19cb0f50a64736f6c63430008140033",
                            "sourceMap": "1938:1064:5:-:0;;;2395:127;;;;;;;;;;;;;;;;;;:::i;:::-;2465:52;2495:14;2511:5;2465:29;:52::i;:::-;2395:127;;1938:1064;;2779:335:0;2870:37;2889:17;2870:18;:37::i;:::-;2922:27;;-1:-1:-1;;;;;2922:27:0;;;;;;;;2964:11;;:15;2960:148;;2995:53;3024:17;3043:4;2995:28;:53::i;:::-;;2779:335;;:::o;2960:148::-;3079:18;:16;:18::i;:::-;2779:335;;:::o;2186:281::-;2263:17;-1:-1:-1;;;;;2263:29:0;;2296:1;2263:34;2259:119;;2349:17;2320:47;;-1:-1:-1;;;2320:47:0;;;;;;;;:::i;:::-;;;;;;;;2259:119;1327:66;2387:73;;-1:-1:-1;;;;;;2387:73:0;-1:-1:-1;;;;;2387:73:0;;;;;;;;;;2186:281::o;4106:253:3:-;4189:12;4214;4228:23;4255:6;-1:-1:-1;;;;;4255:19:3;4275:4;4255:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4213:67:3;;-1:-1:-1;4213:67:3;-1:-1:-1;4297:55:3;4324:6;4213:67;;4297:26;:55::i;:::-;4290:62;4106:253;-1:-1:-1;;;;;4106:253:3:o;6598:122:0:-;6648:9;:13;6644:70;;6684:19;;-1:-1:-1;;;6684:19:0;;;;;;;;;;;6644:70;6598:122::o;4625:582:3:-;4769:12;4798:7;4793:408;;4821:19;4829:10;4821:7;:19::i;:::-;4793:408;;;5045:17;;:22;:49;;;;-1:-1:-1;;;;;;5071:18:3;;;:23;5045:49;5041:119;;;5138:6;5121:24;;-1:-1:-1;;;5121:24:3;;;;;;;;:::i;5041:119::-;-1:-1:-1;5180:10:3;4793:408;4625:582;;;;;:::o;5743:516::-;5874:17;;:21;5870:383;;6102:10;6096:17;6158:15;6145:10;6141:2;6137:19;6130:44;5870:383;6225:17;;-1:-1:-1;;;6225:17:3;;;;;;;;;;;14:127:6;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:250;231:1;241:113;255:6;252:1;249:13;241:113;;;331:11;;;325:18;312:11;;;305:39;277:2;270:10;241:113;;;-1:-1:-1;;388:1:6;370:16;;363:27;146:250::o;401:1063::-;489:6;497;550:2;538:9;529:7;525:23;521:32;518:52;;;566:1;563;556:12;518:52;592:16;;-1:-1:-1;;;;;637:31:6;;627:42;;617:70;;683:1;680;673:12;617:70;755:2;740:18;;734:25;706:5;;-1:-1:-1;;;;;;808:14:6;;;805:34;;;835:1;832;825:12;805:34;873:6;862:9;858:22;848:32;;918:7;911:4;907:2;903:13;899:27;889:55;;940:1;937;930:12;889:55;969:2;963:9;991:2;987;984:10;981:36;;;997:18;;:::i;:::-;1072:2;1066:9;1040:2;1126:13;;-1:-1:-1;;1122:22:6;;;1146:2;1118:31;1114:40;1102:53;;;1170:18;;;1190:22;;;1167:46;1164:72;;;1216:18;;:::i;:::-;1256:10;1252:2;1245:22;1291:2;1283:6;1276:18;1331:7;1326:2;1321;1317;1313:11;1309:20;1306:33;1303:53;;;1352:1;1349;1342:12;1303:53;1365:68;1430:2;1425;1417:6;1413:15;1408:2;1404;1400:11;1365:68;:::i;:::-;1452:6;1442:16;;;;;;;401:1063;;;;;:::o;1469:203::-;-1:-1:-1;;;;;1633:32:6;;;;1615:51;;1603:2;1588:18;;1469:203::o;1677:287::-;1806:3;1844:6;1838:13;1860:66;1919:6;1914:3;1907:4;1899:6;1895:17;1860:66;:::i;:::-;1942:16;;;;;1677:287;-1:-1:-1;;1677:287:6:o;:::-;1938:1064:5;;;;;;",
                            "linkReferences": {}
                        },
                        "deployedBytecode": {
                            "object": "0x6080604052600a600c565b005b60186014601a565b6051565b565b6000604c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e808015606f573d6000f35b3d6000fdfea26469706673582212201bcd65594c3688ff2a063e0eb80faf8a16f4016ee9a78f079dec70e19cb0f50a64736f6c63430008140033",
                            "sourceMap": "1938:1064:5:-:0;;;2649:11:1;:9;:11::i;:::-;1938:1064:5;2323:83:1;2371:28;2381:17;:15;:17::i;:::-;2371:9;:28::i;:::-;2323:83::o;2874:126:5:-;2941:7;2963:32;1327:66:0;2035:53;-1:-1:-1;;;;;2035:53:0;;1957:138;2963:32:5;2956:39;;2874:126;:::o;949:895:1:-;1287:14;1284:1;1281;1268:34;1501:1;1498;1482:14;1479:1;1463:14;1456:5;1443:60;1577:16;1574:1;1571;1556:38;1615:6;1682:66;;;;1797:16;1794:1;1787:27;1682:66;1717:16;1714:1;1707:27",
                            "linkReferences": {},
                            "immutableReferences": {}
                        }
                    }
                }
            }
        }
    },
    "proxyResolution": {
        "isProxy": true,
        "proxyType": "EIP1967Proxy",
        "implementations": [
            {
                "address": "0x0c0142FDA79c3096952390bdCE376cF0a822737A"
            }
        ]
    },
    "match": "exact_match",
    "chainId": "100009",
    "address": "0xDf94739bd169C84fe6478D8420Bb807F1f47b135"
}
````

{% endcode %}
{% endtab %}
{% endtabs %}


# NFT

**Endpoints**

* NFT Token List
* NFT Info
* VIP181 Balance
* VIP181 Balance Custom
* NFT Holder List


# NFT Token List

Returns a list of all NFT projects supported on VeChain Stats.

```
https://api.vechainstats.com/v2/nft/list
    ?VCS_API_KEY=your_api_key
```

{% tabs %}
{% tab title="Response" %}
{% hint style="info" %}
Output below is shortened and only serves as an example
{% endhint %}

```json
{
    "status": {
        "success": true,
        "message": "OK"
    },
    "data": [
        {
            "id": "exoworlds",
            "name": "ExoWorlds",
            "type": "vip181",
            "nfts": 10000,
            "contract": "0x3473c5282057d7beda96c1ce0fe708e890764009"
        },
        {
            "id": "nemesis",
            "name": "Nemesis",
            "type": "vip181",
            "nfts": 2500,
            "contract": "0x09985f776ae2c175106d8febf5360f6b380db582"
        },
        {
            "id": "sharks_of_anarchy",
            "name": "Sharks of Anarchy",
            "type": "vip181",
            "nfts": 752,
            "contract": "0x072adc303f7ccf96c04fddadcb049e087bbb6dfc"
        }
    ],
    "meta": {
        "count": 184,
        "timestamp": 1695301915
    }
}
```

{% endtab %}
{% endtabs %}


# NFT Info

Returns contract and social information of a requested NFT project

```url
https://api.vechainstats.com/v2/nft/info
    ?id=exoworlds
    &expanded=true
    &VCS_API_KEY=your_api_key
```

{% tabs %}
{% tab title="Request" %}

| Parameter    | Description                                                                                          |
| ------------ | ---------------------------------------------------------------------------------------------------- |
| id           | The ID of a NFT project, can be found in the NFT Token List endpoint                                 |
| expanded     | Either `true` or `false`. Setting this option to `true` expands the response with extra information. |
| {% endtab %} |                                                                                                      |

{% tab title="Response" %}

```json
{
    "status": {
        "success": true,
        "message": "OK"
    },
    "data": {
        "name": "ExoWorlds",
        "type": "vip181",
        "contract": "0x3473c5282057d7beda96c1ce0fe708e890764009",
        "creation_timestamp": 1646405820,
        "creation_block": "11588518",
        "deployer_address": "0x2028de2ef48d4d3feffe15a9187789e6c95bbc90",
        "website": "https://exoworlds.io",
        "telegram": null,
        "twitter": "https://twitter.com/ExoWorldsNFT",
        "reddit": null,
        "medium": "https://medium.com/@ExoWorlds",
        "github": null,
        "token_holders": 894
    },
    "meta": {
        "id": "exoworlds",
        "expanded": true,
        "timestamp": 1695302161
    }
}
```

{% endtab %}
{% endtabs %}


# VIP181 Balance

Returns the balance of VIP181 NFT tokens from a requested address

```
https://api.vechainstats.com/v2/nft/vip181
    ?address=0xbBDA54E57f3FfdcF3d28F402326F5DF3a1c63778
    &id=vegas_pop
    &expanded=true
    &VCS_API_KEY=your_api_key
```

{% hint style="info" %}
**Note :** This endpoint is throttled to **10 calls/minute** regardless of API Pro tier.
{% endhint %}

{% tabs %}
{% tab title="Request" %}

| Parameter       | Description                                                                                                                            |
| --------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| address         | The address for which you want to know it's token balance.                                                                             |
| id (*optional*) | The ID of a NFT project, can be found in the NFT Token List endpoint. If not set, all NFT projects with a balance over 0 are returned. |
| expanded        | Either `true` or `false`. Setting this option to `true` expands the response with extra information.                                   |
| {% endtab %}    |                                                                                                                                        |

{% tab title="Response" %}

```
{
    "status": {
        "success": true,
        "message": "OK"
    },
    "data": {
        "vegas_pop": {
            "name": "The Hive PoP",
            "amount": 0,
            "contract": "0xfb3b2f8b4f8aae9e7a24ba0bcbb6a49d344f2ef3",
            "token_ids": []
        }
    },
    "meta": {
        "address": "0xbbda54e57f3ffdcf3d28f402326f5df3a1c63778",
        "id": "vegas_pop",
        "expanded": true,
        "nfts_total": 139,
        "timestamp": 1696336252
    }
}
```

{% endtab %}
{% endtabs %}


# VIP181 Balance Custom

Returns the VIP181 (NFT) balance of a given address for a requested VIP181 contract address

```
https://api.vechainstats.com/v2/nft/vip181-custom
    ?address=0x60C493C86Ce6CF622aF28F4a2D29fc60C1748A16
    &contract=0x93Ae8aab337E58A6978E166f8132F59652cA6C56
    &VCS_API_KEY=your_api_key
```

{% tabs %}
{% tab title="Request" %}

| Parameter    | Description                                                |
| ------------ | ---------------------------------------------------------- |
| address      | The address for which you want to know it's token balance. |
| contract     | The contract address of the VIP180 token.                  |
| {% endtab %} |                                                            |

{% tab title="Response" %}

```json
{
    "status": {
        "success": true,
        "message": "OK"
    },
    "data": {
        "amount": 12
    },
    "meta": {
        "address": "0x60c493c86ce6cf622af28f4a2d29fc60c1748a16",
        "contract": "0x93ae8aab337e58a6978e166f8132f59652ca6c56",
        "timestamp": 1696334453
    }
}
```

{% endtab %}
{% endtabs %}


# NFT Holder List

Returns the list of addresses and their count of NFTs held of a requested NFT project

```
https://api.vechainstats.com/v2/nft/holder-list
    ?id=exoworlds
    &threshold=100
    &page=
    &VCS_API_KEY=your_api_key
```

{% hint style="info" %}
**Note :** This endpoint is throttled to **10 calls/minute** regardless of API Pro tier.
{% endhint %}

{% tabs %}
{% tab title="Request" %}

| Parameter             | Description                                                                                                                     |
| --------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
| id                    | The ID of a NFT project, can be found in the NFT Token List endpoint                                                            |
| treshold (*optional*) | Setting this to an `Integer` value limits the response addresses to those that hold an amount equal or above the treshold value |
| page                  | the `integer` page number, the available pages are shown in the response meta fields                                            |
| {% endtab %}          |                                                                                                                                 |

{% tab title="Response" %}

```
{
    "status": {
        "success": true,
        "message": "OK"
    },
    "data": {
        "0xe860cef926e5e76e0e88fdc762417a582f849c27": 512,
        "0xaee087732f2c4a81e13f08ced9933f825c1daf6a": 317,
        "0xc71757050454d093513fcafd2eb41e4ca844b6a1": 303,
        "0x5a48bcf53a73665cd905d1157825665cfce856ad": 262,
        "0x2b57dbd11c5e9b3981d39b5452f44765f33faee6": 260,
        "0x2c43caa2b1be58b3e1dc286f291c7da9a40a4245": 258,
        "0xa979e29f5a7bcc852477c196272769be047313bb": 193,
        "0xc4afdf8e62921a7243fb3449d9d5fbb98dd5cf27": 134,
        "0xf1b501976af0ba3f169f80796daba21e0df921d6": 129,
        "0x5aa85851a9078b0738316085e7d66dbd43e46fbe": 117,
        "0x1b311eecd4cf97d4f90229e0d6ab1b7d7458dec4": 115,
        "0x91fc5056704812ae6c21935bfd3ddba61e63ddc3": 110,
        "0xd3c9cf42bf4bdb6a8b88fac4ad95a8aaa3a8e934": 106,
        "0x7cf42dbcd56f6d23d99d524ffc174955a060993e": 104,
        "0x1e9368a3cb7eaf7d86b23aedabe52da341dbe509": 103,
        "0x3c84b20e0e236fecb999c006ef08ecbc59879bd9": 101
    },
    "meta": {
        "count": 16,
        "id": "exoworlds",
        "threshold": 100,
        "name": "ExoWorlds",
        "contract": "0x3473c5282057d7beda96c1ce0fe708e890764009",
        "holders": 896,
        "timestamp": 1696257011
    }
}
```

{% endtab %}
{% endtabs %}


# Carbon

**Endpoints**

* Address Emission
* Block Emission
* Transaction Emission
* Network Emission

{% hint style="info" %}
The CO2e calculation and data model used to determine the VechainThor Blockchain emissions are based on the best available information and methods at this time. However, these methods and information may change in the future due to new research, updated methodologies, or changes to the underlying data. Therefore, the emissions calculations and data for the current period may be subject to revision in the future. We will make reasonable efforts to keep the vechain blockchain emissions data up-to-date and accurate, and we appreciate your understanding as we strive to improve the emissions reporting.
{% endhint %}


# Address Emission

Returns the co2e emitted and incoming for a requested address

```
https://api.vechainstats.com/v2/carbon/co2e-address
    ?address=0x44bc93A8d3cEfA5a6721723a2f8d2e4F7d480BA0
    &VCS_API_KEY=your_api_key
```

{% tabs %}
{% tab title="Request" %}

| Parameter    | Description                   |
| ------------ | ----------------------------- |
| address      | The address you want to query |
| {% endtab %} |                               |

{% tab title="Response" %}

```json
{
    "status": {
        "success": true,
        "message": "OK"
    },
    "data": {
        "vcs_alias": "Binance 1 (In/Out Wallet)",
        "has_code": false,
        "co2e_emitted": "19429.26875417",
        "co2e_incoming": "7399.49649558"
    },
    "meta": {
        "address": "0x44bc93a8d3cefa5a6721723a2f8d2e4f7d480ba0",
        "type": "address",
        "unit": "grams",
        "disclaimer": "https://vechainstats.com/disclaimer/",
        "timestamp": 1695896755
    }
}
```

{% endtab %}
{% endtabs %}

{% hint style="info" %}
The CO2e calculation and data model used to determine the VechainThor Blockchain emissions are based on the best available information and methods at this time. However, these methods and information may change in the future due to new research, updated methodologies, or changes to the underlying data. Therefore, the emissions calculations and data for the current period may be subject to revision in the future. We will make reasonable efforts to keep the vechain blockchain emissions data up-to-date and accurate, and we appreciate your understanding as we strive to improve the emissions reporting.
{% endhint %}


# Block Emission

Returns the co2e accounted to the production of a requested block number

```
https://api.vechainstats.com/v2/carbon/co2e-block
    ?blocknum=16538235
    &VCS_API_KEY=your_api_key
```

{% tabs %}
{% tab title="Request" %}

| Parameter    | Description                                      |
| ------------ | ------------------------------------------------ |
| blocknum     | The block number to request the emission data of |
| {% endtab %} |                                                  |

{% tab title="Response" %}

```json
{
    "status": {
        "success": true,
        "message": "OK"
    },
    "data": {
        "number": 16538235,
        "hash": "0x00fc5a7b6de7fe17d79aae453f2fd3478c625ebb3c9ae07c5536951d15d3075c",
        "co2e_emitted": "0.17729761",
        "timestamp": 1695906710
    },
    "meta": {
        "blocknum": 16538235,
        "type": "block",
        "unit": "grams",
        "disclaimer": "https://vechainstats.com/disclaimer/",
        "timestamp": 1695975591
    }
}
```

{% endtab %}
{% endtabs %}

{% hint style="info" %}
The CO2e calculation and data model used to determine the VechainThor Blockchain emissions are based on the best available information and methods at this time. However, these methods and information may change in the future due to new research, updated methodologies, or changes to the underlying data. Therefore, the emissions calculations and data for the current period may be subject to revision in the future. We will make reasonable efforts to keep the vechain blockchain emissions data up-to-date and accurate, and we appreciate your understanding as we strive to improve the emissions reporting.
{% endhint %}


# Transaction Emission

Returns the co2e accounted to a transaction on the VechainThor blockchain

```
https://api.vechainstats.com/v2/carbon/co2e-transaction
    ?txid=0x8d838ce1e765135da16a44a4624943b3b96986c9ed26d56ca6f919f37918fb88
    &VCS_API_KEY=your_api_key
```

{% tabs %}
{% tab title="Request" %}

| Parameter    | Description                                           |
| ------------ | ----------------------------------------------------- |
| txid         | The transaction hash to request the emissions data of |
| {% endtab %} |                                                       |

{% tab title="Response" %}

```json
{
    "status": {
        "success": true,
        "message": "OK"
    },
    "data": {
        "co2e_emitted": "0.03914692"
    },
    "meta": {
        "txid": "0x8d838ce1e765135da16a44a4624943b3b96986c9ed26d56ca6f919f37918fb88",
        "type": "transaction",
        "unit": "grams",
        "disclaimer": "https://vechainstats.com/disclaimer/",
        "timestamp": 1695975724
    }
}
```

{% endtab %}
{% endtabs %}

{% hint style="info" %}
The CO2e calculation and data model used to determine the VechainThor Blockchain emissions are based on the best available information and methods at this time. However, these methods and information may change in the future due to new research, updated methodologies, or changes to the underlying data. Therefore, the emissions calculations and data for the current period may be subject to revision in the future. We will make reasonable efforts to keep the vechain blockchain emissions data up-to-date and accurate, and we appreciate your understanding as we strive to improve the emissions reporting.
{% endhint %}


# Network Emission

Returns the co2e data of the VechainThor blockchain for any given date or period

```
https://api.vechainstats.com/v2/carbon/co2e-network
    ?timeframe=2022-08
    &VCS_API_KEY=your_api_key
```

{% tabs %}
{% tab title="Request" %}

| Parameter    | Description                                      |
| ------------ | ------------------------------------------------ |
| timeframe    | Timeframe given in YYYY or YYYY-MM or YYYY-MM-DD |
| {% endtab %} |                                                  |

{% tab title="Response" %}

```json
{
    "status": {
        "success": true,
        "message": "OK"
    },
    "data": {
        "co2e_emitted": "368275.68462643",
        "co2e_clause_avg": "0.06548256"
    },
    "meta": {
        "timeframe": "2022-08",
        "type": "network",
        "unit": "grams",
        "days": 31,
        "partial_data": false,
        "disclaimer": "https://vechainstats.com/disclaimer/",
        "timestamp": 1695893437
    }
}
```

{% endtab %}
{% endtabs %}

{% hint style="info" %}
The CO2e calculation and data model used to determine the VechainThor blockchain emissions are based on the best available information and methods at this time. However, these methods and information may change in the future due to new research, updated methodologies, or changes to the underlying data. Therefore, the emissions calculations and data for the current period may be subject to revision in the future. We will make reasonable efforts to keep the vechain blockchain emissions data up-to-date and accurate, and we appreciate your understanding as we strive to improve the emissions reporting.
{% endhint %}


# Network

**Endpoints**

* Network Stats
* Network Totals
* Network Gas Stats
* Authority Nodes
* Mempool
* Node Token Count
* Node Token Stats
* Thor Instance Size
* X-Node List&#x20;


# Network Totals

Returns key metrics of the use of the VechainThor blockchain

```
https://api.vechainstats.com/v2/network/totals
    ?VCS_API_KEY=your_api_key
```

{% tabs %}
{% tab title="Response" %}

```json
{
    "status": {
        "success": true,
        "message": "OK"
    },
    "data": {
        "block_count": 16572628,
        "txns_total_count": 49377600,
        "clauses_total_count": 285382186,
        "vtho_total_burned": "3787001565.305302325339815334"
    },
    "meta": {
        "days": 1921,
        "timestamp": 1696250630
    }
}
```

{% endtab %}
{% endtabs %}


# Network Stats

Returns key metrics of the VechainThor blockchain for a requested timeframe

```
https://api.vechainstats.com/v2/network/stats
    ?timeframe=2023-09-01
    &VCS_API_KEY=your_api_key
```

{% tabs %}
{% tab title="Request" %}

| Parameter    | Description                                      |
| ------------ | ------------------------------------------------ |
| timeframe    | Timeframe given in YYYY or YYYY-MM or YYYY-MM-DD |
| {% endtab %} |                                                  |

{% tab title="Response" %}

```json
{
    "status": {
        "success": true,
        "message": "OK"
    },
    "data": {
        "block_count": 8639,
        "block_total_size": 53054967,
        "txns_total_count": 19597,
        "txns_reverted": 1436,
        "txns_mtt": 10291,
        "txns_mpp": 115,
        "txns_vip191": 13600,
        "clauses_total_count": 374487,
        "vtho_total_paid": "182206.360750156814771421",
        "vtho_total_rewarded": "54668.198547262042790186",
        "vtho_total_burned": "127544.452525109299999947"
    },
    "meta": {
        "timeframe": "2023-09-01",
        "days": 1,
        "partial_data": false,
        "timestamp": 1695992994
    }
}
```

{% endtab %}
{% endtabs %}


# Network Gas Stats

Returns the gas limit and gas used for a requested date

```
https://api.vechainstats.com/v2/network/gas-stats
    ?timeframe=2023-09-28
    &VCS_API_KEY=your_api_key
```

{% tabs %}
{% tab title="Request" %}

| Parameter    | Description                                      |
| ------------ | ------------------------------------------------ |
| timeframe    | Timeframe given in YYYY or YYYY-MM or YYYY-MM-DD |
| {% endtab %} |                                                  |

{% tab title="Response" %}

```json
{
    "status": {
        "success": true,
        "message": "OK"
    },
    "data": {
        "block_count": 8640,
        "gas_total_limit": 259141558819,
        "gas_total_used": 12316999888,
        "gas_intrinsic": 5219767260,
        "gas_evm_incurred": 7097232628,
        "gas_target_perc": 4.75
    },
    "meta": {
        "timeframe": "2023-09-28",
        "days": 1,
        "partial_data": false,
        "timestamp": 1695994773
    }
}
```

{% endtab %}
{% endtabs %}


# Network Gas Oracle

Gas Oracle returns next blocks base fee as well as suggested gas fee settings in GWEI

```
https://api.vechainstats.io/v2/network/gas-oracle
    &VCS_API_KEY=your_api_key
```

{% tabs %}
{% tab title="Response" %}

```json
{
    "status": {
        "success": true,
        "message": "OK"
    },
    "data": {
        "block_height": 22983771,
        "block_timestamp": 1760368300,
        "block_base_fee": 10000.0,
        "block_base_fee_next": 10000.0,
        "block_base_fee_offset": 0.0,
        "block": {
            "gas_limit": 40000000,
            "gas_used": 15947190,
            "usage_percentage": 39.87,
            "txns_total_count": 20,
            "vtho_rewarded": "7.276365430397464956"
        },
        "oracle": {
            "normal": {
                "max_fee_per_gas": "10000",
                "max_priority_fee_per_gas": "0"
            },
            "fast": {
                "max_fee_per_gas": "10228.142773471",
                "max_priority_fee_per_gas": "228.134229484"
            }
        },
        "vtho_price_usd": "0.00127972",
        "vtho_price_updated": 1760368262
    },
    "meta": {
        "timestamp": 1760368300
    }
}
```

{% endtab %}
{% endtabs %}


# Authority Nodes

Returns a list of all authority node addresses and their relevant data

```
https://api.vechainstats.com/v2/network/authority-nodes
    ?expanded=true
    &VCS_API_KEY=your_api_key
```

{% hint style="info" %}
**Note :** This endpoint is throttled to **10 calls/minute** regardless of API Pro tier.
{% endhint %}

{% tabs %}
{% tab title="Request" %}

| Parameter    | Description                                                                                          |
| ------------ | ---------------------------------------------------------------------------------------------------- |
| expanded     | Either `true` or `false`. Setting this option to `true` expands the response with extra information. |
| {% endtab %} |                                                                                                      |

{% tab title="Response" %}
{% hint style="info" %}
Output below is shortened and only serves as an example
{% endhint %}

```json
{
    "status": {
        "success": true,
        "message": "OK"
    },
    "data": {
        "0x061d774d5928aa82476eb0b46bc3cbd49d1d24df": {
            "endorser": "0x0da8fa475c8272d21be204fe8112d1e2cd698c96",
            "blocks_total_signed": 109980,
            "vtho_total_rewarded": 8525215,
            "last_block_signed": 16512578,
            "last_block_timestamp": 1695650140
        },
        "0xff5b7033808138af64c4200275a9265cde98cc98": {
            "endorser": "0x79c47ffe08296bada230cd5453a8d3c1a68fa2da",
            "blocks_total_signed": 83846,
            "vtho_total_rewarded": 1509808,
            "last_block_signed": 16512535,
            "last_block_timestamp": 1695649710
        }
    },
    "meta": {
        "count": 101,
        "expanded": true,
        "timestamp": 1695651762
    }
}
```

{% endtab %}
{% endtabs %}


# Mempool

Returns information on the status of the mempool

```
https://api.vechainstats.com/v2/network/mempool
    ?expanded=true
    &VCS_API_KEY=your_api_key
```

{% hint style="info" %}
**Note :** This endpoint is throttled to **30 calls/minute** regardless of API Pro tier.
{% endhint %}

{% tabs %}
{% tab title="Request" %}

| Parameter    | Description                                                                                          |
| ------------ | ---------------------------------------------------------------------------------------------------- |
| expanded     | Either `true` or `false`. Setting this option to `true` expands the response with extra information. |
| {% endtab %} |                                                                                                      |

{% tab title="Response" %}

```json
{
    "status": "success",
    "code": 200,
    "message": "ok",
    "data": {
        "pending_txns": 1,
        "total_clauses": 1,
        "total_size": 157,
        "txlist": [
            "0x1f2168ebf6221c13fad80c0fc87355c10e6d54c32029156d3722e30a2fe62665"
        ]
    },
    "meta": {
        "expanded": true,
        "timestamp": 1695287113
    }
}
```

{% endtab %}
{% endtabs %}


# Node Token Count

Returns the amount of X-Node and Economic Node tokens currently existing on vechain

```
https://api.vechainstats.com/v2/network/node-token-count
    ?VCS_API_KEY=your_api_key
```

{% tabs %}
{% tab title="Response" %}

```json
{
    "status": {
        "success": true,
        "message": "OK"
    },
    "data": {
        "xnode_tokens": 2305,
        "economic_node_tokens": 1615
    },
    "meta": {
        "timestamp": 1692794077
    }
}
```

{% endtab %}
{% endtabs %}


# Node Stats (TVL)

Returns key metrics on the different vechain node tiers and total VET staked

```url
https://api.vechainstats.com/v2/network/node-token-stats
    ?VCS_API_KEY=your_api_key
```

{% tabs %}
{% tab title="Response" %}

```json
{
    "status": {
        "success": true,
        "message": "OK"
    },
    "data": {
        "validator": {
            "name": "Validator (Authority Node)",
            "type": "validator",
            "level": null,
            "holders": 101,
            "cap": 101,
            "vet_node_requirement": 25000000,
            "vet_total_staked": 2800717267
        },
        "dawn": {
            "name": "Dawn Node",
            "type": "economic_node",
            "level": 8,
            "holders": 4321,
            "cap": 500000,
            "vet_node_requirement": 10000,
            "vet_total_staked": 43210000
        },
        "lightning": {
            "name": "Lightning Node",
            "type": "economic_node",
            "level": 9,
            "holders": 2576,
            "cap": 100000,
            "vet_node_requirement": 50000,
            "vet_total_staked": 128800000
        },
        "flash": {
            "name": "Flash Node",
            "type": "economic_node",
            "level": 10,
            "holders": 1841,
            "cap": 25000,
            "vet_node_requirement": 200000,
            "vet_total_staked": 368200000
        },
        "strength": {
            "name": "Strength Node",
            "type": "economic_node",
            "level": 1,
            "holders": 1657,
            "cap": 2500,
            "vet_node_requirement": 1000000,
            "vet_total_staked": 1657000000
        },
        "thunder": {
            "name": "Thunder Node",
            "type": "economic_node",
            "level": 2,
            "holders": 241,
            "cap": 300,
            "vet_node_requirement": 5000000,
            "vet_total_staked": 1205000000
        },
        "mjolnir": {
            "name": "Mjolnir Node",
            "type": "economic_node",
            "level": 3,
            "holders": 98,
            "cap": 100,
            "vet_node_requirement": 15000000,
            "vet_total_staked": 1470000000
        },
        "vethorx": {
            "name": "VeThor X-Node",
            "type": "xnode",
            "level": 4,
            "holders": 732,
            "cap": 732,
            "vet_node_requirement": 600000,
            "vet_total_staked": 439200000
        },
        "strengthx": {
            "name": "Strength X-Node",
            "type": "xnode",
            "level": 5,
            "holders": 837,
            "cap": 837,
            "vet_node_requirement": 1600000,
            "vet_total_staked": 1339200000
        },
        "thunderx": {
            "name": "Thunder X-Node",
            "type": "xnode",
            "level": 6,
            "holders": 187,
            "cap": 187,
            "vet_node_requirement": 5600000,
            "vet_total_staked": 1047200000
        },
        "mjolnirx": {
            "name": "Mjolnir X-Node",
            "type": "xnode",
            "level": 7,
            "holders": 150,
            "cap": 150,
            "vet_node_requirement": 15600000,
            "vet_total_staked": 2340000000
        }
    },
    "meta": {
        "vet_staked": 12838527267,
        "timestamp": 1753710616
    }
}
```

{% endtab %}
{% endtabs %}


# Thor Instance Size

Returns the current size of the different Thor Node types in bytes

```
https://api.vechainstats.com/v2/network/thor-instance-size
    ?VCS_API_KEY=your_api_key
```

{% hint style="info" %}
**Note :** This endpoint is throttled to **10 calls/minute** regardless of API Pro tier.
{% endhint %}

{% tabs %}
{% tab title="Response" %}
{% hint style="info" %}
The instance size is returned in bytes, 1 GB equals 1,073,741,824 bytes.
{% endhint %}

```json
{
    "status": {
        "success": true,
        "message": "OK"
    },
    "data": {
        "archive_nodes": 356287468042,
        "full_nodes": 165052218614,
        "full_nodes_skip": 85185851983
    },
    "meta": {
        "count": 3,
        "timestamp": 1695646709
    }
}
```

{% endtab %}
{% endtabs %}


# X-Node List

Returns a list of the addresses that hold an X-Node token. Includes both Legacy & Stargate X-Nodes which can be identified by 'contract'.

```
https://api.vechainstats.com/v2/network/xnode-list
    ?expanded=true
    &VCS_API_KEY=your_api_key
```

{% hint style="info" %}
**Note :** This endpoint is throttled to **10 calls/minute** regardless of API Pro tier.
{% endhint %}

{% tabs %}
{% tab title="Request" %}

| Parameter    | Response                                                                                             |
| ------------ | ---------------------------------------------------------------------------------------------------- |
| expanded     | Either `true` or `false`. Setting this option to `true` expands the response with extra information. |
| {% endtab %} |                                                                                                      |

{% tab title="Response" %}
{% hint style="info" %}
Output below is shortened and only serves as an example
{% endhint %}

```json
{    
    "status": {
        "success": true,
        "message": "OK"
    },
        "data": {
            "0xfc87cf5b81b42ba3014dfee39d2fa97f97683af3": {
                "id": 5873,
                "type": "mjolnirx",
                "contract": "legacy"
            },
            "0x3eec8db7a8f95aee2763656e4447befbe40f5f44": {
                "id": 7,
                "type": "strengthx",
                "contract": "stargate"
            },
            "0x30abb1c2d871d59a32c6358c689242c063809112": {
                "id": 8,
                "type": "thunderx",
                "contract": "stargate"
            },
    "meta": {
        "count": 1904,
        "expanded": true,
        "timestamp": 1753715205
    }
}
```

{% endtab %}
{% endtabs %}


# Contract Verification

Submit a contract for verification

Endpoints:

* Verify Contract (Standard JSON)
* Verify Contract (Using Solidity metadata.json)


# Verify Contract (Standard JSON)

{% hint style="warning" %}
**Note:** This API uses `https://verify-api.vechainstats.com` instead of the standard `https://api.vechainstats.com`base URL.
{% endhint %}

Submit a contract for verification via the [Solidity standard JSON input](https://docs.soliditylang.org/en/latest/using-the-compiler.html#input-description) or [Vyper JSON input](https://docs.vyperlang.org/en/stable/compiling-a-contract.html#input-json-description).

```
https://verify-api.vechainstats.com/v2/verify/100009/{address}
```

{% tabs %}
{% tab title="Request" %}

```json
Request body example:

{
  "stdJsonInput": {},
  "compilerVersion": "0.8.7+commit.e28d00a7",
  "contractIdentifier": "contracts/Storage.sol:Storage",
  "creationTransactionHash": "0xb6ee9d528b336942dd70d3b41e2811be10a473776352009fd73f85604f5ed206"
}
```

{% endtab %}

{% tab title="Response" %}
Success:

<pre class="language-json"><code class="lang-json"><strong>{
</strong>  "verificationId": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
}
</code></pre>

{% endtab %}
{% endtabs %}


# Verify Contract (Using Solidity metadata.json)

{% hint style="warning" %}
**Note:** This API uses `https://verify-api.vechainstats.com` instead of the standard `https://api.vechainstats.com`base URL.
{% endhint %}

Endpoint to submit a verification with the Solidity [metadata.json](https://docs.soliditylang.org/en/latest/metadata.html)

```
https://verify-api.vechainstats.com/v2/verify/metadata/100009/{address}
```

{% tabs %}
{% tab title="Request" %}

<pre class="language-json"><code class="lang-json">Request body example:

<strong>{
</strong>  "sources": {
    "contracts/Storage.sol": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ncontract Storage {\n    uint256 number;\n\n    function setNumber(uint256 newNumber) public {\n        number = newNumber;\n    }\n\n    function getNumber() public view returns (uint256) {\n        return number;\n    }\n}\n",
    "contracts/Owner.sol": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ncontract Owner {\n    address public owner;\n\n    constructor() {\n        owner = msg.sender;\n    }\n}\n"
  },
  "metadata": {}
}
</code></pre>

{% endtab %}

{% tab title="Response" %}

```json
{
  "verificationId": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
}
```

{% endtab %}
{% endtabs %}


# API Info

**Endpoints**

* API Info
* API Ping


# API Info

Returns info on your API Key plan and credit limits

```
https://api.vechainstats.com/v2/api-info
    ?VCS_API_KEY=your_api_key
```

{% tabs %}
{% tab title="Response" %}

```json
{
    "status": {
        "success": true,
        "message": "OK"
    },
    "data": {
        "plan": "premium",
        "daily_limit": 7500,
        "daily_used": 52,
        "daily_remaining": 7448,
        "user_note": "test"
    },
    "meta": {
        "timestamp": 1695722338
    }
}
```

{% endtab %}
{% endtabs %}


# API Ping

Returns a ping and timestamp to ensure connection is live

```
https://api.vechainstats.com/v2/api-ping
    ?VCS_API_KEY=your_api_key
```

{% tabs %}
{% tab title="Response" %}

```json
{
    "status": {
        "success": true,
        "message": "OK"
    },
    "data": {
        "ping": true
    },
    "meta": {
        "timestamp": 1695722261
    }
}
```

{% endtab %}
{% endtabs %}


# FAQ

**Q: What can I do with the Blockchain Explorer API?**&#x20;

A: With the Blockchain Explorer API, you can programmatically retrieve information about transactions, addresses, blocks, and other blockchain-related data. You can use this information to build applications and services on top of the blockchain, such as wallet apps, transaction trackers, analytics tools, and more.

\
**Q: How do I get an API key?**&#x20;

A: To use our Blockchain Explorer API, you will need to register for an account on our platform and obtain a valid API key. The API key serves as an authentication mechanism that allows you to make authorized requests to our API. Detailed instructions on how to obtain an API key can be found in the documentation under the "Authentication" section.

**Q: What is the rate limiting policy for the API?**&#x20;

A: Our API has rate limiting policies in place to prevent abuse and ensure fair usage. The specific rate limits for our API can be found in the documentation in the [Rate Limits](/support/rate-limits) section. Please make sure to adhere to the rate limits to avoid exceeding the allowed usage and encountering errors.

**Q: What programming languages are supported by the API?**&#x20;

A: Our API is language-agnostic and can be used with any programming language that supports HTTP requests and JSON formatting. You can make requests to our API using popular programming languages such as Python, JavaScript, Ruby, Java, C#, and more.

**Q: What error handling mechanisms are in place?**&#x20;

A: Our API provides detailed error responses that include error codes, error messages, and HTTP status codes to help you identify and troubleshoot issues. The documentation includes information on common error scenarios and how to handle errors in your application to ensure smooth integration with our API.

**Q: Is technical support available for the API?**&#x20;

A: Yes, we provide technical support for our API. If you encounter any issues or have questions related to the API integration, you can contact our support team through the designated channels provided on our platform. Additionally, you can refer to the documentation for troubleshooting tips, FAQs, and best practices to assist you in resolving any concerns.

**Q: Can I use the API for commercial purposes?**&#x20;

A: Yes, our API can be used for commercial purposes. However, please review our terms of service and usage policies to ensure compliance with our guidelines and requirements for commercial usage.

**Q: Is the API documentation up-to-date?**&#x20;

A: We strive to keep our API documentation up-to-date with the latest features, endpoints, request and response formats, authentication mechanisms, rate limiting policies, and best practices. However, please note that changes to the API may occur over time, and it's recommended to periodically check for updates in the documentation or subscribe to our API notifications for any changes or announcements.

If you have any other questions or need further clarification, feel free to contact our support team or refer to the documentation for more information.<br>


# Rate Limits

<table><thead><tr><th width="209.5">API Tier</th><th>Rate Limit</th></tr></thead><tbody><tr><td><strong>Free</strong></td><td>12 calls/minute, up to 250 calls/day</td></tr><tr><td><strong>Business</strong></td><td>120 calls/minute, up to 7,500 calls/day</td></tr><tr><td><strong>Professional</strong></td><td>600 calls/minute, up to 100,000 calls/day</td></tr></tbody></table>


# Response HTTP Status

<table><thead><tr><th width="178.33333333333331">Response</th><th width="221">Error Name</th><th>Description</th></tr></thead><tbody><tr><td>400</td><td>Date format invalid: expected format YYYY-mm-dd</td><td>The date parameter does not follow the requested date format.</td></tr><tr><td>400</td><td>Date format invalid: prior genesis block</td><td>Requested date is before the launch of the VeChainThor mainnet.</td></tr><tr><td>400</td><td>Date format invalid: in future</td><td>Endpoint does not allow to request a date in the future.</td></tr><tr><td>400</td><td>Address is missing</td><td>The request is missing the address parameter.</td></tr><tr><td>400</td><td>Invalid EVM-compatible address</td><td>Requested address doesn't pass checksum, lowercased or uppercased validation.</td></tr><tr><td>400</td><td>Invalid Block Reference</td><td>The blockref is not associated with a block on VeChainThor</td></tr><tr><td>401</td><td>Unauthorized, missing or invalid API-key</td><td>API plan does not allow for access to this endpoint or API key is not valid.</td></tr><tr><td>403</td><td>Access restricted</td><td>API plan does not allow for access to this endpoint. Consider upgrading.</td></tr><tr><td>404</td><td>Endpoint not found</td><td>Endpoint doesn't exist.</td></tr><tr><td>429</td><td>Rate limit exceeded</td><td>Rate limit of associated <a href="/support/rate-limits">API plan</a> was exceeded.</td></tr><tr><td>429</td><td>Daily credit limit exceeded</td><td>Daily limit of associated <a href="/support/rate-limits">API plan</a> has been exceeded.</td></tr><tr><td>429</td><td>Request limit exceeded for {} plan</td><td>Rate limit of associated <a href="/support/rate-limits">API plan</a> was exceeded.</td></tr><tr><td>429</td><td></td><td></td></tr><tr><td>503</td><td>Service Unavailable</td><td>A server-side error occured that prevents the server from fulfilling the api request. Please retry again later.</td></tr></tbody></table>

0 = unset / unknown 1 = mongodb 2 = redis 3 = mysql connection 4 = thor nodes 5 = syntax error query


# Common Error Messages

This page walks through some of the most common error messages returned when calling the VeChainStats APIs. These calls return a status code '0' and a formulated cause of the error in the result field.&#x20;

```http
{
   "status":"0",
   "message":"NOTOK",
   "result":"Max rate limit reached, please use API Key for higher rate limit"
}
```

### API Key Errors

> "Invalid API Key"\
> "Missing API Key"\
> "Inactive API Key"

These errors occur when the provided API Key doesn't provide access to the requested endpoint (invalid), isn't provided (missing) or isn't active anymore (inactive).

To resolve, ensure that you have copy pasted the right key and your API plan is allowed to ping the requested endpoint.

New API Keys may take a moment to be fully activated, so if your newly created key is returning an error please consider waiting for a few minutes.

### Date Format Invalid

> Date format invalid: expected format YYYY-mm-dd
>
> Date format invalid: prior genesis block
>
> Date format invalid: in future

This error occurs in different forms. Please make sure to stick to the correct date format requested by the API, the date isn't before VeChain mainnet launch and that the endpoint allows for a date before/after the current date.&#x20;

### Max rate limit

> Request limit exceeded for ' ' plan

This error occurs when you **exceed the rate limit** assigned to your API key.

To resolve, adhere to the [**rate limits**](/support/rate-limits) of your API plan decreasing the rate of your requests or upgrade your plan.&#x20;

In some scenarios caching the returns for some period before sending a new request will fix this.


# Socials

## Twitter

For general updates and new releases: follow us on Twitter

{% hint style="info" %}
[Twitter](https://twitter.com/VeChainStats)
{% endhint %}

## Discord

For discussions and getting in contact: join the Discord

{% hint style="info" %}
[Discord](https://discord.gg/2fs5ZFZBmV)
{% endhint %}

## Telegram

For discussions and getting in contact: join the Telegram

{% hint style="info" %}
[Telegram](https://t.me/vechainstats)
{% endhint %}


# Change Log

**v2.4.0 on October 13th, 2025**

* Added Gas Oracle endpoint [Network Gas Oracle](/api-endpoints/network/network-gas-oracle)

**v2.4.0 on June 20th, 2025**

* Added Staked VET to [VET/VTHO Balance](/api-endpoints/account/vet-vtho-balance) and [Historic VET/VTHO](/api-endpoints/account/historic-vet-vtho)
* Updated [Node Stats (TVL)](/api-endpoints/network/node-stats-tvl)[Node Token Count](/api-endpoints/network/node-token-count)and [X-Node List](/api-endpoints/network/x-node-list) to reflect the new Stargate nodes and new node levels. These endpoints combine counts of Legacy nodes and Stargate nodes.
* Update [Transaction Info](/api-endpoints/transaction/transaction-info)and [Block Info](/api-endpoints/block/block-info)to align with VeChain Galactica hard-fork changes

**v2.3.0 on June 20th, 2025**

* Added contract verification endpoints [Contract Verification](/api-endpoints/contract-verification)

**v2.2.1 on March 28th, 2025**

* Added contract creation transaction hash to the [Contract Info](/api-endpoints/contract/contract-info) endpoint as "creation\_txid"&#x20;

**v2.2.0 on February 13th, 2025**

* **Important**: Endpoint 'Internal Transfers' is deprecated. Data expected from this endpoint is now combined with regular token transfers in the 'Token Transfers' endpoint.
* New DEXes integrated: BetterSwap and VeSwap are now supported.

**v2.1.1 on August 19th, 2024**

* New endpoint: Account Extended Stats
* Updated /v2/account/historic-vet-vtho to be queried for not just a date but a block number as well. This change of input is optional and existing users won't be affected.&#x20;

**v2.1.0 on July 9th, 2024**

* New endpoint: Transactions In
* New endpoint: Token Transfers
* New endpoint: NFT Transfers
* New endpoint: DEX Trades
* New endpoint: Internal Transfers

**v2.0.2 on March 26th, 2024**

* Updated /v2/transaction/status to display builtin EVM errors as well as the clause index on which the transaction reverts
* Minor bug fixes

**v2.0.1 on December 11th, 2023**

* Minor bug fixes

#### v2.0.0 on October 06, 2023

* Release of the public VCS APIs


