# dApp Developer Guide
The Waves ecosystem offers a diverse range of tools, products, and components to streamline the process of building and running blockchain-empowered applications and smart contracts. This overview will put you in the picture.
Before you start, we recommend that you learn the basic concepts:
# Node API
The Waves node REST API is the main interface for interacting with the blockchain. Node REST API provides the following features:
- broadcast a signed transaction to the blockchain
- obtain account data, token info, transactions, blocks, etc.
- validate transactions, use various utilities, and much more.
You can use the node pools with the public API supported by the Waves team, or launch your own node and enable its REST API. On your node, you additionally have access to private API methods including signing a transaction on behalf of accounts stored in the node's wallet and debugging tools.
Please note: the Node API is not able to sign transactions on behalf of an arbitrary accounts. To do this, use the client libraries.
Node REST API Documentation in the “Node” chapter
# Client Libraries
Libraries for various programming languages provide functions for operating with the Waves blockchain: signing transactions and exchange orders, interacting with the Node REST API, and generating account keys. Libraries differ in their features.
If your application signs and sends transactions on behalf of range of users, you should not ask them for a secret phrase (seed) or a private key: this is unsafe for the user. Instead, we recommend using the interface with a wallet app that stores the user's account keys and signs transactions itself. The following tools provide such interfaces:
- Waves Keeper API uses the Waves Keeper extension installed in the user's browser.
- Waves SDK for Android and Waves SDK for iOS use the Waves.Exchange mobile app installed on the user's device.
# Smart Contract
The Waves protocol maintains three types of smart contracts:
- dApp comprises functions that can be called using an Invoke Script transaction. The called functions can accept payments to the dApp and perform various actions on the blockchain. In addition, the dApp can comprise a verifier function that allows or denies transactions and orders sent on behalf of the account depending on whether they meet the specified conditions.
- Smart account allows or rejects transactions or orders sent on behalf of the account.
- Smart asset allows or rejects transactions involving the asset.
For smart development creation, Waves provides its native language called Ride. Ride is a functional, expression-based programming language specifically designed for execution within a blockchain environment, straightforward and concise. More about Ride in the “Ride” chapter.
# Developer Tools
The Waves IDE online environment is the best suited for starting development on the Waves blockchain. Beyond the Ride support, Waves IDE enables creating accounts, signing and sending transactions. It contains a library of code samples.
# Exchange & Trading
You can buy or sell tokens (assets) issued on the Waves blockchain (except for NFT; smart assets trading is temporarily unavailable) on the Waves.Exchange developed by the third-party team from the community. Waves.Exchange's Matcher API is aimed at creating and controlling exchange orders.
To trade custom assets, use the client libraries, see examples in the How to Buy and Sell Tokens article.
# Developer Chat
Feel free to join the Waves developers group in Telegram.