# Tutorials and Concepts

## 📖 Building Tips

### Developer Resources&#x20;

For developer resources on Serum and Solana: <https://github.com/project-serum/awesome-serum>

### RPC Servers

For a default list of RPC servers to use: <https://github.com/project-serum/awesome-serum#rpc-servers>

* Others may be less reliable

### Serum Market Data

If you want to consume Serum market data, you have the following options:

* Javascript program for on-chain calls: <https://github.com/project-serum/serum-js>
* REST server: <https://github.com/project-serum/serum-rest-server>
* Serum API: <https://docs.bonfida.com/#introduction>

### Mainnet, Devnet, Testnet

Developers are recommended to have (by default) both a mainnet and devnet/testnet version with a toggle to test the protocol on both, as there may be differences in performance that are useful to be able to test:

{% hint style="info" %}
It is useful to have a devnet or testnet version, and also a mainnet version for full testing
{% endhint %}

### Authenticating Transactions

If you need to authenticate transactions, the recommended course of action is to use the SPL wallet adapter, which is what e.g. [sollet.io](https://sollet.io) users to connect to DEXes.

{% hint style="info" %}
Note: you can build in auto-accepting as an option! <https://dex.projectserum.com/#/> uses this with [sollet.io](https://sollet.io).
{% endhint %}

Users will be prompted to click: “Automatically approve transactions from [https://dex.projectserum.com](https://dex.projectserum.com/)”

If they do, then for that session:

* As long as the URL is the same
* As long as the transaction contents match the expected contents (e.g. a DEX order)

It will not require clicking "accept".

This code is in <https://github.com/project-serum/sol-wallet-adapter>.

If you want your program to be auto-accepted, submit a PR (pull request) that adds it!

* Bonfida and others also sometimes connect.

{% hint style="info" %}
Developers are recommended to use the same conventions as e.g. [sollet.io](https://sollet.io) for the seed phrase and private key.
{% endhint %}

### Composability

Consider composing with existing apps:

* If your app needs liquidity you can trade on a DEX orderbook or swap
* If your app needs to mint tokens, consider using [https://spl-token-ui.com](https://spl-token-ui.com/)
* Check out <https://github.com/project-serum/awesome-serum> for ideas and tools

### Fees Going to SRM Governance

For fees going to SRM governance, you can assign to [this address](https://explorer.solana.com/address/7EEAZWuzNZTUSCdwrw1JS4eX9D8uTTL91owsk4GC3zNB/tokens) if you want.

## 🎓 Tutorials and Project Concepts <a href="#tutorials-and-projects" id="tutorials-and-projects"></a>

### 📈 Host a GUI

Want to help support the Serum ecosystem? Host a GUI and get a fraction of the fees!

* An open source GUI: <https://github.com/project-serum/serum-dex-ui>
* More about staking and voting: [ https://projectserum.com/#/staking-and-voting](< https://projectserum.com/#/staking-and-voting>)

{% content-ref url="/pages/-MXQ5lEVZI1dcd8cLUeP" %}
[Host a GUI](/serum-ecosystem/build-on-serum/how-to-host-a-gui-serum-academy.md)
{% endcontent-ref %}

### 🛠️ DEX Integration <a href="#dex-integration" id="dex-integration"></a>

A technical introduction to the Serum DEX can be found [here](https://docs.google.com/document/d/1isGJES4jzQutI0GtQGuqtrBUqeHxl_xJNXdtOv4SdII/edit?usp=sharing).

#### DEX Resources

* [DEX source code](https://github.com/project-serum/serum-dex)
* [Serum.JS](https://github.com/project-serum/serum-js), client-side JavaScript resources to connect to the DEX
* [Serum DEX UI](https://github.com/project-serum/serum-dex-ui), an implementation of a UI for the Serum DEX
* Testnet deployment of prototype DEX:
  * [DEX Program](https://explorer.solana.com/address/9JipvuvjcirpYf8mzYQtozXeYtQLWY67LaZCiANSMNgs)
  * [DEX Market](https://explorer.solana.com/address/2tJ2LVReFCZF81Ej4MAQHEr1kRSmk6QQ5XSnzjC9KJNj)
* Mainnet examples:
  * [DEX Program](https://explorer.solana.com/address/4ckmDgGdxQoPDLUkDT3vHgSAkzA3QRdNq5ywwY4sUSJn)
  * [DEX Market](https://explorer.solana.com/address/8AcVjMG2LTbpkjNoyq8RwysokqZunkjy3d5JDzxC6BJa)
* [PySerum](https://github.com/serum-community/pyserum): Python client library for interacting with the Project Serum DEX.

### 🔁 Minting Tokens <a href="#minting-tokens" id="minting-tokens"></a>

* [SPL Token Creator UI](https://www.spl-token-ui.com/)
* [Bonfida Minter](https://bonfida.com/mint)
* [SPL Manager](http://splmanager.com/)

### 🧾 Token Contracts

* [Serum (SRM) SPL](https://explorer.solana.com/address/SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt)
* [Serum (SRM) ERC20](https://etherscan.io/token/0x476c5e26a75bd202a9683ffd34359c0cc15be0ff)
* [MegaSerum (MSRM) SPL](https://explorer.solana.com/address/MSRMcoVyrFxnSgo5uXwone5SKcGhT1KEJMFEkMEWf9L)
* [MegaSerum (MSRM) ERC20](https://etherscan.io/token/0x1320c8c64b9f2eAa851F70702e6C9FC1EE4E8Ce4)

### 🧾 Miscellaneous

* [Messaging App](https://github.com/kemargrant/soltalk) - Proof of Concept
* [AMM](https://github.com/solana-labs/solana-program-library/tree/master/token-swap) - Work-in-progress
* [SAMM](https://gitlab.com/OpinionatedGeek/samm)
  * [RFC](https://github.com/project-serum/rfcs/blob/master/text/0003-samm.md)
* **On-chain Pools:**
  * [A general preview](https://docs.google.com/document/d/1lmMZRKkxMFOtGOEZOFEKYL7syqv-4QT87F0o55fc35Y/edit)
  * [Work in progress code](https://github.com/project-serum/serum-dex/tree/pool-wip/pool)
* [**Bonfida**](https://bonfida.com/)**:**
  * [REST API](https://bonfida.com/blog/articles/serum-api) to get Serum market data
  * [GUI](https://github.com/dr497/serum-dex-ui)
  * [Wallet](https://github.com/dr497/spl-token-wallet)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.projectserum.com/serum-ecosystem/build-on-serum/tutorials-and-concepts.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
