While working on Vyper's storage_layout_overrides, I came across this problem of the API: We currently take the standard json input from the user and pass it directly to the compiler as it is. This means a currently unsupported field like interfaces of Vyper (#2750) is given to the compiler and leading to the expected compilation output. However, we don't store this field in the database and this makes it impossible to recompile the contract later from the data we have in the database.
To address this, I propose to reduce the user given json input to the fields we actually support when passing it to the compiler. This enforces a failed verification for unknown fields which modify compiler behavior but we don't store in the database. The reasoning is we cannot control when a compiler decides to add a new top level json input field that we have to add support for.
While working on Vyper's storage_layout_overrides, I came across this problem of the API: We currently take the standard json input from the user and pass it directly to the compiler as it is. This means a currently unsupported field like
interfacesof Vyper (#2750) is given to the compiler and leading to the expected compilation output. However, we don't store this field in the database and this makes it impossible to recompile the contract later from the data we have in the database.To address this, I propose to reduce the user given json input to the fields we actually support when passing it to the compiler. This enforces a failed verification for unknown fields which modify compiler behavior but we don't store in the database. The reasoning is we cannot control when a compiler decides to add a new top level json input field that we have to add support for.