Metamask: Should all state-changing functions to a smart contract go through MetaMask?