# About Ride
Ride is a straightforward, developer-friendly functional programming language for smart contracts and decentralized applications (dApps) on the Waves blockchain.
# Script Types
Waves smart contracts are scripts written in Ride. Scripts can be assigned to accounts or tokens (assets). An account with a script assigned to it becomes a dApp or smart account. An asset with a script assigned to it becomes a smart asset.
Script functionality depends on its type:
- dApp script enables you to define callable functions that can perform various actions on the blockchain and a verifier function that allows or denies transactions and orders that are sent on behalf of the dApp account.
- Account script allows or denies transactions and orders that are sent on behalf of the account.
- Asset script allows or denies transactions involving the asset.
# Blockchain Operation
Ride is created specifically for execution within a blockchain environment and optimized for this purpose. Since the blockchain is a distributed ledger, located on many computers all around the world, there is no way to access the filesystem or display anything in the console. Instead, Ride functions can read data from the blockchain:
- Entries in account data storages (both dApp or smart account and any other account).
- Balances of accounts.
- Parameters of tokens.
- The current blockchain height.
- Headers of blocks.
- Transfer transactions (by transaction ID).
Appropriate functions are described in the Account Data Storage Functions and Blockchain Functions articles.
Callable functions of a dApp script can accept payments to the dApp and also perform actions applied to the blockchain:
- Add, modify or delete entries of the dApp account data storage.
- Transfer token from the dApp balance.
- Issue, reissue, burn token on behalf of the dApp, sponsorship setup.
Available script actions depend on Standard library version used.
# Predictable Computational Cost
The complexity is defined for each Ride function and operator. The complexities of the used functions and operators make up the script complexity. There are no loops in Ride, so the script complexity can be calculated in advance. The maximum script complexity is limited. Due to these limitations, Waves has low and predictable fees for script execution.
Because of the lack of loops, the Ride language is not Turing complete. That's why it is not always possible to implement the necessary logic within a single script call. However, it is still possible to perform Turing-complete computations if the algorithm is split into several functions (or even several smart contracts) and invoked sequentially using several transactions.
# Getting Started
Learn the language syntax with the Introduction to Ride.
# Useful Links
- Developer Tools
- How to Create and Launch dApp: Complete Tutorial
- Waves Lessons: practical guides and tutorials how to work with Waves blockchain
- Mastering Web3 with Waves: a hands-on course.
- Ride White Paper (2018)