Skip to content

A. Types

Back to Solidity Feature Support

FeatureStatusNotes
boolMaps to NeoVM Boolean.
int8 .. int256All widths parsed. NeoVM uses arbitrary-precision BigInteger internally.
uint8 .. uint256All widths parsed. NeoVM uses arbitrary-precision BigInteger internally.
addressMaps to Neo UInt160 (Hash160, 20 bytes).
address payable⚠️Parsed and canonicalized to address. .transfer() / .send() auto-map to GAS transfer semantics (not EVM-attached value).
bytes1 .. bytes32Fixed-length byte arrays via NeoType::ByteArray { fixed_len }.
bytes (dynamic)Dynamic byte array.
stringUTF-8 string type.
enumBacked by uint8. Converted via convert_enum.
structFull struct support with nested fields. Serialized via StdLib.serialize/StdLib.deserialize for storage.
mapping(K => V)Storage mappings with Neo StorageMap. Key type validation enforced.
T[] (dynamic array)new T[](n) allocation supported via NEWARRAY.
T[N] (fixed array)⚠️Parsed. new T[N] supported when N is a compile-time constant.
fixed / ufixedNot supported. Also unsupported in mainline Solidity compilers.
User-defined value typestype X is Y creates transparent aliases. wrap/unwrap compile to no-ops.
bytes.concat(...)Chains NeoVM CAT opcodes. Zero args produce an empty byte array.
string.concat(...)Same implementation as bytes.concat via CAT opcode chain.
Contract types (IERC20)Resolved to Neo UInt160 address. Interface types tracked.
Tuple typesRepresented as NeoVM arrays internally.
Function typesfunction(...) internal/external is not representable on NeoVM. State variables, locals, parameters, and return types of function type are rejected with an "unsupported type" diagnostic. Use named functions and inheritance instead of function pointers.

Partial type details

address payable — The type is accepted and treated identically to address. On Neo, .transfer(amount) / .send(amount) compile via GAS NEP-17 transfer lowering (transfer(from,to,amount,data)), so behavior is close but not identical to EVM attached-value calls.

T[N] (fixed array) — Fixed-size arrays compile when the size N is a compile-time constant. Runtime-computed sizes require dynamic arrays (T[]).

solidity
// ✅ Compiles — size is a compile-time constant
uint256[10] memory arr;

// ✅ Compiles — dynamic array with runtime size
uint256[] memory arr = new uint256[](n);

MIT Licensed