Let's make it very simple.
There are two types of accounts in the Ethereum Chain
1). Externally Owned Accounts(EOA) [Person]
2). Contracts Accounts [Contracts on Chain]
Both accounts have their addresses.
Wallet address of personA (EOA) is
0x0cE446987406E92DF41614C46F1d6df9Cc925847
.
Contract Address of Math.sol
is
0x0cE446987406E92DF41614C46F1d6df9Cc753869
and
Math.sol
contains ContractA
Contract Address of Addition.sol
is
0x0cE446987406E92DF41614C46F1d6df9Cc357241
and
Addition.sol
contains ContractB
Here, one of the functions of ContractB
is called from ContractA
.
So, whenever personA
calls any functions of ContractA
.
In this scenario, if you print or get `msg.sender` and `tx.origin` inside function of `ContractB` then the result would be like this
msg.sender = `0x0cE446987406E92DF41614C46F1d6df9Cc753869` // You will get address of `ContractA`
tx.origin = `0x0cE446987406E92DF41614C46F1d6df9Cc925847` // personA's (EOA) Wallet Address