How to interact with external contracts using interfaces