magic/starknet_luau

Pure Luau SDK for Starknet blockchain interaction from Roblox games

starknet-luau

CI Version License: MIT

Pure Luau SDK for interacting with the Starknet blockchain from Roblox games. Provides cryptographic primitives, account management, transaction building/signing, contract interaction, and RPC connectivity -- all implemented in Luau with no external native dependencies.

Installation

Via Pesde:

[dependencies]
starknet_luau = { name = "magic/starknet_luau", version = "^0.1.0" }

Via Wally:

[dependencies]
starknet-luau = "b-j-roberts/[email protected]"

Manual (.rbxm): Download the latest .rbxm from Releases and drop it into your project.

Development

Prerequisites

  • Rokit (toolchain manager)
  • Pesde (optional, if using Pesde for dependencies)

Setup

rokit install       # Install rojo, wally, lune, selene, stylua
make install        # Install Wally packages + generate types
rojo serve          # Start live sync to Roblox Studio

Commands

make install        # Install deps via Wally, generate sourcemap + package types
make pesde-install  # Install deps via Pesde
make serve          # Start Rojo live sync
make build          # Build .rbxm model file
make test           # Run tests with Lune
make lint           # Lint with Selene
make fmt            # Format with StyLua
make check          # Run lint + fmt check + test

Quick Start

local Starknet = require(game.ReplicatedStorage.Packages.StarknetLuau)

-- Create a provider
local provider = Starknet.provider.RpcProvider.new("https://api.zan.top/public/starknet-sepolia")

-- Get the latest block number
provider:getBlockNumber():andThen(function(blockNumber)
    print("Current block:", blockNumber)
end)

-- Read from a contract
local contract = Starknet.contract.Contract.new(provider, contractAddress, abi)
contract:call("balanceOf", { accountAddress }):andThen(function(balance)
    print("Balance:", balance)
end)

Documentation

GuideDescription
Getting StartedInstallation, basic setup, first transaction
Contract InteractionReading state, writing transactions, multicall, presets
Account ManagementKey generation, address derivation, account types, nonce handling
Common PatternsNFT gating, token rewards, onchain leaderboards
Roblox ConsiderationsRate limits, server-side patterns, security best practices
Crypto Deep DiveUnderstanding BigInt, StarkField, curves, hashes, ECDSA
API ReferenceComplete API documentation for all modules

API Overview

ModuleDescription
cryptoBigInt, StarkField, StarkCurve, Poseidon, Pedersen, Keccak, SHA256, ECDSA
signerStarkSigner with RFC 6979 deterministic signing
providerJSON-RPC client over HttpService with Promise-based async
txTransaction building, hashing, calldata encoding (V3 INVOKE)
walletAccount derivation, nonce management (OZ, Argent)
contractABI-driven contract interface, ERC-20/ERC-721 presets

Project Structure

starknet-luau/
├── src/
│   ├── init.luau               # Main entry point / barrel exports
│   ├── crypto/                 # Cryptographic primitives
│   ├── signer/                 # Transaction signing
│   ├── provider/               # Starknet RPC client
│   ├── tx/                     # Transaction building
│   ├── wallet/                 # Account management
│   └── contract/               # Contract interaction + presets
├── tests/                      # Lune test specs
├── docs/                       # Spec and roadmap
├── .github/workflows/          # CI + Release automation
├── default.project.json        # Rojo project (library)
├── dev.project.json            # Rojo project (development)
├── rokit.toml                  # Toolchain versions
├── wally.toml                  # Package manifest (Wally)
├── pesde.toml                  # Package manifest (Pesde)
└── Makefile                    # Build commands

Contributing

  1. Fork the repo
  2. Run rokit install to set up the toolchain
  3. Run make install to install dependencies
  4. Run make check before submitting a PR

License

MIT