Next Gen
Smart Contracts

Quorlin is the native smart contract language for the Kortana blockchain. Featuring Java-like syntax with English readability, explicit mutability qualifiers, and compilation to ultra-fast 32-bit register bytecode.

$
qlc compile contract.ql --target kvm --optimize
FROM SOLIDITY

The same vault, with fewer ways to lose it

Identical TokenVault in both languages. Hover a numbered difference to spotlight its lines Quorlin on the left, Solidity on the right.

TokenVault.ql
1// Native Quorlin Smart Contract (.ql) 2contract TokenVault { 3 number totalSupply; 4 map<address, number> balances; 5 6 event Transfer(address indexed from, address indexed to, number amount); 7 8 constructor { 9 totalSupply = 1000000; 10 balances[caller] = 1000000; 11 } 12 13 reads number balanceOf(address owner) { 14 return balances[owner]; 15 } 16 17 writes truth transfer(address recipient, number amount) { 18 number held = balances[caller]; 19 require held >= amount, "insufficient funds"; 20 21 balances[caller] = held - amount; 22 balances[recipient] = balances[recipient] + amount; 23 emit Transfer(caller, recipient, amount); 24 return yes; 25 } 26}
TokenVault.sol
1// Equivalent Solidity (.sol) 2// SPDX-License-Identifier: MIT 3pragma solidity ^0.8.20; 4 5contract TokenVault { 6 uint256 public totalSupply; 7 mapping(address => uint256) public balances; 8 9 event Transfer(address indexed from, address indexed to, uint256 amount); 10 11 constructor() { 12 totalSupply = 1000000; 13 balances[msg.sender] = 1000000; 14 } 15 16 function balanceOf(address owner) external view returns (uint256) { 17 return balances[owner]; 18 } 19 20 function transfer(address recipient, uint256 amount) external returns (bool) { 21 uint256 held = balances[msg.sender]; 22 require(held >= amount, "insufficient funds"); 23 24 balances[msg.sender] = held - amount; 25 balances[recipient] = balances[recipient] + amount; 26 emit Transfer(msg.sender, recipient, amount); 27 return true; 28 } 29}
1
Mutability is the first wordQL L13, L17 · SOL L16, L20

Every Quorlin function opens with reads or writes; Solidity spreads the same information across external, view, and nothing-at-all. The compiler proves a reads function cannot write storage.

2
Types read as wordsQL L3, L17, L24 · SOL L6, L20, L27

number and truth with yes/no instead of uint256 and bool with true/false. Same ABI underneath (uint256, bool) — a different surface for conditions people read carefully.

3
Caller is a bare valueQL L10, L18 · SOL L13, L21

caller, not caller() and not msg.sender. Builtins take no parentheses because there is nothing to invoke.

4
Maps use angle bracketsQL L4 · SOL L7

map<address, number> instead of mapping(address => uint256), with one level of nesting allowed.

5
require is a keyword, not a callQL L19 · SOL L22

require held >= amount, "reason" instead of require(held >= amount, "reason"). A keyword cannot be shadowed by a local definition.

6
Constructors take no parenthesesQL L8 · SOL L11

constructor { ... } instead of constructor() { ... }. It has no name and no arguments, so nothing can call it twice.

What the Quorlin version compiles to — KVM register disassembly
; Disassembled Kortana KVM Register Bytecode .module TokenVault .registers 32 .header magic=0x4B564D00 version=1 instructions=14 0000: LOAD_CALLER r1 ; caller address -> r1 0004: CONST_U256 r2, 0x0F4240 ; 1,000,000 -> r2 0008: STORE_SLOT 0x00, r2 ; totalSupply = 1000000 000C: MAP_STORE 0x01, r1, r2 ; balances[caller] = 1000000 ; writes truth transfer(address recipient, number amount) 0010: LOAD_ARG r3, 0 ; recipient address 0014: LOAD_ARG r4, 1 ; amount 0018: MAP_LOAD r5, 0x01, r1 ; balances[caller] -> r5 001C: CMP_GTE r6, r5, r4 ; held >= amount ? 0020: REQ_TRUE r6, 0x00 ; require r6, "insufficient funds" 0024: SUB_U256 r7, r5, r4 ; r7 = held - amount 0028: MAP_STORE 0x01, r1, r7 ; balances[caller] = r7 002C: MAP_LOAD r8, 0x01, r3 ; balances[recipient] -> r8 0030: ADD_U256 r9, r8, r4 ; r9 = held + amount 0034: MAP_STORE 0x01, r3, r9 ; balances[recipient] = r9 0038: EMIT_EVENT 0x00, r1, r3, r4 ; emit Transfer(r1, r3, r4) 003C: RET_VAL 0x01 ; return yes
CORE CAPABILITIES

Engineered for Blockchain Scale & Safety

Quorlin and the Kortana Virtual Machine solve fundamental bottlenecks in smart contract security, developer ergonomics, and runtime execution efficiency.

Register-Based Architecture

Operates on 32 general-purpose 256-bit registers with fixed 32-bit instructions, completely eliminating stack manipulation overhead.

Explicit Mutability abstract visualization

Explicit Mutability

Functions statically declare their exact execution model with reads and writes qualifiers, making unintended mutations impossible.

Full ABI Interop

100% compatible with Ethereum ABI specs. Seamless cross-calling between Quorlin and Solidity.

State Trie

Direct slot mapping and deterministic linear memory allocation provide incredibly fast state access.

Native Cryptography

Standard library primitives for Keccak256, Ed25519 signature verification, and safe arithmetic.

Complete Toolchain

Shipped with the qlc compiler, test runner, disassembler, language server (LSP), and full deployment pipeline for Kortana networks out of the box.

LSP SupportTest Runner
Complete Toolchain terminal abstract
COMPILATION & EXECUTION PIPELINE

How Quorlin Executes on Kortana

From expressive source code to optimized register bytecode running on the Kortana Virtual Machine.

01

Write Quorlin (.ql)

Author clean, self-documenting smart contracts using English keywords, explicit mutability, and strict types.

02

Compile with qlc

Lexer, AST parser, and semantic analyzer perform strict validation, type checking, and ABI signature generation.

03

KVM Bytecode (.kvm)

Emits compact 32-bit register instructions with a 18-byte structured module header and constant pool table.

04

Kortana Node Execution

Executed with register-level speed on the Kortana Virtual Machine against the global world state trie.

DOCUMENTATION INDEX

35 Comprehensive Chapters

Complete guides, specifications, code references, and architecture blueprints for Quorlin and KVM.

Browse All 35 Chapters
FREQUENTLY ASKED QUESTIONS

Everything You Need to Know

What is Quorlin and what is its role in Kortana?

Quorlin is the native smart contract programming language of the Kortana blockchain. Saved with the .ql file extension, contracts written in Quorlin compile down to low-level register bytecode executed by the Kortana Virtual Machine (KVM).

How does the register-based KVM differ from the EVM stack?

Unlike the Ethereum Virtual Machine (EVM) which relies on stack operations (PUSH, POP, SWAP, DUP), the KVM operates directly on a fixed register bank of 32 256-bit registers (r0–r31) and fixed 32-bit instruction encodings, substantially improving execution speed and reducing bytecode size.

Can Quorlin contracts interact with existing Solidity contracts?

Yes. Quorlin natively supports Ethereum’s Application Binary Interface (ABI) and standard Keccak-256 function selectors. Quorlin contracts on the Kortana network can seamlessly execute cross-contract calls to existing Solidity contracts and standard Ethereum tooling.

What are the primary type keywords in Quorlin?

Quorlin uses human-centric primitives: number (256-bit unsigned integer / uint256), truth (boolean with literals yes and no), address (20-byte account), text (dynamic string), and nothing (void return).

Start Building on Kortana with Quorlin

Explore the comprehensive documentation, learn KVM internals, and deploy your first secure smart contract.