---
title: "Scrypto (Programming Language)"
path: "/contents/tech/core-protocols/scrypto-programming-language"
bannerImage: "https://j9ytchrzkvqpcul7.public.blob.vercel-storage.com/7b8237bb-491c-4276-b94e-ef57f42954cf.jpg"
version: "1.4.0"
author: "Hydrate"
createdAt: "2026-02-03T14:53:04.582Z"
updatedAt: "2026-07-17T20:29:22.275Z"
---

# Scrypto (Programming Language)

<Infobox>
| **Type** | Smart Contract Language |
| **Based On** | Rust |
| **Compiles To** | [WASM](https://webassembly.org) |
| **Latest** | [Scrypto](/contents/tech/core-protocols/scrypto-programming-language) 1.3.1 (Rust 1.92.0+ support) |
</Infobox>

## Overview

**[Scrypto](/contents/tech/core-protocols/scrypto-programming-language)** is Radix's smart contract programming language. Built on Rust, it implements [asset-oriented programming](/contents/tech/core-concepts/asset-oriented-programming) where tokens and [NFTs](https://en.wikipedia.org/wiki/Non-fungible_token) are native primitives that the developer manipulates directly — not entries in mappings.

### Key Differences from [Solidity](https://soliditylang.org)

  - **No reentrancy** — [Scrypto](/contents/tech/core-protocols/scrypto-programming-language)'s execution model makes reentrancy structurally impossible. Assets are in call-frame-local [buckets](/contents/tech/core-concepts/buckets-proofs-and-vaults) that can't be accessed from nested calls.

  - **No approval pattern** — Assets move directly via [buckets](https://docs.radixdlt.com/docs/resources). No `approve()` + `transferFrom()`.

  - **Authorization via [badges](https://docs.radixdlt.com/docs/auth)** — Instead of `msg.sender` checks, Scrypto uses [badge-based authorization](/contents/tech/core-concepts/access-rules-and-auth-zones). Present a proof of holding a badge to access protected methods.

  - **[Blueprints](https://docs.radixdlt.com/docs/blueprints-and-components) → Components** — Scrypto code is organized into [blueprints](/contents/tech/core-concepts/blueprints-and-packages) (like classes) that are instantiated into components (like objects) on-ledger.

### Modern Rust Support

Scrypto 1.3.1 unlocked modern Rust (1.92.0+) support with a new [WASM](https://webassembly.org) build pipeline, ending the previous Rust 1.81.0 lockdown.

## Deterministic Arithmetic

Every [Radix Engine](/contents/tech/core-protocols/radix-engine) transaction must produce an identical result on every validator, so Scrypto does not allow [IEEE floating-point](https://en.wikipedia.org/wiki/IEEE_754) math on-ledger. Floating-point rounding differs across hardware and compilers, which means two nodes could compute the same swap and disagree in the final digits. That disagreement would stall [consensus](/contents/tech/core-protocols/cerberus-consensus-protocol). All on-ledger values use fixed-point integer types instead.

- **[Decimal](https://docs.radixdlt.com/docs/data-types)** is a 192-bit signed fixed-point number with 18 decimal places (values of the form m / 1018). It is the default type for token amounts and account balances.

- **PreciseDecimal** is a 256-bit signed fixed-point number with 36 decimal places, used for intermediate calculations where the extra precision limits rounding loss.

Both types panic on overflow or underflow rather than wrapping around, so an out-of-range result reverts the whole transaction instead of leaving a corrupted balance. The tradeoff is that precision is fixed and rounding is the developer's responsibility to manage.

## External Links

  - [Getting Started with Scrypto](/developers/getting-started/01-install-scrypto)

  - [Scrypto Fundamentals](/developers/scrypto/01-fundamentals)

  - [Official Documentation](https://docs.radixdlt.com/)

  - [GitHub Repository](https://github.com/radixdlt/radixdlt-scrypto)