# Introduction

Guides for integrating with HashPack and building on Hedera

The main goal of HashPack is to empower developers and creators in order to build a thriving ecosystem on Hedera.

This site is a collection of best practices, documentation, and resources, to help further this goal.

***

### Useful Links:

* [HashGraph Developer Guild Discord](https://discord.gg/43QvWPEk6p)
* [Hedera Documentation](https://docs.hedera.com/hedera/)
* [Hedera Discord](https://discord.gg/hedera)
* [HashPack Discord](https://discord.gg/vU2AfvB9Ba)

***

{% content-ref url="/pages/uhNfc2QiVWlKpHISqb5v" %}
[dApp Developers](/dapp-developers/walletconnect)
{% endcontent-ref %}

{% content-ref url="/pages/3UCZ5h5OkLb8zVLGtcqf" %}
[NFT Creators](/nft-creators/introduction)
{% endcontent-ref %}

{% content-ref url="/pages/OvhFJ6EwW5xuI7dqVtU1" %}
[Token Creators](/token-creators/token-creator-tool)
{% endcontent-ref %}


# General Guidelines


# Basics

First, read the [Hedera Documentation](https://docs.hedera.com/hedera/). This will be your main reference for all transaction types, network concepts, tools, and general information about how to interact with Hedera. **It is critical** that you understand all the different [API's](https://docs.hedera.com/hedera/sdks-and-apis/hedera-api) available to you. They are the core tools in your toolbelt.

As with most things in the web3 space the majority of things you build and tooling available will be using Javascript (preferably TypeScript). It is recommended you have a good understanding on general Javascript workflows, and are proficient in at least one of the major web frameworks (Angular, React, Vue, etc).

Support for other languages is available (you can find the various Hedera SDK's [here](https://docs.hedera.com/hedera/sdks-and-apis/sdks#hedera-services-code-sdks)) but Javascript is the most popular with the widest variety of tooling.

Game developers can check out the [Game Development](/game-developers/coming-soon) section for more specialized tooling, though it is still recommended they read the rest of this guide as well.


# Mainnet/Testnet/Previewnet

The different types of networks

There are a few different networks available in Hedera that all serve a specific purpose.

### Mainnet

Mainnet can be considered 'Production'. This is the live network that uses real money, and is where your users will be interacting with the production versions of your applications.

### Testnet

Testnet is a pre-production environment meant to test your applications against. Testnet gets updates before Mainnet, so you can verify your app still works with the new changes before they get released.

Testnet does not use real money for transactions - you can set up a developer testnet account [here](https://portal.hedera.com/register) which will give you 10,000 hbar per day to play with.

### Previewnet

Previewnet is where the bleeding edge of updates get deployed, most people dont use this.

You can read more about the different networks [here](https://docs.hedera.com/hedera/networks).


# Mirror Nodes

Mirror Nodes are your gateway to data on the HashGraph.

Mirror nodes are read-only copies of the state of the network meant to be used for most of your data queries.

While it is possible to run your own mirror node, you will quickly find the cost of deploying and maintaining this infrastructure is quite high and generally ill-advised.

This is where the public mirror node and other mirror node providers come in.

It is **highly** **recommended** you use a paid mirror node provider when you push your app live.

Also note that there is a 5-15 second delay on most data posted to a mirror node - it is recommended you use paid mainnet queries for any mission-critical data.

### The Public Mirror Node

The public mirror node is a free-to-use mirror node service provided by Hedera **meant for development.** It is globally rate limited at 100 requests per second, but provides a bare minimum environment for playing around.

<mark style="color:red;">Again just to stress -</mark> <mark style="color:red;"></mark><mark style="color:red;">**DO NOT EVER USE THE PUBLIC MIRROR NODE IN PRODUCTION.**</mark>

You can find information about the public mirror node [here](https://docs.hedera.com/hedera/sdks-and-apis/rest-api).

One cool thing the public mirror node provides is a [Swagger based sandbox](https://mainnet-public.mirrornode.hedera.com/api/v1/docs/#/) you can explore the different endpoints with.

### Mirror Node Providers

#### [Hgraph.io](https://www.hgraph.io/)&#x20;

Hraph.io is a graphQL based mirror node service that allows for super optimized and complex queries, it also has a rest API available.

\
[Arkhia](https://www.arkhia.io/)\
This is the most widely used mirror node in the ecosystem, offering great stability and customer support.

\
[Validation Cloud](https://www.validationcloud.io/)\
A newcomer to Hedera, Validation Cloud offers a very generous free tier which may suit small dapps well.


# HIP's & Network Updates

By the people, for the people.

As a developer, its important to keep up to date with new features being added to the network.

The two main ways to do this is to keep an eye on the in-progress HIP's (Hedera Improvement Proposals) and when those are being deployed to the network.

### Hedera Improvement Proposals (HIP's)

HIP's are the lifeblood of the network. Anyone is able to submit a HIP for anything they think would help the network.&#x20;

You can find the official HIP site [here](https://hips.hedera.com/), with a list of all in-progress HIP's [here](https://hips.hedera.com/all.html). [HIP-1](https://hips.hedera.com/hip/hip-1) explains the process for submitting and following a HIP through the process of it eventually getting deployed to mainnet for the entire network to enjoy.

If you think of something that could improve the network - submit a HIP!

### Network Updates

You can keep an eye on the latest updates to the network by viewing the [Hedera Network Release Notes](https://docs.hedera.com/hedera/networks/release-notes/services) page. This will let you know when you can try stuff out on testnet, or when it has been released to the production mainnet.

### Network Status

When the network undergoes an update, it becomes unavailable.

If you are experiencing unexpected errors in your app, you should first check the [status page](https://status.hedera.com/) to ensure the network is available.


# WalletConnect

HashPack is fully compatible with WalletConnect - either using the native WalletConnect/ReOwn sdk's, or the Hedera WalletConnect wrapper

{% embed url="<https://www.npmjs.com/package/@hashgraph/hedera-wallet-connect>" %}

### Dapp Developer Guide

{% embed url="<https://github.com/hashgraph/hedera-wallet-connect/blob/main/docs/docs/dapp-guide.md>" %}

### Currently Supported Transaction Types

* Allowance Approve
* Allowance Delete
* Associate
* Disassociate
* File Append
* File Create
* Smart Contract Create
* Smart Contract Delete
* Smart Contract Execute
* Token Burn
* Token Create
* Token Delete
* Token Fee Update
* Token Freeze
* Token Unfreeze
* Token Pause
* Token Unpause
* Token Grant KYC
* Token Revoke KYC
* Token Mint
* Token Reject
* Token Wipe
* Topic Create
* Topic Delete
* Topic Submit
* Topic Update
* Transfer
* Sign Message

ECDSA Only:

* Eth Send Raw Transaction
* Eth Send Transaction
* Eth Sign Transaction
* Eth Sign Typed Data
* Eth Personal Sign


# Dapp Browser

HashPack has an integrated dapp browser that lists the most prominent applications in the ecosystem.

<figure><img src="https://442553025-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FvKxFkrjli3FqP3uLeh72%2Fuploads%2Fd8hKHvLCIMUCHMSDDVEr%2Fimage.png?alt=media&amp;token=6b96e230-73c0-4ddc-9c9a-5c881d9abfdd" alt=""><figcaption></figcaption></figure>

Being listed in the dapp browsers gives you instant exposure to our entire userbase - as well as instils a level of confidence that your dapp is legitimate.

**Please note** - HashConnect integration is required to be listed on the dapp browser page. You can apply for a listing [here](https://docs.google.com/forms/d/e/1FAIpQLSdw5MYbw0F10oyUgZBW_lmgupSchCESH6FNVu2TPpz-_dZD5g/viewform).


# Deeplinks

Deeplinks are a very powerful tool for directing users, especially mobile users, directly to a page in your application.

You can find the deeplink tool in the 'Advanced Tools' section of the HashPack menu.

<figure><img src="https://442553025-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FvKxFkrjli3FqP3uLeh72%2Fuploads%2Fz32ClYplS6TWB9etjqQg%2FUntitled%20Diagram.drawio.png?alt=media&amp;token=26144d27-f443-4792-a1ad-9a73c411251a" alt=""><figcaption></figcaption></figure>

**Please keep in mind that for security reasons deeplinks are only available for dapps included in our dapp browser, which requires HashConnect integration.**

On this page you can specify what dapp you want the deeplink to go to, as well as a subpage to be included.

<figure><img src="https://442553025-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FvKxFkrjli3FqP3uLeh72%2Fuploads%2FBNaPaqlBS4eKHhcTfqlL%2Fimage.png?alt=media&amp;token=6e4a5bfa-2304-430c-8163-62b95601ccbf" alt=""><figcaption></figcaption></figure>


# User Profiles

HashPack provides dapps with standardized user profile data if the user has set it. The special thing about our profile data is that it is token gated and guaranteed to be unique.&#x20;

<figure><img src="https://442553025-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FvKxFkrjli3FqP3uLeh72%2Fuploads%2FYAb81ybRA3YTneWDlOyU%2F9.0.0.png?alt=media&amp;token=76eb3c86-f359-4836-bf7b-5a96c42556ca" alt=""><figcaption></figcaption></figure>

***

{% content-ref url="/pages/mAbF4NdZ816mK3YiprQE" %}
[Profile API](/dapp-developers/user-profiles/profile-api)
{% endcontent-ref %}

***

#### Username

HashPack usernames are based on HNS domain names - this allows for unique identifiers and supports the domain ecosystem. If the domain has been sold, moved, or expired, the users profile will update accordingly.

**Profile Image**

Profile images are NFT images that the user owns. This token gating system supports the PFP NFT creators. If a user sells or moves the NFT their profile picture will be automatically removed.

#### Currency

This will let you know what currency the user prefers.


# Profile API

How to interact with Hedera profiles

{% content-ref url="/pages/a4cJAphAg251VAWVocRT" %}
[Get Single Profile](/dapp-developers/user-profiles/profile-api/get-single-profile)
{% endcontent-ref %}

{% content-ref url="/pages/F9Ma7XjLBCb8k25cgS4M" %}
[Get Multiple Profiles](/dapp-developers/user-profiles/profile-api/get-multiple-profiles)
{% endcontent-ref %}

{% content-ref url="/pages/rjgb2hHaDP5datg82NCQ" %}
[Update Profile](/dapp-developers/user-profiles/profile-api/update-profile)
{% endcontent-ref %}


# Get Single Profile

User profile API details

## Get Profile

This endpoint allows you to get a users profile

<pre><code><strong>POST https://api.hashpack.app/user-profile/get
</strong></code></pre>

It expects the following data:

```json
{
    accountId: "0.0.1234",
    network: "mainnet" | "testnet"
}
```

It will return:

```json
{
    "profilePicture": {
        "tokenId": "0.0.1234",
        "serial": 110,
        "thumbUrl": "https://hashpack.b-cdn.net/ipfs/Qmf8apzmTGrA5k2Y1DwBeUnpjEjUpRkcBpNx3ashKdp1ui?optimizer=image&width=350"
    },
    "theme": {
        "tokenId": "0.0.1234",
        "metadata": "ipfs://QmPcXnjJN7phcau2FJAFTXyRRAx43zrFmsW1cBLNjJuHdh",
        "themeId": "basic_early_supporter"
    },
    "username": {
        "name": "user.hbar",
        "tokenId": "0.0.1234",
        "serial": 141
    },
    "accountId": "0.0.1234",
    "network": "mainnet",
    "updatedAt": "2024-11-07T01:18:43.437Z",
    "nftFolders": [
        {
            "name": "My fav NFTs",
            "items": [
                {
                    "tokenId": "0.0.1518294",
                    "serial": 63
                }
            ]
        },
    ],
    "currency": "USD",
    "contacts": [
        {
            "name": "My Friend",
            "id": "0.0.1234",
            "note": "",
            "defaultMemo": ""
        },
    ],
    "bio": "Test bio",
    "twitterHandle": "username"
}
```


# Get Multiple Profiles

User profile API details

## Get Profile

This endpoint allows you to get a users profile

<pre><code><strong>POST https://api.hashpack.app/user-profile/get-multiple
</strong></code></pre>

It expects the following data:

```json
{
    accountIds: ["0.0.1234", "0.0.12345"],
    network: "mainnet" | "testnet"
}
```

It will return an array of profile data:

```json
[
    {
        "profilePicture": {
            "tokenId": "0.0.1234",
            "serial": 110,
            "thumbUrl": "https://hashpack.b-cdn.net/ipfs/Qmf8apzmTGrA5k2Y1DwBeUnpjEjUpRkcBpNx3ashKdp1ui?optimizer=image&width=350"
        },
        "theme": {
            "tokenId": "0.0.1234",
            "metadata": "ipfs://QmPcXnjJN7phcau2FJAFTXyRRAx43zrFmsW1cBLNjJuHdh",
            "themeId": "basic_early_supporter"
        },
        "username": {
            "name": "user.hbar",
            "tokenId": "0.0.1234",
            "serial": 141
        },
        "accountId": "0.0.1234",
        "network": "mainnet",
        "updatedAt": "2024-11-07T01:18:43.437Z",
        "nftFolders": [
            {
                "name": "My fav NFTs",
                "items": [
                    {
                        "tokenId": "0.0.1518294",
                        "serial": 63
                    }
                ]
            },
        ],
        "currency": "USD",
        "contacts": [
            {
                "name": "My Friend",
                "id": "0.0.1234",
                "note": "",
                "defaultMemo": ""
            },
        ],
        "bio": "Test bio",
        "twitterHandle": "username"
    }
]
```


# Update Profile

Coming Soon


# Token Gating

Coming soon!


# Tutorials

A collection of tutorials for building with HashConnect

Have a tutorial? Let us know and we will add it to this page.


# Case Studies

Coming Soon!


# Introduction

NFT's are a foundational aspect of crypto - but remember - they can be used for more than just art!

The applications of NFT's are vast, and its up to developers to find creative ways to apply them.

This section will go over some pointers for working with NFT's on Hedera.


# Metadata Standards

NFT Standards on Hedera are important to ensure display across the many marketplaces and wallets in the ecosystem.

HashPack authored [HIP-412](https://hips.hedera.com/hip/hip-412) in order to formalize these standards - it is recommended that anyone minting NFTs adheres to these standards.

The basic metadata is as follows:

{% code fullWidth="true" %}

```json
{
    "name": "NFT Name",
    "creator": "Creator Name",
    "description": "Human readable description of the asset - RECOMMENDED",
    "image": "cid or path to the NFT's image file, or for non-image NFTs, a preview image for display in wallets - REQUIRED",
    "type": "mime type - ie image/jpeg - REQUIRED",
    "files": [ // object array that contains uri, type and metadata - can contain multiple files
        {
            "uri": "cid or uri to file - REQUIRED",
            "is_default_file": "(Type: boolean) indicates if the file is the main file for this NFT - OPTIONAL",
            "type": "mime type - REQUIRED"
        }
    ],
    "properties": {
        // arbitrary json objects that cover the overarching properties of the token
    }
}
```

{% endcode %}


# Asset Storage

There are a few different options, each with their pros and cons, when it comes to storing NFT assets.

The following sections will outline these.

{% content-ref url="/pages/dVjrIPC6oce95of4bgV3" %}
[IPFS Hosting](/nft-creators/asset-storage/ipfs-hosting)
{% endcontent-ref %}

{% content-ref url="/pages/vjEIXtlTGM81SvAefzHS" %}
[Arweave Storage](/nft-creators/asset-storage/arweave-storage)
{% endcontent-ref %}

{% content-ref url="/pages/BhPhuq1V8st9cUdUNu0f" %}
[Custom Storage](/nft-creators/asset-storage/custom-storage)
{% endcontent-ref %}


# IPFS Hosting

IPFS is the storage system the majority of NFTs use.

IPFS, or InterPlanetary File System, is a decentralized file-sharing protocol that enables peer-to-peer data storage. It uses unique addresses based on content, making data retrieval efficient. IPFS promotes a distributed network model, enhancing resilience and availability.

A key aspect of IPFS is "pinning". A pinned file will not be deleted by IPFS garbage collection, an unpinned file runs the risk of disappearing.

In order to store and pin files on IPFS you will need to upload the files, there are a few options:

### [NFT.Storage](https://nft.storage/)

NFT.Storage is a free way to upload files to IPFS - **however** - free uploads run the risk of eventually being deleted by the IPFS garbage collection.&#x20;

### [Infura](https://www.infura.io/)

Infura is one of the biggest tooling companies in web3, and their IPFS dedicated gateway are likely the most affordable in the space.&#x20;

### [Pinata](https://www.pinata.cloud/)

Pinata is more of a full featured NFT suite, which may be helpful if you are doing lower volume stuff, however pricing ramps up quite quickly.


# Arweave Storage

Arweave is a blockchain-based, decentralized storage network designed for permanent and verifiable data storage. Arweave enables users to store data permanently, making it resistant to censorship and tampering.

### [Akord](https://akord.com/)

The official Arweave upload service


# Custom Storage

You are able to store metadata assets on your own servers as well!

Just stick the metadata/assets on any server and mint them into the tokens.

Please note, this is generally frowned upon from most NFT collectors, but it does have its place for certain use cases.


# Testing your NFT

Coming soon!


# Token Creator Tool

Creating a token is usually a pretty involved process - but HashPack makes it easy with our Token Creator Tool.

First, go to the menu in HashPack, click Advanced Tools, and then click Token Creator Tools

<figure><img src="https://442553025-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FvKxFkrjli3FqP3uLeh72%2Fuploads%2FwGAgKMfpwaX24kwU2Wma%2Fimage.png?alt=media&amp;token=2c0c9a80-d6c5-4c88-bfb4-3c9fc5f7b2c8" alt=""><figcaption></figcaption></figure>

You will now find yourself on the Token Creator landing

<figure><img src="https://442553025-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FvKxFkrjli3FqP3uLeh72%2Fuploads%2FTReUtVHtcRQKxZgl2wgT%2Fimage.png?alt=media&amp;token=6c8eb37b-4c8a-48ae-af49-a3e285298a04" alt=""><figcaption></figcaption></figure>

This screen contains all of the basic tools you need to mint and manage your token.


# Token Icon

Token icons are an important part of a token. HashPack uses the DaVinci token icon manager, which is a dapp that allows you to manage your icon across the ecosystem. Any wallet or dapp using this service will automatically pull in your token icon once uploaded.

You can find the token icon manager in the [Token Creator Tool](/token-creators/token-creator-tool).

Alternatively, you can [manually submit](https://forms.gle/iPxfF12sVG6iSM8N8) the icon to us and we will include it in the next update.


# Token Price

Currently HashPack uses price information from [SaucerSwap](https://www.saucerswap.finance/). Eventually, we will have price information from more dex's.

To get a token price and allow swapping of your token you will need to create a liquidity pool on SaucerSwap. You can do this through the [Token Creator Tool](/token-creators/token-creator-tool) or [manually](https://docs.saucerswap.finance/get-started/saucerswap-tutorials/liquidity/saucerswap-v1#how-to-create-a-liquidity-pool-written-guide) through the SaucerSwap dapp.


# HashPack Studio

Custom enterprise solution design

We offer custom solution design for enterprise clients looking to break into the web3 space.

Reach out to us [here](https://www.hashpack.app/studio)!


# Coming Soon!


