neo-devpack-solidity 0.22.0

Production-focused Solidity-to-NeoVM compilation system
Documentation
---
title: "Syscalls Overview"
description: "Overview from Syscalls."
---

# Syscalls Overview

[Back to Syscalls](/internals/syscalls)

## Overview

Syscalls are invoked via the `SYSCALL` opcode followed by a 4-byte identifier. The identifier is the first 4 bytes of `SHA256(syscall_name_string)`. For example, `System.Storage.Get` has the ID derived from `SHA256("System.Storage.Get")`.

The compiler maps Solidity patterns to the appropriate syscalls during code generation. State variable reads become `System.Storage.Get`, event emissions become `System.Runtime.Notify`, and cross-contract calls become `System.Contract.Call`.

The devpack provides two levels of access:

- **Direct wrappers**`Syscalls.sol` exposes the supported syscall surface as typed Solidity functions.
- **Ergonomic libraries**`Storage.sol`, `Runtime.sol`, and `Neo.sol` provide higher-level APIs built on top of the raw syscalls.

```solidity
import "devpack/contracts/Syscalls.sol";

// Direct syscall access
address caller = Syscalls.getCallingScriptHash();

// Or use the ergonomic wrapper
import "devpack/libraries/Runtime.sol";
bool authorized = Runtime.checkWitness(caller);
```