# Getting Started: Project 0
# Summary
A number of cryptocurrency projects on Ethereum based blockchains have a need to issue sub currencies, called tokens.
These projects use tokens to generate funds, enable monetary based polices to exercise some functionality in their system, or finance their projects.
There are two popular methods for achieving a token economy on Ethereum based blockchains.
Projects generally create smart-contracts that allow users to perform a task called "minting" tokens.
Minting a token involves depositing some amount of *ETH/ETC* into a smart contract, and in return for that deposit of *ETH/ETC*, returning some amount of tokens.
Fungible tokens in the Ethereum/Ethereum Classic ecosystem follow a standard called *ERC-20*. It lays out the specification required for a smart-contract to be considered a token contract.
Typically projects mint tokens as a part of a fixed supply of tokens for their project or a dynamic supply of tokens using some sort of bonding curve.
# Project 0: Details
In this project, the aim is to get familiar with the Ethereum and Ethereum Classic ecosystem.
The specific goal for the project, is to develop a ERC-20 smart contract that mints as a function of the token supply like described [here](https://medium.com/@simondlr/tokens-2-0-curved-token-bonding-in-curation-markets-1764a2e0bee5).
The function can be anything you'd like. The function could even be linear.
The behavior should be deposit X ETH and get Y Tokens where the the required X and the returned Y are a function of the token supply.
The goal here is to just get familiar with the tools and the ecosystem.
# Getting Started
My recommendation is that if you're unfamiliar with blockchain, there's alot of new concepts thrown around.
I'd watch the coursera videos just to get conceptually up to speed. Then I'd read chapters 1 and 2 of the [Mastering Ethereum Book](https://hackmd.io/gZ2DJHQFThSb8vgYs1JXDg#Writing-smart-contract-code) ( the whole book is worth a read). Or you could always switch it around.
Finally I'd jump into some code. I'd try any of the [writing smart contracts resources](https://hackmd.io/gZ2DJHQFThSb8vgYs1JXDg#Writing-smart-contract-code) first.
Then I would explore the Open-Zepplin developing smart-contracts guide and the rest of the resources.
There alot of tools to evaluate. You could use your own ide or an online one. It's easier to get started sometimes using the online then transition to IDE of choice.
There is great support for Solidity + Vyper in most of the major IDE's. Syntax highlighting etc...
Finally most of the resources or equivalents exist in the language of your choice, so feel free to use those.
### Caveat
Blockchain is changing all the time so don't be alarmed if you find some documentation has gone stale :)
## Tools
### Blockchain resources
#### blockchain courses
- https://www.coursera.org/learn/blockchain-foundations-and-use-cases
#### Book resources
- (Bitcoin specific) https://github.com/bitcoinbook/bitcoinbook
- (Mastering Ethereum Book) https://github.com/ethereumbook/ethereumbook
- (Bitcoin specific) http://bitcoinbook.cs.princeton.edu/
### Writing smart contract code
#### Writing smart contracts
- https://docs.openzeppelin.com/learn/developing-smart-contracts
#### Learn dApp writing with cryptozombies
- https://cryptozombies.io/
#### Quick tutorial with studio Ethereum
- https://studio.ethereum.org/
### Smart Contract Library
#### Open Zeppelin
- note the ERC20 smart contract guide
https://docs.openzeppelin.com/contracts/3.x/
### Compilers and Clients
- [Solc](https://solidity.readthedocs.io/en/v0.6.9/) - Solidity Compiler
- [Vyper](https://github.com/vyperlang/vyper) - Vyper Compiler
- [Web3](https://github.com/ethereum/web3.py) - Smart contract interaction library
- [Truffle](https://github.com/trufflesuite/truffle) - Testing framework and environment
- [Core-Geth](https://core-geth.org/) - Ethereum and Ethereum Classic Client
- [Ganache](https://github.com/trufflesuite/ganache) - Test blockchain and environment