I recently noticed that `msg.sender` isn't always the original caller's address (see [here](https://ethereum.stackexchange.com/questions/39082/if-a-contracts-function-calls-a-function-of-another-contract-within-it-is-the)). It's the address of the current call. So if `foo()` calls `bar()`, then `msg.sender` in `bar()` will be the address of the contract containing `foo()`.

My questions are:

* Are there any other constants that depend on the current call? Full list: <https://solidity.readthedocs.io/en/latest/units-and-global-variables.html#special-variables-and-functions>
* What's the best way to get the original sender's address?