> For the complete documentation index, see [llms.txt](https://hydro.gitbook.io/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hydro.gitbook.io/docs/master.md).

# Getting Started

Snowflake Overview

### Snowflake Smart Contract Overview

The Snowflake smart contract is a compliant `Provider` under [ERC 1484](https://erc1484.org)

Under traditional smart contract infrastructure, dApps interact with users recognized by an Ethereum address. This creates complex user experiences in which a user must create a wallet, generally acquire Ethereum in their wallet and often additional tokens unique to the dApp experience. Snowflake operates as a base class that creates an underlying ecosystem of dApps that enable developers out-of-the-box to:

* Leverage a broad range of digital identity standards through ERC 1484.
* Allow users to access their dApps from an `Identity` associated with multiple addresses, and accordingly multiple devices without insecurely transferring private keys from one device to another.
* Charge users directly in the HYDRO token for services provided by the dApp.
* Charge users indirectly through a smart contract for services provided by the dApp.

  \-- This transfer can occur through a DEX, enabling dApps to maintain complex token ecosystems and receive payments in any token without their end-users needing to manage multiple tokens in their wallets.

  \-- This transfer can occur through arbitrarily sophisticated smart contracts with sophisticated payment structures such as interest rates, late fees, subscription fees, escrows, and other functions important to dApp development.
* Pay gas costs for user transactions occurring within their dApps through meta-transactions, removing the requirement for their end users to pay gas costs. This significantly simplifies the user onboarding flow, removing the requirement for dApp end-users to hold Eth in their wallets.

### Setting up a dApp for Snowflake

dApps using Snowflake will need to inherit Snowflake as a provider.

```
contract Example is SnowflakeResolver {

    constructor() public {    
    snowflakeDescription = “Example dApp“;
    snowflakeName = “Example”;
    }

}
```

| Parameter              | Type     | Description                                     |
| ---------------------- | -------- | ----------------------------------------------- |
| `snowflakeDescription` | `string` | Short description of what the app functions as. |
| `snowflakeName`        | `string` | notation given to the constructed application.  |
