# 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.
# Secure Transactions Signing
To sign a transaction, for example, a dApp script invocation or a token transfer, the private key of the sender account is needed. However, if your application serves multiple users, you do not have access to their private keys. Knowing the secret phrase (seed) or private key, you can do anything on behalf of the account, that's why you should not ask users for their secret phrase or private key. Users are strongly advised not to share the secret phrase and private key with anyone, and users do not trust sites and applications that require this data.
The solution is to obtain a user signature for each transaction. To do this, you need an interface with a wallet application that stores the user's account keys securely and signs transactions itself. Before signing, the user can view the details of the transaction, confirm or reject it.
The following tools provide such interfaces:
- Keeper Wallet API uses the Keeper Wallet extension installed in the user's browser. Keeper is one of the most secure ways to manage keys, however its installation can be a threshold for new users. In addition, Keeper is not available in mobile browsers.
# 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 on the WX Network exchange developed by the third-party team from the community. WX Network'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.