Another way to call contracts from a smart contract is to use a mechanism like dependency-injection . With this method, the caller can instantiate the contract it wants to call and knows the type signature of the function, which also has the nice side-effect, that return-values can be received.