Bytecode constraints drove us to the Proxy pattern for the Vault: splitting it into three contracts that delegate call each other (thanks again, Igor!). A consequence of this is that looking at the Vault on Etherscan doesn't show much, and trying to call functions on the extensions in Etherscan from an EOA will revert.
As Juani points out, "...you can build the tx in etherscan and then in the wallet target the vault". Another idea is to make a wrapper contract that presents a reasonable interface to users. Both involve indirection/non-ideal dev UX, but "unusable Etherscan" isn't great either.
Bytecode constraints drove us to the Proxy pattern for the Vault: splitting it into three contracts that delegate call each other (thanks again, Igor!). A consequence of this is that looking at the Vault on Etherscan doesn't show much, and trying to call functions on the extensions in Etherscan from an EOA will revert.
As Juani points out, "...you can build the tx in etherscan and then in the wallet target the vault". Another idea is to make a wrapper contract that presents a reasonable interface to users. Both involve indirection/non-ideal dev UX, but "unusable Etherscan" isn't great either.