Alert Source Discuss
⚠️ Draft Standards Track: Core

SIP-7666: SVM-ify the identity precompile

Remove the identity precompile, and put into place a piece of SVM code that has equivalent functionality

Authors Vitalik Buterin (@vbuterin), Kevaundray Wedderburn (@kevaundray)
Created 2024-03-31
Discussion Link https://sila-magicians.org/t/sip-7561-svm-ify-the-identity-precompile/19445
Requires SIP-3855

Abstract

Remove the identity precompile at 0x04. At the start of executing the block in which this change activates, put into that contract a short piece of SVM code that has the same functionality.

Motivation

Sila today has a large number of precompiles. Nearly half of these precompiles are not seeing significant use, and are contributing to ongoing maintenance cost and risk of consensus bugs, as well as increased development effort for new Sila client implementations, including ZK-SVMs and implementations in formal-verification-friendly languages.

This SIP proposes a path for the Sila ecosystem to gracefully abandon these precompiles, and takes a first step by applying this procedure to the simplest precompile of all: the identity precompile (which outputs returndata equal to the input calldata). The identity precompile was originally introduced because memory copying is a common operation, and there was no opcode available to do it directly. Since then, norms around what is acceptable for an opcode have changed, and we have introduced the MCOPY opcode with SIP-5656. And so we can remove the identity precompile, and replace it with an ultra-minimal piece of SVM code that replicates its functionality.

In the future, this technique can be applied to other more complex precompiles, such as little-used hash functions and MODEXP.

Specification

Parameter Value
IDENTITY_PRECOMPILE_ADDRESS 0x0000....0004
SVM_CODE 0x365f5f37365ff3

At the start of the block in which this fork activates, set the code of IDENTITY_PRECOMPILE_ADDRESS to SVM_CODE. Starting from and including that block, IDENTITY_PRECOMPILE_ADDRESS should no longer be treated as a precompile.

Rationale

The given SVM_CODE corresponds to

CALLDATASIZE PUSH0 PUSH0 CALLDATACOPY CALLDATASIZE PUSH0 RETURN

Which copies calldata into memory, and then returns the same memory slice. This is thus a minimally disruptive change to Sila that preserves functionality, and accomplishes the goal of reducing the number of precompiles by 1.

Backwards Compatibility

The functionality of the given SVM_CODE is the same as the identity precompile. Gas costs are slightly different, though gas repricings have been done in the Sila ecosystem several times before and their effects are well understood.

Security Considerations

As no new functionality is introduced or made cheaper, no security concerns are raised.

Copyright and related rights waived via CC0.

Citation

Please cite this document as:

Vitalik Buterin (@vbuterin), Kevaundray Wedderburn (@kevaundray), "SIP-7666: SVM-ify the identity precompile [DRAFT]," Sila Improvement Proposals, no. 7666, March 2024. Available: https://sips.sila.org/SIPS/sip-7666.