Back
KASPA.NEWS Articles
Kaspa Core R&D Channel

SilverScript Tightens Types On The v1 Audit

Monday, August 17, 2026

Ori Newman merged a type-and-evaluation audit into SilverScript master on 16 August 2026. The pull request closes gaps between declared types and what the compiler and VM actually accept, and it lands while he is still hunting edge cases before a v1 cut. (PR #210)

The merge commit is 023c7eed. Quality Control passed on check, test, lint, and tree-sitter jobs. The change is on master. It is not a tagged v1 release. (merge)

Functions that declare return types now have to return. The static checker rejects a typed function with no return, and it also rejects a return that is not the last statement. That stops a typed helper from compiling as if it produced a value when the body never did. (static check)

Bool entry arguments got a hard size check. False may be the empty script number. True may be one byte. Two bytes and above fail before the body runs. The compiler emits OpSize, compares against 2, and verifies. Older code left bool width unchecked. (bool ABI)

Calling a value-returning helper as a statement no longer drops the return expression before it runs. The inliner still evaluates it, then binds the unused result and drops it. A test that used to demand the add vanish now expects OpAdd OpDrop. Faults and other observable work inside that return stay live. (inline)

split and slice now hand back dynamic arrays. A byte[4] split no longer types the left part as byte[4]. Both sides are byte[], or the source element type for structured arrays. Constant bounds that go negative, past the known length, or invert start and end fail at compile time. (tutorial)

Struct-array equality is less brittle. Both sides can be general structured expressions, not only a bare identifier, so values.append(item) == expected type-checks when the element types match.

Casts are documented as unchecked assertions. After byte32, .length comes from the asserted type. The contract still has to prove size or format when that matters. Newman wrote that in the tutorial as part of the same merge. (tutorial)

The next day Michael Sutton asked whether byte[N], pubkey, and sig should convert implicitly to byte[], because blake2b(byte[](preimage)) feels awkward when preimage is already byte[N]. Newman wants v1 stricter. Implicit conversion may come later, with hierarchical types, not in this freeze. (source) (source) (source) (source)

SilverScript is still in pre-v1 audit. This merge makes the current surface mean what it says. It does not finish the language.


All sources link to public messages in the Kaspa Core R&D (public) Telegram channel.

Kaspa News Pro

Kaspa, filtered and organized

Top Kaspa posts from X in the last 24 hours, stats, developers, ecosystem projects, focused Kaspa accounts, Reddit posts, and latest YouTube videos in one place.

Subscribe to Pro$14.99/month - paid in KAS
Kaspa News Pro feed and analytics preview

More Kaspa Articles