Return values from functions which create transactions, can only be true or false, at least when you check them post transaction (e.g., with web3 through receipt). However, when functions call each other on the EVM, even through external function calls, multiple non-boolean return values can be passed on from function to function. Why is that?
Transaction receipts only have a status field which can be 0 or 1. There is simply no field for a return value.
To navigate around this, you can:
- use events
- replay the call at a specific block (see