Contract is a struct to interface with a contract. That includes things such as
compiling, deploying, and running transactions against a contract.
The contract has a wallet attribute, used to pay for transactions and sign them.
It allows doing calls without passing a wallet/signer each time.
Based on the receipts returned by the call, the contract ID (which is null in the case of a
script), and the output param, decode the values and return them.