Metamask (or other browser plug-in) helps a lot the user to submit transactions using his personal account since it manages his private keys.
When interacting with an dapp front-end, web3 will create a transaction and the user can easily sign it and submit it with his personal account using metamask.
For example, the user can easily submit a transaction to breed kitties on cryptokitties if he owns them.
In this similar context of web3 creating a transaction to sign, what is the feasible way to submit the transaction using a wrapper smart contract as a relay to the user personal account? In other words, the personal account signs a transaction to a wrapper smart contract and this wrapper smart contract calls the dapp.
It could be useful to do this if this wrapper smart contract owns the kitties (and not the user personal account) for example. In this case, the personal account can be the owner of the smart contract.
The relay function of the wrapper contract could be a function like this.
function a (address to, uint256 valueInWei, bytes hexData) {
require( to.call.value(valueInWei)(hexData), "failed" );
}
hexdata in this case is composed by the name and arguments of the function-to-be-called.