Is there a reason why TEAL v6 contracts cannot call other contracts <v6? I get the following error when I try:
logic eval error: inner app call with version 5 < 6.
This is disappointing as it means there cannot be any composability with contracts that are currently live on mainnet.
There are subtle security reasons why this was designed this way.
One of them is that v5 contracts may not have been aware that they can be called from within an inner transaction, which may change slightly their semantics.
Older v5 contracts need to be updated to v6 to be callable.
If they cannot be updated, unfortunately, they won’t be callable from v6.
It’s required in order to ensure the callee would be designed to support being called by other contract.
( otherwise, there could be exceptions where this would defeat existing contract’s security attributes ).