waves_logo Docs
  • Overview
    Overview
  • How-to Guides
    • Reading Blockchain Data
      Reading Blockchain Data
    • Creating & Broadcasting Transactions
      Creating & Broadcasting Transactions
    • Tokenization
      Tokenization
    • Airdrop
      Airdrop
    • Payments
      Payments
    • Exchange Tokens
      Exchange Tokens
    • Simple Voting
      Simple Voting
    • List as argument
      List as argument
    How-to Guides
  • Waves Smart Contracts
    Waves Smart Contracts
  • dApp
    • Creating & Launching dApp
      Creating & Launching dApp
    dApp
  • Smart Account
    • Creating smart account
      Creating smart account
    • Creating and deploying a script manually
      Creating and deploying a script manually
    • Video tutorials
      • Introduction to the Waves blockchain, Waves Smart Accounts and Waves Smart Assets
        Introduction to the Waves blockchain, Waves Smart Accounts and Waves Smart Assets
      • Waves Smart Account with multisignature
        Waves Smart Account with multisignature
      • Waves Smart Account with escrow service
        Waves Smart Account with escrow service
      • Creating multisignature account via Waves IDE tools
        Creating multisignature account via Waves IDE tools
      • Creating multisignature account via Waves Client
        Creating multisignature account via Waves Client
      • Waves console explained
        Waves console explained
      Video tutorials
    Smart Account
  • Smart Asset
    Smart Asset
  • Developer Tools
    • Waves IDE
      Waves IDE
    • Visual Studio Code Extension
      Visual Studio Code Extension
    • Surfboard
      Surfboard
    • Ride REPL
      Ride REPL
    Developer Tools
  • Signer ◆
    Signer ◆
  • Waves API
    • Data Service API
      Data Service API
    • Node REST API
      Node REST API
    • Node gRPC Server
      Node gRPC Server
    • Blockchain Updates
      Blockchain Updates
    Waves API
  • Client Libraries
    • Waves C#
      • Install SDK
        Install SDK
      • Run Code Sample
        • Send Transactions
          Send Transactions
        • Use Crypto Utilities
          Use Crypto Utilities
        • Interact With Node
          Interact With Node
        • Set Up Smart Contracts
          Set Up Smart Contracts
        Run Code Sample
      Waves C#
    • Gowaves
      • Install SDK
        Install SDK
      • Run Code Sample
        • Send Transactions
          Send Transactions
        • Use Crypto Utilities
          Use Crypto Utilities
        • Interact With Node
          Interact With Node
        • Set Up Smart Contracts
          Set Up Smart Contracts
        Run Code Sample
      Gowaves
    • WavesJ
      • Install SDK
        Install SDK
      WavesJ
    • Ts-lib-crypto
      • Install SDK
        Install SDK
      Ts-lib-crypto
    • Waves-PHP
      • Install SDK
        Install SDK
      Waves-PHP
    • PyWaves-CE
      • Install SDK
        Install SDK
      PyWaves-CE
    • Waves-rust
      • Install SDK
        Install SDK
      Waves-rust
    Client Libraries
      • English
      • Русский
      On this page
        • Node API
        • Client Libraries
        • Secure Transactions Signing
        • Smart Contract
        • Developer Tools
        • Exchange & Trading
        • Developer Chat
        • Resources
      waves_logo Docs

          # 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:

          • Account
          • Token (Asset)
          • Transaction

          # 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

          All Waves APIs

          # 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.

          All libraries

          # 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.
          • Waves Signer is a TypeScript/JavaScript library that works in any browser. Signer is a unified interface for interacting with third-party signature provider libraries. Provider libraries are now available for WX Network, Keeper Wallet, Ledger and MetaMask wallets. Suffice it to initialize the libraries in your application and use the same functions for obtaining the signature. Furthermore, Signer delivers a smooth user experience based on the iframe.

          # 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.

          All tools

          # 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.

          CCXT , the popular JavaScript/Python/PHP library for trading cryptocurrencies and obtaining market data, supports for WX Network, but only trading pairs from the white list are available.

          To trade custom assets, use the client libraries, see examples in the How to Buy and Sell Tokens article.

          WX Network does not support the exchange of NFTs and smart assets.

          # Developer Chat

          Feel free to join the Waves developers group in Telegram.

          # Resources

          • Waves Lessons : practical guides and tutorials how to work with Waves blockchain
          • Mastering Web3 with Waves : a hands-on course
          • Waves Book by Inal Kardanov
          • Awesome Waves : a curated list of useful things for developing on the Waves blockchain
          How-to Guides
          How-to Guides