Access list incentives mean transactions should rarely throw an
ACCESS_LIST_EXCEPTION by accessing state outside of the access list. By having users provide two transaction signatures (only one of which is included onchain) we can save from having onchain access lists whenever an
ACCESS_LIST_EXCEPTION is not thrown. This reduces onchain transaction sizes, saves gas, and possibly improves privacy.
T be an unsigned transaction (without the access list) and let
A be the corresponding unsigned access list. Currently a user sends
sig([T, A]) to validators. We suggest instead that the user sends the following:
Unsigned access list:
T relative to
A. Two cases may arise:
ACCESS_LIST_EXCEPTIONis thrown, in which case only
sig(T)must be included onchain.
ACCESS_LIST_EXCEPTIONis thrown, in which case
sig([T, A])must be included onchain.