# Create Tokenized Products & Services with Zap Protocol

## Zap ERC20 Token Factory

### Token Providers

[Token Providers](https://briandavidshapiro.gitbook.io/learning-gitbook/zap-terms-defined#token-providers) create bonding curves which [mint](https://briandavidshapiro.gitbook.io/learning-gitbook/zap-terms-defined#minting) ERC20 tokens. These tokens, unlike [DOTS](https://briandavidshapiro.gitbook.io/learning-gitbook/zap-terms-defined#subtoken-dots), can be used outside the Zap Platform.

Create Secondary Tokens with [TokenDotFactory.sol](https://github.com/zapproject/zap-ethereum-api/blob/master/contracts/lib/platform/TokenDotFactory.sol) templates.

The web admin provides an interface for engaging with token providers via the 'Token Tools' menu and deploying new token providers based on preloaded template artifacts.

The below provider contract allows users to initialize new curves and provide their own bond and unbound functionality, which can be further customized. When a user [bonds](https://briandavidshapiro.gitbook.io/learning-gitbook/zap-terms-defined#bonding) or [unbonds](https://briandavidshapiro.gitbook.io/learning-gitbook/zap-terms-defined#unbonding), an [ERC20](https://briandavidshapiro.gitbook.io/learning-gitbook/zap-terms-defined#erc20) token is minted or [burned](https://briandavidshapiro.gitbook.io/learning-gitbook/zap-terms-defined#burning) respectively.

#### Token factory providers may contain the following:

Since endpoint specifiers must be unique for any given provider, new curves initialized by on-chain token factory providers must have unique endpoint specifiers.

Note that below imports reflect the file structure of [Zap Contract Repo](https://github.com/zapproject/zap-ethereum-api/edit/master/contracts/lib/platform/TokenDotFactory.sol).

### Example Smart Contract Templates for Use-Cases

When matching algorithmic ERC20 token creation with [Bonding Curve](https://briandavidshapiro.gitbook.io/learning-gitbook/zap-terms-defined#bonding-curve) templates, Zap Protocol users have access to tokens that can be used for voting, crowdfunding, and various [Dapp](https://briandavidshapiro.gitbook.io/learning-gitbook/zap-terms-defined#decentralized-applications-dapps) use-cases.

#### The Templates can be found here:

<https://github.com/zapproject/zap-ethereum-api/tree/master/contracts>

<https://github.com/zapproject/zap-ethereum-api/tree/master/contracts/lib/platform>

#### Here are a few examples of use cases that can be created using these templates. Remember, you can customize these templates to match your specific needs and design your own Dapp use case.

* Decentralized Autonomous Organization (DAOs)

> Users can create mutually agreed upon governance arrangements through [bonding curves](https://briandavidshapiro.gitbook.io/learning-gitbook/zap-terms-defined#bonding-curve). Curves are generated for each proposal within the organization and individuals are able to vote on the proposals they want to support by [bonding](https://briandavidshapiro.gitbook.io/learning-gitbook/zap-terms-defined#bonding) ZAP. At the end of the voting time period, the most bonded proposal will receive all the ZAP bonded from the competing proposals in order to fund the winning proposal.

* Decentralized Futures Market

> Two Bonding Curves are created to issue long and short position tokens on an asset. After a pre-set period of time, the [smart contract](https://briandavidshapiro.gitbook.io/learning-gitbook/zap-terms-defined#smart-contract) will check the price of the asset. The losing curve pays out the staked value as a dividend to the holders of the winning curve’s token.

* Decentralized Bounties and Competitions

> Generate one master Bonding Curve with a problem to be solved, and individuals [stake](https://briandavidshapiro.gitbook.io/learning-gitbook/zap-terms-defined#staking) value to this curve. Participants who want to enter the competition would each have their own Bonding Curve. The community would then speculate on who they believe to be the winner by staking to one of the competitors' curves. If the [bounty](https://briandavidshapiro.gitbook.io/learning-gitbook/zap-terms-defined#bounties) is satisfied the winner would receive the original master value with the speculators on that winner receiving the value staked by the losing curves.
