# ICP Hackathon Cheat Sheet
Hey fellow hacker :wave: ,
great that you want to explore the capabilities and possibilities of the Internet Computer Protocol. We've compiled a list of resources to make starting off as simple as possible, and provide you a quick reference to find more information, tools and help.
## General
### Introduction
- [Tweet thread sized pitch of ICP](https://twitter.com/cediwaldburger/status/1623367265369325568)
- [Introduction to ICP](https://wiki.internetcomputer.org/wiki/Introduction_to_ICP)
- [Introduction video from ETHDenver](https://www.youtube.com/watch?v=r0r6wLDgufQ)
- [Comparison between different blockain platforms](https://wiki.internetcomputer.org/wiki/L1_comparison)
### Getting started
- [Getting started guides](https://internetcomputer.org/docs/current/developer-docs/setup/)
- [Deploy a sample full-stack dApp on the Internet Computer.](https://internetcomputer.org/docs/current/tutorials/deploy_sample_app)
- [Adding pseudonymous authentication with Internet Identity.](https://github.com/dfinity/examples/tree/master/motoko/internet_identity_integration)
- [Get some free cycles for deployment on the Internet Computer.](https://faucet.dfinity.org)
- [DFINITY maintained examples](https://github.com/dfinity/examples)
- [Courses, Tutorials and Samples](https://github.com/dfinity/awesome-internet-computer#courses-tutorials-and-samples)
- [Starters for different stacks](https://github.com/dfinity/awesome-internet-computer#starters)
### Programming Languages
Canister smart contracts on the Internet Computer contain WASM byte code. This allows writing smart contracts in many differnt programming languages. Read this [post](https://medium.com/code-state/which-language-should-you-choose-to-build-on-the-internet-computer-%EF%B8%8F-851c31e9c28) to help you choosing the right programming language.
- [Motoko](https://internetcomputer.org/docs/current/motoko/main/motoko)
- [Rust](https://internetcomputer.org/docs/current/developer-docs/backend/rust/rust-quickstart)
- [TypeScript](https://demergent-labs.github.io/azle/)
- [Python](https://demergent-labs.github.io/kybra/)
The client libraries to interact with canisters from outside the Internet Computer are called agents. Here's a [list of agents in various programming languages](https://github.com/dfinity/awesome-internet-computer#client-libraries-agents).
### Developer Resources
- [Developer Docs](https://docs.internetcomputer.org/)
- [Awesome Internet Computer](https://github.com/dfinity/awesome-internet-computer)
- [Tooling Page](https://internetcomputer.org/tooling)
- [Computation and Storage Costs](https://internetcomputer.org/docs/current/developer-docs/gas-cost/)
### Inspiration
- [Internet Computer Ecosystem](https://internetcomputer.org/ecosystem)
- [Samples Page](https://internetcomputer.org/samples)
- [Request for Startups](https://github.com/dfinity/grant-rfps/blob/main/requests-for-startups.md)
### Digging deeper
- [The Internet Computer How it works series](https://internetcomputer.org/how-it-works)
- [Internet Computer Whitepaper for Geeks](https://eprint.iacr.org/2022/087)
- [Inside the Internet Computer Youtube Playlist](https://www.youtube.com/playlist?list=PLuhDt1vhGcrfHG_rnRKsqZO1jL_Pd970h)
### How to get help?
The ICP community is full of builders that are happy to help you. The two most important places to ask your questions are the ICP Developer Discord and the DFINTY Developer Forum. Before asking a question you should always use the search on both platforms, since there's a high chance that other developers have encountered your issue before.
If you want to ask a question on the Developer Discord, a good place is the `ask-questions` functionality in the `Dev` section. In addition, there are multiple channels targeted at specific programming languanges and other topics. For a hackathon, there will also be a dedicated channel in the `Events` section.
If you want to speak face to face with developers, there are multiple community calls hosted on Discord every week:
- DFINITY Dev Office Hours - Wednesdays 9am and 7pm GMT+2
- ICP Community Call - Fridays 7pm GMT+2
You can find them in the events calendar on the top left on the Discord server as well.
- [DFINITY Developer & Community Forum](https://forum.dfinity.org/)
- [ICP Community Discord](https://discord.gg/FygMb5VyCQ)
### Tipps for your submission
- [Checklist to create an engaging presence on GitHub](https://github.com/dfinity/grant-rfps/blob/main/repo-checklist.md)
## The Internet Computer for...
### Web devs
A good intro to the Internet Computer for web developers is the [benefits and drawbacks](https://demergent-labs.github.io/azle/azle.html#benefits-and-drawbacks) section of the [Azle (TypeScript SDK) Book](https://demergent-labs.github.io/azle/the_azle_book.html).
### Ethereum devs
If you have already worked with Ethereum or other blockchains that employ the Ethereum Virtual Machine (EVM), you might be surprised that the Internet Computer provides a much more powerful computing environment, that allows to build not only simple smart contract logic, but full-stack dApps that are even compatible with the web, and can be accessed direclty from a local browser.
However, the downside is you won't be able the developers tools you are used to. Here's a quick rough *translation* of a few concepts and tools:
| EVM | ICP |
| -------- | -------- |
| smart contract | canister |
| gas | cycles | |
| web3.js / ethers.js | [agent-js](https://internetcomputer.org/docs/current/developer-docs/agents/javascript-intro), [node-ic0](https://github.com/dfinity/node-ic0) |
| RPC Endpoints | [IC HTTPS Interface](https://internetcomputer.org/docs/current/references/ic-interface-spec#http-interface) |
| Solidity | Motoko |
| ABI | [Candid](https://internetcomputer.org/docs/current/developer-docs/backend/candid/) |
| Vitalik Buterin | Dominic Williams |
For a high-level write up of some of the differences between Ethereum and the Internet Computer, please have a look at [The Internet Computer for Ethereum Developers](https://medium.com/dfinity/the-internet-computer-for-ethereum-developers-3331b50db31b).
#### How an Ethereum developer can leverage the Internet Computer
- Host the frontend of your dApp on the Internet Computer (see [Uniswap UI on ICP](https://github.com/domwoe/uniswap_ui_on_ic))
- [Store NFT assets](https://github.com/domwoe/erc-721-ic-assets) or use it as a [decentralized database](https://github.com/dfinity/awesome-internet-computer#storage-and-databases)
- Build on-chain governance and execute decisions with [chain-key signatures](https://internetcomputer.org/docs/current/developer-docs/integrations/t-ecdsa)
- Build an [on-chain wallet](https://github.com/nikolas-con/ic-evm-sign-starter)
- Build a non-custodial Bitcoin bridge to Ethereum
#### Relevant tools and example projects
- [EVM Utility Canister](https://github.com/icopen/evm_utils_ic) - Utility canister to create and parse EVM-compliant transactions.
- [ic-web3](https://github.com/rocklabs-io/ic-web3) - RPC client for canisters on the Internet Computer to access EVM networks using [HTTPS Outcalls](https://internetcomputer.org/https-outcalls).
- [No key wallet](https://github.com/nikolas-con/ic-evm-sign-starter) - Example project of a canister-based Ethereum wallet.
- [Omnic](https://github.com/rocklabs-io/omnic) - Cross-chain messaging protocol to connect EVM-compatible chains via the Internet Computer.
- [Orally](https://github.com/orally-network/oracle) - Cross-chain oracle factory built on [HTTPS Outcalls](https://internetcomputer.org/https-outcalls) and [Chain-key ECDSA](https://internetcomputer.org/docs/current/developer-docs/integrations/t-ecdsa).
- [Uniswap UI on IC](https://github.com/domwoe/uniswap_ui_on_ic) - Demonstrator of Uniswap UI hosted on the Internet Computer with access to a canister-based signer
## Building on Bitcoin
Bitcoin's programmability is very limited and as such there hasn't been a lot DeFi innovation on top of Bitcoin yet. The Internet Computer's [Bitcoin integration](https://internetcomputer.org/bitcoin-integration) allows canisters on the Internet Computer to access the [Bitcoin UTXO set](https://en.wikipedia.org/wiki/Unspent_transaction_output), as well as sign and submit Bitcoin transactions. Furthermore, there's ckBTC a non-custodial wrapped Bitcoin that follows the [ICRC-1 token standard](https://github.com/dfinity/ICRC-1).
### Example projects and tutorials
- [Bitcoin Integration in the docs](https://internetcomputer.org/docs/current/developer-docs/integrations/bitcoin/)
- [Video: Unlocking the power of Bitcoin with Motoko](https://www.youtube.com/watch?v=IWWcnPj1Dfo)
- [ICRC-1 Token standard in the docs](https://internetcomputer.org/docs/current/developer-docs/integrations/icrc-1/)
- [Bitshop](https://github.com/lukasvozda/bitshop) - Example of a Shopify alternative running 100 % on-chain with Bitcoin as a native payment.
- [Code native Bitcoin](https://www.youtube.com/watch?v=LGegOFqP5x0) [(2nd part)](https://www.youtube.com/watch?v=H6Wu9n9Qwa8) - Video tutorials on how to use the native Bitcoin integration.
## HTTPS Outcalls: Interacting with APIs
- [HTTPS Outcalls in the docs](https://internetcomputer.org/docs/current/developer-docs/integrations/http_requests/)
- [Sample Dapp: Using HTTPS Outcalls to Fetch Exchange Rates
](https://internetcomputer.org/docs/current/samples/http-requests-exchange-rates)
- [Sample Dapp: Sending e-mails from a canister](https://github.com/ArgonStudiosXYZ/ic-emailer)